实验三作业

Part1:验证性内容

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

运行:

(1)将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;
 } 

(2)加入while循环后,更加方便易操作了,不用重复点开再重新运行,直接可以在一个界面完成所有的(表达不是很准确,但意思就是很赞很6):

 #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.输入成绩查询等级:

#include <stdio.h>
 int main() {
     int score; 
     char grade; 
    
    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; 
    
    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;
    
    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和break,其功能区别是:

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

break:跳出switch结构或结束本层循环。

4.比较在嵌套的循环中控制语句continue和break的功能:

#include <stdio.h>
const int LINE=3;        
const int COLUME=5;        

int main() {
    int line;    
    int col;     
    
    
    for(line=1; line<=LINE; line++) {
        
        for(col=1; col<=COLUME; col++) {
            if(col%3 == 0) 
                continue;
            
            printf("%5d", col);    
        }
        
        printf("\n");
    }
     
    return 0;
} 

#include <stdio.h>
const int LINE=3;    
const int COLUME=5;        

int main() {
    int line;     
    int col; 
    

    for(line=1; line<=LINE; line++) {
    
        for(col=1; col<=COLUME; col++) {
            if(col%3 == 0)  
                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(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>
#include<math.h> 
int isprime(int n);
int main()
{
  int i;
  for(i=101;i<=200;i++)
  {   
    if(isprime(i))
        printf("%4d",i);
  }
    return 0 ;

}
int isprime(int n)
{ 
   int k;
   for(k=2;k<=sqrt(n);k++)
   if(n%k==0)
   return 0;
}

2.编程打印输出图案

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

编程真的有点难,我做了好久,卑微......

猜你喜欢

转载自www.cnblogs.com/Zhangxw999/p/10695051.html