- 要求二
題目7-1 高速公路超速處罰
1.實驗代碼
1 #include<stdio.h> 2 int main() 3 { 4 int car,x; 5 float percent; 6 char ch='%'; 7 scanf("%d %d",&car,&x); 8 if(car<0||x<=0)printf("the input is error"); 9 else if(car<x*1.1f)printf("OK"); 10 else if(car<x*1.5f){ 11 percent=(car-x)*100.0f/x; 12 printf("Exceed %.0f%c. Ticket 200",percent,ch);} 13 else{ 14 percent=(car-x)*100.0f/x; 15 printf("Exceed %.0f%c. License Revoked",percent,ch);} 16 return 0; 17 }
2.設計思路
(1)主思路
- 第一步:定義整數型變量car(車速)、x(限速),浮點數變量percent(超速百分比)和字符型定量ch(‘%’);
- 第二步:用scanf函數讀入整數給car和x;
- 第三步:用if elseif else函數結構先判斷輸入是否符合范圍,再判斷超速與否;
- 第四步:其中若超速則判斷范圍並計算所對應的超速百分比並用printf函數輸出百分比(后跟‘%’字符定量)和相應的超速結果語句。
注解:本題細節問題要注意整數與浮點數的轉換和超速范圍的開閉區間。
(2)流程圖

3.本題調試過程碰到問題及解決辦法
printf函數中的%顯示不出來導致PTA部分錯誤。


解決辦法就是定義一個字符型定量ch=‘%’代替printf函數中原本的%符號。
4.本題PTA提交列表

部分錯誤即為上述遇到的問題。
題目7-2 計算油費
1.實驗代碼
1 #include<stdio.h> 2 int main() 3 { 4 int a,b; 5 char c; 6 double money=0; 7 scanf("%d %d %c",&a,&b,&c); 8 switch(b) 9 { case 90:money=6.95*a;break; 10 case 93:money=7.44*a;break; 11 case 97:money=7.93*a;break; 12 default:printf("error\n");break; 13 } 14 if(c=='m') 15 money=money*0.95; 16 else 17 money=money*0.97; 18 printf("%.2lf",money); 19 return 0; 20 }
2.設計思路
(1)主思路
- 第一步 :定義整數型變量a(加油量)、b(汽油品種),字符型變量c(服務類型)和浮點數變量money(應付款額);
- 第二步:用scanf函數讀入整數給a和b,讀入字符給c;
- 第三步:用switch語句以b的不同情況運行獲得相應種類汽油和油量的費用;
- 第四步:用if-else語句對c進行類型的判斷並計算出對應折扣后的費用;
- 第五步:用printf函數輸出最終結果money。
注解:本題細節問題要注意整數與浮點數的轉換和結果應保留兩位小數。
(2)流程圖

3.本題調試過程碰到問題及解決辦法
用if函數判斷字符變量時沒有用單引號括中,導致編程錯誤。


解決辦法就是用單引號括中m,即
。
4.本題PTA提交列表

第一個部分正確是由於浮點型變量用的float定義導致錯誤;
第二個部分正確是修改時程序時粗心順手刪掉了if函數中的符號導致錯誤。
題目7-3 比較大小
1.實驗代碼
1 #include<stdio.h> 2 int main() 3 { 4 int a,b,c,x; 5 scanf("%d %d %d",&a,&b,&c); 6 if(a<b){ 7 x=a; 8 a=b; 9 b=x;} 10 if(a<c){ 11 x=a; 12 a=c; 13 c=x;} 14 if(b<c){ 15 x=b; 16 b=c; 17 c=x;} 18 printf("%d->%d->%d",c,b,a); 19 return 0; 20 }
2.設計思路
(1)主思路
- 第一步:定義整數型變量a,b,c(三個比較大小的數字)和x(賦值過程中間變量);
- 第二步:用scanf函數讀入整數給a,b,c;
- 第三步:用三個if函數分別判斷每兩個數字的大小,再根據需要中途以x為中間變量進行賦值交換數字,最終使a,b,c大小呈依次遞增;
- 第四步:用printf函數按照題目要求格式輸出即可。
注解:重點在於三個數字分別比較大小並按預定結果進行賦值交換,以及最終結果其間以“->”相連。
(2)流程圖

3.本題調試過程碰到問題及解決辦法
本題為課堂練習固沒有錯誤,但是在具體編程進行數字交換時比較容易弄混。
4.本題PTA提交列表

題目7-4 兩個數的簡單計算器
1.實驗代碼
1 #include<stdio.h> 2 int main() 3 { 4 int a,b; 5 char ch; 6 scanf("%d %c %d",&a,&ch,&b); 7 switch(ch){ 8 case '+':printf("%d",a+b);break; 9 case '-':printf("%d",a-b);break; 10 case '*':printf("%d",a*b);break; 11 case '/':printf("%d",a/b);break; 12 case '%':printf("%d",a%b);break; 13 default:printf("ERROR");} 14 return 0; 15 }
2.設計思路
(1)主思路
- 第一步:定義整數型變量a,b(題目所要求的兩個整數)和字符型變量ch(用於switch循環);
- 第二步:用scanf函數讀入整數給a,b和讀入字符給ch;
- 第三步:用switch語句以ch的不同情況進行對應的代數運算並用printf函數輸出結果,其中存在其他字符另輸出“ERROR”。
注解:本題主要注意switch語句的格式規范以及輸入輸出的格式。
(2)流程圖

3.本題調試過程碰到問題及解決辦法
scanf函數讀入格式用“,”間隔
導致PTA錯誤。

將格式按題目要求改為空格間隔
即可。
4.本題PTA提交列表

答案錯誤為scanf函數中忘記打入&符號導致錯誤;
部分正確為上述錯誤(即scanf函數讀入用“,”間隔)。
- 要求三
上傳成功后coding.net項目的截圖


Git地址:https://git.coding.net/cyq1076926262/NO.4.git
- 要求四
個人總結
(1)本周所學內容或收獲:
①鞏固了switch循環語句的用法;
②學習了while循環語句及do while結構;
③自學了for語句的用法;
④自學了pow函數的用法(用於C題庫第8題,以下百度搜索注意事項);

⑤修正了switch語句的流程圖畫法,如助教指出老師的錯誤之處,有時候老師的課件並不一定完美,我們更應該培養自身辨別能力。
(2)本周做學難點與不明白的知識點
我認為的難點:
①循環語句的運用;
②面對較復雜題目編程時如何精簡邏輯。
不明白知識點:
沒有未明白的知識點,只是新學習的循環語句還未熟練使用。
(3)對目前老師的上課形式有什么意見或建議:
希望將來專業課程的學習能更加注重編程問題。相比於花費更多時間做博客,我更願意平衡一下時間去做C題庫,因為通過本周C題庫的做題,我更願意也更有動力為了解題去學習新的語法、函數等等。當然關於博客的流程圖我覺得還是挺有意義的,很有助於整理思路,無論是題前題后。
<11.12補>通過今天QQ群里老師、助教、其他同學的對話,我也有所感想。
①首先是我不認為有那么多絕對的事,比如什么每道題必須有錯誤,所以我認為助教這一角色的定位也是靈活的,在我看來只要他能對我起到正面作用,我就支持,反之,我會提出,有要求就必完成式的做作業可能是我的習慣吧,所以對於非常非常嚴格的博客我並不抵觸,而通過其他觀念看待問題的同學當然會產生不同的反應;
②關於老師、助教、同學的關系,一千個讀者眼中有一千個哈姆雷特,我們每個人都各自有界定,我認為有一點不變的是他們的目的是教育學生而不是坑害學生,就嚴謹的思想來說,既然我想認真學習專業,為什么不多注意些呢;
③對於當前的每周作業來說,我也有一些我的意見,我認為更自由化的博客要求更能檢驗和提高我們的專業能力,總有人在努力,總有人更努力。
- 要求五
1.點評作業
①何宗彥(http://www.cnblogs.com/hezongyan/)(1、14樓)
②胡俊鮮(http://www.cnblogs.com/123456hjx/)(3樓)
③陳盈馳(http://www.cnblogs.com/1999-cyc/)(1樓)
2.學習進度條(11/5 8:00~11/8 8:00)



