- 要求二
題目1、7-1 計算分段函數
1、實驗代碼
1 #include<stdio.h> 2 int main() 3 { 4 float x=0,result=0; 5 scanf("%f",&x); 6 if(x==0)result=0; 7 else result=1.0f/x; 8 printf("f(%.1f) = %.1f",x,result); 9 return 0; 10 }
2、設計思路
(1)主思路
- 第一步:定義兩個浮點型變量x(函數自變量)、result(函數因變量);
- 第二步:用scanf函數讀入浮點數給x;
- 第三步:使用if-else條件句對於題目函數分情況(即x是否為0)計算結果得到result;
- 第四步:用printf函數按題目格式代入輸出x和result即可。
注解:看到讀入浮點數想到用float定義和scanf函數讀入,且本題要注意x與result都保留一位小數以及按“f(x) = result”的格式輸出。
(2)流程圖
3、本題調試過程碰到問題及解決辦法
在使用if-else條件句時if和else后都用括號限定了條件,如題目中函數的條件格式一樣,編譯出現錯誤。
解決辦法就是去掉else后的括號及其內容,后經嘗試,if后必須用小括號附帶條件,且else不能,而將if和else后是否帶條件反過來也是不行的。
題目2、7-2 A除以B
1、實驗代碼
1 #include<stdio.h> 2 int main() 3 { 4 int A=0,B=0; 5 float C=0; 6 scanf("%d %d",&A,&B); 7 if(-100>A||A>100||-100>B||B>100)
printf("the input is error"); 8 else if(0<B){ C=(float)A/B; 9 printf("%d/%d=%.2f",A,B,C);} 10 else if(B==0)
printf("%d/%d=Error",A,B); 11 else { C=(float)A/B; 12 printf("%d/(%d)=%.2f",A,B,C);} 13 return 0; 14 }
2、設計思路
(1)主思路
- 第一步:定義兩個整數型變量A、B和浮點型變量C;
- 第二步:用scanf函數讀入整數給A、B;
- 第三步:用if條件句先限定范圍后用else if句式對B的不同情況進行不同方式計算及表達;
- 第四步:用printf函數輸出計算結果,即C=A/B。
注解:這道題的計算“C=(float)A/B”方式還沒有學,但上次博客作業中有同學使用而且老師也作了說明,所以經過嘗試我用此來將兩個整數結果變成浮點數,還有要注意輸出的商應保留小數點后2位。
(2)流程圖
3、本題調試過程碰到問題及解決辦法
沒有考慮到計算時,整數轉變為浮點數的處理,所以出現部分錯誤。
經過自己在編譯器上的例題測試確定錯誤
解決辦法就是將原本的“C=A/B”計算改成了“C=(float)A/B”。
題目3、7-6 階梯電價
1、實驗代碼
1 #include<stdio.h> 2 int main() 3 { 4 float e=0; 5 scanf("%f",&e); 6 if(e<0)printf("Invalid Value!"); 7 else if(e<=50)printf("cost = %.2f",0.53*e); 8 else printf("cost = %.2f",0.53*50+0.58*(e-50)); 9 return 0; 10 }
2、設計思路
(1)主思路
- 第一步:定義浮點型變量e(用電量);
- 第二步:用scanf函數讀入浮點數給e;
- 第三步:用if條件句先判斷e在范圍之內后用else if句式對e的不同情況進行不同方式的計算;
- 第四步:用printf函數輸出結果即電費。
注解:看到讀入浮點數想到用float定義和scanf函數讀入,本題注意結果保留兩位小數,以及電費為負時的輸出表達。
(2)流程圖
3、本題調試過程碰到問題及解決辦法
犯了一個低級錯誤,粗心忘了else-if語句之間是有空格的,否則編譯會出錯。
解決辦法就是打上空格,如圖編譯器的加粗字體其實也是在提示我們函數是否格式正確。
題目4、7-7 出租車計價
1、實驗代碼
1 #include<stdio.h> 2 int main() 3 { 4 float a=0,money=0; 5 int b=0,c=0,sum=0; 6 scanf("%f %d",&a,&b); 7 if(a<0)printf("the input is error"); 8 else if(a<=3)money=10; 9 else if(a<=10)money=10+2*(a-3); 10 else money=10+14+3*(a-10); 11 c=money; 12 if(0<=(money-c)&&(money-c)<0.5)money=c; 13 else money=c+1; 14 sum=money+b/5*2; 15 printf("%d",sum); 16 return 0; 17 }
1 #include<stdio.h> 2 int main() 3 { 4 float a=0,money=0,sum=0; 5 int b=0; 6 scanf("%f %d",&a,&b); 7 if(a<0)printf("the input is error"); 8 else if(a<=3)money=10; 9 else if(a<=10)money=10+2*(a-3); 10 else money=10+14+3*(a-10); 11 sum=money+b/5*2; 12 printf("%.0f",sum); 13 return 0; 14 }
2、設計思路
(1)主思路
- 第一步:定義浮點型變量a(行駛里程),money(行駛中產生的費用)和整數型變量b(等待時間)、c(參與四舍五入)、sum(總車費);
- 第二步:用scanf函數入讀浮點數給a,整數給b;
- 第三步:用第一個if條件句以a的值作為篩選條件進行多條件處理計算,得到相應的money值;
- 第四步:用第二個if條件句判斷money小數點范圍進行四舍五入的處理;
- 第五步:將各部分值相加得sum的值並用printf函數輸出。
注解:這道題思路比較繁瑣,主要在於如何完成四舍五入,我的想法就是用money減去整數部分得小數部分,然后判斷是否可以進位,注意本題結果要求整數。
<修改后的第二組代碼>主思路:
- 第一步:定義浮點型變量a(行駛里程)、money(行駛中產生的費用)、sum(總車費)和整數型變量b(等待時間);
- 第二步:用scanf函數入讀浮點數給a,整數給b;
- 第三步:用if條件句以a的值作為篩選條件進行多條件處理計算,得到相應的money值;
- 第四步:將各部分值相加得sum的值並用printf函數輸出。
注解:因為在開始修改定義了sum數據類型為浮點型,且一直為涉及數據類型轉變,所以四舍五入問題被解決。
(2)流程圖(為第二組代碼對應)
3、本題調試過程碰到問題及解決辦法
一開始沒有做四舍五入的編程,所以出現部分錯誤提示
經過自己在編譯器上的例題測試確定錯誤為四舍五入出了問題
解決辦法就是在已有基礎上又用了一個if條件句來判斷小數點是否符合四舍五入,具體方法為在得到money的值后通過減去整數部分得到小數部分,再用if條件句判斷該小數部分是否可以四舍五入,然后分情況是否給整數部分“+1”或不變。后來又做了一遍,修改了開始的定義直接為浮點型,最后不經過數據類型變化直接不保留小數點,四舍五入的問題解決。
- 要求三
Git地址:https://git.coding.net/cyq1076926262/NO.4.git
- 要求四
1、總結本周所學內容、遇到的問題
- 課堂上:
①學習了數據類型及所占字節長度;
②學習了上周作業中關於浮點型數據的遺留問題(例:4.0是double型,4.0f是float型);
③學習了如何用sizeof函數確定數據長度;
④學習了關於字符型數據的基礎知識;
⑤學習了switch語句。
- 作業中:
①更加深入的理解了if else條件句和else-if句式的邏輯及使用;
②更加熟悉了字符型數據的使用;
③認識到通過構建流程圖可以更加清晰地展現流程和思路。
- 問題:
作業最后一道的四舍五入坑了一下,我一時間從代碼上看不出哪里的運算出現了問題,慢慢回想可能是整數和浮點數轉換出了問題,所以我把最后幾行所有的涉及到的運算式全部一一提取出來到另一個只有scanf函數和printf函數的代碼里,一個一個輸入數據確定了原來是最后的sum出了問題;我當時的解決辦法是在程序最后再加一個if條件句篩選money的小數點來進行四舍五入的,但后經思考,其實這道題輸出結果為整數欺騙性地讓我下意識的定義了整數型,其實完全可以定義浮點數並一直計算到最后再轉變為整數的,這樣也就完成了四舍五入同時也精簡了代碼結構。
2、點評作業
①何宗彥(http://www.cnblogs.com/hezongyan/)
②胡俊鮮(http://www.cnblogs.com/123456hjx/)
③張樂(http://www.cnblogs.com/1999-09-22/)
3、學習進度條(10/21 12:00~10/29 8:00)