实验3 分支语句和循环语句(1)

part.1

1.

 #include <stdio.h>
 int main() {
 	double a,b,c;
 	scanf("%lf %lf %lf", &a, &b, &c);
 	
 	if(a+b>c && a+c>b && b+c>a) {
 		if(a==b && a==c)   
 			printf("构成等边三角形\n");
 		else if(a==b || a==c || b==c)   
 			printf("构成等腰三角形\n");    
 		else
 			printf("构成一般三角形\n");
	 }
	 else
	 	printf("不能构成三角形\n");
	 	
 	return 0;
 } 

  

 

替换为以下代码

#include <stdio.h>
 int main() {
 	double a,b,c;
 	scanf("%lf %lf %lf", &a, &b, &c);
 	
 	if(a+b>c && a+c>b && b+c>a) {
		 if(a==b || a==c || b==c) {
		 	if (a==b && a==c)
		 		printf("构成等边三角形\n");
		 	else
		 		printf("构成等腰三角形\n");
		 }
		 else
		 	printf("构成一般三角形\n");
	 }
	 else
	 	printf("不能构成三角形\n");
	 	
 	return 0;
 } 

  经检测,当输入含有两个相同数字但无法构成三角形的三个数字后,运行结果依然显示构成等腰三角形,因此不成立,含有逻辑错误。截图如下:

加入循环之后的程序如下

#include <stdio.h>
 int main() {
 	double a,b,c;
 	while(scanf("%lf%lf%lf",&a,&b,&c)){   或while(scanf("%ld%ld%ld",&a,&b,&c) != 0){
 	if(a+b>c && a+c>b && b+c>a) 
	 {
		 if(a==b || a==c || b==c) {
		 	if (a==b && a==c)
		 		printf("构成等边三角形\n");
		 	else
		 		printf("构成等腰三角形\n");
		 }
		 else
		 	printf("构成一般三角形\n");
	 }
	 else
	 	printf("不能构成三角形\n");
	 }
 	return 0;
 } 

  运行结果如下

 

改为以下写法

while(scanf("%ld", &a) && scanf("%ld", &b) && scanf("%ld", &c) ){
    // ...
 }

  

2.用switch语句改写

#include <stdio.h>
int main()
{
	int score;

 while(1){
 		 printf("输入学生成绩: ");
 	if(scanf("%d",&score) == 0)  // 如果检测到没有成绩输入,则结束整个循环 
			break; 
     if(score<0 || score > 100)
	  {            
        printf("输入成绩有误!\n");
        continue;
	
}
    switch(score/10)
    {
     case 9:printf("等级为:A\n");break;
     case 8:printf("等级为:B\n");break;
     case 7:printf("等级为:C\n");break;
     case 6:printf("等级为:D\n");break;
     default:printf("等级为:E\n");break;
} 
}
     return 0;
}

 

在改写过程中出现的错误与失误:

1. printf("输入学生成绩: ");     写到了循环外面。

2.

 	if(scanf("%d",&score) == 0)  // 如果检测到没有成绩输入,则结束整个循环 
			break; 
没有想到这一条件,以致出现死循环。

 

与 demo4.cpp存在一些区别,我没有定义grade来存放等级分数。

#include <stdio.h>
 int main() {
 	int score; 	// 用于存放百分制分数 
 	char grade;  // 用于存放等级制分数(取值'A', 'B','C','D', 'E') 
	
	while(1) {
		printf("输入学生成绩: ");
		if(scanf("%d",&score) == 0)  // 如果检测到没有成绩输入,则结束整个循环 
			break; 
			
		if(score<0 || score > 100) {
			printf("输入成绩有误!\n\n");
			continue;    // 结束本次循环,开始下一次循环 
		}
	
		switch(score/10) {   // 使用switch进行分数等级判断 
			case 10:
			case 9:		grade='A'; break;
			case 8:		grade='B'; break;
			case 7:		grade='C'; break;
			case 6:		grade='D'; break;
			default:	grade='E';
		}
		
		printf("等级为: %c\n\n", grade);
	}
	return 0;			

  

demo5_1.cpp

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

  

demo5_2.cpp

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

  

在循环中使用控制语句continue和break,其功能区别的是:

break:结束整个循环。

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

 

 

分别运行程序demo6_1.cpp和demo6_2.cpp,结合运行结果,对比和理解在嵌套的循环中控制语句 continue和break的功能。 

demo6_1.cpp

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

  

在两层嵌套循环中,内层循环中如果出现continue,是否影响外层循环? 不影响。

在两层嵌套循环中,内层循环中如果出现break,是否影响外层循环?  不影响。

 

part2.

编程找出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;
} 
 

  

 

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

  

#include <stdio.h>
int main() {
int number, max, min, n;
for(n=1;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;
}

  

 

part3.

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

#include<stdio.h>
#include<math.h>
int main(){
    int n,m,a,col,COLUME;
    COLUME=5;
    a=0;
    for(n=101;n<=200;n++){
    for(m=2;m<=sqrt(n);m++){
       if(n%m==0)
           break;
}
       if(m>sqrt(n)){
       printf("%5d",n) ;
       a=a+1;
       if(a%5==0)
       printf("\n");
}       
}       
       printf("共有%d个素数",a);
       return 0;                  
} 

  

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

 

 

转载于:https://www.cnblogs.com/linmuqiao/p/10690490.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值