精华内容
下载资源
问答
  • C语言基本语法

    2018-04-03 21:43:13
    学c基础文档,C语言C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。 尽管C语言提供了...
  • C语言 基本语法 基本语法 C语言 基本语法 基本语法
  • 本篇文章主要讲解C语言 基本语法,这里提供简单的示例和代码来详细讲解C语言基本语法,开始学习C语言的朋友可以看一下
  • c语言基本语法归纳

    万次阅读 多人点赞 2018-07-23 12:09:58
    c语言基本语法归纳 1.define预定义 2.数据类型 3.函数 4.赋值语句 5.选择语句 if语句 switch开关语句 6.循环语句 for语句 while语句 do-while语句 7.结束语句 8.输入输出语句 9.注释 10.基本函数 11.逻辑运算符 ...

    c语言基本语法归纳

    本篇文章主要是为了给学习数据结构做一个语言铺垫,简单的归纳一些c语言方面的知识

    1.define预定义

    #define TRUE 1
    #define FALSE 0
    #define OK 1
    #define ERROR 0
    #define INFEASIBLE -1
    #define OVERFLOW -1
    typedef int Status;
        //Status是函数的类型,其值时函数结果状态代码
    typedef int bool;
        //bool是布尔类型,其值时TRUE或FALSE

    2.数据类型

    数据结构的表示用类型定义typedef描述。数据元素类型约定为ElemType,由用户在使用该数据类型时自行定义

    3.函数

    基本操作的算法都用以下形式的函数描述;

    函数类型 函数名(函数参数表){
        //算法说明  
        语句序列  
    }//函数名

    4.赋值语句

    简单赋值  变量名=表达式  
    条件赋值  变量名=条件表达式?表达式T:表达式F;  

    5.选择语句

    if语句

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

    这里说明一下c的语法

    条件语句1
    if(表达式){
        语句
    }
    
    条件语句2  
    if(表达式){
        语句1
    }else{
        语句2
    }
    
    还有一种  
    if(表达式1){
        语句1
    }else if(表达式2){
        语句2
    }else{
        语句3
    }

    switch开关语句

    开关语句1  
    switch(表达式){  
        case1: 语句序列1;break;  
        ....  
        case 值n: 语句序列n;break; 
        default:语句序列n+1;
    }  
    
    开关语句2  
    switch{  
        case 条件1: 语句序列1;break;  
        ....  
        case 条件n: 语句序列n;break; 
        default:语句序列n+1;
    }    

    6.循环语句

    for语句

    for(赋初始值表达式序列; 条件; 修改表达式序列)
      语句;
    
    示例:
    for(int i = 0; i < 10; i++){
         count += i;
    }  

    while语句

    while(条件)  
         语句;  
    
    示例:     
    while(i < 10){
        count += i;
    }

    do-while语句

    do{
        语句序列;
    }while(条件);
    
    示例:
    do{
      count += i  
    }while(i < 10);

    7.结束语句

    函数结束语句
    return 表达式;
    return;

    case结束语句
    break;

    异常结束语句
    exit(异常代码);

    8.输入输出语句

    输入语句
    scanf([格式串],变量1,...,变量n);
    示例:scanf("%s",&str1);

    输出语句
    printf("格式串",表达式1...表达式n);
    示例:printf('%s',str);

    9.注释

    单行注释 //注释内容
    多行注释 /*注释内容*/

    10.基本函数

    求最大值 max(表达式1,...,表达式n)
    求最小值 min(表达式1,...,表达式n)
    求绝对值 abs(表达式)
    求不足整数值 floor(表达式)
    求进位整数值 ceil(表达式)
    判断文件结束 eof(文件变量)或eof

    11.逻辑运算符

    与运算&&:对于A&&B,A为0时,不再求B值。
    或运算||:对于A||B,当A的值为非0时,不再对B求值

    展开全文
  • C语言基本语法归纳

    2013-08-13 13:29:38
    C语言基本语法归纳
  • C语言基本语法基础

    2013-03-21 22:00:17
    C语言基本语法基础,涉及基本的语法知识,是初学者的学习教程
  • 一起学习C语言:C语言基本语法(一)

    千次阅读 2020-02-14 22:32:13
      上一章 <一起学习C语言:C语言数据类型> 系列内容中,我们了解了整数类型、...C语言基本语法 1. if语句 1.1 if语句用法 1.2 if语句分析 目录预览 章节内容: C语言基本语法   做任何事情都...

      上一章 <一起学习C语言:C语言数据类型> 系列内容中,我们了解了整数类型、字符类型和浮点数类型的使用方法以及二进制到八进制、十进制和十六进制的转换方式。本章节,我们学习C语言基本语句用法,以及常用的运算符号。


    章节预览:

    C语言基本语法
    1. if语句
    1.1 if语句用法
    1.2 if语句分析
    目录预览


    章节内容:


    C语言基本语法


      做任何事情都需要经过思考再做决定。我们的程序中,通过不同的表达语句来完成程序执行时的“思考”工作。从这些语句里,可以体现出我们对代码的理解。


    1. if语句

    1.1 if语句用法

      生活中,每天都会面临着各种选择,比如:中午吃什么饭,一会儿去打篮球还是打羽毛球,今天几点下班?程序中,同样面临着不同的场景,需要我们编写判断语句去执行,并完成处理。

     【例1.1】 商场一千克苹果卖5元钱,购买N公斤苹果需要多少钱?

      根据这个例子,我们可以定义出一千克的价格和购买的数量,然后通过价格乘以数量得到总额:

        int kg = 5; //一千克的价格
        int amount = 0; //购买的数量

        增加输出语句:
            printf(“我们商店新到了一批苹果,一千克5元钱,请问您需要多少千克?\n”);

        增加接收语句:
            scanf("%d",&amount);

        使用if语句判断:
            if(0 < amount) 或 if (amount > 0)

        输出结果:
            printf(“您一共购买%d千克,消费:%d元。”, amount, kg * amount);

        接下来,我们执行完整代码:
            int kg = 5; //一千克的价格
            int amount = 0; //购买的数量
            printf(“我们商店新到了一批苹果,一千克5元钱,请问您需要多少千克?\n”);
            scanf("%d",&amount);
            if(amount > 0)
              printf(“您一共购买%d千克,消费:%d元。”, amount, kg * amount);

        这段代码中,if语句构成方式为:
            if(表达式)
              语句

            if语句中的“表达式”可以是任意表达式,其中关系表达式和逻辑表达式最为常见。在if(amount > 0)中,“amount > 0”就是一个关系表达式。所谓关系表达式就是由两个数值进行比较的式子。

    1.1-1 通过判断条件

    1.1-2 未通过判断条件

      参考图1.1-1和1.1-2,我们通过购买的数量作为判断条件,如果amount大于0,输出结果(执行语句),否则不输出。


      下面我们来分析另一种if语句用法,if...else:

        输出结果改成:
                printf(“您一共购买%d千克,消费:%d元。”, amount, kg * amount);
            else
                printf(“您的要求无法满足,购买失败。”);

        执行完整代码:
            int kg = 5; //一千克的价格
            int amount = 0; //购买的数量
            printf(“我们商店新到了一批苹果,一千克5元钱,请问您需要多少千克?\n”);
            scanf("%d",&amount);
            if(amount > 0)
              printf(“您一共购买%d千克,消费:%d元。”, amount, kg * amount);
            else
              printf(“您的要求无法满足,购买失败。”);


        这段代码中,if语句构成方式为:
          if(表达式)
            语句1
          else
            语句2

          语句1和语句2可以是一个简单的语句,也可以是一个复合语句,还可以是另一个if语句或按照这种形式嵌套多个if语句。

    1.1-3 if...else通过判断条件

    1.1-4 if...else未通过判断条件

      参考图1.1-3和1.1-4,我们还是通过购买的数量作为判断条件,如果amount大于0,输出消费金额,否则输出购买失败。

    1.2 if语句分析

      参考上面2个例子,可以初步了解使用if语句实现的选择结构。

      if语句一般分为三种形式:

    1. if(表达式)                      (语句形式一)
      语句

      或 if(表达式) 语句         (语句形式二)


    1. if(表达式)                      (语句形式一)
      语句1
      else
      语句2

      或 if(表达式) 语句1       (语句形式二)
      else 语句2


    1. if(表达式1)                    (语句形式一)
      语句1
      else if(表达式2)
      语句2

      else if(表达式n)
      语句n
      else
      语句n+1

      或 if(表达式1) 语句1      (语句形式二)
      else if(表达式2) 语句2

      else if(表达式n) 语句n
      else 语句n+1


     【例4.2】使用伪随机函数rand()得到5以内的值,然后加上“表达式n”的n值并输出结果。

      根据这个例子,我们可以生成伪随机数N,然后编写if语句:
        #include <stdio.h>
        #include <stdlib.h>
        #include <time.h>

        int main() {
           int N = 0;
           srand((unsigned)time(NULL));
           N = rand() % 5;
           if (N == 1) //语句形式一
             printf(“N=%d,n=%d. \n”, N, N + 1);
           else if (N == 2)
             printf(“N=%d,n=%d. \n”, N, N + 2);
           else if (N == 3) printf(“N=%d,n=%d. \n”, N, N + 3); //语句形式二
           else if (N == 4) printf(“N=%d,n=%d. \n”, N, N + 4);
           else
             printf(“N=%d,n=%d. \n”, N, N + 5); //语句形式一

            return 0;
        }


        程序分析:
          1. 根据time()函数获取到当前时间,并通过srand()函数重新“播种”伪随机数种子。
          2. 通过rand()函数生成随机数,然后通过取模运算符“%”获取到0-4的整数(5会被整除,余0)。
          3. 由多个if语句组成的分支结构,它首先从“N == 1”开始判断,如果不相等,则继续向下执行一直到“N == 4”,如果都不相等,则进入else分支下的语句执行。


     【例4.3】 我们玩一个猜牌游戏,现在桌子上有三种牌,分别是“J”、“Q”、“K”。现在,我们随机抽取一张牌,如果抽到“J”或“Q”只需要输出普通牌即可,如果抽到“K”我们需要输入2个数字并输出它们相加的结果。

        根据这个例子,我们可以生成伪随机数N,然后转换到对应的牌数:
          #include <stdio.h>
          #include <stdlib.h>
          #include <time.h>

          int main() {
             int N = 0, a = 0, b = 0;
             char ch = 0;
             srand((unsigned)time(NULL));
             N = rand() % 3;
             if (N == 0)
               ch = ‘J’;
             else if (N == 1)
               ch = ‘Q’;
             else if (N == 2)
               ch = ‘K’;

             if (ch == ‘J’ || ch == ‘Q’)
                printf(“这是一张普通牌。”);
             else if (ch == ‘K’)
             {
                printf(“请您输入两个数字,每次输入完成请按回车键: \n”);
                scanf("%d%d", &a, &b);
                printf(“您抽到了幸运牌,并得到吉祥数字%d。”, a + b);
              }

             return 0;
    }


      程序分析:
        1. 我们首先定义了三个整形对象,它们分别表示随机数N、数字a和数字b。第二行定义了一个字符对象,它用来记录随机数N转换的牌号。
        2. 根据time()函数获取到当前时间,并通过srand()函数重新“播种”伪随机数种子。
        3. 通过rand()函数生成随机数,然后通过取模运算符“%”获取到0-2的整数(3会被整除,余0)。
        4. 由三个if语句组成的分支结构,它首先从“N == 0”开始判断,如果不相等,则继续向下执行一直到“N == 2”,执行到对应语句时,将由字符对象ch记录牌号。
        5. 由二个if语句组成的分支结构,如果“ch == 'K”成立,将执行语句块(1)。示例中,我们通过if (ch == ‘J’ || ch == ‘Q’)语句,直接判断了“J”和“Q”。其中,“||”称为逻辑或运算符,在后面小节“逻辑运算符”中讲述。

    (1):当我们的判断语句需要执行多行语句时,必须使用语句块。语句块由大括号组成,即左大括号“{”和右大括号“}”。


    目录预览


    <一起学习C语言:C语言发展历程以及定制学习计划>
    <一起学习C语言:初步进入编程世界(一)>
    <一起学习C语言:初步进入编程世界(二)>
    <一起学习C语言:初步进入编程世界(三)>
    <一起学习C语言:C语言数据类型(一)>
    <一起学习C语言:C语言数据类型(二)>
    <一起学习C语言:C语言数据类型(三)>

    展开全文
  • 嵌入式系统常用C语言基本语法概要
  • C语言基本语法元素清华大学.ppt
  • C语言基本语法归纳 ppt
  • 一起学习C语言:C语言基本语法(五)

    千次阅读 2020-02-29 20:41:24
    一起学习C语言:C语言基本语法(四)> 中,我们了解了位运算符的语法和不同的应用场景中的选择。本篇文章中,我们分析switch语句,并通过几个示例分析break、#define和三目运算符的应用场景。 章节预览: 5. ...

      上一篇 <一起学习C语言:C语言基本语法(四)> 中,我们了解了位运算符的语法和不同的应用场景中的选择。本篇文章中,我们分析switch语句,并通过几个示例分析break、#define和三目运算符的应用场景。


    章节预览:

    5. switch语句
    5.1 break用法
    5.2 switch语句分析
    5.3 #define用法
    5.4 switch语句用法
    6. 三目运算符
    6.1 三目运算符保护形式
    7. 本章总结
    8. 练习题
    目录预览


    章节内容:


    5. switch语句


      C语言中,if和switch都属于分支结构,其中if分支条件可以是表达式,也可以是常量表达式。而switch入口条件可以是表达式,也可以是常量表达式,而分支条件只能是常量表达式。

     比如:if (a == 1) 语句一 形式一
                else if (a == ‘2’)   形式二
                  语句二
                else
                  语句三


      使用switch可以写为:
           int a = 1,或a = ‘2’,或a = 0(或a不等于1且a不等于2)
           switch (a 或 常量值) {
           case 1: 语句一 形式一
           case ‘2’:           形式二
             语句二
           default:
             语句三
           }


      【例4.25】 使用伪随机函数rand()得到3以内的值,然后加上“表达式n”的n值并输出结果。

          #include <stdio.h>
          #include <stdlib.h>
          #include <time.h>

          int main() {
             int N = 0;
             srand((unsigned)time(NULL));
             N = rand() % 3;

             switch(N) {
               case 1: (“N=%d,n=%d. \n”, N, N + 1);          //语句形式一
               case 2:                                                         //语句形式二
                 printf(“N=%d,n=%d. \n”, N, N + 2);

               default: printf(“N=%d,n=%d. \n”, N, N + 3); //语句形式一
             }
             return 0;
          }


      程序分析

        1. 根据time()函数获取到当前时间,并通过srand()函数重新“播种”伪随机数种子。
        2. 通过rand()函数生成随机数,然后通过取模运算符“%”获取到0-3的整数(3会被整除,余0)。
        3. 由多个switch语句组成的分支结构,它首先从“case 1:”开始判断,如果N不相等1,则继续向下执行一直到“case 2:”,如果都不相等,则进入default:分支下的语句执行。


      程序结果

        【例4.25】 如果N == 1,输出case 1、case 2和default对应的语句块“N=1,n=2.”、“N=1,n=3.”和“N=1,n=4.”,参考图4-19。

    在这里插入图片描述

    4-19 switch(1)

        如果N == 2,输出case 2和default对应的语句块 “N=2,n=4.”和“N=2,n=5.” ,参考图4-20。

    在这里插入图片描述

    4-20 switch(2)

        如果N == 0,输出default对应的语句块 “N=0,n=3.” ,参考图4-21。

    在这里插入图片描述

    图4-21 switch(0)

      结果分析

        【例4.25】 只有N == 0输出的结果是我们想要的,而N1,N2时,都输出了它们之后的分支结果。


      接来下,我们来了解在实际编程中,如何避免这种情况的发生。


    5.1 break用法

      上述示例中,switch结构的某个分支内的语句执行完成时,应跳出switch语句块,并执行switch之后的语句。


      【例4.25】 中,switch语句可以改为:

          switch(N) {
            case 1: (“N=%d,n=%d. \n”, N, N + 1); break; //语句形式一
            case 2: //语句形式二
              printf(“N=%d,n=%d. \n”, N, N + 2);
              break;

            default: printf(“N=%d,n=%d. \n”, N, N + 3); //语句形式一
          }

          即分支语句后增加break(12)语句(13)。再次执行程序会发现,输出结果与我们的设计思路符合。


      (12):break属于关键字,它用来跳出switch结构或循环结构使用。

      (13):在C程序中,分号(;)是一条语句的结束符,即“break;”是一条跳转语句。


    5.2 switch语句分析

      switch的分支结果范围只能是逻辑值、整数值或字符值,比如:布尔false、整数2或字符’3’。现在我们来分析switch语法:

          switch (N) {
            case !true: printf(“false.”); break;
            case 1 == 1: printf(“1 == 1.”); break;
            case 2:
            {
              printf(“2.”);
              break;
            }
            case ‘3’:
            {
              printf("‘3’.");
            }
            break;
            case 1 << 4:
              printf(“1 << 4.”); break;

            default:
              printf(“default.”);
           }


      示例分析

          第一个case表达式为!true,它的结果为逻辑值“假”,即false或数字0。
          第二个case表达式为1 == 1,它的结果为逻辑值“真”,即true或数字1。
          第三个case是一个数字值2。
          第四个case是一个字符值’3’,转换成数字为51(14)。
          第五个case表达式为1 << 4,即数字16。
          第六个是default(15),它属于默认分支,一般在写case分支最后位置。


      (14):字符值一般选择ascll码表128以内的十进制数字,它的值由一个整数表示。比如字符’3’对应ascll码表中的十进制数字51。字符值转换到整数值也比较简单,即’3’ – ‘0’ = 3,其中字符’0’-‘9’是数字段,我们只需要拿字符值减去它对应的数字段首个值即可得到。类似的情况还有’a’、’A’,它们的数字段长度为26,即表示’a’-’z’和’A’-’Z’。

      (15):default的用法类似于if语句中的else,即所有case都不进入的情况下,进入default。default语句后可以不加break,我们只需把它写在所有case的后面即可。


      上述示例中,无论我们是否使用语句块,都应在执行语句最后写上break语句。使用语句块的情况下,break可以写在语句块内,也可以写在语句块外。


    5.3 #define用法


      实际编码时,如果不确定某个常量值是否修改,或者为这个常量值定义一个标识符,可以通过 #define来实现这部分功能。比如case 1,我们为数字1起个名字,可以写成#define TAG 1,完整代码如下:

          #include <stdio.h>
          #include <stdlib.h>
          #define SNOW 1

          int main() {
            int N = 1;
            switch (N) {
              case TAG:
                printf(“1.”);
                break;

              default:
                printf(“default.”);
            }

            return 0;
          }


      #define定义标识符的一般形式为
        #define 标识符 常量

      “#define XXXX XXXX”是在程序编译之前要处理的内容,称为编译预处理命令。

      #define一般称为宏定义,标识符是定义中的宏名称,简称宏。宏在程序中不占内存,它只是一个临时变量,预编译后这个符号就不存在了。宏所表示的常量可以是数字、字符、字符串、表达式。

      #define语句可以写在“#include XXXX”下面,也可以写在函数中。但大部分情况下,都建议写在“#include XXXX”下面。


    5.4 switch语句用法


      switch语句中的case分支应写常量值,这样即可以减少编译时的开销,又可以表达出具体数字。比如“case 1 << 4”和 “case 16”,其中“case 16”不通过运算就能表达出具体数字。


      【例4.26】 为了帮助学生更接近实际编程,学校决定购买100套“四通道信号数据采集卡”。每套采集卡工作时,只能开启一个数据通道,通道号占用一个字节,并按照1、10、100、1000二进制数字分别表示通道一至通道四的开启情况。现在,我们根据二进制数字计算出开启通道号。

          根据这个例子,我们首先计算出二进制数字对应的十进制数字,然后通过宏定义写出每个通道的宏

            二进制数字1、10、100、1000,分别对应十进制表达式1 << 0、1 << 1、1 << 2、1 << 3,即十进制数字1、2、4、8。

            #define CHANNEL1 1
            #define CHANNEL2 2
            #define CHANNEL3 4
            #define CHANNEL4 8

            char N = CHANNEL1;
            switch (N)
            {
              case CHANNEL1:
                printf(“通道一.”);
                break;
              case CHANNEL2:
                printf(“通道二.”);
                break;
              case CHANNEL3:
                printf(“通道三.”);
                break;
              case CHANNEL4:
                printf(“通道四.”);
                break;

              default:
                printf(“未开启通道.”);
            }


      示例分析

          1. 程序中使用宏,可以较清晰表达出代码的含义。
          2. 当某个具有实际意义的常量值被大量使用时,使用宏也可以做到避免出错的情况。比如:数字1,它在示例中表示开启通道一,代码中多处使用它时,修改较为困难。如果用宏表示,只需修改宏所对应的常量值。


    6. 三目运算符


      C语言中,有一种运算符即可以通过判断条件输出语句,也可以结合赋值运算符为变量赋值,它称为三目运算符。三目运算符由三个表达式或表达式结果组成,又称为三元运算符。


      三目运算符的形式
          表达式1 ? 表达式2 : 表达式3;

      三目运算符的用法
          true ? printf(“表达式成立.”) : printf(“表达式不成立.”);


      【例4.27】 判断int类型变量a和b的值,并输出比较结果。

          int a = 1, b = 2;
          a > b ? printf(“a大于b.”) : printf(“a小于b.”);


      示例结果

          a小于b.


      示例分析

          程序首先执行“a > b ?”,如果为“真”,执行printf(“a大于b.”),否则执行printf(“a小于b.”)。


      【例4.28】 判断int类型变量a和b的值,并把最大值赋给c。

          int a = 1, b = 2, c;
          a > b ? c = a : c = b;
          或
          c = a > b ? a : b;


      示例结果

          c等于2.


      示例分析

          程序首先执行“a > b ?”,如果为“真”,a赋值给c,否则b赋值给c。


      三目运算符的用途不仅仅如此,在后面的示例中将接触更多写法。


    6.1 三目运算符保护形式

      当三目运算符与别的运算符一起使用时,也存在优先级的关系,接下来我们了解如何避免因运算符优先级的原因导致结果出错。


      【例4.29】“非”运算符和三目运算符一起运算。

          int a = 1, b = 1, c;
          c = !a == b ? 3 : 2;


      示例结果

          c等于2.


      示例分析

          1. 程序如果先执行“a == b”,得到"!3",结果为“假”,即0。
          2. 程序如果先执行“!a”,得到“0 == 1”,结果为2。

          从输出结果来看,程序执行顺序符合“2.”,即先执行“!a”,破坏了三目运算符的运算数据。


      接下来,增加小括号保护三目运算符

          int a = 1, b = 2, c;
          c = !(a == b ? 3 : 2);


      示例结果

          c等于0.


      示例分析

          这次把三目运算符放入小括号内,得到的结果符合我们的设计逻辑。


      实际使用时,如果我们不能确定三目运算符内是否存在优先级问题,可以写成以下形式

          ((表达式1) ? (表达式2) : (表达式3));


    7. 本章总结


      本章节,我们了解了C语言基本语法和不同的运算符的使用方式,日常编程中,我们需要做到正确选择分支结构、正确使用运算符,这样可以避免结构体积庞大、数据运算错误等问题。本章节内容相对简单一些,但也需要多次学习才能完全理解。


    8. 练习题


    1. if语句分为几种形式?
    2. 逻辑运算符和关系运算符分别适合哪些场景?
    3. 计算出int类型数字“-1234567 >> 9”的结果,并通过数据保护方式做到清除高位保留低位的效果。
    4. if语句和switch语句有哪些不同之处?如何保证switch执行得到正确结果?
    5. 宏定义是什么?结合宏定义编写出合理的switch结构。
    6. 三目运算符适合用在哪些场景?当a = 1,b = 2,c =3时,计算出!a < b ? a > c ? a : c : b;的结果,然后使用小括号按照“表达式1 ? 表达式2 : 表达式3”执行顺序,编写新的语句。

    目录预览


    <一起学习C语言:C语言发展历程以及定制学习计划>
    <一起学习C语言:初步进入编程世界(一)>
    <一起学习C语言:初步进入编程世界(二)>
    <一起学习C语言:初步进入编程世界(三)>
    <一起学习C语言:C语言数据类型(一)>
    <一起学习C语言:C语言数据类型(二)>
    <一起学习C语言:C语言数据类型(三)>
    <一起学习C语言:C语言基本语法(一)>
    <一起学习C语言:C语言基本语法(二)>
    <一起学习C语言:C语言基本语法(三)>
    <一起学习C语言:C语言基本语法(四)>

    展开全文
  • 一起学习C语言:C语言基本语法(二)

    千次阅读 2020-02-15 18:36:42
    一起学习C语言:C语言基本语法(一)> 中,我们了解if语句的语法和不同的应用场景,以及语句块的使用方式。本篇文章中,我们分析逻辑运算符的用法,并通过几个示例分析逻辑运算符之间的执行顺序。 章节预览: 2. ...

      上一篇 <一起学习C语言:C语言基本语法(一)> 中,我们了解if语句的语法和不同的应用场景,以及语句块的使用方式。本篇文章中,我们分析逻辑运算符的用法,并通过几个示例分析逻辑运算符之间的执行顺序。


    章节预览:

    2. 逻辑运算符
    2.1 逻辑运算符用法
    2.2 布尔型变量
    2.3 逻辑表达式
    2.4 逻辑运算符的优先级
    目录预览


    章节内容:


    2. 逻辑运算符

      部分场景下,一个简单条件已无法满足判断需求时,可以通过对多个简单条件优化,组成复合条件。

      【例2.1】 如果今天不上班,并且健身房照常营业,那么我会去健身房锻炼。
       这个示例是由两个简单条件组成的复合条件:1. 今天是否上班;2. 健身房是否营业。只有这两个条件都满足时,才去健身房。


    2.1 逻辑运算符用法

      逻辑运算符分为三种:与(&&)、或(||)、非(!)。参考图2.1-1 逻辑运算符表:

    逻辑运算符 英文名 含义 相近含义 举例 说明
    && AND 逻辑与 且/而且 a && b 如果a和b都为真,则表达式成立,否则表达式不成立
    || OR 逻辑或 或者 a || b 如果a或b其中一个为真,则表达式成立,否则表达式不成立
    ! NOR 逻辑非 不等于 !a 如果a为假,则!a为真,表达式成立,如果a为真,则!a为假,表达式不成立
    2.1-1 逻辑运算符表

      现在我们分析 【例2.1】
        根据这个例子,我们选择使用“&&”,表示式为:if (今天不上班 && 健身房照常营业)。

        表达式成立代码

            int a = 1, b = 1;
            if (a == 1 && b == 1)
            {
                printf(“表达式成立。”);
            }
            else
            {
                printf(“表达式不成立。”);
            }


     【例2.2】 班主任在同学们的提议下组织一次春游活动。如果参团人数达到50人,使用班级费用报销活动费用。如果参团人数少于50人,则由每位参团同学交纳20元钱用于活动费用,如果同学们不愿交纳活动费用,则取消春游活动。

        根据这个例子,我们选择使用“||”,表示式为:if (参团人数大于等于50人 || 每位参团同学交纳20元钱)。

        表达式不成立代码
            int a = 49, b = 0;
            if (a >= 50 || b == 20)
            {
                printf(“本次春游活动组织成功,同学们可以玩耍一天了。”);
            }
            else
            {
                printf(“本次春游组活动织失败,同学们继续上课。”);
            }


        程序分析

         【例2.1】【例2.2】 实现代码中,我们分别使用了与、或运算符,并通过对变量值修改,制造出表达式成立和表达值不成立两种情况。在实际编程中,我们需要考虑更多的因素,比如:数据是否异常、数据值范围不明确、运算符的优先级等问题。

        逻辑与、或运算符分析

          “&&”、“||”属于双目运算符,它需要有两个运算对象,比如: (a != 0) && (b != 0) ,(a != 0) || (a > b)。“&&”和“||”的执行顺序都是从左向右,即先判断左侧条件,然后判断右侧条件。

      现在,我们还没有讲述“!”运算符,别着急!我们先了解一个新的变量,参考这个变量更容易理解。


    2.2 布尔型变量

      在C99标准中,增加了一种称作“逻辑型”的单字节数据类型,一般叫做布尔型。布尔型的原型是_Bool关键字,定义在<stdbool.h>文件中,程序中一般使用它的宏定义bool。bool类型拥有两个符号常量true和false,true代表1,false代表0,程序中用它们表示真和假。

        布尔型在程序可以这么用
          int a = 1, b = 2;
          bool c = a < b; //关系赋值

          或 bool a = true, b = false; //直接赋值


     【2.3】 班主任在同学们的提议下组织一次春游活动。如果参团人数少于50人,使用班级费用报销活动费用。如果参团人数达到50人,则由每位参团同学交纳20元钱用于活动费用,如果同学们不愿交纳活动费用,则取消春游活动。

       (1) 根据这个例子,我们选择使用“!”,表示式为:if (!(参团人数大于等于50人 || 每位参团同学交纳20元钱))。

            表达式成立代码

                int a = 20, b = 0;
                if (!(a >= 50 || b == 20))
                {
                    printf(“本次春游活动组织成功,同学们可以玩耍一天了。”);
                }
                else
                {
                    printf(“本次春游组活动织失败,同学们继续上课。”);
                }


       (2) 现在使用bool对象编写if语句,表示式为:if (!c)。

            表达式不成立代码

                int a = 50, b = 0;
                bool c = a >= 50 || b == 20;
                if (!c)
                {
                    printf(“本次春游活动组织成功,同学们可以玩耍一天了。”);
                }
                else
                {
                    printf(“本次春游组活动织失败,同学们继续上课。”);
                }


        程序分析

         【例2.3】 我们编写两种实现代码:(1)采用“!”和“||”两种逻辑运算符组合编写,这种方式需要我们理解不同逻辑运算符之间的优先级关系,稍有不慎就会得到意料之外的结果。(2)采用“!”和布尔型对象组合编写,这种方式可以让我们更容易分析判断逻辑,但在实际编程中,使用第一种(1)方式更直观一些。
    实现代码(1)和(2)表达的意思相同,首先运算出逻辑或表达的值,然后通过“!”运算取反结果,即1取反为0,0取反为1。


        逻辑非运算符分析
          “!”属于单目运算符,它要求有一个运算对象,比如:!a,!(a > b)。“!”的执行顺序是从右向做,即先判断右侧条件,然后结果取反,即“真”为“假”,“假”为“真”。


    2.3 逻辑表达式

      由逻辑运算符“控制”运算结果的表达式,称为逻辑表达式。逻辑表达式的结果由数字1或数字0,即“真”或“假”表示,结果为“真”时,即表达式成立,结果为“假”时,即表达式不成立。而在一个条件中,“假”由0表示,而“真”由非0值表示,比如:

    1. !(条件)
    形式 描述 非运算形式 结果
    !-2,!2,!(a = -2) 条件得到的都是非0值,由“真”表示。 !真 “假”,即0。
    !0,!(a = 0) 条件得到的值都为0,由“假”表示。 !假 “真”,即1。

    1. 条件1 && 条件2
    形式 描述 与运算形式 结果
    0 && (a = -2) 它的条件1得到的值为0,即“假”,直接可以得出“&&”运算结果。 假 && 不需要运算 “假”,即0。
    (a = 2) && 0 它的条件1中,首先变量a赋值为2,得到条件值为2,即“真”。它的条件2得到的值为0,即“假”。 真 && 假 “假”,即0。
    (a = 2) && (b = -2) 它的条件1中,首先变量a赋值为2,得到条件值为2,即“真”。它的条件2中,首先变量b赋值为-2,得到条件值为-2,即“真”。 真 && 真 “真”,即1。

    1. 条件1 || 条件2
    形式 描述 或运算形式 结果
    2 || (a = 0) 它的条件1得到的值为2,即“真”,直接可以得出“||”运算结果。 真 || 不需要运算 “真”,即1。
    0 && (a = -2) 它的条件1得到的值为0,即“假”。它的条件2中,首先变量a赋值为-2,得到条件值为-2,即“真”。 假 && 真 “真”,即1。
    0 && 0 它的条件1和条件2得到的值都为0,即都为“假”。 假 && 假 “假”,即0。

    2.4 逻辑运算符的优先级

      在一个逻辑表达式中,可以包含多个逻辑运算符,比如:!(a != 0) && (a > 2) || (b == 0)。这时候,需要我们了解每个逻辑运算符的优先顺序,才能设计出我们需要的表达式。下面我们编写个示例,分析出它们之间的执行顺序。

      【例2.4】 通过“!(a != 0) && (a > 2) || (b == 0)”表达式分析出“!”、“&&”和“||”之间的执行顺序。

          根据不同逻辑运算符的特性,我们可以把示例中的表达式分成多个部分单独运算

            【部分1】 通过“&&”运算符编写出结果为“真”的表达式:

                 int a = 20;
                 if ((a != 0) && (a > 2))
                 {
                     printf(“表达式成立。”);
                 }
                 else
                 {
                     printf(“表达式不成立。”);
                 }

            【部分1】 执行结果:
                 输出:“表达式成立。”。


            【部分2】 在部分1的实现代码中,分别在表达式左侧和右侧判断条件前增加“!”运算符,并输出结果:

                【部分2.1】 左侧增加“!”运算符:

                     int a = 20;
                     if (!(a != 0) && (a > 2))
                     {
                         printf(“表达式成立。”);
                     }
                     else
                     {
                         printf(“表达式不成立。”);
                     }

               【部分2.1】 执行结果:
                    输出结果为:“表达式不成立。”。


               【部分2.2】 右侧增加“!”运算符:
                    int a = 20;
                    if ((a != 0) && !(a > 2))
                    {
                        printf(“表达式成立。”);
                    }
                    else
                    {
                        printf(“表达式不成立。”);
                    }

               【部分2.2】 执行结果:
                    输出结果为:“表达式不成立。”。


            【部分2】 执行分析:

    示例原型 运算表达式 结果
    (a != 0) && (a > 2) 真 && 真 “真”,即1。
    !(a != 0) && (a > 2) 假 && 真 “假”,即0。
    (a != 0) && !(a > 2) 真 && 假 “假”,即0。

                【部分2】 实现代码,在“与”表达式成立的基础上,分别在左侧和右侧条件前增加“非”运算符,值都为“假”。可以推算出“与”的优先级低于“非”,即“!”->“&&”。

                接下来计算“与”和“或”之间的执行顺序,如果“与”的优先级高于“或”,那么不用再继续判断,即可得出结论。


            【部分3】 在部分1的实现代码中,分别在表达式左侧和右侧判断条件增加“||”运算符和条件,并输出结果:
                【部分3.1】 左侧增加“||”运算符和条件:

                      int a = 20, b = 0;
                      if ((b == 0) || (a != 0) && (a < 20))
                      {
                          printf(“表达式成立。”);
                      }
                      else
                      {
                          printf(“表达式不成立。”);
                      }

                【部分3.1】 执行结果:
                      输出结果为:“表达式成立。”。

                【部分3.1】 执行分析:

                      这个示例比较烧脑,我们分析一下它的执行思路。
                      如果程序先执行“(b == 0) || (a != 0)”这部分,得到结果为“真”, (a < 20)得到的结果为“假”,可以得到“与”表达式“真 && 假”,示例结果为“假”,表达式不成立。
                      但实际结果为“真”,只能先执行“与”表达式,得到结果为“假”,然后执行“或”表达式“真 || 假”,示例结果为“真”,表达式成立。


                【部分3.2】 右侧增加“||”运算符和条件:

                      int a = 20, b = 0;
                      if ((a < 0) && (a > 2) || (b == 0))
                      {
                          printf(“表达式成立。”);
                      }
                      else
                      {
                          printf(“表达式不成立。”);
                      }

                【部分3.2】 执行结果:
                      输出结果为:“表达式成立。”。

                【部分3.2】 执行分析:
                      如果程序先执行“(a > 2) || (b == 0)”这部分,得到结果为“真”,(a < 0)得到的结果为“假”,可以得到“与”表达式“假 && 真”,示例结果为“假”,表达式不成立。
                      但这里的实际结果也为“真”,只能先执行“与”表达式,得到结果为“假”,然后执行“或”表达式“假 || 真”,示例结果为“真”,表达式成立。


            【部分3】 执行分析:

    示例原型 运算表达式 结果
    (a != 0) && (a > 2) 真 && 真 “真”,即1。
    (b == 0) || (a != 0) && (a < 20) 真 || (真 && 假) “真”,即1。
    (a < 0) && (a > 2) || (b == 0) (假 && 真) || 真 “真”,即1。

                  部分3实现代码,在“与”表达式成立的基础上,分别在左侧和右侧条件增加“或”运算符和条件,值都为“真”。可以推算出“与”的优先级高于“或”,即“&&”->“||”。

        程序分析

           【例2.4】 我们通过三部分表达出了逻辑运算符之间的关系,首先通过“与”运算符和“非”运算符比较,得出“非”的优先级高于“与”,然后通过“与”运算符和“或”运算符比较,得出“与”的优先级高于“或”的结论。
    “与”、“或”、“非”,之间的优先级关系为:“非”高于“与”,“与”高于“或”,即“!” ->“&&” ->“||”。

        实际编程中,在我们不清楚运算符之间的优先级时,可以通过小括号进行代码保护,比如:!( (a < 0) && ( (a > 2) || (b == 0) ) )


    目录预览


    <一起学习C语言:C语言发展历程以及定制学习计划>
    <一起学习C语言:初步进入编程世界(一)>
    <一起学习C语言:初步进入编程世界(二)>
    <一起学习C语言:初步进入编程世界(三)>
    <一起学习C语言:C语言数据类型(一)>
    <一起学习C语言:C语言数据类型(二)>
    <一起学习C语言:C语言数据类型(三)>
    <一起学习C语言:C语言基本语法(一)>

    展开全文
  • C语言基本语法知识练习题,根据语法设置相关练习题目
  • 坠贤炬夸盂循束谐程绣碴希拓传杉谨震汉岸馁憨午驹问乳凑迸傅描完晒藏C语言基本语法元素-清华大学课件_图文.pptC语言基本语法元素-清华大学课件_图文.ppt 圾讽室敷殖慢埃什堰尿逢诱嗓瞎缅筑氨率均熄欠蕊远柑秤整纬老...
  • 嵌入式系统常用的C语言基本语法概要 1基本数据类型 2运算符 3流程控制 4函数 5数组 6指针 7结构体 8编译预处理 9用typedef定义类型 *
  • =====================================请列举C语言中常见的语法,.先是标准语法#includevoid main{}然后是数据类型 比如 整数型 int 浮点型 float;double.然后是循环体 比如 if(){}else(){}..其他的之后可以慢慢...
  • C语言基本语法.pptx

    2020-05-05 18:48:01
    第二讲C语言基本语法本讲主要内容 C语言的基本元素1 C语言的数据类型2 C语言的常量和变量3 C语言的运算符和表达式4 C语言的基本输入输出语句5一C语言的基本元素--11基本字符集ASCII字符集 数 字0 1 2 3 4 5 6 7 8 ...
  • drl 规则语言 语法 C语言基本语法规则 (C Language Basic Syntax Rules) C language syntax specify rules for sequence of characters to be written in C language. In simple language it states how to form ...
  • 嵌入式系统常用的C语言基本语法概要
  • 通过上一篇文章《重试C语言之C语言程序结构》,我们可以大致了解一个简单的C语言程序的构成,但是我们今天要学习的《重试C语言之C语言基本语法》是为了让我们更加了解C语言程序开发这门语言。C 语言程序由各种指令...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 113,591
精华内容 45,436
关键字:

c语言基本语法

c语言 订阅