首页 > 编程语言 >C 语言-2 程序结构

C 语言-2 程序结构

时间:2022-08-17 15:35:16浏览次数:84  
标签:语句 语言 程序结构 else 运算符 while 循环 表达式

2.1 C 程序结构

  • C 程序结构图示:
    image-20220713172823306

  • C 程序的执行部分是由语句组成的,程序的功能也是由执行语句实现的

  • 语句可分为以下五类:

    1. 表达式语句:表达式+分号“;”组成

      • 一般格式:

        表达式;
        
    2. 函数调用语句:由函数名、实际参数加上分号“;”组成

      • 一般格式:

        函数名(实际参数表);
        
      • 示例:

        printf("C Program")
        
    3. 控制语句:

      • 用于控制程序的流程, 以实现程序的各种结构方式

      • 九种控制语句

        控制语句类型 内容
        条件判断语句 if 语句、switch 语句
        循环执行语句 do while 语句、while 语句、for 语句
        转向语句 break 语句、goto 语句、continue 语句、return 语句
    4. 复合语句:把多个语句用括号{}括起来组成的一个语句

      {
          x=y+z;
          a=b+c;
          printf(“%d%d”,x,a);
      }
      

      复合语句内的各条语句都必须以分号“;”结尾,在括号“}”外不能加分号

      在程序中应把复合语句看成是单条语句,而不是多条语句

    5. 空语句:只有分号“;”组成的语句

      • 空语句是什么也不执行的语句。在程序中空语句可用来作空循环体

      • 示例:

        while(getchar() !='\n')
            ;
        

        只要从键盘输入的字符不是回车则重新输入

2.2 分支结构

2.2.1 关系运算符和表达式

  • 关系运算符,就是前面介绍的运算符的一类,如下

    运算符 名称 优先级
    < 小于
    <= 小于等于
    > 大于
    >= 大于等于
    == 等于
    != 不等于
    • 都是双目运算符,其结合性均为左结合
    • 优先级:低于算术运算符,高于赋值运算符
      • 在六个关系运算符中,<,<=,>,>= 的优先级相同,高于 == 和 !=;== 和 != 的优先级相同
  • 关系表达式

    • 一般形式为:

      表达式 关系运算符 表达式
      
    • 示例:

      a+b>c-d;
      x>3/2;
      'a'+1<c;
      -i-5*j==k+1;
      a>(b>c);		//表达式也可以是关系表达式,因此也允许出现嵌套的情况
      a!=(c==d);
      
    • 关系表达式的值为:“真”和“假”,用"1"和"0"表示

2.2.2 if 分支语句

  • if 语句:根据给定的条件进行判断,以决定执行某个分支程序段

  • 三种形式:

    1. 基本形式:

      if(表达式) 语句
      
    2. if-else 形式:

      if(表达式)
          语句 1;
      else
          语句 2;
      

      语义:如果表达式的值为真,则执行语句 1,否则执行语句 2

    3. if-else-if 形式:

      if(表达式 1)
          语句 1;
      else if(表达式 2) 
          语句 2;
      else if(表达式 3) 
          语句 3;
      	…;
      else if(表达式 m) 
          语句 m;
      else 
          语句 n;
      

      语义:依次判断表达式的值,当出现某个值为真时,则执行其对应的语句。然后跳到整个 if 语句之外继续执行程序。 如果所有的表达式均为假,则执行语句 n。然后继续执行后续程序。

  • 注意:

    1. 三种形式的 if 语句中,在 if 关键字之后均为表达式。 该表达式通常是逻辑表达式或关系表达式, 也可以是其它表达式,如赋值表达式等,甚至也可以是一个变量

    2. 三种形式中,所有的语句应为单个语句,如果要想在满足条件时执行一组(多个)语句,则必 须把这一组语句用 {} 括起来组成一个复合语句。要注意的是在 } 之后不能再加分号

      if(a>b)
      	{a++;
           b++;}
      else
          {a=0;
           b=10;}
      
  • if 语句嵌套

    • 一般形式表示:

      if(表达式)
          if 语句;
      

      或者

      if(表达式) 
          if 语句;
      else 
          if 语句;
      
    • if-else 类型嵌套:

      if(表达式 1)
          if(表达式 2)
              语句 1;
      else
          语句 2;
      
      • 这个 else 与那个 if 配对呢?
        • C语言规定,else 总是与它前面最近的 if 配对
    • 在一般情况下较少使用 if 语句的嵌套结构。以使程序更便于阅读理解

  • 条件运算符

    • 如果只执行单个的赋值语句时, 可使用条件表达式来实现。不但使程序简洁,也提高 了运行效率。

    • 一般形式:

      表达式 1 ? 表达式 2 : 表达式 3
      

      如果表达式 1 的值为真,则以表达式 2 的值作为条件表达式的值,否则以表达式 3 的值作为整个条件表达式的值

    • 示例:

      if(a>b) max=a;
      else max=b;
      

      可修改为:

      max=a>b?a:b;
      
    • 注意:

      1. 条件运算符的运算优先级低于关系运算符和算术运算符,但高于赋值符

      2. 条件运算符 ? 和 : 是一对运算符,不能分开单独使用

      3. 条件运算符的结合方向是自右至左

        a>b?a:c>d?c:d
        

        理解为:a>b?a:(c>d?c:d)

