本周主要學習了if-else、switch-case判斷語句、for循環結構等內容。
以下是這些新內容的一些實踐應用:
1.計算時間差
計算兩個時間之間的時間差,這是生活當中較為常見
的程序設計應用,它存在於手機電腦里絕大部分的應用程序里。比如每當你在手機里設定一個鬧鍾,它可能會顯示還有幾時幾分響鈴。想要搞清楚這一程序運行的原理,我開始試着用自己所學的C語言知識來編寫這段程序的代碼,於是有了第一次的代碼:
#include <stdio.h>
int main() { int t1, t2; scanf("%d %d", &t1, &t2); int th, tm; int m1, m2; th = t2/100 - t1/100; m1 = t1%100; m2 = t2%100; tm = m2 - m1; printf("%d:%d", th, tm); return 0; }
寫完以上代碼並用幾組不同數據進行運行測試后,我發現了幾處問題。一是 當第二個時間的分鍾小於第一個時間的分鍾時,時間差的分鍾數會出現負數錯誤答案;二是 輸出格式的問題,我想要以小時和分鍾均以占兩位的格式輸出,也就是形如01:02的格式而不是1:2的格式輸出。
於是我重新反思檢查了我的代碼,同時還上網瀏覽了些相關內容,接着就有了修改后的代碼:
#include <stdio.h>
#include <stdlib.h> int main() { int t1, t2; scanf("%d %d", &t1, &t2); int th, tm; int m1, m2; th = t2/100 - t1/100; m1 = t1%100; m2 = t2%100; if (m2 > m1) { tm = m2 - m1; } else if (m2 < m1) { tm = m2 + 60 - m1; th--; } printf("%02d:%02d", th, tm);
system("pause"); return 0; }
同時附上流程圖:
這次引入了if-else判斷語句,分析判斷時間2的分鍾是否大於時間1的分鍾,若大於,則可直接用時間2減去時間1來得到時間差;若小於,則向小時借一,將時間2的分鍾加上60再來減去時間1的分鍾,同時先前計算好的小時差要減一。 這下我們就得到了正確答案,但輸出格式還不夠完美,於是我把輸出控制符改為%02d來保證以兩位數的格式輸出,即當數據為個位數時往十位補上0輸出。 當我信心滿滿地將源代碼編譯鏈接完准備用生成的可執行文件(.exe)進行運行測試時才發現,每當輸入完數據准備輸出結果時,程序就會立即關閉,上網查了下才知道,需要在結尾處return 0上一句加上system("pause");語句才能讓程序在運行結束后不會立即退出,同時該語句還需引用stdlib.h頭文件才能正常使用。
2. 統計成績等級
該程序可用於統計一批學生成績的等級分布,比如在總分100分的條件下大於等於90分的為等級A,大於等於80且小於90的為等級B,大於等於70且小於80的為等級C,大於等於60且小於70的為等級D,低於60分的為等級E。有了以上標准后,結合學到的switch-case判斷和for循環的知識,我們就可以編寫出這樣一段正確的代碼:
#include <stdio.h> #include <stdlib.h>
int main() { int n, i, score; int a = 0, b = 0, c = 0, d = 0, e = 0; scanf("%d", &n); for (i = 0; i < n; i++) { scanf("%d", &score); switch (score / 10) { case 10: case 9: a++; break; case 8: b++; break; case 7: c++; break; case 6: d++; break; default: e++; break; } } printf("A=%d\n", a); printf("B=%d\n", b); printf("C=%d\n", c); printf("D=%d\n", d); printf("E=%d\n", e); system("pause"); return 0; }
IPO:定義完變量后,先輸入要統計的成績個數n,接着用for循環依次輸入n個成績,每次輸入成績score后將其除以10然后進入switch-case判斷,找到對應的case語句后將對應等級的值加一。執行完n次循環后以每行單獨輸出形如 “等級=人數” 的格式輸出。
在此之前,我還遇到過因忘了在switch結構里的每個子語句結尾加上break而造成的問題,這種問題情況下,程序會從對應的case語句開始往下執行所有的case語句,加入break的目的就是要使程序在switch結構里執行完對應的case語句后立即跳出switch結構,進行下一步驟。
這是我的第一篇博客,在經過本周的學習后,我試着以自己的理解寫了上述的兩道程序設計應用實例,也許還有很多不足,但我相信,只要我肯堅持下去,一定可以做好的。
有任何錯誤歡迎大家指正~