1. 程式人生 > >c語言博客作業-數據類型

c語言博客作業-數據類型

冒泡法 學習總結 下標 每一個 1-1 c++ 表情 結果 想去

一、PTA實驗作業

題目1:7-8 判斷合法標識符

1. 本題PTA提交列表

技術分享圖片

2. 設計思路

  • 1.定義變量repeat,i 控制判斷次數,j 用於計數輸入的字符個數,k用於計數輸入的合法字符個數。定義字符變量ch 。
  • 2.輸入repeat,同時輸入ch=getchar();以吸收回車。
  • 3.使用for循環,控制次數。重復第4到8步。
  • 4.使用do-while語句,逐次進行每個字符的輸入,同時用 j 統計個數。重復5和6步,指導輸入字符為‘\n‘,跳出循環。
  • 5.使用 if 語句,判斷 j 為1時(首字符)的字符是否為字母或下劃線。是則為合法字符,k+1;
  • 6.使用 if 語句,判斷 j 不為1時的字符是否為字母,下劃線和數字,是則為合法字符,k+1;
  • 7.當跳出循環後,判斷k是否等於j,是則輸出yes,否則輸出no。
  • 8.給j和k賦初值為0;為下一次for循環做準備。

3.代碼截圖

技術分享圖片

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

  • 沒有吸收回車的問題,在本題我的代碼中出現很多次,而且造成代碼完全出錯。一次是repeat沒吸收回車,調試時剛打了4,就printf(“no”),一次是判斷完一次合不合法後沒有吸收回車,所以輸不了第二次標識符,為了解決這個問題,我在do-while 前加了getchar,最後一次是我的 j 和 k 在合法標識符的情況下是不等的,因為我是用的是do-while語句,所以最後輸入的回車會被統計進 j ,而不會被統計進 k ,於是添了新的if語句。此外最後一次格式錯誤是因為我在上述第二次問題中使用getchar吸收回車導致格式錯誤,思來想去換成了在printf語句後加\n。

技術分享圖片

技術分享圖片

題目2:7-10 簡單計算器

1. 本題PTA提交列表

技術分享圖片

2. 設計思路

  • 1.定義變量number1和number2來存放運算符兩邊的運算數。i控制循環,result存放每一個運算符運算後的結果,j統計出錯個數。
  • 2.輸入number1,將result賦初值為number1,j賦初值為0;
  • 3.使用for循環,ch=getchar(),(ch輸入的字符為運算符)
  • 4.使用switch語句,case‘+‘:
    scanf("%d",&number2);result+=number2;break;
  • 5.另三個運算符同上。
  • 6.當運算符為除號時,判斷是否為0,是的話輸出ERROR,同時j加一。
  • 7.運算符為=,break;
  • 8.default:
    printf("ERROR");j=j+1;break;
  • 9.跳出switch語句後,如果ch=‘=’,輸出result,跳出for循環。如果j不等於0,說明已經出錯,也跳出for循環。

3.代碼截圖

技術分享圖片

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

本題第一遍除號錯打成乘號,c++調試一次後就過了。

題目3:7-6 掉入陷阱的數字

1. 本題PTA提交列表

技術分享圖片

2. 設計思路

  • 1.定義i控制循環變量,sum為累加和,number為判斷兩次sum的值是否相同
  • 2.輸入N,sum賦初值為0
  • 3.使用for循環,將number賦為sum(sum為上一次循環帶來的值)的值,同時sum需重新賦值為0,
  • 4.當輸入的N大於一位數時,使用while語句,進行各位數字求和 sum=sum+N%10;
    N=N/10;
  • 5.如果N小於10,sum直接sum=sum+N(這一步的sum 可以是從第四步累加下來的)
  • 6.sum=sum*3+1;然後輸出sum。
  • 7.使用if 語句,如果第一次循環sum的值就為13,break。如果number等於sum,說明已掉進陷阱,break。

3.代碼截圖

