作業要求https://edu.cnblogs.com/campus/hljkj/CS201802/homework/2360
PTA作業
第十一周 第六次作業 7-4 輸出華氏-攝氏溫度轉換表
題目:輸入2個正整數lower和upper(lower≤upper≤100),請輸出一張取值范圍為[lower,upper]、且每次增加2華氏度的華氏-攝氏溫度轉換表。 溫度轉換的計算公式:C=5×(F−32)/9,其中:C表示攝氏溫度,F表示華氏溫度。
輸入格式:在一行中輸入2個整數,分別表示lower和upper的值,中間用空格分開。
輸出格式:第一行輸出:"fahr celsius" 接着每行輸出一個華氏溫度fahr(整型)與一個攝氏溫度celsius(占據6個字符寬度,靠右對齊,保留1位小數)。 若輸入的范圍不合法,則輸出"Invalid."
1.實驗代碼
#include<stdio.h> int main() { int lower,fahr,upper; double celsius; scanf("%d %d",&lower,&upper); if(lower<=upper&&upper<=100){ printf("fahr celsius\n"); for(fahr=lower;fahr<=upper;fahr=fahr+2){ celsius=5*(fahr*1.0-32)/9; printf("%d %5.1f\n",fahr,celsius);} } else{ printf("Invalid."); } return 0; }
2 解題思路
(1)算法: **利用if語句判斷數據。利用for語句實現循環,對華氏溫度在[lower,upper]內的每個值,使用溫度轉換公式計算得出的攝氏溫度。
*用if語句判斷輸入數據的合法性,即lower是否小於upper
*lower小於upper時,進行溫度轉換
*lower大於upper時,輸出錯誤提示。
*溫度轉換:用for語句進行重復轉換,從lower開始,到upper結束,步長為1。
(2)流程圖:
3.本題調試過程碰到問題及解決辦法
(1)錯誤:for語句后加了“;”
(2)有錯誤提示的截圖
沒有輸出溫度轉換表,而是只輸出一次結果
(3)編譯器設置斷點、單步調試的界面截圖
(4)解決辦法:";"代表空語句,這時循環體為空語句,應刪去“;”,循環體語句才能被正常循環。
第十二周 第九次作業 7-2 輸出閏年
題目:輸出21世紀中截止某個年份以來的所有閏年年份。注意:閏年的判別條件是該年年份能被4整除但不能被100整除、或者能被400整除。
輸入格式:輸入在一行中給出21世紀的某個截止年份。
輸出格式:逐行輸出滿足條件的所有閏年年份,即每個年份占一行。輸入若非21世紀的年份則輸出"Invalid year!"。若不存在任何閏年,則輸出“None”。
1.實驗代碼
#include<stdio.h> int main() { int i,x,n; scanf("%d",&n); if(n<=2000){ printf("Invalid year!"); } else if(n<2004){ printf("None"); } else if(n<=2100){ for(i = 2004;i<=n;i+=4){ if(i%100!=0||i%400==0){ printf("%d\n",i); } } } else{ printf("Invalid year!"); } return 0;}
2解題思路
(1)算法: **利用else if語句和for語句嵌套實現多分支結構和循環結構
*利用else if語句,實現n小於2000,n大於2000小於2004,n大於2004三種情況。
*n小於2000時,打印“Invalid year!”
*n大於2000小於2004時,打印“None”
*n大於2004時,利用for循環中嵌套if語句的結構判斷n是否是閏年,如果是閏年,就輸出。
(2)流程圖
3.本題調試過程碰到問題及解決辦法
(1)錯誤:if和else配對錯誤。
(2)有錯誤提示的截圖
(3)編譯器設置斷點、單步調試的界面截圖
(4)解決辦法:count, sum寫程序時要注意縮進,這樣可以一目了然,避免了不必要的錯誤。
第十三周 第十次作業 7-1 統計素數並求和
題目:本題要求統計給定整數M和N區間內素數的個數並對它們求和。
輸入格式:輸入在一行中給出兩個正整數M和N(1≤M≤N≤500)。
輸出格式:在一行中順序輸出M和N區間內素數的個數以及它們的和,數字間以空格分隔。
1.實驗代碼
#include <stdio.h> int main() { int M,N,sum,count,i,o; scanf("%d %d",&M,&N); sum=0; count=0; for(i=M;i<=N;i++){ for(o=2;o<=i/2;o++){ if(i%o==0){ break; } } if(o > i/2 && i != 1){ sum=sum+i; count++; } } printf("%d %d", count, sum); return 0; }
2 解題思路
(1)算法: **利用if語句和for語句嵌套實現分支結構和循環結構
*利用for語句實現[n,m]區間內每個數字的循環。
*第一個for語句中嵌套第二個for語句
*第二個for語句中嵌套一個if語句,以實現是否為素數的判斷
*如果不是,跳出循環;如果是,進行下一步。
*利用if語句,滿足條件則sum(素數和)加一,count(素數個數)加一。
(2)流程圖
3.本題調試過程碰到問題及解決辦法
(1)錯誤:將“printf("%d %d", count, sum);”語句錯放在了for語句中,導致每次循環都打印一次count和sum的值。 (2)有錯誤提示的截圖
(3)編譯器設置斷點、單步調試的界面截圖
(4)解決辦法:將“printf("%d %d", count, sum);”語句放在了for語句外面,只打印一次。
個人總結
1.本周我學習了的內容:for語句,while語句,do while語句,以及它們和if語句,if else語句,else if語句的相互嵌套 我的收獲:for語句,while語句,do while語句雖然都是用來實現循環的語句,它們有相似的地方,但也有很大區別。循環次數確定時,宜用for語句;循環體至少執行一次時,用do while語句
2.難點: *三種語句形式的區別和正確選擇最合適最簡便的語句
*嵌套時語句之間的邏輯關系
*調試的過程始終不太清楚,操作生疏
措施: *多加練習,熟悉三種語句
*勤於思考,多動腦
*寫程序時要做好縮進,使代碼一目了然,便於檢查
*求助於身邊的同學,從她們身上我學習到了許多有用的東西
累積代碼行數和時間:
時間 | 11.21 | 11.22 | 11.23 | 11.24 | 11.25 | 11.26 | 11.27 |
代碼行數 | 30 | 25 | 22 | 18 | 20 | 15 | 33 |
累積博客字數和時間:
時間 | 11.21 | 11.22 | 11.23 | 11.24 | 11.25 | 11.26 | 11.27 |
博客字數 | 0 | 0 | 0 | 0 | 500 | 700 | 1100 |
點評:
https://www.cnblogs.com/mayijing/p/10017399.html
https://www.cnblogs.com/chumengGTRlhz/p/9991154.html
https://www.cnblogs.com/abcdsjjs/p/10029383.html