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