實驗三


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM