- 要求二
題目1、7-9 A乘以B
要求:輸入的兩個整數:A是你學號前兩位數字,B是你學號后兩位數字
1、實驗代碼
#include<stdio.h> int main() { int A=0,B=0; scanf("%d %d",&A,&B); if(-100<=A&&A<=100&&-100<=B&&B<=100)printf("%d",A*B); else printf("the input is error"); return 0; }
2、設計思路
- 第一步:基本框架之下定義整數型變量A、B;
- 第二步:用scanf函數讀入兩個整數給A和B;
- 第三步:用if條件句判斷整數是否在范圍之內;
- 第四步:進行乘法運算A*B並輸出結果的值。
注解:看到讀入整數就想到用int定義和scanf函數輸入,之后便是單數運算和printf函數打印結果,不過要注意數字之間有空格分割以及輸入整數有范圍要求。
(ps:我的學號為2017024100)
3、本題調試過程碰到問題及解決辦法
在scanf函數一行:&A和&B之間沒有用“,”隔開而是同前面“%d %d”的格式一樣空格隔開,編譯時出現錯誤提示
解決辦法就是在&A和&B之間用“,”隔開
經嘗試發現,scanf引號后的格式與引號內格式無關,必須要用“,”隔開且空格多少無影響
4、運行結果截圖
題目2、7-10 求整數均值
要求:輸入的整數是:你的身高、體重、學號前兩位、學號后兩位。另外平均值精確到小數點后一位(printf的格式控制字符串為%.1f)
1、實驗代碼
#include<stdio.h> int main() { int a=0,b=0,c=0,d=0,Sum=0; float Average=0; scanf("%d %d %d %d",&a,&b,&c,&d); Sum=a+b+c+d; Average=Sum/4.0; printf("Sum = %d; Average = %.1f",Sum,Average); return 0; }
2、設計思路
- 第一步:基本框架之下定義整數型變量a、b、c、d、Sum以及浮點型變量Average;
- 第二步:用scanf函數讀入四個整數給a、b、c、d;
- 第三步:進行求和和求平均值運算,得到Sum和Average的值;
- 第四步:輸出結果即Sum和Average的值(這里注意平均值精確到小數點后一位)。
注解:同樣看到讀入整數就想到用int定義和scanf函數輸入,目前水平看到浮點數就想到用float或double定義,不過要注意本題浮點型變量在print函數里要用“%.1f”來對應,且四個整數之間有空格分割。
(ps:我的學號為2017024100,身高為175,體重為52公斤)
3、本題調試過程碰到問題及解決辦法
Average雖然使用了float定義,但輸出結果在小數點后有很多位數而並非1位,從而在編譯器上編譯無錯誤提示,但在PTA上顯示答案錯誤
因為我做PTA時是第三周作業的初稿發布當天,公告里還沒有“%.1f”的提示
解決辦法是網上搜索C語言編程“C語言編程時怎么控制浮點型輸出的小數點精確到幾位”得到答案在printf函數一行使用“%1.f”來精確小數點后一位數
4、運行結果截圖
題目3、7-11 是不是太胖了
要求:輸入的身高是你本人真實身高
1、實驗代碼
#include<stdio.h> int main() { int H=0; float a=0; scanf("%d",&H); if(100<H&&H<=300){ a=(H-100)*0.9*2; printf("%.1f",a);} else printf("the input is error"); return 0; }
2、設計思路
- 第一步:基本框架之下定義整數型變量H和浮點型變量a;
- 第二步:用scanf函數讀入整數即身高給H;
- 第三步:判斷整數H是否在范圍之內;
- 第四步:根據題目要求進行代數運算得a;
- 第五步:輸出結果a的值即市斤體重值(這里注意b的值精確到小數點后一位)。
注解:看到整數和浮點數就用int和float定義,只后按照題目所給關系進行代數運算並輸出即可,但同樣注意浮點型變量在print函數里要用“%.1f”來對應以滿足題目要求,還有就是整數 H是有范圍要求的。
(ps:我的身高為175)
3、本題調試過程碰到問題及解決辦法
在進行第三步的列算式時受到傳統數學觀念影響,把算式列成了“a=(H-100)0.9*2”,編譯時出現錯誤提示
解決辦法就是在(H-100)和0.9之間加上乘法符號“*”即可
4、運行結果截圖
題目4、7-6 輸出各位數字
要求:輸入整數是你學號后三位,注意本題需要使用運算符/
1、實驗代碼
#include<stdio.h> int main() { int a=0,b=0,c=0,d=0; scanf("%d",&a); b=a/100; c=(a/10)%10; d=(a%100)%10; printf("%d,%d,%d",b,c,d); return 0; }
#include<stdio.h> int main() { int a=0; scanf("%d",&a); printf("%d,%d,%d",a/100,a/10%10,a%100%10);
return 0; }
2、設計思路
- 第一步:基本框架之下定義整數型變量a、b、c、d;
- 第二步:用scanf函數讀入整數即任意一個三位數給a;
- 第三步:通過整數變量代數運算中“/”和“%”使用或多次使用依次分離出三位數的百、十、個位;
- 第四步:輸出結果“b,c,d”即“百位,十位,個位”。
注解:解本題關鍵在於通過編程中整數運算(/和%)的特點來逐步分離出每一位數,同時注意輸出時各個數字之間用逗號間隔,沒有其它任何附加字符。
(ps:我的學號為2017024100)
3、本題調試過程碰到問題及解決辦法
這道題我一開始的思路是如下圖的,在讀入三位數a后直接在printf函數里完成所有的數位分離並打印,但是這里我直接搬上了演算過程中因思考對於一位數先后運算分離而產生的小括號,編譯時出現了錯誤
解決辦法就是去掉小括號即可,但我后來認為這樣子雖然結構簡單,但如果面對更復雜的運算試,就勢必顯得局限了,所以我后來又改成了a、b、c、d四個整數型變量來分布分離每一位數
4、運行結果截圖
- 要求三
1、上傳成功到coding.net截圖
Git地址:https://git.coding.net/cyq1076926262/666.git
2、PTA的提交列表的截圖
- 要求四
1、總結本周所學內容、遇到的問題
課堂上:
①復習鞏固scanf函數的運用;
②學習了if語句的使用,在課堂上也有所練習;
③練習了關於整數型變量“/”和“%”運算的使用;
④學習了else if句型並在課堂上進行了練習;
⑤學習了如何判定已讀入數范圍是否符合題設。
作業中:
①學會了用“%.1f”來精確浮點型變量精確到小數點后位數;
②通過PTA作業編程錯誤來進一步熟悉了計算機的運算和邏輯,面對問題慢慢地從傳統數學思想轉換;
③更加熟練地運用運算符(尤其是整數型變量)進行代數運算。
問題:①課堂上老師強調的知識點:用float定義變量后面要用%f,而double定義變量后面要用%lf;但本周PTA作業第三題我意外發現因為自己粗心用double定義了的變量在printf函數一行用了“%f”卻沒有報錯,且運行結果正確;后來我又嘗試用float定義的變量對應“%lf”,得到了同樣的正確的結果。
我在百度和博客都進行了搜索,得到了大致類似的如下圖結果:
總結就是在printf函數中,無論是%f還是%lf效果都是一樣的,但scanf函數中double必須用%lf,float必須用%f。
附鏈接:http://blog.csdn.net/bo_fengyu/article/details/39057021
②PTA作業的題目1和題目3對於所輸入的變量有范圍要求(如圖):
雖然這次作業檢測上沒有對此作出要求,不過嚴格按照題目來編程地話還是有所欠缺的,關於這一點我有上網查詢並瀏覽了多個類似解決辦法,但都屬於治標不治本,我對於解決這個范圍的問題還是一知半解;不過我在評論何宗彥的作業時看到牛老師說下節課會講解這個問題,所以我一定在課堂上認真聽講以學到這個知識點。
<10.19補充>:今天的C語言課程已經解決了這個問題,在scanf函數讀入值后使用if條件語句來進行判定即可。
2、點評同學作業
劉澤華(http://www.cnblogs.com/liuzehua123/)
何宗彥(http://www.cnblogs.com/hezongyan/)
姚爽(http://www.cnblogs.com/yaoshuang/)
3、學習進度條(10/15 8:00~10/21 8:00)