实验三

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

posted @ 2019-04-11 22:08  rosalie's_cat  阅读(244)  评论(10编辑  收藏  举报