首页 > 其他 > 详细

实验三

时间:2019-04-15 22:39:23      阅读:193      评论:0      收藏:0      [点我收藏+]

实验结论:

Part1:

验证性内容:

(1)从键盘上输入三个数,让它们代表3条线段的长度,判断能否组成三角形且三角形的类型
#include<stdio.h>
int main(){
    double a,b,c;
    scanf("%1f %1f %1f",&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;
} 

运行结果:

技术分享图片

把 demo1.cpp中嵌套使用的if语句部分替换成以下代码:

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");

运行结果:

技术分享图片

换成上述语句后,也是可以运行的

拓展:把demo1.cpp中输入三边长并且判断三角形类型的代码放到while循环里,运行程序

#include <stdio.h>
int main() {
double a,b,c;
printf("输入三角形三边:\n");
while(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");
printf("\n输入三角形三边:\n");
}
return 0;
}

运行结果为

技术分享图片

这次程序一直会运行下去,直到操作者选择关闭

(2)用scanf()函数输入一个百分制成绩(整型量),要求输出成绩等级A,B,C,D,E。其中,90~100分为A,80~89
分为B, 70~79分为C, 60~69分为D,60分以下为E。

#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; // 结束本次循环,开始下一次循环
}
else if(score>=90 && score<=100)
grade = A;
else if(score>=80 && score<=89)
grade = B;
else if(score>=70 && score<=79)
grade = C;
else if(score>=60 && score <=69)
grade = D;
else
grade = E;
printf("等级为: %c\n\n", grade);
}
return 0;
}

运行结果为

技术分享图片

用switch语句改写后:

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

运行结果为

技术分享图片

(3)理解控制语句continue和break的功能

第一个程序:

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

运行结果为

技术分享图片

第二个程序:

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

运行结果为:

技术分享图片

思考:在循环中使用控制语句continue和break,其功能区别是什么?

答:当遇到continue语句时,程序就跳过循环体中位于该语句后的所有语句,结束这一次循环;但是break语句的作用不同,它会结束本层循环,转而执行本层循环后的语句。所以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:在两层嵌套循环中,内层循环中如果出现continue,是否影响外层循环?

答:不影响。由第一个程序可知,内层循环出现continue出现只是影响了内层循环,而对外层循环并无影响。

思考2:在两层嵌套循环中,内层循环中如果出现break,是否影响外层循环?

答:不影响。内层循环出现break时,会中断内层循环的运行,直接进入外层循环的运行,因此对外层循环是不影响的。

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

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

运行结果为:

技术分享图片

Part 3:

1.

#include<stdio.h>
int main()
{
    int x=100,y=0;
    int count=0;   //记录素数的个数 
    do
    {
        x++;
        for(y=2;y<=x;y++)
        {
        if(x%y==0)
            break;
        }
        if(x==y)
        {
            count++;
            printf("%d ",x);
        }
    }
    while(x<=200);
        printf("\n100~200之间有%d个素数\n",count);
        return 0;
}

运行结果为:

技术分享图片

2.

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

运行结果为:

技术分享图片

实验总结与体会:

1.当在进行for语句和do...while语句的转化时,常常会把for和while后括号内的条件搞错,忘记改条件,且容易在其它地方忘记换条件,比如int定义的数据的初始值。

大家也可以关注一下这个小细节,可以帮助我们节约时间。

2.还是发现语言类的学习必须多练习,练习就像和外国人练口语一样,只有说出来才能熟练。

 

实验三

原文:https://www.cnblogs.com/blogdzm/p/10713406.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!