实验三

Part 1:验证性实验

 

  • 结合程序demo5_1.cpp和demo5_2.cpp运行结果对比,总结控制语句continue和break的功能区别:

demo5_1.cpp的运行结果:

demo5_2.cpp的运行结果:

观察运行结果,显然可以发现:

  1. continue语句只结束本次循环,而不是终止整个循环的执行;
  2. break语句直接结束整个循环过程,不再判断执行循环的条件是否成立。
  • 结合程序demo6_1.cpp和demo6_2.cpp运行结果对比,总结控制语句continue和break在嵌套循环中的功能区别:

demo6_1.cpp:

demo6_2.cpp:

观察运行结果,显然可以发现:

         两个循环里break 和continue 只会影响内层循环,不会影响外层循环。

Part 2:补足程序,使得程序运行

  • 补足后的程序源码blank.cpp

原代码:

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

运行结果:

  • 使用for语句实现

源代码:

#include<stdio.h>
int main(){
    int number,max,min,n=1;
        printf("输入第%d个数: ",n);
        scanf("%d",&number);
        max=number;
        min=number;
        n++;
    for(;n<=5;n++){
        printf("输入第%d个数: ",n);
        scanf("%d",&number);
        if(max<number)
            max=number;
        if(min>number)
            min=number;
    }
    printf("最大数为: %d\n",max);
    printf("最小数为: %d\n",min);
    return 0;
}

运行结果:

  • 使用do...while语句实现

原代码:

#include<stdio.h>
int main(){
    int number,max,min,n=1;
    printf("输入第%d个数:",n);
    scanf("%d",&number);
    max=number;
    min=number;
    n++;
    do{
        printf("输入第%d个数:",n);
        scanf("%d",&number);
        switch(number>max){
            case 1:max=number;break;
            default:switch(number<min){
                        case 1:min=number;break;
                        default:break;
                    }break;
        }
        n++;        
    }while(n<=5);
    printf("最大数为:%d\n最小数为:%d\n",max,min);
    return 0;
}

运行结果:

Part 3: 编程练习

  • 编程输出101~200之间所有素数,并输出这一区间内素数个数。

源代码:

#include<stdio.h>
#include<math.h>
int main(){
    int a=101,b,n=0;
    do{
        for(b=2;b<=sqrt(a);b++)
            if(a%b==0)
                break;
            if(b>sqrt(a)){
                printf("%d ",a);
                n++;
                if(n%5==0){
                    printf("\n");
                }
            }
        a++;
    }while(a>=101&&a<=200);
    printf("\n100~200之间共有%d个素数",n);
    return 0;
}

运行结果:

  • 编程打印指定图形:

源代码:

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

运行结果:

实验总结与体会

  • part 1判断三角形的部分,很明显三个程序都是可以正常运行的。只是在编写程序的时候需要注意:
  1. 原代码和while循环代码在处理的时候,判断三角形形状的三条语句是并列的,无先后顺序(每一个条件独立判断);而替换语句是由三个if语句嵌套而成,运行时是由先后顺序的(在上一级条件成立的情况下再去判断下一级条件是否成立),因此在自己编程时一定要现将其中的逻辑关系梳理清楚。
  2. while的好处在于,可以在不退出程序的情况下进行连续的判断。
  • 判断成绩的部分,两个程序的运行也是完全相同的。在选择使用switch和if...else语句时,我认为应当视情况而定。
  1. switch语句的优势是简明,一目了然(特别是如本题嵌套层数少,分支情况较多时),可以快速地看出各个分支条件的区别,结果的不同。
  2. if语句的优势是既可以嵌套,又可以选择,更加多元。比如后面的大小值判断的题目,我分别使用了if和switch两种方法。显然,if语句就显得更加直接简明,而switch语句则需要人为构造嵌套,反而看着不太协调。

p.s.可以发现,我们编写的程序越来越复杂了。为保证正确率,减少错误,有几个细节还是值得注意:

  1. 注意嵌套的使用。嵌套就必然面临几个问题:什么时候嵌套结束,使用嵌套想要达成么样的效果。因此括号的使用(特别是不要小看编译器的对齐线),逻辑的判断就非常重要;
  2. 边界值的确定。变量从多少开始(比如"0"还是"1"),到什么条件成立时结束(比如">"还是">=")都会对程序的运行结果产生影响。有时候影响虽小,但其实考试时就有可能影响得分。比如这次作业的最后一题,大家输出的图形的确是一个倒三角。但如果仔细观察,很多同学的图形前面是有一个空格的,而老师在实验要求的提示中明确说了最后一行的前面空格数为零。导致这个问题的原因就是控制空格输出的条件使结果多输出了一遍。平时练习时并不是什么大问题,但如果在考试里就有可能成为扣分点。

作为初学者,希望可以和大家互相学习,共同进步吧!

评论地址

https://www.cnblogs.com/jiuyuan/p/10713265.html

https://www.cnblogs.com/radius1/p/10693079.html

https://www.cnblogs.com/wyx-wyx/p/10705872.html

posted on 2019-04-16 20:40  纪源  阅读(98)  评论(2编辑  收藏  举报

导航