標籤:否則 markdown src int scanf for 代碼 img 結構
一、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提交列表情況說明
- 沒有吸收斷行符號的問題,在本題My Code中出現很多次,而且造成代碼完全出錯。一次是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語言部落格作業-資料類型