• 重温C语言八----程序流程控制


    程序流程控制

    (1).介绍

    在程序中程序运行的流程控制决定程序是如何执行的,是我们必须掌握的主要有三大流程控制语句

    1)顺序控制

    介绍:程序从上到下逐行执行中,中间没有任何判断和跳转

    代码案例:

    void main(){
     int num=12;
     int num2=num+2;
    }
    
    • 1
    • 2
    • 3
    • 4

    2)分支控制

    -1.分支控制if-else

    介绍:让程序有选择的执行,也分三种

    (1)单分支
    if(条件表达式){
    
    ​      执行代码块; 
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    说明:当条件表达式为真(非0)时,就会执行{}的代码,返回假(0)时,不会执行{}的代码

    案例

    #include 
    
    int main() {
        printf("请输入一个整数:\n");
        int age=0;
        fflush(stdout);
        scanf("%d",&age);
        if(age>18){
            printf("你的年龄大于18岁了,要对自己的行为负责!");
        }
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    (2)双分支
    if(条件表达式){
    执行代码块1;
    }else{
    执行代码块2
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    说明:当条件表达式成立时(为真),执行代码块1,否则执行代码块2

    案例:

    #include 
    
    int main() {
        printf("请输入一个整数:\n");
        int age=0;
        fflush(stdout);
        scanf("%d",&age);
        if(age>18){
            printf("你的年龄大于18岁了,要对自己的行为负责!");
        }else{
            printf("你的年龄不大,这次放过你了!");
        }
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    案例练习:

    #include 
    void main(){
        /*
         * 第一题
        int a=24;
        int b=34;
        if(a+b>50){
            printf("hello world");
        }
         第二题:
        double a=12.0;
        double b=13.0;
        if(a>10.0 && a+b>20.0){
            printf("a+b=%f",a+b);
        }else{
            printf("数太小了,没必要");
        }
         第二题
        int a=16;
        int b=15;
        int c=a+b;
        if(c%3==0&&c%5==0){
            printf("sucess!");
        }else{
            printf("fail1");
        }
         */
        int age=2008;
    
        if(age%4==0 && age %100!=0 ||age%400==0){
            printf("是闰年");
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    (3)多分支

    基本语法:

    if(条件表达式){
      执行表达式1}else if(条件表达式2){
      执行代码块2}
    ...else{
    执行代码块;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述

    1)当条件表达式1成立时,即执行代码块1

    2)如果表达式1不成立时,才去判断表达式2是否成立。

    3)如果表达式2成立,就执行代码块2,

    以此类推,如果所有的表达式都不成立,则执行else代码块

    注意:只能有一个执行入口

    案例演示:

    岳小鹏参加C语言2级考试,他和父亲岳不群达成协议

    如果:

    成绩为100分奖励一辆BMW;成绩为[60,80]时,奖励一台iphone7plus.

    当成绩为[60,80]奖励一个ipad;

    其他什么奖励也没有,请从键盘上输入他的期末考试并加以判断。

    #include 
    void main(){
        /*
         * 岳小鹏参加C语言2级考试,他和父亲岳不群达成协议
    
    如果:
    
    成绩为100分奖励一辆BMW;成绩为[60,80]时,奖励一台iphone7plus.
    
    当成绩为[60,80]奖励一个ipad;
    
    其他什么奖励也没有,请从键盘上输入他的期末考试并加以判断。
    分析:
         1,定义一个double保存成绩
         2.因为判断条件有多个,因此我们使用多分支处理
    
        */
      double score=0;
      printf("请输入成绩:");
        fflush(stdout);
        scanf("%lf",&score);
    
        if(score==100){
            printf("奖励宝马一台");
        }else if(score>80 && score<=99){
            printf("奖励一台iphone7plus");
        }else if(score>=60 && score<=80){
            printf("奖励一台ipad");
        }else{
            printf("没有奖励");
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    案例:

    #include 
    #include 
    /*
     * 求ax^2+bx+c=0的根。a,b,c分别为函数的参数,如果b^2-4ac>0,则有两个解;
     * b^2-4ac=0,则有一个解。b^2-4ac<0则无解
     * 提示
     * x1=(-b+sqrt(b^2-4ac))/2a
     * x2=(-b-sqrt(b^2-4ac))/2a
     * 提示2:sqrt(num) 需要#include
     * 分析:
     *   1.定义三个double a,b,c
     *   2.b^2-4ac出现了很多次(>3)。,因此我们可以使用一个变量来保存从而避免重复计算提高效率
     *   3.sqrt(num),需要#include
     *   使用到多分支
     *   走代码
     */
    void main(){
        /**
    double a=3,b=100,c=6,x1=0,x2=0;
    double t=b*b-4*a*c;
        if(t>0){
            x1=(-b+sqrt(t))/(2*a);
            x2=(-b-sqrt(t))/(2*a);
            printf("\nx1=%.2f",x1);
            printf("\nx2=%.2f",x2);
        }else if(t==0){
            x1=(-b+sqrt(t))/(2*a);
            printf("\nx1=%.2f",x1);
        }else{
            printf("无解");
       * */
    
      int height=0;
      int money=0;
      int handsome=0;
      printf("请输入值:");
        fflush(stdout);
      scanf("%d,%d,%d",&height,&money,&handsome);
        if(height>180 && money>100000 && handsome==1){
            printf("我一定要嫁给他");
        }else if(height>180 || money>10000000 || handsome==1){
            printf("嫁吧,比上不足,比下有余");
        }else{
            printf("不嫁");
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    (4)嵌套分支

    基本介绍

    在一个分支结构中又完整的嵌套了另一个完整的分支结构,里面的分支结构称为内层分支外面的分支结构称为外层分支。嵌套分支不适合过多,最多不要超过3层

    基本语法

    if(){
      if(){	//被包含的可以是各种分支类型
    
     }else{
     
     }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    案例:

    #include 
    /*
     * 参加百米运动会,如果用时8秒以内就进入决赛,否则提示淘汰。并且根据性别提示进入
     * 男子组或女子组 。输入成绩和性别
     * double second;chr gender;
     * 1.变量double second保存时间
     * 2.变量 char gender 保存性别
     * 3.使用嵌套分支
     */
    void main(){
      double time=0.0;
      char gender= ' ';
      printf("请输入跑步成绩(s)\n");
        fflush(stdout);
        scanf("%lf",&time);
        //根据time判断是否进入决赛
        if(time<=8){
            //进入
            printf("请输入性别(m/f)\n");
            fflush(stdout);
            scanf("%c",&gender);//接收到上次回车
            fflush(stdout);
            scanf("%c",&gender);//这次才接收到性别
            if(gender=='m'){
                printf("请进入男子组就决赛");
            }else{
                printf("请进入女子组就决赛");
            }
        }else{
            printf("你被淘汰");
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    #include 
    /*
     * 出票系统:根据淡旺季的月份和年龄打印票价
     * 4-10旺季
     *     成人:(18-60):60
     *     儿童: (<18):半价
     *     老人(>60):1/3
     *   淡季:
     *      成人: 40
     *      其他:20
     */
    void main (){
        int month=0;
        int age=0;
        double price =60.0;
        printf("month:");
        fflush(stdout);
        scanf("%d",&month);
        printf("age:");
        fflush(stdout);
        scanf("%d",&age);
        if(month>=4 && month <=10){//旺季
            if(age>60){
                printf("¥%.2f",price/3);
            }else if(age>=18){
                printf("¥%.2f",price);
            }else{
                printf("¥%.2f",price/2);
            }
        }else{//淡季
            if(age>=18 && age<60){
                printf("¥40");
            }else{
                printf("¥20");
            }
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    -2.switch分支结构

    流程图:

    在这里插入图片描述

    基本介绍:
    switch(表达式){
    case常量1://当
     语句块1break;
    case常量2:
     语句块2break;
    ...
    case 常量n:
     语句块n;
    break;
    default:
      default 语句块;
    break;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    #include 
    /*
     * 案例:
     * 请编写一个程序,该程序可以接收一个字符,比如 :a,b,c,d,e.f,g
     * a表示星期一。。。依次类推
     * 根据用户输入的信息提示相应的信息
     * switch语句完成
     */
    void main(){
        char c1=' ';
        printf("请输入一个字符:\n");
        fflush(stdout);
        scanf("%c",&c1);
        //任何有值的都可以看做表达式
        switch (c1) {
            case 'a':
                printf("星期一");
                break;
            case 'b':
                printf("星期二");
                break;
            case 'c':
                printf("星期三");
                break;
            case 'd':
                printf("星期四");
                break;
            case 'e':
                printf("星期五");
                break;
            case 'f':
                printf("星期六");
                break;
            case 'g':
                printf("星期日");
                break;
            default:
                printf("只能输入a~g");
        }
    }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    switch细节谈论

    1)switch语句中的expression是一个常量表达式,必须是一个整形(char\short,int long等)或枚举类型

    2)case子句中的值必须是常量,而不是变量

    3)default子句是可选的,当没有匹配的cse时,执行default

    4)break语句用来执行完一个case分支后使程序跳出switch语句块;

    5)如果没有写break,会执行下一个case语句块,直到遇到break或者执行到switch结尾,这个现象称为穿透

    超级案例:

    #include 
    void main(){
        /*
        //使用switch把小写类型的char型转为大写。只转换a,b,c.其他的输出出other
        char c1=' ';
        printf("please input a char:\n");
        fflush(stdout);
        scanf("%c",&c1);
        switch (c1) {
            case 'a':
                printf("A");
                break;
            case 'b':
                printf("B");
                break;
            case 'c':
                printf("C");
                break;
            default:
                printf("other");
        }
         */
        /*
        //对学生成绩大于60分的,输出"合格",低于60分的,输出"不合格"。(输入的成绩不能大于100)
        double d1=0.0;
        printf("请输入成绩:");
        fflush(stdout);
        scanf("%lf",&d1);
        switch ((int)(d1/60)) {//括号中可以是一个表达式
            case 0:
                printf("不合格");
                break;
            case 1:
                printf("合格");
                break;
            default:
                printf("你输入的成绩有误");
                break;
        }
        */
        //根据用于指定月份,打印该月份所属的季节,3,4,5春季6,7,8夏季 9,10,11秋季 12,1,2冬季
    int month=0;
        printf("请输入月份;");
        fflush(stdout);
        scanf("%d",&month);
        switch (month) {//会自动向下穿透
            case 3:
            case 4:
            case 5:
                printf("春季");
                break;
            case 6:
            case 7:
            case 8:
                printf("夏季");
                break;
            case 9:
            case 10:
            case 11:
                printf("秋季");
                break;
            case 12:
            case 1:
            case 2:
                printf("冬季");
                break;
        }
    
        }
    
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    switch与if的比较

    1.如果判断的具体数值不多,而且符合整形、枚举类型。虽然两个语句都可以使用,建议使用switch语句

    2.其他情况:对区间判断,对结果为真假的判断,使用if,if的范围更广

    3)循环控制

    基本介绍:可以让代码循环执行

    -1.for循环

    基本语法:

    for(循环变量初始化,循环条件,循环变量迭代){
        循环语句操作;
    }
    
    • 1
    • 2
    • 3

    案例:

    #include 
    void main(){
        for(int i=0;i<5;i++){
            printf("你好C语言\n");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    注意 事项和细节说明

    1)循环条件是返回一个表示真(非0)假(0)的表达式

    2)for(;循环判断条件;)中的初始化变量迭代可以不写(写到其他地方)但是两边的分号不能省略

     /*
         * 第一种写法
        for(int i=0;i<50;i++){
            printf("你好C语言\n");
        }
         */
        //写法2:可以将变量的初始化和迭代放在其他地方
        /*
        int i=1;
        for(;i<=5;){
            printf("你好世家\n");
            i++;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    3)循环初始值可以有多条初始化语句,但要求类型一样,并且中间用逗号隔开,循环变量迭代也可以有多条变量迭代语句,中间用逗号隔开

    for(i=0,j=0;j

     //循环初始值可以有多条初始化语句,但要求类型一样,
        // 并且中间用逗号隔开,循环变量迭代也可以有多条变量迭代语句,中间用逗号隔开
    
        int i=0;
       int j=0;
       for(i=0,j=0;i<=3;i++,j++){
           printf("i=%d,j=%d\n",i,j);
       }
       printf("%d,%d",i,j);//i=4,j=4
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    for的练习案例:

    #include 
    void main(){
        //1.打印1~100之间所有是9的倍数的整数的个数及总和,使用for完成
        int sun=0;
        int count=0;
        for(int i=1;i<=100;i++){
            if(i%9==0){//判断i是不是9的倍数
                count++;
                sun+=i;
                printf("%d  ",i);
            }
        }
        printf("个数是:%d  他们的和是%d\n",count,sun);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    第二道题:

    int a=0;
        printf("请输入一个整数:\n");
        fflush(stdout);
        scanf("%d",&a);
        for(int i=0,j=a;i<=a,j>=0;i++,j--){
            printf("%d+%d=%d\n",i,j,i+j);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    -2.while循环

    基本语法:

    while(循环条件){
     循环体(语句)
     循环变量迭代
    }
    
    • 1
    • 2
    • 3
    • 4

    使用while循环做题:

    #include 
    void main(){
        //输出5句你好世界
        int i=1;
        while(i<=5){
          printf("你好世界\n");
          i++;
        }
    }
    //2
     //2.打印1~100之间所有能被3整除的数
        int i=1;
        while(i<=100){
            if(i%3==0){
                printf("%d  ",i);
            }
            i++;
        }
       //3.打印40——200之间所有的偶数
        int i=40;
        while(i<=200){
            if(i%2==0){
                printf("%d  ",i);
            }
            i++;
        }
     /*
         * 不断输入姓名,直到输入exit为止(while完成)
         * 分析:
         *   1.需要接收用户的输入,字符串[字符数组]
         *   2。提示:是一个strcmp函数,判断两个字符是否相同
         *   int strcmp(const char *str1,const char *str2)
         *   把Str1所指向的字符串和str2所指向的字符串进行比较,返回0表示相等,非0表示不相等
         */
          char name[10] =" ";
          while(strcmp(name,"exit")!=0){
              printf("请输入姓名:\n");
              fflush(stdout);
              scanf("%s",&name);
              printf("您输入的名字是:%s",name);
          }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    流程图:d

    在这里插入图片描述

    while循环的细节注意事项

    1)循环条件是返回一个表示真(非0)假(0)的表达式

    2)while循环是先判断再执行语句

    -3.do while循环

    基本语法:

    循环变量的初始化;
    do  {
      循环语句;
      循环变量迭代;
    }while(循环条件);
    //注意.do while后面的 ;不能省略
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    实战案例:

    #include 
    void main(){
        //5句话
        int i=1;//循环变量初始化
        int max=5;//循环的最大次数
        do{
            printf("你好世界 ");
            i++;
        }while(i<=max);//循环条件
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    注意事项与细节说明:

    1)循环条件是返回一个表示真(非0)假(0)的表达式

    2)do…while循环是先执行,再判断

    案例:

    1.求出1~100的和:

    #include 
    void main(){
        //求出1~100的和
        int i=1;//循环变量初始化
        int sum=0;//循环的最大次数
        do{
          sum=sum+i;
            i++;
        }while(i<=100);//循环条件
        printf("1~100的和为:%d",sum);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    2.统计1~200之间能被5整除但不能被3整除的个数

    #include 
    void main(){
        /*
        //求出1~100的和
        int i=1;//循环变量初始化
        int sum=0;//循环的最大次数
        do{
          sum=sum+i;
            i++;
        }while(i<=100);//循环条件
        printf("1~100的和为:%d",sum);
         */
        int i=1;
        int count=0;
        do{
            if((i%5==0)&&(i%3!=0)){
                count ++;
                printf("%d  ",i);
            }
            i++;
    
        }while(i<=200);
        printf("1~200之间的符合条件的数为: %d",count);
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    题2:

    #include 
    void main(){
        /*
         * 如果老公同意老婆购物,则老婆一直购物,
         * 直到老婆说不同意为止[printf("老婆问:我可以继续购物吗?y/n")]
         */
        char answer=' ';
        do{
            printf("老婆问:我可以继续购物吗?y/n");
            fflush(stdout);
            scanf("%c",&answer);//获取用户
            getchar();//过滤掉回车键
        }while(answer =='y');
        printf("老婆终于退出购物了");
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    4)多重循环控制

    介绍:
    1. 将一个循环放在另一个循环体内,就行成了嵌套循环,其中for,while,do…while均可以作为外层循环和内层循环。【建议一般使用两层,最多不超过三层】如果循环过多,会造成可读性降低
    2. 实质上,嵌套循环就是把内层循环当作外层循环的循环体。当只有内层循环的循环条件位false时。才会完全跳出内层循环,才可结束外层的当次循环,开始下一轮循环
    3. 设外层循环次数为m次,内层为m次,则内层循环实际上要执行m*m次。
    案例
    • 统计3个班成绩情况,每个班有5名同学,求出各个班的平均分和所有班级的平均分【学生的成绩从键盘输入】

      #include 
      /*
       * 多重循环的操作
       */
      void main(){
          /*
           * 第一题
           * 统计3个班成绩情况,每个班有5名同学,
           * 求出各个班的平均分和所有班级的平均分【学生的成绩从键盘输入】
           * 分析:先死后活,先简单后复杂
           * 1,各个班级的平均分
           * 2,所有班级的平均分
           * 3,定义变量表示班级的个数ClassNum定义变量表示学生的个数 stuNum
           * 4,定义变量classTotalScore
           * 5,定义变量score接受学生的成绩'
           * 6.使用两层for循环
           */
          int stuNum=5;
          int classNum =2;
          double classTotalScore=0.0;
          double score=0.0;
          int i,j;
          for(i=1;i<=classNum;i++){//控制班级的循环次数
              //每次给一个班级输入成绩时需要清零
              classTotalScore=0.0;
              for(j=1;j<=stuNum;j++){
                  printf("\n请输入第%d个班级的第%d个学生的成绩\n",i,j);
                  fflush(stdout);
                  scanf("%lf",&score);
                  classTotalScore +=score;//累计成绩
              }
      
              //当内层的for循环结束后,就得到了该班级的总成绩
              printf("\n第%d个班级的平均分=%.2f",i,classTotalScore/stuNum);
          }
      
      }
      
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
      • 30
      • 31
      • 32
      • 33
      • 34
      • 35
      • 36
      • 37
      • 38
    • 统计三个班级的及格人数,每个班有5名同学

      //在上一个代码的基础之上,定义一及格人数变量。符合条件的话就进行递增迭代 
      int stuNum=5;
          int classNum =2;
          double classTotalScore=0.0;
          double score=0.0;
          int jige=0;
          int i,j;
          for(i=1;i<=classNum;i++){//控制班级的循环次数
              //每次给一个班级输入成绩时需要清零
              classTotalScore=0.0;
              jige=0;
              for(j=1;j<=stuNum;j++){
                  printf("\n请输入第%d个班级的第%d个学生的成绩\n",i,j);
                  fflush(stdout);
                  scanf("%lf",&score);
                  classTotalScore +=score;//累计成绩
                  if(score>=60){
                      jige++;
                  }
              }
      
              //当内层的for循环结束后,就得到了该班级的总成绩
              printf("\n第%d个班级的平均分=%.2f",i,classTotalScore/stuNum);
              printf("\n第%d个班级的及格人数为:=%d",i,jige);
      
          }
      
      }
      
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
    • 打印出九九乘法表

      #include 
      void main(){
          //99乘法表
          for(int i=1;i<=9;i++){
              for(int j=1;j<=i;j++){
                  printf("%d*%d=%d ",i,j,i*j);
              }
              printf("\n");
          }
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10

      打印金子塔;

      #include 
      void main(){
          /*
           * 打印金字塔
           * 从简单的金子塔开始慢慢改进操作
           */
          /*单侧金子塔
          int i;
          int j;
          for(i=1;i<=5;i++){
              for(j=1;j<=i;j++){
                  printf("*");
              }
              printf("\n");
          }
           *
           **
           ***
           ****
           *****
      
           */
          //打印标准金字塔
          /*
                 *(2*i-1)=2-1=1个  空格有4个=5-1
                ***(2*i-1)=2*2-1=3个 3个空
               *****(2*i-1)=2*3-1=5个 2
              *******(2*i-1)=2*4-1=7个 1
             *********(2*i-1)=2*5-1=9个 0
           *
          int i,j,k;
          for(i=1;i<=5;i++){
              //使用k控制空格的数量
              for(k=1;k<=5-i;k++){
                  printf(" ");
              }
              for(j=1;j<=2*i-1;j++){
                  printf("*");
              }
              printf("\n");
          }
           */
          //打印出空心金字塔
          /*在输出*号的时候,需要考虑是否输出的*还是空格
           *
                 *  //i=1该输入*号就输入*
                * * //如果是 第一个*和最后一个*输出的*。其他的应该输入 空格
               *   *  //如果是 第一个*和最后一个*输出的*。其他的应该输入 空格
              *     *  //如果是 第一个*和最后一个*输出的*。其他的应该输入 空格
             ********* //i=5该输入*号就输入*
           */
          int i,j,k,end=5;
          for(i=1;i<=end;i++){
            for(k=1;k<=end-i;k++) {
                printf(" ");
            }
                for(j=1;j<=2*i-1;j++){
                    if(j==1||j==2*i-1 || i==end){//当i=5的时候就全部输出星
                        printf("*");
                    }else{
                        printf(" ");
                    }
                }
                printf("\n");
      
          }
      
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
      • 30
      • 31
      • 32
      • 33
      • 34
      • 35
      • 36
      • 37
      • 38
      • 39
      • 40
      • 41
      • 42
      • 43
      • 44
      • 45
      • 46
      • 47
      • 48
      • 49
      • 50
      • 51
      • 52
      • 53
      • 54
      • 55
      • 56
      • 57
      • 58
      • 59
      • 60
      • 61
      • 62
      • 63
      • 64
      • 65
      • 66
      • 67
      • 68

    跳转语句

    跳转语句–break:

    需求:

    随机生成一个数,直到生成97个数,看看你哟用了几次;

    提示:

    • rand()返回一个范围在0到RAND_MAX之间的随机数

    • rand()函数在stdlib.h头文件当中

      通过该需求可以说明他流程控制数据的必要性,比如break

      #include 
      #include 
      int main() {
          int i=0;//定义一个变量统计生成次数
          printf("开始生成随机数\n");
          while(1){
              int a=rand();//生成一个随机数
              if(a==97){
                  printf("%d\n",a);
                  break;
              }
              printf("%d\n",i);//顺序输出次数
              i++;
          }
          printf("生成了%d次",i);
          return 0;
      }
      
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18

      基本介绍:

      break语句用于终止某个语句块的执行,一般使用在switch或者循环中(三大循环)

      基本语法:

      {
       .....
      break;
      }
      
      • 1
      • 2
      • 3
      • 4
    #include 
    #include 
    void main(){
        //100以内的数进行求和,看看当和大于20的时候该数是多少?
    //    int i=1;
    //    int sum=0;
    //    for(i=1;i<=100;i++){
    //        sum +=i;
    //        if(sum>20){
    //            printf("i=%d",i);
    //            break;
    //        }
    //    }
    
    //实现登录验证,有三次机会,如果用户名为张无忌,密码为i"888"提示登录成功
    //否则提示登录失败
    int chance=3;
    int loginCount=chance;
    char name[10]=" ";
    char pwd[10]=" ";
    for(int i=1;i<=loginCount;i++){
        printf("请输入名字:\n");
        fflush(stdout);
        scanf("%s",name);
        printf("请输入密码:\n");
        fflush(stdout);
        scanf("%s",pwd);
        //使用strcmp函数进行操作用于比较两个字符串是否相同
        if(strcmp("张无忌",name)==0&&strcmp("888",pwd)==0){
            printf("登录成功");
            break;
        }else{
            //机会次数减少
           chance --;
           printf("你还有%d次机会",chance);
        }
    }
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

    跳转语句-continue

    基本介绍:

    continue语句可用于结束本次循环,继续执行下一次循环

    基本语法:

    {
    ......
     continue;
    }
    
    • 1
    • 2
    • 3
    • 4

    注意事项和细节说明:

    continue语句,只能配合循环语句使用,不能单独和switch语句使用。

    void main(){
    int i=0;
    switch(i){
    case 1:
    continue;//错误
    }
    if(i>1){
    continue;//错误
    }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    案例练习:

    #include 
    void main(){
      //从键盘读入不同个数不确定的数,并判断读入的正数和负数的个数
      //输入为0时结束程序【使用for循环,break,continue完成】
      // 【positive 正数 negative负数】
    /*
     * 分析:
     * 1.定义变量positive保存正数的个数
     * 2.定义变量negative保存负数的个数
     *3.使用for + continue+break语句进行控制
     */
    int positive=0;
    int negative=0;
    int num =0;//接收从控制台输入的个数
    for(;;){//表示一个死循环,永不退出
        printf("请输入数:\n");
        fflush(stdout);
        scanf("%d",&num);
        if(num==0){
            break;//跳出for循环
        }
        if(num>0){
            positive++;
            continue;
        }
        //num是一个负数
        negative++;
    }
    printf("正数的个数%d,负数的个数%d",positive,negative);
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    #include 
    void main(){
        /*
         * 某人有100000元,没经过一次路口,需要缴费规则如下
         * 当现金 >50000,每次交5%
         * 当现金<=50000时,每次交1000
         * 编程计算该人可经过多少此路口,使用while break方式完成!
         */
        int money=100000;
        int count =0;
        while(1){
            if(money<1000){
                break;
            }
            if(money>50000){
                money=money*0.95;
            }else if(money<=50000){
                money-=1000;
            }
            count++;
        }
     printf("可以经过%d个路口剩余%d元",count,money);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    跳转语句-goto

    介绍:

    1. C语言的goto语句可以无条件地转移到程序中指定的行。
    2. goto语句通常与条件语句配合使用。可用来实现条件转移,跳出循环体等功能。
    3. 在C程序设计中一般不主张使用goto语句,以免造成程序混乱,使理解和调试程序都产生困难

    基本语法:

    gotolabel
    ....
    label:statement
    
    • 1
    • 2
    • 3

    案例演示:

    #include 
    void main(){
        printf("start\n");
        goto label1;//标签,到下一个标签内的语句都不会被执行
        printf("ok1\n");
        printf("ok2\n");
        label1:
        printf("ok3\n");
        printf("ok4\n");
    }
    输出结果:
    start
    ok3
    ok4
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    跳转语句-return

    跳出所有函数,函数细说;

    练习;

    #include 
    void main(){
        /*
         * 实现判断一个整数,属于哪个范围:大于0,小于0,等于0
         *
        int a=0;
        printf("请输入一个整数:\n");
        fflush(stdout);
        scanf("%d",&a);
        if(a>0){
            printf("该数范围大于0;");
        }else if(a==0){
            printf("该数等于0");
        }else{
            printf("该数小于0");
        }
         */
        //水仙花数
        //判断一个整数是否是水仙花数,所谓水仙花数就是一个3位数
       // 其各个数字上的;立方和等于其本身例如:153=1*1*1 +5*5*5 +3*3*3;
    int i=153;
    int bai=i/100;
    int shi=i%100/10;
    int ge=i%10;
        if(i==bai*bai*bai +shi*shi*shi +ge*ge*ge){
            printf("%d是水仙花数\n",i);
       }else{
            printf("不是水仙花数");
        }
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    案例2:

    #include 
    void main(){
        /*
      int b1=0,b2=1;
      if((b1==2>3)&& (b2=5>0)){//2>3==0 5>0==1 此时b2被赋值为了1
          printf("\n(b1=2>3)&& (b2=5>0)为真");
      }
      printf("\nb1=%d,b2=%d",b1,b2);
    
        int a=2;
        while(a<2){
            printf("\n执行while");
        }
        do{
            printf("执行do while");//至少会执行一次
        }while(a<2);
        
         */
        //输出1000~9999的闰年使用 for while do while这三种循环进行操作
        /*
         * for循环
        for(int i=1000;i<=9999;i++){
            if(i%4==0&&i/100!=0||i%400==0){
                printf("i=%d ",i);
            }
            */
    //while 循环
    /*
        int i=1000;
        while(i<=9999){
            if(i%4==0&&i/100!=0||i%400==0){
                printf("i=%d ",i);
            }
            i++;
         }
         */
    //do while 循环操作
    int i=1000;
    do{
        if(i%4==0&&i/100!=0||i%400==0){
            printf("i=%d ",i);
        }
        i++;
    }while(i<=9999);
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47

    案例3:

    #include 
    void main(){
        //输出小写a-z以及大写Z-A
        char c1,c2;
        for( c1='a';c1<='z';c1++){
            printf("%c ",c1);//输出26个字母
        }
        printf("\n================\n");
        for(c2='Z';c2>='A';c2--){
            printf("%c ",c2);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
      //求出1-1/2+1/4.....1/100的和
        /*
         * 分析:
         * 找到算术的规律
         * 1-1/2+1/3
         */
    #include 
    void main(){
    double sum=0;
        for(int i=1;i<=100;i++){
            if(i%2!=0){
                sum+=1.0/i;//考虑保留小数1.0而不是1
            }else{
                sum-=1.0/i;
            }
        }
        printf("sum=%.2f",sum);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    }
    printf(“\nb1=%d,b2=%d”,b1,b2);

    int a=2;
    while(a<2){
        printf("\n执行while");
    }
    do{
        printf("执行do while");//至少会执行一次
    }while(a<2);
    
     */
    //输出1000~9999的闰年使用 for while do while这三种循环进行操作
    /*
     * for循环
    for(int i=1000;i<=9999;i++){
        if(i%4==0&&i/100!=0||i%400==0){
            printf("i=%d ",i);
        }
        */
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    //while 循环
    /*
    int i=1000;
    while(i<=9999){
    if(i%40&&i/100!=0||i%4000){
    printf("i=%d ",i);
    }
    i++;
    }
    */
    //do while 循环操作
    int i=1000;
    do{
    if(i%40&&i/100!=0||i%4000){
    printf("i=%d ",i);
    }
    i++;
    }while(i<=9999);

    }

    
    案例3:
    
    ```c
    #include 
    void main(){
        //输出小写a-z以及大写Z-A
        char c1,c2;
        for( c1='a';c1<='z';c1++){
            printf("%c ",c1);//输出26个字母
        }
        printf("\n================\n");
        for(c2='Z';c2>='A';c2--){
            printf("%c ",c2);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
      //求出1-1/2+1/4.....1/100的和
        /*
         * 分析:
         * 找到算术的规律
         * 1-1/2+1/3
         */
    #include 
    void main(){
    double sum=0;
        for(int i=1;i<=100;i++){
            if(i%2!=0){
                sum+=1.0/i;//考虑保留小数1.0而不是1
            }else{
                sum-=1.0/i;
            }
        }
        printf("sum=%.2f",sum);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

  • 相关阅读:
    【滤波器】基于遗传算法优化FIR滤波器设计附matlab代码
    栈和队列的C++模拟实现
    -----指针进阶
    在线客服功能介绍-了解常见在线客服系统的功能点
    ArcGIS:如何迭代Shp文件所有要素并分别导出为Shp文件?
    uniapp使用页面通讯$on、$emit进行数据传参,页面DOM不刷新问题
    SpringMVC之文件上传下载以及jrebel的使用
    如何修复 HTML 中的乱码
    采购管控: 缩短采购周期,从源头上降本增效
    网络安全系列-四十四:使用Filebeat、ElasticSearch、Kinaba 针对Suricata的分析结果eve.json进行可视化展示
  • 原文地址:https://blog.csdn.net/weixin_55418082/article/details/126022186