实验三

实验三小结

(实验准备:1. if语句和switch语句的用法和注意事项

if语句:if(表达式){语句}[三目运算符的了解];if ……else……的用法,if……else if……else的用法

switch语句:多分支语句,当运算结果与某“case”后的结果一致时,开始输出,☆break在switch中的用法

2. while语句、do...while语句、for语句的用法和注意事项

一系列的语句序列千万不能忘记用大括号包起来,do……while中的分号,for“()”中的分号等(不能误操作为“,”)

3. 什么是循环的嵌套;在循环的嵌套中,内层循环和外层循环的执行过程

4. 控制语句continue、break的功能和用法

一个是略过本次循环中剩下的步骤,进入下一个循环,一个是中止本循环;都采取就近原则,且只与部分语句兼容)

 

Part1.

demo1-1.cpp

程序:

/*
demo1_1.cpp: 《C语言程序设计教程学习指导》p122 实验内容(1) 
 这是一个使用多分支if语句编程解决非数值类问题示例
 运行程序,输入不同边长数据进行测试,观察输出结果是否正确,理解和巩固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-1.cpp中的if语句替换到demo1.cpp中判断三角形的形状可行。

demo2.cpp

这是在demo1.cpp的基础上行,增加了一小部分代码,可以循环判断多组数据
要终止输入和判断:按组合键Ctrl+D(同时按下Ctrl和D键),然后按回车键结束 
*/ 
 #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;
 } 

了解了以上结构可以使得输入验证环节更加便捷连贯的作用

但是,下面这个问题并没有得到答案:

希望走过路过的大佬帮忙解答一下,蟹蟹

demo3.cpp

 #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(scor“e>=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;
 } 

 

while语句:while(1)其中1代表一个常量表达式,它永远不会等于0。循环会一直执行下去。除非你设置break等类似的跳出循环语句循环才会中止。

break语句:在没有成绩输入的时候使得整个程序终止运行

if和continue语句:(continue用于跳过本次循环余下的语句,转去判断是否需要执行下次循环,continue终止此次循环,不会终止if。)

首先判断输入的成绩数值是否在合理范围内,如果不在合理范围内,则输出相应提示之后不再进行本次循环内其他语句的执行

如果在合理范围内,直接在“else if ”程序部分进行判断

demo4.cpp

/*
相较于demo3.cpp,这个代码实现中,分数从百分制转换为等级制的部分,使用switch语句实现 
 按下组合键Ctrl+D(同时按下Ctrl和D),然后按回车键,结束判断 
*/ 
 
 #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;            
}
    

break语句,continue语句和demo3中的基本一致

demo5-1.cpp demo5-2.cpp

// 对比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;
} 
// 对比demo5_1.cpp和demo5_2.cpp,理解控制语句continue和break的功能 
#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;
} 

5-1和5-2相同的位置分别使用了break和continue,运行结果如下

5-1       continue表示循环到i=3时结束本次循环,但是继续开始下一次循环(即i=4时仍然正常)

5-2     break表示运行到i=3时符合if()的条件,从此终止程序运行

demo6-1.cpp和demo6-2.cpp

// 对比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;
} 
// 对比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的倍数,则结束内层循环体 
                break;
            
            printf("%5d", col);
        }
        
        printf("\n"); // 每输出完一行,换行 
    }
     
    return 0;
} 

6-1

6-2

由于本题特意设计的数字(行列与3密切相关),很容易得出,双层嵌套循环中,内层有break,continue语句并不影响外层循环。(在switch语句中同样如此)

Part2.

blank1.cpp

一个假理科生在台灯底下想了半天,快想混乱了才填出来(鱼的智商实锤)

/* 
编程找出5个整数的最大数和最小数 
《C语言程序设计教程学习指导》p122实验内容(3) 
*/ 

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

一共修改了三次

主要的问题出在一下几个方面:

①:较基础的:完整语句末尾的分号忘了,for语句序列整体的大括号不能忘记

②:printf语句的位置以及出现的个数如果书写不对会导致出现无限刷屏现象

③:赋值的方向性,如果赋值的方向性错了会导致部分输入数据不被比较,产生错误

运行后:

用do……while语句改写:

#include <stdio.h>
int main() {
    int number, max, min, n;
    
    n=1;
    printf("输入第%d个数: ", n);
    scanf("%d", &number);
    
    max = number;
    min = number;
    n=n+1;
    do{
    printf("输入第%d个数:",n);
    scanf("%d",&number);
    if(number<=min)
     min=number;
    else if(number>=max)
     max=number; 
    n++;
    }while(n<=5); 
    
    printf("最大数为: %d\n", max);
    printf("最小数为: %d\n", min);
    
    return 0;
} 
 

验证:

把for写完以后感觉这个简单多了(捂脸)

注意点:

n=n+1或者n=2不要写在do后面的大括号里,否则会覆盖掉之前的n++操作

Part3.

101~200的素数

#include<stdio.h>
#include<math.h>
int main()
{int i,m,n,number;
      n=101;
      number=0;
      do{
      
      m=sqrt(n);
      for(i=2;i<=m;i++)
      if(n%i==0)break;
      if(i>m)
      {printf("%d    ",n);
      number=number+1;}
      n++;}while(n<=200);printf("\n");
      printf("101~200之间共有%d个素数",number);
    return 0;
}

依靠自主编程排版还不会(cry)

符号阵型

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

验证:

因为对于这种依靠行列计算的方式来输出符号(/数字)的题型还不够熟练,在操作时寻求了同学的帮助

但是,在参看了同学们的作业之后发现这题的做法不止一种,也可以不用等差数列的方法进行输出。

总结:吐槽与教训都穿插在题目中了,但是对于循环语句的掌握尚不够熟练,还需要多看题目,尤其对于行列自加自减为中介进行输出的题目

走过路过的小伙伴看到错误别忘了指出来w,蟹蟹(/w\)

转载于:https://www.cnblogs.com/amumu0925/p/10714640.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值