首页 > 其他分享 >【C语言的奥秘2】分支语句、循环语句、转向语句(1)

【C语言的奥秘2】分支语句、循环语句、转向语句(1)

时间:2024-11-18 21:43:33浏览次数:3  
标签:语句 case int C语言 break switch 奥秘 printf

一、控制语句及其分类

控制语句用于控制程序的执行流程,以实现程序的各种结构方式(C语言支持三种结构:顺序结构、选择结构、循环结构),它们由特定的语句定义符组成,C语言有九种控制语句。 可分成以下三类:

1. 条件判断语句也叫分支语句:if语句、switch语句;

2. 循环执行语句:do while语句、while语句、for语句;

3. 转向语句:break语句、goto语句、continue语句、return语句。

二、分支语句

1、if语句 

(1)、if语句的结构介绍

//if条件语句 

if(表达式)

        语句;

//if else选择语句

if(表达式)

        语句1;

else

        语句2;

//多分支语句

if(表达式1)

        语句1;

else if(表达式2)

        语句2;

else 

        语句3;

补充一下: 

如果表达式的结果为真,则该语句执行,在C语言中0表示假,非0表示真。如果条件成立,要执行多条语句,怎应该使用代码块。如下所示: 

int main()
{
    if(表达式)
   {
        语句列表1;
   }
    else
   {
        语句列表2;
   }
    return 0;
}

(2)、悬空else

浅浅问一下大家下面的两个代码运行结果如何?相同吗?

#include <stdio.h>
int main()
{
    int a = 0;
    int b = 2;
    if(a == 1)
        if(b == 2)
            printf("OK!\n");
    else
        printf("NO!\n");
    return 0;
}
#include <stdio.h>
int main()
{
    int a = 0;
    int b = 2;
    if(a == 1)
   {
        if(b == 2)
       {
            printf("OK!\n");
       }
   }
    else
   {
         printf("NO!\n");
   }       
    return 0;
}

显然第一个代码是没有输出结果的,第二个代码是会输出NO!由上面两个结果可知else是和离自己较近的if相匹配的。所以我们可以适当的使用{ }使代码的逻辑更加清楚,提高可读性。

2、switch语句 

例如:
输入1,输出星期一
输入2,输出星期二
输入3,输出星期三
输入4,输出星期四
输入5,输出星期五
输入6,输出星期六
输入7,输出星期日
如果写成 if...else if ...else if 的形式太复杂了,这样就有不一样的语法形式。
这就是switch 语句。

switch语句的结构 :

switch(整型表达式)
{
    语句项;
}

 语句项就是case语句:

case 整形常量表达式:    

        语句;

对于上方例子可以由switch语句来表达:

#include <stdio.h>
int main()
{
    int day = 0;
    scanf("%d",&day);
    switch(day)
   {
        case 1:
            printf("星期一\n");
            break;
        case 2:
            printf("星期二\n");
            break;
        case 3:
            printf("星期三\n");
            break;    
        case 4:
            printf("星期四\n");
            break;    
        case 5:
            printf("星期五\n");
            break;
        case 6:
            printf("星期六\n");
            break;
        case 7:
            printf("星期天\n");    
            break;
   }
    return 0;
}

换一种情况,周一到周五为工作日输入1-5则输出weekday,周六周日为周末,则输入6/7输出weekend。对应的代码可以这样写:

#include <stdio.h>
//switch代码演示
int main()
{
    int day = 0;
    scanf("%d",&day);
    switch(day)
   {
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:
            printf("weekday\n");
            break;
        case 6:
        case 7:
            printf("weekend\n");
            break;
   }
    return 0;
}

观察代码不免会有这样的疑问,为什么可以只在case:5后面写printf("weekday\n")呢?这是由于switch语句中,运行逻辑是从第一个case语句开始执行,执行完会继续执行第二个case语句,直到遇到break才会跳出switch语句。

default子句在switch语句中的作用

当 switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。 所以,每个switch语句中只能出现一条default子句。 但是它可以出现在语句列表的任何位置,而且语句流会像执行一个case标签一样执行default子句。

