第三次实验的总结与体会

这周进行了第三次实验,这次实验感觉比上次要难,有些句式还是用错了,有点不能正确的表达编程,可能是上周没做实验,人有点懒了,下次不会这样了,我会严格要求自己继续努力的。本次实验如下:

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语句

替换if还是一样的结果。

拓展:把demo1.cpp中输入三边长并且判断三角形类型的代码放到while循环里,运行程序,观察结果,体 验并学习组合使用while和if带来的运行测试便捷性。

#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; 
   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.分别运行程序demo5_1.cpp和demo5_2.cpp,结合运行结果,对比和理解控制语句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:不在执行continue后面的语句而是跳到下一个循环入口处执行下一个循环。break: 终止循环,不是跳到下一个循环周期而是退出循环。

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

思考:结合程序demo6_1.cpp和demo6_2.cpp运行结果对比,回答以下两个问题:
在两层嵌套循环中,内层循环中如果出现continue,是否影响外层循环?
在两层嵌套循环中,内层循环中如果出现break,是否影响外层循环?
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.编程输出101~200之间所有素数,并输出这一区间内素数个数。
#include<stdio.h>
#include<math.h> 
int main()
{
    int isprime(int n);
    int i,number=0,x=0,n;
    for(i=101;i<=200;i++)
    {
     if(isprime(i))
      {
        number++,n++,x++;
        printf("%4d",i);
      }
     if(number==5)
      {
        number=0;
        printf("\n");
      }      
    }
    printf("\n101`200之间共有%d个素数",x);
    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,d;
    for(a=1;a<=6;a++)
    {
      for(b=1;b<=6-a;b++)
      {
       printf(" ");
      }
      for(c=1;c<=2*a-1;c++)
      {
       printf("$");
      }
      for(d=1;d<=a;d++)
      {
       printf(" "); 
      }
       printf("\n");
        
    }
    return 0;
}

这两道题有点难,刚开始一点头绪也没有,于是借鉴了书本,我得多做编程,不然都不知道怎么做了。

Part4:拓展实践。

#include <stdio.h>
int main()
{   int a,b,c,d;
    for(a=0;a<=1;a++)
    for(b=0;b<=1;b++)
    for(c=0;c<=1;c++)
    for(d=0;d<=1;d++)
    if(a+b+c+d==1&&((!b&&d)||(b&&!d))==1&&((!b&&c)||(b&&!c))==1&&(!a&&b)||(a&&!b)==1&&(d||!d)==1)
    {
      if(a==1)
         printf("甲是小偷!\n");
      else if(b==1)
         printf("乙是小偷!\n");
      else if(c==1)
         printf("丙是小偷!\n");
      else if(d==1)
         printf("丁是小偷!\n");
    }
    return 0;
}
     
      
     
    

虽然是看着书做的,但这道编程做的有点头大了。一直在报错,刚开始没发现哪里错了,可一遍又一遍还是错,才发现有些符号我用的搜狗输入法写的,唉,我这脑子。

总结与体会:

总的来说实验还是很成功,但其中也出现了不少小问题,可能是太粗心了,下次绝对不能粗心了,好好巩固知识,继续加油。   

猜你喜欢

转载自www.cnblogs.com/super123-/p/10702258.html