C語言部落格作業--一二維數組

來源:互聯網
上載者:User

標籤:作業   sum   getch   happy   調用   部落格   運行   插入   ret   

一、PTA實驗作業(4分)題目1:求整數序列中出現次數最多的數1. 本題PTA提交列表(要提交列表,不是結果)

2. 設計思路(用代碼錶示扣分)
  • 定義number為要輸入的數字個數,count[1000]存放重複出現的數字次數,a[1000]存放輸入的N個整數,迴圈變數i,j,n存放數字重複次數最多的次數
  • 輸入number
    將count[i]全部賦值為0
    將序列存放到a[i]中for(i=0;i<number;i++){
    scanf("%d",&a[i]);}
    if(a[i]==a[j])
    count[i]=count[i]+1;//出現重複數字count數組將累加1
    for(i=0;i
3.代碼(注意,,,。不要粘貼部落格上。不用用···文法去渲染)

4.本題調試過程碰到問題及PTA提交列表情況說明。
  • 1.一開始當a[i]==a[j]時我直接用n來累加次數,結果每次都出現隨機數。

  • 解決辦法:看到運行結果之後我就知道了問題所在,不只是一個數可以重複出現,可以幾個數都有重複出現過而我要把這些數都記下來然後再比較哪個數出現次數最多,可是我的n只能存放一個數,這個時候我有想到用數組來解決,但是我不知道數組要怎麼累加,所以就去百度了一下,最後得到了結果count[i]=count[i]+1,這樣重複數字出現時就可以累加多組資料。

  • 2.用了數組count來計數後出現次數最多的數位次數是對了,但是出現次數最多的數字還是沒法正確輸出,輸出的還是一個隨機數。
  • 解決辦法:後來我仔細回去檢查一下代碼發現我輸出的n和對應的最多數是不對應的,所以後來我就加了一條語句讓出現次數最多的數的下標賦給j防止被更改然後輸出a[i]就對了。

題目2:簡化的插入排序1. 本題PTA提交列表(要提交列表,不是結果)

2. 設計思路(用代碼錶示扣分)
  • 定義變數x為要插入序列的數,N為輸入整數個數,i為迴圈變數,數組a[100]
    輸入N,X
    輸入數組scanf("%d",&a[i]); if(a[i]>=a[i-1]);}//保證輸入的序列是有序的
    a[i]=x;
    for(i=N-1;i>=0;i--){
    if(a[i]>x){//將x插入序列中
    a[i+1]=a[i];
    a[i]=x;}}
    輸出a[i];
3.代碼(注意,,,。不要粘貼部落格上。不用用···文法去渲染)