2.2.3 switch 语句

  • 一般表示:

    switch(表达式){ 
        case 常量表达式 1: 语句 1;
        case 常量表达式 2: 语句 2;
            … 
        case 常量表达式 n: 语句 n;
        default : 语句 n+1;
    }
    

    语义:计算表达式的值。 并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时, 即执行其后的语句,然后不再进行判断,继续执行后面所有 case 后的语句。如表达式的值与所有 case 后的常量表达式均不相同时,则执行 default 后面的语句

  • switch 语句中,“case 常量表达式”只相当于一个语句标号, 表达式的值和某标号相等则转向该标号执行,但不能在执行完该标号的语句后自动跳出整个 switch 语句,所以会出现了继续执行所有后面 case 语句的情况

    • 为了避免上述情况, C语言提供了一种 break 语句,专用于跳出 switch 语句
  • 注意:

    1. case 后的各常量表达式的值不能相同,否则会出现错误
    2. case 后,允许有多个语句,可以不用{}括起来
    3. 各 case 和 default 子句的先后顺序可以变动,而不会影响程序执行结果
    4. default 子句可以省略不用
  • 示例:

    #include<stdio.h>
    int main(){
        float a,b;
        char c;
        printf("input expression: a+(-,*,/)b \n");
        scanf("%f%c%f",&a,&c,&b);
        switch(c){
            case '+': printf("%f\n",a+b);break;
            case '-': printf("%f\n",a-b);break;
            case '*': printf("%f\n",a*b);break;
            case '/': printf("%f\n",a/b);break;
            default: printf("input error\n");
    		}
    }
    

2.3 循环结构

  • C语言提供了多种循环语句,可以组成各种不同形式的循环结构

    1. goto 语句和 if 语句构成循环
    2. while 语句
    3. do-while 语句
    4. for 语句
  • goto 语句及其构成的循环

    • goto 语句是一种无条件转移语句

    • 使用格式:

      goto 语句标号;
      

      标号:是一个有效的标识符,这个标识符加上一个“:”一起出现在函数内某处, 执行 goto 语句后,程序将跳转到该标号处并执行其后的语句

      • 标号必须与 goto 语句同处于一个函数中,可以不在一个循环层中
    • 与 if 语句构成循环示例:

      #include <stdio.h>
      int main(){
          int i,sum=0;
          i=1;
          loop: if(i<=100){
              sum=sum+i;
              i++;
              goto loop;}
          printf("%d\n",sum);}
      
    • 通常不用 goto 语句,,容易使程序层次不清、不易读,但在多层嵌套退出时, 用 goto 语句则比较合理

  • while 语句

    • 一般形式:

      while(循环条件表达式) 循环体语句
      
    • 示例:

      #include <stdio.h>
      int main(){
          int i,sum=0;
          i=1;
          while(i<=100){
              sum=sum+i;
              i++;
          }
          printf("%d\n",sum);}
      
  • do...while 语句

    • 一般形式:

      do
          循环体语句
      while(循环表达式);
      

      do-while 循环至少要执行一次循环语句

  • for 语句

    • 一般形式:

      for(表达式 1;表达式 2;表达式 3;) 语句
      
      • 执行过程:
        1. 先求解表达式 1
        2. 求解表达式 2,若其值为真(非 0),则执行 for 语句中指定的内嵌语句,然后执行下面第 3 步;若其值为假(0),则结束循环,转到第 5 步
        3. 求解表达式 3
        4. 转回上面第 2 步继续执行
        5. 循环结束,执行 for 语句下面的一个语句
    • for 语句最简单的应用形式:

      for(循环变量赋初值;循环条件;循环变量增量) 语句
      
    • 示例:

      for(i=0;i<=100;i++) sum=sum+i;
      
    • 注意:

      1. for 循环中的“表达式 1(循环变量赋初值)”、“表达式 2(循环条件)”和“表达式 3(循环变量增量)”都是选择项可以缺省,但“;”不能缺省

      2. 省略了“表达式 1(循环变量赋初值)”,表示不对循环控制变量赋初值

      3. 省略了“表达式 2(循环条件)”,则不做其它处理时便成为死循环

      4. 省略了“表达式 3(循环变量增量)”,则不对循环控制变量进行操作,这时可在语句体中加入修改循环控制变量的语句

      5. 3 个表达式都可以省略

        for(;;;) //相当于 while(1)
        
      6. 表达式 1 可以是设置循环变量的初值的赋值表达式,也可以是其他表达式

      7. 表达式 1 和表达式 3 可以是一个简单表达式也可以是逗号表达式

        for(sum=0,i=1;i<=100;i++)sum=sum+i;
        for(i=0,j=100;i<=100;i++,j--)k=i+j;
        
      8. 表达式 2 一般是关系表达式或逻辑表达式,但也可是数值表达式或字符表达式,只要其值非零,就执行循环体

  • 循环嵌套示例:

    #include <stdio.h>
    int main(){
        int i, j, k;
        printf("i j k\n");
        for (i=0; i<2; i++)
            for(j=0; j<2; j++)
                for(k=0; k<2; k++)
                    printf("%d %d %d\n", i, j, k);
    }
    
  • 几种循环比较

    1. 处理问题:四种循环都可以用来处理同一个问题,一般可以互相代替。一般不提倡用 goto 型循环
    2. 功能:while 和 do-while 循环,循环体中应包括使循环趋于结束的语句。for 语句功能最强
    3. 初始化:使用 while 和 do-while 循环时,循环变量初始化的操作应在 while 和 do-while 语句之前完成,而 for 语句可以在表达式 1 中实现循环变量的初始化