#include <stdio.h>
int main()
{
    int day = 0;
    scanf("%d", &day);
    switch (day)
    {
        case 1:
            printf("星期一\n");
            break;
        case 2:
            printf("星期二\n");
            break;
        case 3:
            printf("星期三\n");
            break;
        default:
            printf("输入错误\n");
            break;
        case 4:
            printf("星期四\n");
            break;
        case 5:
            printf("星期五\n");
            break;
        case 6:
            printf("星期六\n");
            break;
        case 7:
            printf("星期天\n");
            break;
        
    }
    return 0;
}

运行结果可以看出来default的的位置与运行次序是一致的,但是当所有的case都不符,也还是会运行default子句。同时也可以看出来没有break语句,switch里面会一直从头运行到结尾,而不会结束,所以break在switch中起着很重要的作用。


今天的分享就到这啦

标签:语句,case,int,C语言,break,switch,奥秘,printf
From: https://blog.csdn.net/2402_88991786/article/details/143828909

相关文章

  • 学习c语言——进阶
    学习c语言——进阶指针的学习1.使用指针交换数字voidswop(int*a,int*b){intt=*a;printf("%p\n",&t); printf("%p\n",&a); printf("%p\n",a);*a=*b;*b=t;}/*其中,前三行分别输出变量t、指针变量a和指针变量a所指向的......
  • C语言 | 指针 | 野指针 | 数组指针 | 指针数组 | 二级指针 | 函数指针 | 指针函数
    文章目录1.指针的定义2.指针的加减运算3.野指针4.指针&数组&传参&字符数组5.数组指针&指针数组6.二级指针7.指针函数&函数指针&回调函数8.函数指针数组&指向函数指针数组的指针1.指针的定义指针是内存中一个最小单元的编号,也就是地址。平常口语中所......
  • c语言的循环结构
    循环结构在生活中我们常常遇到需要重复处理的问题,我们在编程时解决需要重复处理的问题需要使用循环语句循环语句主要有3种:while()循环;do-while()循环和for()循环while()循环用法:while(循环条件){循环体;……}说明:当程序遇到while()循环的时候,首先会判断while()的......
  • 【Python入门】探索Python字符串的奥秘:常用方法全解析
    ......
  • C语言的数组
    二&数组•数组的概念在数学中我们有集合的概念,那么在C语言中:数组是⼀组相同类型元素的集合;从这个概念中我们就可以发现2个有价值的信息:•数组中存放的是1个或者多个数据,但是数组元素个数不能为0。•数组中存放的多个数据,类型是相同的。数组分为⼀维数组和多......
  • c语言文件大概
    文件一:文件的打开FILL*fp;fp=fopen("文件地址","打开方式“)打开方式:文件地址的方式有相对路径和绝对路径,具体不多说二:文件的关闭fclose(fp)三:文件读写函数1读写字符函数fgetc和fputc:fgetc("fp"),fputc("character","fp")fgetc就是从文件中读入一个字符,fputc是将一个字符......
  • 高阶C语言之四:动态内存管理
    目录开辟和释放动态内存malloc开辟空间free释放空间clloc初始化开辟空间realloc修改动态内存常见的内存错误1、对空指针的解引用操作2、对动态开辟空间的越界访问3、对非动态开辟内存使用free释放4、使用free释放动态内存的一部分 5、对同一块空间的多次释放6、动......
  • redis管理语句
    命令行删除slave节点./redis-cli-a1111111-h192.168.0.110-p6000--clusterdel-node192.168.0.10:600097c76add58386f7d592c774347651ec34651283c 命令行查看集群节点信息redis-cli-h192.168.0.110-p6000-a111111clusternodes创建集群./redi......
  • vscode go语言注释语句黄色波浪线
    go语言注释代码总是飘着黄色波浪线提示:(withoptionalleadingarticle)(ST1021)go-staticcheck,非常影响观感。经过查询发现,go-staticcheck是一个用于Go代码静态分析的工具,用来检测代码中的潜在问题、代码规范以及常见的错误。本次错误信息来自go-staticcheck中的规则ST10......
  • 【C语言】前端未来
    你对前端未来的技术趋势有何看法?例如WebAssembly、WebXR、PWA等。 对未来前端技术趋势的看法,我认为有几个关键方向正在快速发展: WebAssembly(WASM):随着性能需求的增长,WebAssembly作为一种低级字节码运行环境,使得开发者可以编写高性能的原生代码并在浏览器上运行,这将显著......