Part 1.編程
驗證性內容函數
(1)從鍵盤上輸入3個數,讓它們表明3條線段的長度,編寫一個c程序判斷這3條線段組成的三角形屬於什麼類型(通常三角形、等腰三角形、等邊三角形或不構成三角形)。學習
#include <stdio.h> int main() { double a,b,c; scanf("%lf %lf %lf", &a, &b, &c); if(a+b>c && a+c>b && b+c>a) { if(a==b && a==c) printf("構成等邊三角形\n"); else if(a==b || a==c || b==c) printf("構成等腰三角形\n"); else printf("構成通常三角形\n"); } else printf("不能構成三角形\n"); return 0; }
運行結果測試
把 demo1.cpp中嵌套使用的if語句部分替換成如下代碼spa
if(a+b>c && a+c>b && b+c>a) { if(a==b || a==c || b==c) { if (a==b && a==c) printf("構成等邊三角形\n"); else printf("構成等腰三角形\n"); } else printf("構成通常三角形\n"); } else printf("不能構成三角形\n");
以後運行結果以下設計
換代碼以後,依舊能夠運行。3d
拓展:把demo1.cpp中輸入三邊長而且判斷三角形類型的代碼放到while循環裏,運行程序code
#include <stdio.h> int main() { double a,b,c; printf("輸入三角形三邊:\n"); while(scanf("%lf%lf%lf",&a,&b,&c)) { if(a+b>c && a+c>b && b+c>a) { if(a==b && a==c) printf("構成等邊三角形\n"); else if(a==b || a==c || b==c) printf("構成等腰三角形\n"); else printf("構成通常三角形\n"); } else printf("不能構成三角形\n"); printf("\n輸入三角形三邊:\n"); } return 0; }
結果以下blog
while(scanf("%ld%ld%ld",&a,&b,&c)){
// ...
}這段代碼可使程序一直運行。教程
(2)用scanf()函數輸入一個百分制成績(整型量),要求輸出成績等級A,B,C,D,E。其中,90~100分爲A,80~89
分爲B, 70~79分爲C, 60~69分爲D,60分如下爲E。
#include <stdio.h> int main() { int score; // 用於存放百分制分數 char grade; // 用於存放等級制分數(取值'A', 'B','C','D', 'E') while(1) { printf("輸入學生成績: "); if(scanf("%d",&score) == 0) // 若是檢測到沒有成績輸入,則結束整個循環 break; if(score<0 || score > 100) { printf("輸入成績有誤!\n\n"); continue; // 結束本次循環,開始下一次循環 } else if(score>=90 && score<=100) grade = 'A'; else if(score>=80 && score<=89) grade = 'B'; else if(score>=70 && score<=79) grade = 'C'; else if(score>=60 && score <=69) grade = 'D'; else grade = 'E'; printf("等級爲: %c\n\n", grade); } return 0; }
用switch語句改寫以後獲得
(3)理解控制語句continue和break的功能
#include <stdio.h> int main() { int i; // 在循環語句中使用continue for(i=1; i<=5; i++) { if (i%3 == 0) // 若是i是3的倍數,則結束本次循環,開始下一次循環 continue; printf("i=%d\n",i); } return 0; }
運行結果
#include <stdio.h> int main() { int i; // 在循環語句中使用continue for(i=1; i<=5; i++) { if (i%3 == 0) // 若是i是3的倍數,則結束整個循環 break; printf("i=%d\n",i); } return 0; }
在循環中使用控制語句continue和break,其功能區別是什麼?
答:continue只用於循環語句中,它是在結束本次內層循環以後直接開始下一次內層循環,我將它理解爲它直接跳過了該次內層循環;break在循環過程當中會直接結束當前內層整個循環,至關於直接卡住。
#include <stdio.h> const int LINE=3; // 定義符號常量LINE const int COLUME=5; // 定義符號常量COLUME int main() { int line; // 定義變量line, 用來控制行數 int col; // 定義變量col, 用來控制列數 // 輸出LINE行信息 for(line=1; line<=LINE; line++) { // 每一行中,利用循環,輸出各列信息 for(col=1; col<=COLUME; col++) { if(col%3 == 0) // 若是col是3的倍數,則結束本次循環,開始下一次循環 continue; printf("%5d", col); } printf("\n"); // 每輸出完一行,換行 } return 0; }
#include <stdio.h> const int LINE=3; // 定義符號常量LINE const int COLUME=5; // 定義符號常量COLUME int main() { int line; // 定義變量line, 用來控制行數 int col; // 定義變量col, 用來控制列數 // 輸出LINE行信息 for(line=1; line<=LINE; line++) { // 每一行中,利用循環,輸出各列信息 for(col=1; col<=COLUME; col++) { if(col%3 == 0) // 若是col是3的倍數,則結束內層循環體 break; printf("%5d", col); } printf("\n"); // 每輸出完一行,換行 } return 0; }
在兩層嵌套循環中,內層循環中若是出現continue,是否影響外層循環?
答:不影響,在上面的第一個運行程序中能夠觀察到,儘管內層循環中出現了continue,但它僅僅只是影響了內層循環,使得知足條件的3沒法輸出,但它並未影響到外層循環。
在兩層嵌套循環中,內層循環中若是出現break,是否影響外層循環?
答:不影響,在條件知足以後,它的出現直接阻斷了內層循環程序的繼續運行,或者說是它直接跳出了內層循環,進而開始外層循環。
Part2: 補足程序,使得程序運行
/* 編程找出5個整數的最大數和最小數 《C語言程序設計教程學習指導》p122實驗內容(3) */ #include <stdio.h> int main() { int number, max, min, n; n=1; printf("輸入第%d個數: ", n); scanf("%d", &number); max = number; min = number; while(n<5) { n++; printf("輸入第%d個數: ", n); scanf("%d", &number); if(number>=max) max = number; else if(number<=min) min = number; } printf("最大數爲: %d\n", max); printf("最小數爲: %d\n", min); return 0; }
使用for或do...while語句實現的程序源碼,及運行測試結果截圖
#include <stdio.h> int main() { int number, max, min, n; n=1; printf("輸入第%d個數: ", n); scanf("%d", &number); max = number; min = number; for(n=2;n<=5;n++) { printf("輸入第%d個數: ", n); scanf("%d", &number); if(number>=max) max = number; else if(number<=min) min = number; } printf("最大數爲: %d\n", max); printf("最小數爲: %d\n", min); return 0; }
#include <stdio.h> int main() { int number, max, min, n; n=1; printf("輸入第%d個數: ", n); scanf("%d", &number); max = number; min = number; do { ++n; printf("輸入第%d個數: ", n); scanf("%d", &number); if(number>=max) max = number; else if(number<=min) min = number; }while(n<5); printf("最大數爲: %d\n", max); printf("最小數爲: %d\n", min); return 0; }
Part3:編程練習
(1)編程輸出101~200之間全部素數,並輸出這一區間內素數個數。
#include <stdio.h> #include <math.h> int main(){ int n,m,i,sum=0; for(n=101;n<=200;n++) { m=sqrt(n); for(i=2;i<=m;i++) if(n%i==0)break; if(i>m) { printf("%5d",n); sum++; } } printf(" "); printf("101~200之間共有%d個素數",sum); return 0; }
#include<stdio.h> int main() { int line,k,x; for(line=1;line<=5;line++) { for(k=1;k<=5-line;k++) printf(" "); for(x=1;x<=2*line-1;x++) printf("*"); printf("\n"); } return 0; }
實驗總結與體會:
經過完成實驗的第一部分,我認識到了continue與break的區別與區別,這意味着之後的程序編寫會越發便捷,感受受益不淺。實驗的第二部分補足程序也較爲簡單。第三部分的編寫程序我以爲對我而言仍舊有點困難,因此在這一部分上我磨蹭了很久,不過最終顯示出正確的運行結果的時候仍是以爲時間花費的很值。無論怎麼說,加油吧!
實驗互評:
https://www.cnblogs.com/MR-XN/
https://www.cnblogs.com/sfyq/
https://www.cnblogs.com/plutocharon/