技術分享圖片

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

這道題錯了兩個地方,一次是每次for循環sum沒有賦初值,一次是一步到位的語句沒寫,但是調試的過程忘了截圖。不過很快找出了錯誤。

二、截圖本周題目集的PTA最後排名

技術分享圖片

三、本周學習總結

1.你學會了什麽?

1.1 一維數組如何定義、初始化?

一維數組定義的一般形式為:類型名 數組名 【數組長度】
初始化就是賦初值,舉例 int a [5]={1,2,3,4,5} 就是給a[0]到a[4]分別按大括號裏的順序賦初值。靜態數組如果沒有初始化會自動賦值為0,否則元素的值不確定。如果沒寫數組長度,系統按大括號裏的數字個數自動給數組賦數組長度。

1.2 一維數組在內存中結構?可畫圖說明。數組名表示什麽?

數組名表示該數組分配連續內存空間中第一個單元的地址,即首地址。知道了首地址,那麽假設int型占用兩個字節,首地址為4010,就可以知道其他數的地址為4012 ,4014.。。。遞增。也就是說知道了首地址,每個元素的字節數,其余的元素的存儲地址均可以計算得到。

1.3 為什麽用數組?

在程序中使用數組,可以讓一批相同類型的變量使用同一個數組變量名,用下標來相互區分。他的優點是表達簡潔,可讀性好,便於使用循環結構。

1.4 介紹選擇法、冒泡法、直接插入排序如何排序?偽代碼展示.

選擇法:

  • 1.定義n個元素,i,k用於控制循環次數,idenx用於存放最小值
  • 2.將n個元素賦值給a[n],idenx賦值為k,k=0;即假設第一個數組值為最小值。
  • 3.for(i=k;i<n;i++){
    if(a[i]<a[idenx]) idenx=i;
  • 4.找到最小值後將它賦為a[0],k=k+1;idenx=k;重復第三步,找到最小值,賦為a[1],依次類推。

冒泡法:

  • 1.定義n個元素,i用於控制循環次數,max存放最大值。k用於交換
  • 2.將n個元素賦給數組a[n],max=n;
  • 3.for(i=n-1;i>=0;i--){
    if(a[i]>a[max])k=a[max];a[max]=a[i];a[i]=k;
  • 4.輸出。

直接插入排序法:

  • 1.定義n個元素,k存放挑出的數,
  • 2.將n個元素發給數組a[n],k=a[0];
  • 3.for(i=1;i<n;i++)

1.5 介紹什麽是二分查找法?它和順序查找法區別?

二分查找法就是假設有n個元素,取第n/2個元素,比較其與要找的元素x是否相等,相等則結束,否則比較大小,小則在左半部分找中間數,比較是否相等,以此類推,直至找到。順序查找法是從第一個依次與x比較是否相等。這兩個查找法的表都是升序的。二分查找法比較次數少,查找速度更快。

1.6 二維數組如何定義、初始化?

二維數組的定義形式為:
類型名 數組名 【行長度】【列長度】
舉例:int a[3][3]={{1,2,3},{4,5,6},{7,8,9}},一位內二維數組是平面的,所以先行後列的給數組中的元素賦值。

1.7 矩陣轉置怎麽實現?方陣中:下三角、上三角、對稱矩陣的行標i列標j的關系?請說明。

轉置矩陣:
int a[c][d];int b[c][d];
for(i=1;i<=c;i++)
for(j=1;j<=d;j++)
b[i][j]=a[j][i];
下三角i>j;上三角i<j;對稱i=j;

1.8 二維數組一般應用在哪裏?

矩陣

2.本周的內容,你還不會什麽?

學了數組,但是目前還沒實際運用過,感覺可能不太熟練,還有課堂派的那道填空題,目前那種題我做不出來。這次的期中考考的很差,傷心的同時我也意識到自己對一些基礎知識掌握不牢,關鍵時刻用不上。

c語言博客作業-數據類型