实验三

Part1

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与break

在demo5_1的循环结构中,遇到了continue,程序就跳过了continue后面的语句——printf("i=%d\n",i),开始执行下一次循环,即遇到3的倍数时不输出,继续执行下面的循环,输出i=4,i=5

在demo5_2的循环结构中,遇到了break,程序就结束了整个循环,后面的i=4,i=5也没有输出,即遇到3的倍数时,结束整个循环

在循环结构中,碰到continue语句时,程序就跳过循环体中位于continue后的所有语句,提前结束本次循环并开始新一轮循环;碰到break语句时,这一层循环立即结束,转而执行这层循环体后面的语句。

 

demo6_1.cpp

#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;
} 

运行结果

demo6_2.cpp

#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)   
                break;
            
            printf("%5d", col);
        }
        
        printf("\n"); 
    }
     
    return 0;
} 

运行结果

在demo6_1中,由运行结果可知,在遇到continue时,程序不输出第三列的数字,但继续内层循环的下一步,输出第四列、第五列的数,外层循环也正常运行,一直输出到规定的3行。

在demo6_2中,由运行结果可知,在遇到break时,程序停止内层循环的所有步骤,不再输出第四列、第五列的数,但外层循环不受影响,依然输出了3行。

在两层循环结构中,内层循环中出现continue,break,不影响外层循环。

 

Part2 补足程序

补足后的程序

#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>=1) {
        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语句实现

#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;){
         printf("输入第%d个数: ", n);
        scanf("%d", &number);
        
        if(number>=max)
            max = number;
        else if(number<=min)
            min = number;
        n++; 
    }
    
    printf("最大数为: %d\n", max);
    printf("最小数为: %d\n", min);
    
    return 0;
} 

运行结果

     

小结:这一部分我真的做的很不顺利,一开始做程序填空时,光看程序我还没太理解这个程序的运行方法,,看了实验指导文档才理解,但依然不顺利。我逻辑思维不太好,写第一个空时,n>5总是写成n>=5,导致显示到让我输入到第六个数字;if和else if后面的空,我最初写的是n>=number,n<=number,结果出来当然是不对的,但我怎么都发现不了,最终还是参考了别人的程序,又想了一会,才弄明白,程序出来才是对的,唉。换用for语句来写时,也是出现了好多问题,有时候我只输入一个数就出来结果,有时它显示两行字都是请输入第一个数字,反正也是一点点改,一点点试才做对。

 

Part3 编程练习

1.找出101-200之间的所有素数

#include<stdio.h>
int main()
{
    int i,j,count =0;   /*i为101到200间的数,j为从2开始的除数,count为素数个数*/
    for(i=101;i<=200;i++)
    {                          /*将101赋值给i,若i小于200,则执行下一步*/ 
        for(j=2;j<=i;j++)
        {                      /*将2赋值给j,若j比i小,就判断i%j是否为零,若为零就结束循环,;再判断下一个数*/ 
        if(i%j==0)
            break;
        }    
        if(j==i)
        {                   /*若除到j等于i时,说明i是素数,这时count++,输出i*/
            count++;
            printf("%d ",i);
            if(count%5==0)
            printf("\n");
        }
    }    
    printf("\n101到200间有%d个素数\n",count);
    return 0;
 } 

运行结果

2.输出星号

#include<stdio.h>
int main()
{
    int i,j,k;
    for(i=1;i<=5;i++)
    {
        for(j=1;j<=5-i;j++)
        {
            printf(" ");
        }
        for(k=1;k<=2*i-1;k++)
        {
            printf("*");
        }
        printf("\n");
    }
    return 0;
} 

运行结果

小结:真......写那个找素数的程序,费了我九牛二虎之力。开始的开始,可能是因为我听课左耳进右耳出......(老师对不起我错了!)所以开始做这题时不知从何下手,如何把判断素数,循环结构,if结构串联在一起,在我脑子里简直就是一锅浆糊。我在网上搜索类似题目,看看别的同学是怎么写的,然而发现我看不懂,好吧,只能一点点来了。老师说,编一道程序,首先要抛开语言格式的束缚,不用C语言,应该用什么方法来解决,思路是什么,我觉得真的很对。我自己先用流程图大概把思路画了一下,再把那些语句的用法好好的看了一遍,好像就有点思路了,网上搜索出来的那些写法好像也能看懂了。然而,当我自以为写的程序已经很对了的时候,却运行不出来,我只能一行行找我可能出错的地方,比如:这里只能用break不能用continue,这里要加个\n 等等。最后当我把最后一个错误i=j改成i==j后,我的程序终于正常了......

好好学习 多多实践......

 

posted @ 2019-04-16 21:30  镜灵  阅读(195)  评论(5编辑  收藏  举报