热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C语言2程序结构

2.1C程序结构C程序结构图示:C程序的执行部分是由语句组成的,程序的功能也是由执行语句实现的语句可分为以下五类:表达式语句:表达式+分号“;”组成一般格式:表达

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-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
    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
      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
      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
    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 条件语句一起使用,用来加速循环





推荐阅读
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • PHP设置MySQL字符集的方法及使用mysqli_set_charset函数
    本文介绍了PHP设置MySQL字符集的方法,详细介绍了使用mysqli_set_charset函数来规定与数据库服务器进行数据传送时要使用的字符集。通过示例代码演示了如何设置默认客户端字符集。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • PDO MySQL
    PDOMySQL如果文章有成千上万篇,该怎样保存?数据保存有多种方式,比如单机文件、单机数据库(SQLite)、网络数据库(MySQL、MariaDB)等等。根据项目来选择,做We ... [详细]
  • NotSupportedException无法将类型“System.DateTime”强制转换为类型“System.Object”
    本文介绍了在使用LINQ to Entities时出现的NotSupportedException异常,该异常是由于无法将类型“System.DateTime”强制转换为类型“System.Object”所导致的。同时还介绍了相关的错误信息和解决方法。 ... [详细]
  • 本文整理了Java中org.apache.activemq.util.ByteArrayInputStream.<init>()方法的一些代码示例,展示了 ... [详细]
  • PostgreSQL的upsert实例操作(insert
    建表语句:DROPTABLEIFEXISTSgoods;CREATETABLEgoods(store_cdint4NOTNULL,good_cdvarchar(50 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 六、流程控制语句
    选择结构if只有条件判断结果为真时才执行相应的操作循环结构for、whileuntil反复执行相同操作时,使用循环结构分支结构case根据变量值的匹配结果执行相 ... [详细]
  • 本文小编为大家详细介绍“Java中的逻辑结构模式有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java中的逻辑结构模式有哪些”文章能帮 ... [详细]
  • CCNP交换实验(VLAN/VTP/DHCP)
    实验要求:本拓扑按典型中小企业网分支-总部-分支结构模拟,总部核心路由为C3550,外联网通过OSPF协议,内联网通过VTP ... [详细]
  • switch分支结构一、程序运行流程的分类1、顺序结构:根据程序顺序依次执行。2、分支结构:根据判断决定程序的执行顺序。3、循环结构。分支结构三要素&# ... [详细]
author-avatar
墨镜小辣妹
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有