2.4 break 和 continue

  • break 语句:
    • 通常用在循环语句和开关语句中
      • 用于开关语句 switch 中时,可使程序跳出 switch 而执行 switch 以后的语句,如果没有 break 语句,则将成为一个死循环而无法退出
      • 用于 do-while、for、while 循环语句中时,可使程序终止循环而执行循环后面的语句, 通常 break 语句总是与 if 语句联在一起,满足条件时便跳出循环
    • 注意:
      1. break 语句对 if-else 的条件语句不起作用
      2. 在多层循环中, 一个 break 语句只向外跳一层
  • continue 语句:跳过循环本中剩余的语句而强行执行下一次循环
    • 只用在 for、 while、do-while 等循环体中,常与 if 条件语句一起使用,用来加速循环

标签:语句,语言,程序结构,else,运算符,while,循环,表达式
From: https://www.cnblogs.com/handsome-black/p/16595396.html

相关文章

  • C 语言-3 数组
    3数组具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组在C语言中,数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数......
  • 汇编语言-王爽第四版,学习资料和姿势
    'debug'不是内部或外部命令,也不是可运行的程序或批处理文件。debug:无法将“debug”项识别为cmdlet、函数、脚本文件或可运行程序的名称。windows,win10,win11找不到......
  • go语言实现无限级分类
    packagemainimport( "fmt" "gorm.io/gorm")varGDB*gorm.DBtypeTstruct{ Idint32`json:"id"` Pidint32`json:"pid"gorm:"index"` Namestring......
  • Apple开发_Swift语言地标注释
    1、前言随着编码过程深入,工程代码量会增加,任何在这大量的代码中能快速找到需要方法或者是刚才修改过代码呢?在Swift代码中使用地标注释,然后就可以使用Xcode工具在代码中......
  • c语言<<,>>应用理解
    不讲原理,在使用中总结的规律,在进制转换中遇到10机制的左移或右移,可以将变量乘以2的n次方或者除以2的n次方,左乘,右除,但是乘除要考虑高位的数据溢出,低位数据的丢失。例如十进......
  • c语言测试题
     1、应用缓冲文件系统对文件进行读写操作,关闭文件的函数名为()。 A、fclose0 B、fwrite C、close(0 D、fread(0正确答案:A学生答案:AV2、若有int......
  • C-Primer-Plus-第二章-C语言概述
    第二章C语言概述参考书籍:CPrimerPlus(第6版)中文版一、前言打算跟这本书系统地学习一遍C语言,谨以此系列文章记录自己的学习之路。本文所有图片均来源于此书。二、主......
  • 2022-08-16 第六组 Myy 学习笔记_DQL数据库查询语言
    DQL数据库查询语言重点,DQL是我们每天都要接触编写最多也是最难的SQL,该语言用来查询记录,不会修改数据库和表结构。构建数据库创建一张student表:DROPTABLEIFEXISTSst......
  • 了解使用Java语言操作数据库的API之JDBC
    一、简单了解JDBC是官方定义的一套使用Java语言操作数据库的API,各数据库厂商按照此标准定义各自的实现类,因此在使用JDBC操作不同的数据库时,需导入对应的驱动jar包。二......
  • C语言`union`及`位域`
    C语言union及位域1.unionunion就相当于一个类型不固定的变量,存储大小由union内最长的变量决定,存储空间共享,访问内部不同的变量,就会以相应的变量规范对内存进行解析,以如下......