C语言程序的三种结构

本文介绍了C语言程序的三种基本结构:顺序结构、分支结构(包括if和switch语句)和循环结构。重点讨论了分支结构的四种形式,并通过一个奖励例子展示了if语句的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C语言程序的三种结构:
1.顺序结构:程序从上往下依次执行就叫顺序结构
2.分支结构:程序有选择的执行某段代码或者不执行某段代码
3.循环结构:程序重复的执行某段代码

重点是分支结构和循环结构

1.分支结构有两大类语句:一种是if 一种是switch

if语句

1.第一种形式:

语法:if(表达式){
        语句块;
     }

语义:如果表达式的结果为真,则执行语句块,否则不执行语句块

第二种形式:

语法:
    if(表达式){

        语句块1;
    }else{

        语句块2;
    }

语义:如果表达式的结果为真,则执行语句块1,否则执行语句块2
    语句块1或者语句块2,至少会有一个被执行

第三种形式:
if语句的嵌套

    简单来说:就是if语句里面还可以有任意的if语句

第四种形式:

    语法:
        if(表达式1){

            语句块1

        }else if(表达式2){

            语句块2

        }else if(表达式3){

            语句块3
        }
        ……………………
        else if(表达式n){
            语句块n

        }else{

            语句块n+1;
        }

    语义:先判断表达式1,如果成立则执行语句块1,后面的都不执行了,否则继续判断表达式2,如果成立,则执行语句块2,后面的都不执行了,如果不成立则判断语句块3,如果成立则执行语句块3,否则继续往下判断,直到else上面的条件都不满足,就执行语句块n+1;

    而且我们的这种语法格式是一个整体,上面判断过的内容如果不成立,那么下面判断时已经做了过滤

例子:请土豪输入他儿子的成绩:

用户输入 奖励
90及以上 法拉利跑车
80-89 奔驰汽车
70-79 大众汽车
60-69 拖拉机
60以下 吊打

#include <stdio.h>

int main(int argc, const char * argv[])  {

printf("亲爱的尊敬的土豪同志,请输入你后代的成绩\n");
    int score;
    scanf("%d",&**score);

    /*第一种方法
    if(score >= 90){

        printf("来,给你台法拉利,去装X去飞\n");
    }

    if(score>=80 && score <90){// 80 <= score <90

        printf("给你台奔驰去泡吧\n");
    }

    if(score>=70 && score <80){

        printf("来台大众随便去代步\n");
    }

    if(score>=60 && score <70){

        printf("你不是这块料,给你台拖拉机回家耕田把!\n");
    }

    if(score < 60){

        printf("你大爷的,吊打你一顿\n");
    }
    */
 //第二种方法
    if(score >= 90){

         printf("来,给你台法拉利,去装X去飞\n");

    }else if(score >= 80){

        printf("奔驰\n");

    }else if(score >= 70){

        printf("大众\n");
}else if(score >= 60){

    printf("拖拉机\n");

}else{

    printf("吊打一顿\n");
}

printf("程序结束\n");

return 0;

}

