实验3(2019.4.9)

【实验结论】

一、Part1:验证性内容。

1、在循环中使用控制语句continue和break的功能区别。

(1)探索过程。

    有下列两段代码,为方便对比,分别标号①②。

序号
代码
#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;
} 
#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整除时,终止当次循环并从头开始进入下一次循环;②中break的作用是当i能被3整除时,终止当前循环。

 那么,continue和break的作用区别便显而易见了。

 (2)总结。

  continue语句:结束本次循环,开始下一次循环。

  break语句:结束本层循环。

2、结合程序demo6_1.cpp和demo6_2.cpp运行结果对比,回答:

(1)在两层嵌套循环中,内层循环中如果出现continue,是否影响外层循环?
(2)在两层嵌套循环中,内层循环中如果出现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的倍数,则结束本次循环,开始下一次循环 
                continue;
            
            printf("%5d", col);    
        }
        
        printf("\n"); // 每输出完一行,换行 
    }
     
    return 0;
} 
#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;
} 
运行结果  

 经对比结果,答:(1)不影响外层循环。

                              (2)不影响外层循环。break语句仅用于结束内层循环。

 二、Part2:补足程序,使得程序运行。

·找出5个数中最大和最小的数。

(1)补足程序,代码如下:

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

运行结果为:

(2)若使用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;
}

运行结果为:

(1)(2)运行结果如出一辙。

三、Part3:编程练习。

1、找出100到200之间的素数。

思路:先把101—200这些数循环出来。

          再一个个分别除以2—某个数-1,若不能整除则为素数。

 代码如下:

#include<stdio.h>
int main(){
	int i,m,n;
	i=0; 
	for (n=101;n<=200;n++){
		for(m=2;m<n;m++){
		if(n%m==0)
		break;
	}
	if(m>=n) {
	i++;
	printf("%d\t",n); 
	  if(i%5==0){
		printf("\n");
	} 
    }
}
	printf("\n共输出%d个素数\n",i);
	return 0;
}

  ps:搞清这个内外层循环以及表达式成立的条件着实花了很长时间,但写完也就慢慢摸清楚了。

运行结果如下:

2、输出三角形*阵。

 先分析输出的图形,设行数为n

第一行有4个空格,1个*;

第二行有3个空格,3个*;

第三行有2个空格,5个*;

第四行有1个空格,7个*;

第五行有0个空格,9个*;

做道小学找规律题(手动滑稽)得:

第n行有(5-n)个空格,(2n-1)个*。

于是,可以想到,让输出空格循环(5-n)次,然后再让*输出循环(2n-1)次,然后每行换行,就可以输出此图形。

让空格循环(5-n)次,有:

for(a=1;a<=5-n;a++) {
    printf(" ");
}

再让*循环(2n-1)次,有:

for(b=1;b<=2*n-1;b++){
    printf("*");
}

组合加工一下,得源代码:

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

运行结果:

为了方便观察,习惯性把for后面的{}标出来,便于弄清循环怎么循环的。要不然就是一团糟。

【实验反思】

遇到编程题,首先要从数学层面上找清楚规律,再依据这些来编程,即可。

猜你喜欢

转载自www.cnblogs.com/zys-0119/p/10686828.html