第三次计算机实验

Part1: 验证性内容

对比demo5_1和demo5_2理解控制语句continue和break的功能

demo5_1

#include <stdio.h>
int main() {
    int i;
    
    for(i=1; i<=5; i++) {
        if (i%3 == 0)  // 如果i是3的倍数,则结束本次循环,开始下一次循环 
            continue;
        
        printf("i=%d\n",i);
    }
    return 0;
}

demo5_2

#include <stdio.h>
int main() {
    int i;
    
    for(i=1; i<=5; i++) {
        if (i%3 == 0)  // 如果i是3的倍数,则结束整个循环 
            break;
        
        printf("i=%d\n",i);
    }
    return 0;
} 

contine语句只用于循环结构,遇到continue程序跳过循环体中后边的所有语句,提前结束本次循环开始新一次的本层循环。

break可以用在循环结构和case子句,通过break跳出switch或是直接结束本层循环,执行循环之后的语句。

对比demo6_1和demo6_2,理解在嵌套的循环中,控制语句continue和break的功能

 demo6_1

#include <stdio.h>
const int LINE=3;        // 定义符号常量LINE ,以及行数 
const int COLUME=5;        // 定义符号常量COLUME,以及列数 

int main() {
    int line;    // 定控制行数 
    int col;     // 控制列数
    
    for(line=1; line<=LINE; line++) {
    
        for(col=1; col<=COLUME; col++) {
            if(col%3 == 0)  // 如果col是3的倍数,则结束本次循环,开始下一次循环 
                continue;
            
            printf("%5d", col);    
        }
        
        printf("\n"); 
    }
     
    return 0;
} 

 demo6_2

#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)  // 如果col是3的倍数,则结束内层循环体 
                break;
            
            printf("%5d", col);
        }
        
        printf("\n");
    }
     
    return 0;
} 

如demo6 1,经过continue,程序直接跳过本次循环未输出3,而外层循环仍然进行,显示为执行了三行。

如demo6 2,经过break,程序断开本层循环开启外层循环,仍显示为执行三行。

 Part2: 补足程序


编程找出5个整数的最大数和最小数

(while形式)

/* 
编程找出5个整数的最大数和最小数 
*/
 
#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;
}

 (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);      //要牢记循环语句括号内各部分所实现的功能及其意义 
                              //while()后的分号容易忘记
    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<6;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的运行图

Part3: 编程练习

求素数

/*
求出100到200间的素数 
*/ 

#include<stdio.h>
int main(){
    
    int i,j,k;
    for(i=100;i<200;i++){          
        for(j=2;j<i;j++){
            if(i%j==0)
            break;
        }
        if(i==j)
        printf("%d    ",i);
    }
    return 0;
} 

for语句里边判断条件可以根据需要修改,所以。。。让我们去掉他。。

#include<stdio.h>
int main(){
    
    int i,j,k;
    for(i=1;;i++){          
        for(j=2;j<i;j++){
            if(i%j==0)
            break;
        }
        if(i==j)
        printf("%d    ",i);
    }
    return 0;
} 

    

        嗯       有场面多了。

打印****号

#include<stdio.h>
const int LINE=20;

int main(){
    int line,col;
    
    for(line=1;line<=LINE;line++){
        
        for(col=LINE-line;col>=1;col--)
            printf(" ");
        for(col=1;col<=2*line-1;col++)
            printf("*");
        
        printf("\n"); 
    }
    
    return 0;
}

(把LINE修改为20)

这里直接想去定义LINE时不是太熟练,所以先去做了简单的5行图形,之后对那条代码进行了修改。

Part4: 拓展

/*十进制转换二进制*/
#include<stdio.h> 
#include<math.h>
#include<stdlib.h>
int main(){
    printf("输入 0 结束"); 
    while(1){
    int x,a,b=0,c=0;
    printf("\nPlease input a number:");
    scanf("%d",&x);
    if(x<0) {
        printf("数据输入错误!\n");
        exit(0);   
    }
    if(x>0){
        while(x!=0)
        {
            a=x%2;
            c=a*pow(10,b)+c;
            b++;
            x=x/2; 
        }
        printf("The result is:%d\n",c);
    }
    else if(x==0)break;
    }
    return 0;
}

 半个月前写除了十进制转换二进制的代码,再加一些其他的东西贴上来吧。

实验总结与体会

这次实验课主要是对循环语句的练习,而循环语句的主要问题是对于循环条件和循环的架构的问题。我先是在主要的问题是对循环的边界条件的设置,一般是通过执行程序输入边界数据查看结果之后再进行更改。在一些练习中也可以逐步感觉到每种循环各有不同,判断条件,语句顺序,实现过程都会有一些细微的区别。比如我之前写的十进制转换的,我一开始去看了for语句,但是感觉并不适合,用while语句去构想就简单了很多,顺着就可以想下来。虽然的确也可以用for语句表现转换,但for相比较下来更适用于已知循环次数的情况。如果有了新的想法,我会及时在这篇博客上去补充的。

猜你喜欢

转载自www.cnblogs.com/astraeus/p/10700708.html