实验三

本文深入探讨C语言编程中的多个实例,包括判断三角形类型、成绩等级转换、控制语句对比、查找最大最小值、素数寻找及图案打印。通过实际代码演示,帮助读者理解并掌握C语言的关键概念与技巧。

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

 

通过实验验证可得: 把上面代码中嵌套使用的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;
}

拓展:把原代码中输入三边长并且判断三角形类型的代码放到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比if更简便,不需要重复编译过程,可以一直输入三角形三边,直到不想输入三边长为止,下面这一小段就是控制上述过程的代码

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

int x;

while(scanf("%d",&x) != 0)  {  // 等价于while( scanf("%d",&x) != EOF )                            

                                               // 也等价于while( scanf("%d", &x) )    

        //...

}

我想问一下:在比较while和if的便捷性的时候可以通过编译时间来比较吗?

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

我不太懂为什么上面1的程序中while后有具体的内容而这个代码中不能表示成下面

while(scanf("%d",&score))

的样子,如果这样的话运行后会显示

C:\Users\卓尔不群\Documents\collect2.exe [Error] ld returned 1 exit status

不过按F10后可以弹出小黑窗,也能正确的进行等级评判

用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.分别运行下面两个程序,比较解控制语句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; 
} 

break是结束本层循环,而continue只是结束本次的循环,开始下一次循环(相当于跳过只这次)

4.分别运行下面两个程序,比较在嵌套的循环中控制语句 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: 补足程序,使得程序运行

1.编程找出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(max<=number)            
            max = number;        
        else if(min>=number)
            min = number;    
    }     
    printf("大数为: %d\n", max);    
    printf("小数为: %d\n", min);    
    return 0; 
} 

Part3:编程练习 

1.找100-200间素数

#include<stdio.h>
int main()
{
    int i=0;
    int j=0;
    int count=100;
    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 x,y,z;
    for(x=1;x<=5;x++)
    {
        for(y=1;y<=5-x;y++)
        {
            printf(" ");
        }
        for(z=1;z<=(2*x-1);z++)
            {
                printf("*");
            }
            printf("\n");
    } 
    return 0;
}

实验总结与体会

个别知识点还是不能够很好的使用,如找出100-200间素数的那个实验,我特别想控制数字输出的格式,但是却不能很好的加入格式控制的代码。所以说还是要多加练习。不过有进步的是在编写代码时思路更加清晰了。

互评网址:

https://www.cnblogs.com/yesung/

https://www.cnblogs.com/Baeky/

https://www.cnblogs.com/1623449-w/

 

转载于:https://www.cnblogs.com/aa79/p/10700284.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值