4.本題調試過程碰到問題及PTA提交列表情況說明。
  • 1.插入排序時x插入到序列中後,後面的數都被更改了

  • 解決辦法:當x比a[i]小時插入序列中同時a[i]=a[i+1],a[x]=x這樣就不會被更改。
  • 2.序列沒有被更改但是輸出還是不對
  • 解決辦法:看來看去沒有發現什麼問題,用devc調試後發現我的迴圈條件好像有問題,我之前的迴圈條件是for(i=0;i

題目3:判斷上三角矩陣1. 本題PTA提交列表(要提交列表,不是結果)

2. 設計思路(用代碼錶示扣分)
  • 定義T為待測矩陣的個數,n為矩陣的行數和列數,i,j,k為迴圈變數,flag用來判斷矩陣是否為上三角矩陣,a[i][j]存放矩陣
    輸入T
    for(k=1;k<=T;k++){
    輸入n和數組a[i][j]
    flag=1;
    for(i=0;i<n;i++)
    for(j=0;j
3.代碼(注意,,,。不要粘貼部落格上。不用用···文法去渲染)

4.本題調試過程碰到問題及PTA提交列表情況說明。
  • 1.一開始沒有注意還要輸入幾個矩陣,當時的程式無法輸入多個矩陣進行判斷
  • 解決辦法:在開頭加上條件for(k=1;k<=T;k++)將接下來的程式都放入這個迴圈中就可以了。
  • 2.第二個出現的問題比較蠢,,,,題目說是上三角矩陣的判斷我就直接用i<j了,根本沒有在意題目真正想要我們判斷的是下三角。。。。。
  • 解決辦法:將i
  • 3.不管我輸入的矩陣是不是上三角矩陣,程式輸出的都是YES
  • 解決辦法:這個問題我真的找了好久都不知道哪裡錯了,在調試的過程中無意將flag=1;的條件放在判斷下三角矩陣的迴圈前面然後就可以正常輸出了,可是我一直不知道為什麼,直到後來經過室友提醒才知道,flag=1放在最前面定義變數的位置時第一次迴圈是沒有問題的,但是輸入第二個矩陣時flag的值就沒辦法變化導致第二個矩陣無法進行正確的判斷。
二、本周題目集的PTA最後排名。(2分)三、同學代碼結對互評(1分)1.互評同學名稱2.My Code、互評同學代碼(此處核心代碼就好,不一定全部代碼,圖上指明是誰的代碼。)3.我和同學代碼不同在哪裡?有哪些各自優勢?你更喜歡哪種代碼風格?如果同學代碼有錯的也請幫忙指出來哪裡出問題。四、本周學習總結(3分)1.你學會了什嗎?1.1 C中如何儲存字串?
  • C將字串作為一個特殊的一維字元數組來處理儲存內容如下:
1.2 字串的結束標誌是什麼,為什麼要結束標誌?
  • 結束標誌是‘\0’,結束標誌用來控制是否結束迴圈
1.3 字串輸入有哪幾種方法?
  • 有三種,char a[6]={‘H‘,‘A‘,‘P‘,‘P‘,‘Y‘,‘\0‘},char a[6]={"HAPPY"},char a[6]="HAPPY"
1.4 數字字元怎麼轉整數,寫個虛擬碼?
  • 定義變數i,字元數組a[10],number為整數數字
    輸入字串
    i=0;
    while((a[i]=getchar()!=‘\n‘)
    i++;a[i]=‘\0‘;
    for(i=0;a[i]!=‘\0‘;i++)
    if(a[i]>=‘0‘&&a[i]<=‘9‘)
    number=number*10+a[i]-‘0‘;
    輸出number

    1.5 16進位、二進位字串如何轉10進位?寫虛擬碼?
  • 定義變數i,十進位數number,16進位字串a[100],
    輸入字串
    i=0;
    while((a[i]=getchar()!=‘\n‘)
    i++;a[i]=‘\0‘;
    number=0;
    for(i=0;a[i]!=‘\0‘;i++)
    if(a[i]>=‘0‘&&a[i]<=‘9‘)
    number=number16+a[i]-‘0‘;如果是轉為二進位就改為number=number2+a[i]-‘\0‘
    if(a[i]>=‘A‘&&a[i]<=‘Z‘)
    number=number16+a[i]-‘A‘+10;如果是轉為二進位就改為number=number2+a[i]-‘A‘+10
    if(a[i]>=‘a‘&&a[i]<=‘z‘)
    number=number16+a[i]-‘a‘+10;如果是轉為二進位就改為number=number2+a[i]-‘a‘+10
    輸出十進位數number

2.本周的內容,你還不會什嗎?
  • 1.如何靈活的在一個題目中運用一個數組來存放另一個數組裡的元素,不是很清楚。就像這次pta中數組迴圈左移這題,我本來的思路是要左移m位,那就先將m位以後的數輸出在將原本在m以前的數放在後面輸出,這個時候就想到了用另一個數組先存放a[i]中的元素,因為前面輸出m以後的數後a[i]已經被改變了,我的確可以做到將a[i]的值給另一個數組,但是當要輸出另一個數組中的前m位時就怎麼也不對,最後不得不放棄這個思路。
  • 2.輸出這樣形狀的數,還是有些不會
  • 之前不用數組時好像懂得了一點門道,可是要用數組輸出就不會了
3.期中考試小結3.1 你認為為什麼沒考好?
  • 我這次主要是選擇題失分特別嚴重,雖然其他題也沒得多少分,,,,但是選擇題這次得分就得了幾分,才對了三分之一。明顯的可以看出基礎非常薄弱,也因為不是對這些知識點很熟練,在選擇題上就花了太多時間,導致後面兩題編程題都沒有時間寫,而第一題編程題也是雖然做過卻還是不能全對。還有一點就是閱讀代碼的能力太弱了,就像剖析器的第一題,都沒有看出來它是要多次輸出sum的,這幾個方面的缺陷都很明顯,也很嚴重。
3.2 羅列錯題。
  • 選擇題
    將十六進位數(1EB)轉化成十進位數,那個時候對十六進位的數一點也不熟
    解法應該是: E=16進位中的14,B=16進位中的11,所以十進位數位11616+14*16+11=491
  • 填空題
    閱讀程式的第四題,當時看的太急了,沒有看到題目調用了兩次函數,而且我現在也不知道當時明明沒有看到有兩個函數調用,我為什麼還會輸出兩個數,,,,,
    題目:
    #include

  • 改錯題
    這次改錯題沒有錯那麼多,就是第三個程式,第七空那裡那個空是這樣的while( !=‘\n‘),我當時直接就把ch填進去了,根本沒有想到ch是無法輸入的,應該填的是ch=getchar()
  • 編程題
    第一個編程題猜數字
    這是我考試時寫的代碼,確實可以正常執行,也可以猜數,但是不能多次猜,猜了一次就退出迴圈了,而且不可以產生隨機數,要猜的數是自己輸入的。

    #include<stdio.h>int main(void){int yournumber,mynumber,i,count=0;for(i=1;i<=10;i++){    scanf("%d",&mynumber);    scanf("%d",&yournumber);        count++;    printf("your guess is %d",yournumber);    if(yournumber==mynumber)    printf("You are right"); break;    if(yournumber!=mynumber){        if(yournumber>mynumber)        printf("your guess is lager than num,try again: ");        count++;        if(yournumber<mynumber)        printf("your guess is smaller than num,try again: ");        count++;    }}printf("guess %d times",count);return 0; } 

C語言部落格作業--一二維數組

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.