实验3 分支语句和循环语句(1)
實驗三?
PART 1 驗證性內容
§1?從鍵盤上輸入3個數,讓它們代表3條線段的長度,編寫一個c程序判斷這3條線段組成的三角形屬于什么類型
(一般三角形、等腰三角形、等邊三角形或不構成三角形)。程序源碼(demo1)如下↓
#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");elseprintf("構成一般三角形\n");}elseprintf("不能構成三角形\n");return 0; }?運行結果↓
?
???思考:?把嵌套使用的if語句部分在軟件環境中,替換demo1中的if部分,然后運行程序,輸入不同邊長數據進行測試驗證,目前運行正常。
嵌套使用if語句時注意:C語言對if語句的規定是else總是與最近的一個沒有被else匹配的if相配對,這里就要關注{}的準確使用,以免混亂邏輯順序。
程序源碼(demo1.1)如下↓
#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 || b==c){if (a==b && a==c)printf("構成等邊三角形\n");elseprintf("構成等腰三角形\n");}elseprintf("構成一般三角形\n");}elseprintf("不能構成三角形\n");return 0;}?運行結果↓
?
???拓展 :把 demo 1中輸入三邊長并且判斷三角形類型的代碼放到while循環里,運行程序,觀察結果,程序源碼(demo 2)如下↓
/*這是在demo1.cpp的基礎上行,增加了一小部分代碼,可以循環判斷多組數據 要終止輸入和判斷:按組合鍵Ctrl+D(同時按下Ctrl和D鍵),然后按回車鍵結束 */ #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");elseprintf("構成一般三角形\n");}elseprintf("不能構成三角形\n");printf("\n輸入三角形三邊:\n");}return 0; }運行結果↓ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 右圖是我在“按組合鍵Ctrl+D(同時按下Ctrl和D鍵),然后按回車鍵結束”之后出現的結果,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?這樣的結果會無限重復循環,只能強制結束程序,不是很明白要怎么終止程序ˉ\_(ツ)_/ˉ
?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
?
右圖是我在“0+回車鍵”或者“按組合鍵Ctrl+D(同時按下Ctrl和D鍵),然后按回車鍵結束”之后出現的結果,無限重復循環,只能強制結束程序,就不是很明白要怎么終止程序。
組合使用while和if結構可以連續輸出這樣真的很便捷,可以不斷輸入不斷判斷運行結果,可是不知道如何終止程序,甚至讓它無限循環下去這樣的結果真的不是很好_(:_」∠)_...
(我還是需要再多了解一些結束程序這一塊的內容,繼續摸索一下這個軟件)
之后參照以下程序進行更改后還是沒有結束程序,這里就很叫人困惑,求助(編程軟件Xcode)
?
int x; while(scanf("%d",&x) != 0) { // 等價于while( scanf("%d",&x) != EOF )// 也等價于while( scanf("%d", &x) ) //... }?對于以下的更改,我認為是限定輸入,如果輸入不足三個數字那么在這里既可判定其不可構成三角形,簡化程序運行。
while(scanf("%ld", &a) && scanf("%ld", &b) && scanf("%ld", &c) ){// ... }?§2?用scanf()函數輸入一個百分制成績(整型量),要求輸出成績等級A,B,C,D,E。
其中,90~100分為A,80~89分為B, 70~79分為C, 60~69分為D,60分以下為E。程序源碼( demo3 )如下↓
/*《C語言程序設計教程學習指導》p122實驗內容(2):輸入百分制分數,測算并輸出等級制分數這是一個綜合使用while語句、多分支if語句和continue、break實現分數段判斷的示例 運行程序,輸入不同分數值進行測試,理解和鞏固這些控制語句的用法 按下組合鍵Ctrl+D(同時按下Ctrl和D)結束判斷*/ #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';elsegrade = 'E';printf("等級為: %c\n\n", grade);}return 0; }運行結果↓
在此次運行中很偶然的發現了退出運行的方法,只要輸入的不是數字就可以退出運行ˉ\_(ツ)_/ˉ ?這樣的退出方法不確定是程序還是軟件設定,求助
?
回答問題:
1.結合程序demo5_1.cpp和demo5_2.cpp運行結果對比,總結在循環中使用控制語句continue和break, 其功能區別是什么?
答:“break” 不管是 for 循環,還是 while 循環,或者是 do…while 循環,都可以用 break 跳出來,但是 break 只能跳出一層循環。
當有多層循環嵌套的時候,break只能跳出“包裹”它的最里面的那一層循環,無法一次跳出所有循環。同樣,在多層 switch 嵌套的程序中,
break 也只能跳出其所在的距離它最近的 switch。
“continue” ?作用為結束本次循環,即跳過循環體中下面尚未執行的語句,然后進行下一次是否執行循環的判定。continue 不能在 switch 中使用,
除非 switch 在循環體中。此時 continue 表示的也是結束循環體的本次循環,跟 switch 也沒有關系。
continue 語句和 break 語句的區別是:
continue 語句只結束本次循環,而不是終止整個循環。break 語句則是結束整個循環過程,不再判斷執行循環的條件是否成立。
而且,continue 只能在循環語句中使用,即只能在 for、while 和 do…while 中使用,除此之外 continue 不能在任何語句中使用。
2.結合程序demo6_1.cpp和demo6_2.cpp運行結果對比,回答:
在兩層嵌套循環中,內層循環中如果出現continue,是否影響外層循環?
答:不影響
在兩層嵌套循環中,內層循環中如果出現break,是否影響外層循環?
答:不影響
?
PART 2?補足程序,使得程序運行
編程找出5個整數中的最大數和最小數,并輸出找出的最大數和最小數。
/*編程找出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語句,程序源碼如下↓
/*用for語句實現編程*/ #include<stdio.h> int main() {int number, max, min, n ;n = 1 ;printf ("輸入第%d個數: ", n );scanf ("%d", &number );max = number;min = number;for ( n = 1; 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; }
?運行結果↓
以下是用do...whlie語句實現編程,程序源碼如下↓?
/*用do...while語句實現編程*/ #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; }運行結果↓
這里是一個講解while和do while的網頁http://c.biancheng.net/c/while/
這里是一個講解for循環的網頁http://c.biancheng.net/view/308.html
總的網頁還是在C語言中文網(好像我在每一篇實驗里都推薦了這個網頁(///▽///)真的有很多干貨)
?
?PART 3 編程練習
θ ?編程輸出101~200之間所有素數,并輸出這一區間內素數個數,程序源碼如下↓
#include <stdio.h> #include <math.h> int main() {int i , n , x ;x = 0 ;for(i = 101 ; i < 201 ; i++){for(n = 2 ; n < sqrt(i) ; n+=1){if(i%n == 0 )break;}if(n > sqrt(i)){printf("%4d",i);x+=1;}}printf("\n101~200之間共有%d個素數",x) ;return 0; }運行結果↓
附錯誤的運行結果:
是在條件判斷這里不同而造成結果的不同(?_?)
?
θ?編程打印輸出如下圖案,程序源碼如下↓
#include<stdio.h> int main(){int line , star , blank , a , b ;for(line = 1 ; line <= 5 ; line+=1 ){star = 5 - line ;blank = 2 * line - 1 ;for (a = 1 ; a <= star ; a++ )printf (" ");for (b = 1 ; b <= blank ; b++ )printf("*");printf("\n");}return 0; }運行結果如下↓
?這里是一個倒置金字塔的程序源碼↓
#include<stdio.h> int main () {int i ,j ;for ( i = 0 ; i < 5 ; i++ ){for ( j = 0;j < i ; j++ )printf(" ");for ( j = 0;j < (4-i) * 2 + 1 ; j++ )printf("*");printf("\n");}return 0 ; }運行結果如下↓
附幾個奇奇怪怪的星星:
(就是在for語句的不同位置加了個“;”(●°u°●)? 」)
?
?
實驗總結與體會
這次試驗最后兩個程序是完全需要自己編寫的,每次上課聽老師講流程都感覺很簡單,但到自己分析的時候就感覺怎么也順不下來,
自己的流程圖總是不可以很順利的用C語言語句實現,需要找很多程序實例參考有關程序寫法,不斷運行之后從運行結果里面分析自己是哪里寫出了問題?T^T...
然后漸漸糾正最終做出一個程序,過程中也暴露出自己對do while語句還不熟很熟悉,對循環的判斷條件分析還欠妥,日后多多練習,不斷糾正。
在這次實驗的輸入過程中我誤關“我的隨筆”這個頁面好多次...真的十分感謝網頁自動保存的功能,不用擔心一下的手滑讓辛辛苦苦的實驗內容全丟掉了。
(每手滑關掉一次就會恢復一次,所以最后的我文末就出現了這么多次記錄(⊙_⊙)真的恢復了好多好多次...)
最后感謝舍友耐心講解才寫出來素數的程序,感謝? ??????~
(之后的一周內我將進行互評環節,鏈接會以評論的形式附在這篇實驗后,如果我在后期可以順利的更新本篇實驗的話就會直接加鏈接在最后面的(。・ω・。)
轉載于:https://www.cnblogs.com/Anna0708/p/10720688.html
總結
以上是生活随笔為你收集整理的实验3 分支语句和循环语句(1)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 腾讯课堂如何看回放(腾讯视频VIP会员)
- 下一篇: 荒野大镖客2纳扎尔位置在哪 网易《荒野行