```
    三目运算符:?:
        语法:
             表达式1 ?表达式2 : 表达式3;

        语义:执行表达式1,看看表达式的结果,如果为真,则执行表达式2,否则执行表达式3


        口语:问表达式1成立吗?成立就表达式2,否则表达式3


    什么时候用三目?
            就是判断条件后的语句比较少得时候用3目(也相当于if-esle),如果有多条语句的时候用if-else
 例子: 

   int num1=10,num2=3;

num1 > num2 ? num1++ : num2++;

if(num1>num2){

    num1++;

}else{

    num2++;
}

printf("num1=%d,num2=%d\n",num1,num2);//11 3

if语句需要注意的地方:

    1.if语句后面千万不要加分号,如果你非要手贱加一个分号,那么就加在大括号后面

    2.if语句的大括号,其实是可以省略的!
            当你省略大括号的时候,那么if语句只能管到离它最近的一句语句,但是这句语句不能是声明变量的语句


    3.if语句里面可以写任意条语句(必须要有大括号)


    4.0的数就是真,0就是假,避免让你的表达式是永真或永假

    5.if语句里面定义的变量只能在它语句块里面访问

    6.if语句小括号里面的表达式可以写任意表达式


*****       switch语句      

    switch语法:
            switch(表达式){


                case 常量表达式1:
                    语句块1
                    break;

                 case 常量表达式2:
                     语句块2
                     break;

                 case 常量表达式3:
                     语句块3
                     break;
                 ………………

                 default:
                     语句块n
                     break;
            }

     语义:先得出表达式的结果,根据结果跳转到相应的case语句块里面去执行

            表达式结果  == 常量表达式  就叫相应的case语句块

          如果case 后面的常量表达式没有一个跟表达式结果对应的

            那么就跳转到 default里面执行语句块n



 switch语句的穿透问题:

        当case块里面不加break的时候,会发生穿透

        穿透意思:就是从这个case块里面执行完语句后,会继续跳到下一个case块里面继续执行

        所以,我们必须加break,防止穿透

        break可以跳出当前的switch语句

switchif-else if语句的比较:
例子:

include


switch语句需要注意的地方:

    1.switch语句后面的小括号只能写整数类型的表达式,否则会报错

    2.case后面只能接常量表达式

    3.case后面的常量表达式不能有重复的值

    4.switch小括号后面不要加分号,手贱要加分号加在大括号后面

    5.case后面不能立即声明变量,除非在声明前面加一条或者N条语句

    6.非要在 case后面立即声明变量怎么办??那么就在case块里面加一个大括号

    7.如果不加大括号声明的变量,其他case块也可以访问(知道)

    8.default可以写在任意位置,不影响结果

例子:要求用户输入一个月份,判断这个月份属于哪个季节
 1212月:冬季
 345月:春季
 678月:夏季
 91011月:秋季


include


总结:任何可以用if语句实现的功能,绝对也可以用switch语句来实现,同样用switch语句可以做得东西,if也完全可以

 Command + ~键(数字键1旁边的那个):在同一个程序里面不同的窗口之间进行切换


 如果要判断范围的话用if比较方便,用switch比较麻烦,不能直接用

 如果是判断具体的某个值,并且值不是很多的时候用switch方便和简洁



 循环语句:while语句


while语句的基本语法:

        while(表达式){

            循环体;
        }


      语义:
            1.先判断表达式是否成立,如果成立,则跳转2,否则跳转3
            2.执行循环体,执行完毕跳转到1
            3.跳出循环,循环结束



例子1

include


例子2:

遍历1-100;遍历就是给它一个一个打印出来

include



while循环需要注意的地方:

        1.防止死循环。避免条件永真或永假。如果永真死循环,如果永假不循环,写起来毫无意义


        2.while循环后面千万不要加分号,手贱要加分号,你们都懂的


        3.记得结束循环的语句不要忘了写

        4.循环跟if语句一样的地方就是:大括号可以省略。只能控制离它最近的一条语句,并且这条语句不能是声明变量的语句
  习题一:计算1-100以内(包含1100)所有偶数的和
 (能被2整除的数都叫偶数)

 分析:从1数到100
        判断当前每个被数到的数是不是偶数


include


习题二:请用户输入个任意整数N,打印出从1到这个整数N的所有平方表
 例:用户输入4,那么则顺序打印出1的平方的值为12的平方的值为43的平方的值为94的平方的值为16 
分析:第一步:接收用户输入任意一个整数
要从1开始遍历到这个整数
打印出每个遍历的数的平方
从1遍历到4
打印出遍历到的当前数的平方

include


习题三:要求用户输入5个数字,计算出这5个数字中最小的数字、最大的数字和平均数

        分析:
            要判断谁最大,谁最小
            平均数 = 总和 / 次数
            要计算出总和

      如:    10  9   20  23  14

        我把我认为的最大的数赋为0不科学,因为用户可以输入负数

        那么我们一定要让我们认为的最大的数是一个无限小的数,然后让用户输入的数不可能比我还小了

        引入一个,int类型所能取值的最小数

        INT32_MIN 就是int类型里面所能取值的最小的数了



    第二种解法的精髓:
             先把第一个输入的数,当做我认为的最大的数和最小的数

include


习题四:让用户输入一个数n和一个数m,计算从n到m之间的所有数之和

include


******     do-while循环语句:

              do-while的语法:

            do{

                循环体;

            }while(表达式);

        注意:while的小括号后面一定要加分号

        语义:
            1.执行循环体,跳转到2
            2.判断表达式的结果是否为真,如果为真,跳转到1,否则跳转到3
            3.跳出循环,循环结束

    所以证明:循环体至少会被执行1次


    跟while循环的最大的区别就是:do-while是先执行循环体,再判断,while是先判断再执行

            while里面的循环体很可能1次都不会被执行
            do-while里面的循环体至少被执行1次


 场景:就是循环体需要至少执行1次的时候用


例子: 

include


最最重要的for循环来了

所以我们现在迫切的需要一种循环,它的格式能够让我不会忘记写i++

 for循环
        语法:
            for(表达式1;表达式2;表达式3){

                 循环体;
            }

        语义:1.先执行表达式1,跳转到2
             2.判断表达式2的结果是否为真,如果为真,跳转到3,否则跳转到5
             3.执行循环体,执行完毕,跳转到4
             4.执行表达式3,执行完毕跳转到2
             5.跳出循环,循环结束

 例子:用for循环来计算1加到100

#include



 for循环的其他格式:
        表达式1,表达式2,表达式3都可以省略

    注意:表达式2没写的话代表是死循环

    就算你不写表达式1,表达式2,或者表达式3,但是那两个分号无论如何都不省略


 表达式1,表达式3,可以写任意条语句,用,隔开

***for循环的嵌套:可以用来打印图形
        就是一个for循环里面还套了一个for循环


 for循环的嵌套一般用来控制平面

精华:
    外层循环控制行数

内层循环控制列数

例子:
#include <stdio.h>

int main(int argc, const char * argv[]) {

for (int i=0; i<6; i++) { //外层循环控制行数

    for (int j=0; j<6; j++) { //内层循环控制列数

        printf("*   ");
    }

    printf("\n");
}


return 0;

}






结果打印为:
*   *   *   *   *   *   
*   *   *   *   *   *   
*   *   *   *   *   *   
*   *   *   *   *   *   
*   *   *   *   *   *   
*   *   *   *   *   *   


知道这种图形怎么用for循环做么?
 *
 *  *
 *  *   *
 *  *   *   *
 *  *   *   *   *
 *  *   *   *      
 *  *   *   
 *  *
 *
#include <stdio.h>

int main(int argc, const char * argv[]) {

for (int i=1; i<=9; i++) {//控制行数

        //分两段
        if(i<=5){
            for (int j=1; j<=i; j++) {//控制列数

                printf("*   ");
            }
        }else{

            for (int j=1; j<=9-i+1; j++) {//控制列数


                printf("*   ");
            }
        }

        printf("\n");
    }
return 0;

}
“`

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值