C博客第02次作業---循環結構
1. 本章學習總結
1.1 思維導圖
1.2 本章學習體會及代碼量
1.2.1 學習體會
- 通過了本章的學習,我學到了C語言中的循環結構,並且通過作業,如PTA,課堂派,能夠鞏固對循環結構的認識,並且能夠較好的運用到題目中。
- 本章學習學到了while語句,do-while語句,以及break語句和continue語句,而且通過做作業後能夠較好的使用這些語句,感到非常開心。
- 學習C語言並沒有想象中的那麽恐怖,做什麽事都是要慢慢來,沒有一時就可以都學會的。每當做出一道題,都會有很大的成就感,這樣也就更有動力去學習,也更有動力去深入了解C語言編程。
- 通過本章的學習還學到了偽代碼的編寫方法,每當做題前最好是先寫一遍偽代碼整理思路,寫完偽代碼之後再編程效果會更好。
1.2.2 代碼累計
2. PTA總分
2.1 PTA中循環結構2次題目集的排名得分
2.2 我的總分:
- 循環結構(單層):175分
- 循環的嵌套:115分
- 總分:290分
3. 實驗作業
3.1 PTA題目1
輸入一組二進制字符,輸出其對應的十進制數。當輸入回車鍵時,輸入結束。若輸入非二進制字符,輸出error input!
3.1.1 算法分析
- int sum=0存放十進制數 x=0判斷是否輸入非法字符
- char op=‘0’進入循環
- while(op!=‘\n‘)
scanf ("%c",&op)
if(op==‘\n‘) break;
if(op!=‘0‘&&op!=‘1‘) x=1 break
else sum=2*sum+op-‘0‘ - end while
if(x==1) printf ("error input!")
else printf ("%d",sum)
3.1.2 代碼截圖
3.1.3 測試數據
3.1.4 PTA提交列表及說明
- Q1:一開始沒有定義x來判斷是否有輸入非法字符,跳出的輸入非法字符的階段時會有sum的輸出。
- A1:後來運用老師教的可以用flag來解決此問題,用上之後就解決了問題。
- Q2:一開始不知道如何解決輸入字符如何變成數字。
- A2:後來運用老師教的op-‘0’可以字符轉化成數字解決了問題。
3.2 PTA題目2
在商業和科學研究中,人們經常需要對數據進行分析並將結果以直方圖的形式顯示出來,這會大大增加這些數據的直觀性,也便於數據的分析與對比。下面以顧客對餐飲服務打分為例,輸入一個正整數repeat (0<repeat<10),做repeat次下列運算:
輸入一個正整數n(1≤n≤20),表示有n個學生被邀請來給自助餐廳的食品和服務質量打分,分數劃分為1~5這5個等級(1表示最低分,5表示最高分),試統計調查結果,並用*打印出如下形式的統計結果直方圖。3.2.1 算法分析
- int repeat,n,grade定義次數,人數,分值
- int x1=0,x2=0,x3=0,x4=0,x5=0,x定義儲存各個分值的人數
- char op=‘*‘
for(i=1;i<=repeat;i++)
輸入人數n
for(j=1;j<=n;j++)輸入成績grade
switch(grade)
如果輸入1 x1++break
如果輸入2 x2++break
如果輸入3 x3++break
如果輸入4 x4++break
如果輸入5 x5++break
end for
輸出1:令x=0直到x=x1 輸出
輸出2:令x=0直到x=x2 輸出
輸出3:令x=0直到x=x3 輸出
輸出4:令x=0直到x=x4 輸出
輸出5:令x=0直到x=x5 輸出*
x1=x2=x3=x4=x5=0從新定義為下一次的表格做準備
end for
3.2.2 代碼截圖
3.2.3 測試數據
3.2.4 PTA提交列表及說明
- Q1:一開始從x=0開始直到x=x1,結果出現每個表格的每個分值都會有至少一顆星。
- A1:後來改成x=1開始直到x=x1,結果才正確。
- Q2:一開始結束的時候沒有定義x1=x2=x3=x4=x5=0,結果第二章表格會被第一張表格的數值影響從而出錯。
- A2:後來在結尾定義了x1=x2=x3=x4=x5=0才正確。
3.3 PTA題目3
你的程序要讀入一行文本,其中以空格分隔為若幹個單詞,以.結束。你要輸出每個單詞的長度。這裏的單詞與語言無關,可以包括各種符號,比如it‘s算一個單詞,長度為4。註意,行中可能出現連續的空格;最後的.不計算在內。
3.3.1 算法分析
- int x=0定義單詞的字母個數,count=0定義有幾個單詞
- 輸入字符op=‘0’進入循環
while(op!=‘.‘) scanf ("%c",&op)
if(op==‘.‘) 當輸入.時當x!=0且count==0是第一個單詞時輸出x
如果count!=0不是第一個單詞則輸出空格加x
如果一開始輸入.時break;
if(op!=‘ ‘) x++
if(op==‘ ‘)且x!=0時count++ if(count==1) 輸出x,x從新歸零
if(count!=1)輸出空格加x,x從新歸零
3.3.2 代碼截圖
3.3.3 測試數據
3.3.4 PTA提交列表及說
- Q1:這段代碼寫了很長時間,總是有一兩個測試點過不去。
- A1:加上一個count後,解決了只有一個單詞時的問題。
- Q2:還有一個問題就是輸出結果後面不可以有空格。一開始是輸出一個結果之後加上一個空格,結果老是出錯。
- A2:後面運用了多個嵌套語句終於解決了。
4.代碼互評
4.1 代碼截圖
同學的代碼
我的代碼
4.2 不同之處
- 同學是使用flag控制輸出,而我是使用count來控制輸出。flag表示是否為第一個單詞,而我的count是計算單詞的個數,當count==1的時候也就是輸出一個單詞的時候,單詞長度x不用加空格。否則需要加空格來控制最後一個單詞輸出後面不會加空格。
- 同學的代碼與我的都是差不多的思路,都是分為三個情況,一個是輸入.時的情況,一個是輸入空格時的情況,一個是不輸入空格的情況。但是同學的代碼看起來思路比較清楚。
- 同學的代碼看起來是有經過寫思路之後才開始寫的代碼,而我的是直接開始寫了,缺少了什麽再補什麽,這樣的代碼看起來比較不容易理解,以後會學學同學的方法,先列思路,寫偽代碼,再去做題。
C博客第02次作業---循環結構