实验三

Part1: 验证性内容:

1:

从键盘上输入3个数,让它们代表3条线段的长度,编写一个c程序判断这3条线段组成的三角形属于什么类 型(一般三角形、等腰三角形、等边三角形或不构成三角形)。

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

结果:

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

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

结果如下:

同样可以运用;

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

结果如图:

可以注意到这个代码能重复输入多次,很实用;

有些情形下,用户希望程序一直运行,直到用户希望它停止。比如,手机里的运算器,启动后, 可以连续执行很多次运算,直到我们自己主动关闭。这里,这段代码就起到了这样的作用。

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

可以这样用的依据在于,当使用scanf()输入数据时,如果没有检测到输入,系统返回的是0,而检测到输 入,返回的则是1。

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) {   // 使用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;            
}

3:

分别运行程序demo5_1.cpp和demo5_2.cpp,结合运行结果,对比和理解控制语句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;
    
    // 在循环语句中使用break
    for(i=1; i<=5; i++) {
        if (i%3 == 0)  // 如果i是3的倍数,则结束整个循环 
            break;
        
        printf("i=%d\n",i);
    }
    
    return 0;
} 

结果分别为:

可以发现:

continue只能用于循环语句,跳过循环位于该语句后所有语句提前结束本次循环进入新一轮循环;

break只能用于循环或switch语句,跳出本层循环或本层switch结构;

4:分别运行程序demo6_1.cpp和demo6_2.cpp,结合运行结果,对比和理解在嵌套的循环中控制语句 continue和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;
}

结果分别为:

可以发现:内层循环出现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;
} 
 

Part3:编程练习:

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

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

2:编程打印输出图案。

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

总结与体会:

通过这次实验,我加深了对循环语句以及循环语句与if语句的嵌套使用的理解;

在实验中踩的坑就是不熟悉内循环与外循环,不小心就搞乱了,但是经过调试等方法成功的纠正了自己的错误;

最后还是觉得C语言得多练多动手实践多思考才能学好;

互评地址:

https://www.cnblogs.com/ls4computer/p/10691459.html

https://www.cnblogs.com/aa79/p/10700284.html#4230033

 https://www.cnblogs.com/zwl415/p/10713251.html

转载于:https://www.cnblogs.com/fxy0503/p/10699324.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值