C語言二維數組做業

1、PTA實驗做業

題目1:7-3 出生年

1. 本題PTA提交列表

2. 設計思路

  • 一、聲明一個函數different()用來計算一個年份的不一樣數字個數
  • 二、定義y(y是來計算符合要求的年份的量),n(n爲題目要求的不一樣數字個數),x(x用來存放起始年份),flag(flag是用來表示每一個y值中的不一樣數字個數的量)
  • 三、輸入起始年份y和題目要求的n
  • 四、x=y(存放起始年份)
  • 五、do {flag計算y中不一樣數字個數;若是flag=n,符合題意,輸出相應結果,並結束循環;若是不符合,y自增一}while(1)
  • 六、對函數different(y)定義:
  • 首先定義一個數組a[4]和不一樣數字個數count等於4;
  • a[4]存放y的每一位;
  • for(int i=0;i<4;i++) {for(int j=i+1;j<4;j++)若是a[i]=a[j,count減一,結束j的循環;
  • 函數結果返回count

3.代碼截圖


4.本題調試過程碰到問題及PTA提交列表狀況說明。

  • 一、題目要求不足4位的年份要在前面補零,一開始不知道這個要怎麼輸出,百度後明白了只要輸出中使用%04d就能使不足的前面補零
  • 二、函數中j的循環內,若是a[i]=a[j,count減一,就要馬上結束j的循環;我漏告終束循環,使得在年份不是四位的狀況下,count會被多減小好幾回

題目2:7-7 找鞍點

1. 本題PTA提交列表

2. 設計思路

  • 一、定義二維數組a[6][6]和n
  • 二、輸入n
  • 三、 for(i=0; i<n; i++) for(j=0; j<n; j++) { scanf("%d",&a[i][j]); } 輸入二維數組
  • 三、定義k=0,q=0,p=0(k,q,p都是下面循環要使用的),flag=1(flag是來判斷鞍點存不存在的)
  • 四、for(i=0; i<n; i++) { q=i(下面須要用來判斷此行最大值是否是列所在最小值); 。。。。。。}
  • 五、 for(p=0; p<n; p++) { if(a[i][k]<=a[i][p]) //數組元素之間比較,若比a[i][k]大,則將數組列標賦給k k=p; } } 這裏找出行最大值,並將該最大值所在列的值賦給k,以便進行下一步行最小值的查找
  • 六、for(j=0; j<n; j++){ if(a[q][k]>a[j][k])//若此行最大值不是列所在最小值,把小的行標賦給q { q=j; break; } } 這裏找列最小值,並將最小值所在列的值賦給q
  • 七、找到後只需比較i和j是否相等,相等則說明此行最大值是列所在最小值,讓flag等於0,結束循環
  • 八、if(flag==0) 輸出結果 else 輸出none

3.代碼截圖


4.本題調試過程碰到問題及PTA提交列表狀況說明。

  • 一、循環最開始,必須讓q=i,不然鞍點在最後一個時就會發生錯誤
  • 二、這裏循環有點多,我常常輸出錯誤後更改代碼不當心把某些循環的大括號刪了,致使編譯錯誤= =

題目3:7-10 楊輝三角

1. 本題PTA提交列表

2. 設計思路

  • 一、定義數組a[10][10].i,j,n
  • 二、輸入n
  • 三、for(i=0;i<10;i++) 將行頭及對角線中存入1(a[i][i]=a[i][0]=1)
  • 四、for(i=2;i<n;i++){for(j=1;j<i;j++){}a[i][j]=a[i-1][j-1]+a[i-1][j];//將第三行起的數存入 } }存入第三行起除對角線外的全部數
  • 五、輸出數組

3.代碼截圖

4.本題調試過程碰到問題及PTA提交列表狀況說明。

  • 一、我一開始j用的是小於等於i,結果把對角線上的數改變了
  • 二、第一次作的時候忘了換行,輸出結果錯誤

2、截圖本週題目集的PTA最後排名。

3、同窗代碼結對互評

1.互評同窗名稱

李於程編程

2.個人代碼、互評同窗代碼截圖

  • 個人代碼
    數組

  • 於程同窗代碼
    app

3.我和同窗代碼不一樣在哪裏?有哪些各自優點?你更喜歡哪一種代碼風格?若是同窗代碼有錯的也請幫忙指出來哪裏出問題。

  • 於程同窗是經過使用一個變量diff來進行累加,而我是將爲1的元素先賦值好,而後中間的數用規律對數組進行加法獲得
  • 我可能會更喜歡於程同窗的代碼,由於其代碼比較短,用到的循環較少(我我的循環較多時容易亂)

4、本週學習總結(3分)

1.你學會了什麼?

1.1 C中如何存儲字符串?

  • 使用字符數組儲存字符串

1.2 字符串的結束標誌是什麼,爲何要結束標誌?

  • 結束標誌爲‘\0'
  • 結束標誌是用來判斷是否結束循環的

1.3 字符串輸入有哪幾種方法?

  • 一、直接輸入,如a[5]={"happy};
  • 二、使用scanf函數,格式控制爲%s,輸入參數爲字符數組名,遇回車或空格結束
  • 三、使用gets函數,輸入參數爲字符數組名,遇回車結束

1.4 數字字符怎麼轉整數,寫個僞代碼?

  • 一、數字單個轉換:數字字符-‘0’
  • 二、多位轉換:
  • 1.定義循環變量i,sum=0
  • 2.i=0
  • 3.while(a[i]!=‘\0‘) sum=sum*10+(a[i]-‘0‘)
  • 4.i++

1.5 16進制、二進制字符串如何轉10進制?寫僞代碼?

  • 一、16進制
  • 1.定義循環變量i,sum=0
  • 2.i=0
  • 3.while(a[i]!=‘\0‘)if(a[i]是數字字符)sum=sum16+(a[i]-‘0‘) if(a[i]是A-F)sum=sum16+(a[i]-‘A‘+10) if(a[i]是a-f) sum=sum*16+(a[i]-‘a‘+10)
  • 4.i++
  • 二、2進制
  • 1.定義循環變量i,sum=0
  • 2.i=0
  • 3.while(a[i]!=‘\0‘)sum=sum*2+(a[i]-‘0‘)
  • 4.i++

2.本週的內容,你還不會什麼?

  • 一、雖然基本掌握了數組,但對其運用並不熟練
  • 二、數組的運用常常要使用不少循環,致使我常常將循環的量搞混(即便有註釋也常常沒注意到= =)
  • 三、雖然可以理解排序法,但對於它的應用不夠熟練

3.期中考試小結

3.1 你認爲爲何沒考好?

  • 一、個人選擇題只得了8分,這說明我基礎知識掌握不夠紮實,要多看課本,增強對基本知識的瞭解和掌控
  • 二、個人改錯也不是很好,主要是一些邏輯錯誤看得出來,殊不知道怎麼修改,這一點我認爲應該只有經過多作題增長經驗來解決
  • 三、編程題我作得尚可,但在一些涉及數學公式的因果應用上,我容易忽然短路(例如其中編程第二題,我作的時候竟然忘了怎麼解x了= =),我想這可能有心理因素的緣由,或許是幾個月沒經歷過考試有點緊張了,這一點要盡力克服
  • 四、填寫代碼的題目雖然作得能夠,但一些簡單的地方卻錯了,這是不該該的,究其緣由,我認爲仍是基礎的問題,要多回歸課本,掌握好最簡單的知識

3.2 羅列錯題。請在選擇題、填空題、改錯題、編程題分別舉一題說明爲何錯了,怎麼改?

  • 一、選擇題:

第一題我題目意思理解錯誤,我覺得他問的是C語言能夠輸出的數的進制位= =函數

  • 二、填空題:

第七空爲ch=getchar(),我只寫了ch,這是我沒把上課內容充分理解的緣由,之後上完課我應該進行復習學習

  • 三、改錯題:

改錯比較尷尬,由於我知道它錯了,錯在哪,殊不知道怎麼改,我認爲這是由於我閱讀程序能力不夠的緣由,之後我要多讀程序,學會看程序設計

  • 四、編程題:

編程題其餘兩題我作得不錯,這一題我也知道怎麼作,可是可能考試比較緊張了,我忘了怎麼求x的值了= =,考試時時間比較緊迫,就沒仔細去想,但願下次作題可以保持頭腦清晰,不要着急3d

3.3 下半學期要怎麼調整C的學習?

  • 一、基礎知識要先掌握好,即課本的內容先精通,再來談更進一步的深奧內容
  • 二、經過期中,我明白了c的學習不僅是pta上作編程題而已,一些基礎的理論的簡單知識也要明白
  • 三、下半學期,要在搞好基礎知識的狀況下,將這些知識運用於編程中
相關文章
相關標籤/搜索