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語言博客作業-數據類型