Part 1.驗證性內容
//demo5_1.cpp
#include <stdio.h> int main() { int i; for (i=1;i<=5;i++){ if (i%3==0){ continue; printf("i=%d\n",i); } } return 0; }
//demo5_2.cpp
#include<stdio.h> int main() { int i; for (i=1;i<=5;i++){ if (i%3==0){ break; printf("i=%d\n",i); } } return 0; }
continue:i=3時,執行continue語句,結束本次循環,執行下一次循環。
break:i=3時,執行break語句,結束本層循環。
#include<stdio.h> const int LINE=3; const int COLUME=5; int main() { int line; int col; for(line=1;line<=LINE;line++){ for(col=1;col<=COLUME;col++){ if(col%3==0) continue; printf("%5d",col); } printf("\n"); } return 0; }
continue語句不影響外層循環,line=1,col=3時執行continue語句,結束本次內層循環,進入下一次內層循環,此時line=1,col=4。
// 對比demo6_1.cpp和demo6_2.cpp,理解在嵌套的循環中,控制語句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的倍數,則結束內層循環體 break; printf("%5d", col); } printf("\n"); // 每輸出完一行,換行 } return 0; }
break語句不影響外層循環,line=1,col=3時執行break語句,結束本層循環,執行換行語句,進入下一次外層循環,此時line=2,col=1.
Part 2.補足程序
#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; }
運行結果:
體會:相比p124的代碼,運用循環使代碼變得更簡潔。
用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=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; }
用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; }
Part 3編程練習
1.輸出素數
#include<stdio.h> #include<math.h> int main() { int n; int i; int j=0; for(n=101;n<=200;n++){ int isPrime=1; for(i=2;i<=sqrt(n);i++){ if (n%i==0){ isPrime=0; break;} } if(isPrime){ printf("%d\n",n); j++; } } printf("101~200之間共有%d個素數",j); return 0; }
運行結果如下
運行結果的排版感覺可以在輸出時改進一下,便於查看。
2.打印圖案
#include<stdio.h> int main() { int i; int j; int n=4,m=1; while(n>=0&&m<=9){ for(i = 1;i <= n;i++){ printf(" "); } for(j = 1;j <= m;j++){ printf("*"); } for(i = 1;i <= n;i++){ printf(" "); } n--; m+=2; printf("\n"); } return 0; }
運行結果
感覺代碼並不是非常簡潔...比較懶的一種算法。
Part 4.拓展實驗:猜數游戲。
#include<stdio.h> int main() { int number=rand()+1; int count=0; int a=0; printf("我已經想好了一個1到100之間的數\n"); do{ printf("請猜猜這個1到100之間的數\n"); scanf("%d",&a); count++; if(a>number){ printf("你猜的數大了\n"); } if(a<number){ printf("你猜的數小了\n"); } } while(a!=number); printf("太好了,你用了%d次就猜中了答案\n",count); return 0; }
運行結果如下:
很喜歡這種互動感!!!
實驗總結與體會:
1.for循環的終止條件,循環次數問題,容易弄錯。
2.還有循環的嵌套問題,譬如輸出素數的那篇代碼,一開始把isPrime的定義放在總循環外,運行后結果就一個數,肯定有問題。自己定義時習慣把變量都放到最開始定義,但看到運行結果就立馬意識到這樣在有非素數出現時,isPrime的值變為0后,下次循環仍然是0,后面的數就沒法判斷了。所以,isPrime的定義應放在循環里面。還有一些問題,諸如用了sqrt函數忘include<math.h>...
3.編程有一個理念叫模塊化,感覺循環的嵌套這種思想非常使用,把一個復雜的問題一塊一塊的解決,每一塊其實都是一些很基礎的問題。
4.善用調試,可以理清很多問題,特別是對於循環嵌套問題。
互評地址:
1. https://www.cnblogs.com/lvzixuan/p/10703453.html#4237575
2.https://www.cnblogs.com/1346si/p/10690776.html#4231500
3.https://www.cnblogs.com/zxy-345/p/10708159.html#4231495