精华内容
下载资源
问答
  • a为假 1表达式语句 由一个表达式加一个分号构成 只有分号组成的语句称为空语句 空语句是什么也不执行的语句在程序中空语句可用来作空循环体 可以用{}把一些语句括起来称为复合语句 { z=x+y; t=z/100; printf%f,t; } ...
  • C语言 | 03 基本语句

    2019-03-18 15:48:23
    3.1 表达式语句,空语句,复合语句 3.1.1 表达式语句 C程序设计语言的表达式语句由表达式加上分号“;”组成。 分别由以下几种类:算术表达式、赋值表达式、逗号表达式、关系表达式、逻辑表达式 等... 其一般...

    3.1 表达式语句,空语句,复合语句

    3.1.1 表达式语句

    C程序设计语言的表达式语句由表达式加上分号“;”组成。

    分别由以下几种类:算术表达式、赋值表达式、逗号表达式、关系表达式、逻辑表达式 等...

     

    其一般形式为:

    表达式;

    执行表达式语句就是计算表达式的值。

    3.1.2 空语句

    1. 空语句是什么也不执行的语句,一般由分号“;”或大括号"{ }"组成。
    2. 在程序中空语句可用来作空循环体。
    3. 一般推荐使用大括号"{ }"来表示空语句,这样更直观

    3.1.3 复合语句

    1. 把多个语句用括号{}括起来组成的一个语句称复合语句。 在程序中应把复合语句看成是单条语句,而不是多条语句
    2. 复合语句内的各条语句都必须以分号“;”结尾;此外,在括号“}”外不能加分号。

     

    3.2 输入输出函数的调用

    3.2.1 printf函数

    printf是输出一个字符串。

    printf格式字符:

    打印格式

    对应数据类型

    含义

    %d

    int

    接受整数值并将它表示为有符号的十进制整数

    %hd

    short int

    短整数

    %hu

    unsigned short

    无符号短整数

    %o

    unsigned int

    无符号8进制整数

    %u

    unsigned int

    无符号10进制整数

    %x,%X

    unsigned int

    无符号16进制整数,x对应的是abcdef,X对应的是ABCDEF

    %f

    float

    单精度浮点数

    %lf

    double

    双精度浮点数

    %e,%E

    double

    科学计数法表示的数,此处"e"的大小写代表在输出时用的"e"的大小写

    %c

    char

    字符型。可以把输入的数字按照ASCII码相应转换为对应的字符

    %s

    char *

    字符串。输出字符串中的字符直至字符串中的空字符(字符串以'\0‘结尾,这个'\0'即空字符)

    %p

    void *

    以16进制形式输出指针

    %%

    %

    输出一个百分号

     

    printf附加格式:

    字符

    含义

    l(字母l)

    附加在d,u,x,o前面,表示长整数

    -

    左对齐

    m(代表一个整数)

    数据最小宽度

    0(数字0)

    将输出的前面补上0直到占满指定列宽为止不可以搭配使用-

    m.n(代表一个整数)

    m指域宽,即对应的输出项在输出设备上所占的字符数。n指精度,用于说明输出的实型数的小数位数。对数值型的来说,未指定n时,隐含的精度为n=6位。

     

    #include <stdio.h>

    int main()

    {

    int a = 100;

    printf("a = %d\n", a);//格式化输出一个字符串

    printf("%p\n", &a);//输出变量a在内存中的地址编号

    printf("%%d\n");

     

    char c = 'a';

    putchar(c);//putchar只有一个参数,就是要输出的char

    long a2 = 100;

    printf("%ld, %lx, %lo\n", a2, a2, a2);

     

    long long a3 = 1000;

    printf("%lld, %llx, %llo\n", a3, a3, a3);

     

    int abc = 10;

    printf("abc = '%6d'\n", abc);

    printf("abc = '%-6d'\n", abc);

    printf("abc = '%06d'\n", abc);

    printf("abc = '%-06d'\n", abc);

     

    double d = 12.3;

    printf("d = \' %-10.3lf \'\n", d);

     

    return 0;

    }

     

    3.2.2 scanf函数

    1. scanf通过%转义的方式可以得到用户通过标准输入设备输入的数据。

    #include <stdio.h>

     

    int main()

    {

    char ch1;

    char ch2;

    char ch3;

    int a;

    int b;

     

    printf("请输入ch1的字符:");

    ch1 = getchar();

    printf("ch1 = %c\n", ch1);

     

    getchar(); //测试此处getchar()的作用

     

    printf("请输入ch2的字符:");

    ch2 = getchar();

    printf("\'ch2 = %ctest\'\n", ch2);

     

    getchar(); //测试此处getchar()的作用

    printf("请输入ch3的字符:");

    scanf("%c", &ch3);//这里第二个参数一定是变量的地址,而不是变量名

    printf("ch3 = %c\n", ch3);

     

    printf("请输入a的值:");

    scanf("%d", &a);

    printf("a = %d\n", a);

     

    printf("请输入b的值:");

    scanf("%d", &b);

    printf("b = %d\n", b);

     

    return 0;

    }

    展开全文
  • C语言 | while语句

    2021-04-01 10:47:58
    其中的语句就是循环体,可以是一个简单的语句,也可以是复合语句。执行循环体的次数是由循环条件控制的,这个循环条件就是上面一般形式中的“表达式”,也称为循环条件表达式。 while循环可以简单的记为,只要当循环...

    C语言为什么需要循环控制

    大多数C语言应用程序都会包含循环结构,循环结构和顺序结构、选择结构是结构化程序设计的3种基本结构,它们是各种复杂程序的基本构成单元,况且程序所处理的问题常常需要重复处理。

    C语言while语句

    一般形式
    while(表达式) 语句
    

    C语言while语句注意事项

    其中的语句就是循环体,可以是一个简单的语句,也可以是复合语句。执行循环体的次数是由循环条件控制的,这个循环条件就是上面一般形式中的“表达式”,也称为循环条件表达式。

    while循环可以简单的记为,只要当循环条件表达式为真(即给定的条件成立),就执行循环体语句。

    while循环的特点是:先判断条件表达式,后执行循环体语句。

    C语言使用while语句求1+2+3+…+10的和

    #include<stdio.h>//头文件
    int main()//主函数
    {
      int i=1,sum=0;//定义变量
      while(i<11)//循环条件和
      {
        sum=sum+i;//和
        i=i+1; //增量
      }
      printf("%d",sum);//输出结果
      return 0;//函数返回值为0
    }
    

    编译运行结果:

    55
    --------------------------------
    Process exited after 0.09865 seconds with return value 0
    请按任意键继续. . .
    

    以上,如果你看了觉得对你有所帮助,就给小林点个赞,分享给身边的人叭,这样小林也有更新下去的动力,跪谢各位父老乡亲啦~

    100道C语言源码案例请去公众号:C语言入门到精通

    展开全文
  • 什么是复合语句表达式?怎样依据结构体成员变量的地址来获取结构体变量的地址?这便是本文要解决的问题。 认识复合语句表达式 我在《C和指针》阅读笔记(4)一文中详细介绍了语句、表达式、操作符之间的关系,在C语言...

    什么是复合语句表达式?怎样依据结构体成员变量的地址来获取结构体变量的地址?这便是本文要解决的问题。

    认识复合语句表达式

    我在《C和指针》阅读笔记(4)一文中详细介绍了语句表达式操作符之间的关系,在C语言中,语句是由表达式和(或)分号组成表达式是由标识符或操作符组成。本文再深入一步,介绍一种更复杂一点儿的用法:复合语句作为表达式,然后引出一个常用的编码技巧。

    A compound statement enclosed in parentheses may appear as an expression in GNU C. This allows you to use loops, switches, and local variables within an expression.

    在GNU C中,将复合语句通过小括号括起来后,可以当做表达式。这样的方式可使表达式完成更复杂的逻辑:如循环、分支、使用局部变量。

    #define container_of(ptr, type, member) ({      \
        const typeof( ((type *)0)->member ) *__mptr = (ptr);  \
        (type *)( (char *)__mptr - offsetof(type,member) );})
    

    container_of宏的作用是 由结构体成员的地址来获取结构体的首地址。暂时不关注宏的具体内容(先卖个关子),仅看其轮廓,可以发现#define container_of(ptr, type, member) ({}),本文中将({})称为复合语句表达式。既然是表达式,那表达式的值又是什么呢?

    /*
    * ({statement1 statement2 ... statement3})
    * ({expression1;expression2;...expressionN;})
    * 
    * 整个复合语句表达式的值为expressionN的值
    */
    
    
    

    所以,container_of 复合语句表达式的值 是 (type *)( (char *)__mptr - offsetof(type,member) );的结果。

    搞清楚了整体轮廓,接下来再讲解细节。

    理解container_of

    /*
    /usr/lib/gcc/x86_64-linux-gnu/7/include/stddef.h:417
    #define offsetof(TYPE, MEMBER) __builtin_offsetof (TYPE, MEMBER)
    */
    
    // offsetof的本质逻辑如下:
    //#define offsetof(type, member) (size_t)&(((type*)0)->member)
    // 获取结构体成员在结构体中的偏移
    // ((type*)0), 将0强转为指向type类型的指针
    // &(((type*)0)->member), 获取成员member的地址;由于((type*)0)的地址为0, 那么member的地址即为其在结构体中的偏移
    
    // 由结构体成员的地址来获取结构体的首地址
    #define container_of(ptr, type, member) ({      \
        const typeof( ((type *)0)->member ) *__mptr = (ptr);  \
        (type *)( (char *)__mptr - offsetof(type,member) );})
    // ptr 表示结构体成员的地址
    // type 表示结构体类型
    // member 表示成员名, ptr和member代表相同成员
    // typeof( ((type *)0)->member ) 获取member的数据类型
    // typeof( ((type *)0)->member ) *__mptr 定义一个member数据类型的指针
    // const typeof( ((type *)0)->member ) *__mptr = (ptr); 保存ptr地址
    // ( (char *)__mptr - offsetof(type,member) ) ptr的地址 减去member的偏移量, 即得到结构体的地址
    // (type *)( (char *)__mptr - offsetof(type,member) ) 再将地址强转为结构体指针
    

    注意,如果使用g++ std=c++11编译,需要将typeof改为decltype。当然,使用gcc编译时没有问题。

    示例

    #include<stdio.h>
    #include<stdlib.h>
    #include<stdint.h>
    #include<malloc.h> // include offsetof(TYPE, MEMBER)
    
    typedef struct
    {
        uint32_t a;
    }com_queue_t;
    
    typedef struct _sample_bgra_queue_s
    {
        com_queue_t *p_queue;
        uint32_t load;
    }sample_bgra_queue_t;
    
    void test_offset()
    {
      size_t  offset_p_queue = 0;
      size_t  offset_load = 0;
    
    #if 0
      offset_p_queue = offsetof(sample_bgra_queue_t,p_queue);
      offset_load = offsetof(sample_bgra_queue_t,load);
    #endif
      offset_p_queue = (size_t)&(((sample_bgra_queue_t*)0)->p_queue);
      offset_load = (size_t)&(((sample_bgra_queue_t*)0)->load);
    
      printf("offset_p_queue is %lu\n",offset_p_queue);
      printf("offset_load is %lu\n",offset_load);
    }
    
    int main(int argc, char** argv)
    {
        test_offset();
        
        sample_bgra_queue_t * p_sbq = (sample_bgra_queue_t*)malloc(sizeof(sample_bgra_queue_t));
        sample_bgra_queue_t * p_sbq2 = NULL;
        sample_bgra_queue_t * p_sbq3 = NULL;
    
        com_queue_t **pp_queue = &p_sbq->p_queue;
        uint32_t *p_load = &p_sbq->load;
    
        p_sbq2 = container_of(pp_queue, sample_bgra_queue_t, p_queue);
        p_sbq3 = container_of(p_load, sample_bgra_queue_t, load);
    
        printf("p_sbq addr is %p\n",p_sbq);
        printf("p_sbq2 addr is %p\n",p_sbq2);
        printf("p_sbq3 addr is %p\n",p_sbq3);
    
        return 0;
    }
    

    参考:

    https://gcc.gnu.org/onlinedocs/gcc-7.5.0/gcc/Statement-Exprs.html#Statement-Exprs

    展开全文
  • C语言的三种基本程序结构:1、顺序结构,如表达式语句、函数调用语句、复合语句;2、选择结构,如if语句;3、循环结构,如for语句、while语句、do while语句。一、顺序结构表达式语句、空语句、函数调用语句、复合...

    C语言的三种基本程序结构是:1、顺序结构,如表达式语句、函数调用语句、复合语句;2、选择结构,如if语句;3、循环结构,如for语句、while语句、do while语句。

    2b9493d2faf4e4652181f6e910f5e9e6.png

    一、顺序结构

    表达式语句、空语句、函数调用语句、复合语句

    (相关视频分享:java视频教程)

    程序举例:

    从键盘输入一个大写字母,要求改用小写字母输出。#include

    int main()

    {

    char x,y;

    scanf("%c",&x);

    if(x >= 'A' && x <= 'Z')

    {

    y=x+32;

    }

    else

    {

    printf("this is a erro");

    }

    printf("%c\n",y);

    return 0;

    }

    二、选择结构

    if语句程序举例:

    输入三个实数a,b,c,按代数值由小到大次序输出这三个数。#include

    int main()

    {

    float a,b,c,tmp;

    scanf("%f %f %f",&a,&b,&c);

    if(a > b)

    {

    tmp=b;

    b=a;

    a=tmp;

    }

    if(a > c)

    {

    tmp=c;

    c=a;

    a=tmp;

    }

    if(b > c)

    {

    tmp=c;

    c=b;

    b=tmp;

    }

    printf("%5.2f %5.2f %5.2f\n",a,b,c);

    return 0;

    }

    三、循环结构

    while语句、do while语句、for语句

    for语句举例:

    计算:1+2+3+.....+100。#include

    int main()

    {

    int i,x=1;

    for(i = 2;i <= 100;i++)

    {

    x+=i;

    }

    printf("%d\n",x);

    return 0;

    }

    相关推荐:C语言教程

    展开全文
  • 语句由表达式构成的,代码块由多个语句构成的复合语句。代码块具有一定格式的多个语句,在Python中,垂直对齐的语句一个代码块,代码块以冒号:开始,以结束缩进为结束。典型的代码块如下所示:if x >y :...
  • C语言c语言基础知识梳理(超全)

    千次阅读 多人点赞 2020-04-08 18:27:10
    C语言知识梳理零、概述一、变量和基本类型(一)基本类型(二)变量(三)复合类型(四)const限定符(五)字符串二、表达式三、语句四、函数五、指针六、.h文件声明以及编译预处理指令     零、概述 写此篇博客的...
  • C语句和数据的输入 输出 C语句负责向计算机发出指令,只要语句合乎文法,计算机就会顺利执行。 C语言规定所有的语句都要以分号作为结束符 1.函数调用语句 函数调用语句在函数调用表达式后加“;...复合语句是
  • 顺序结构中的语句可能是简单语句,也可能是复合语句,还可能是空语句。 三种语句: 1. 简单语句:以";"结尾的语句。 2. 复合语句:用"{}"把“说明”和若干个有序的简单语句组合在一起构成的...
  • c语言chap控制结构.pptx

    2020-01-28 00:24:28
    教学目标;本章内容;3.1 顺序结构与基本输入输出 ;3.1.1 C语句概述;3.1.1 C语句概述;3. 表达式语句在表达式后面加分号构成 例 a = 3 /* 赋值语句 */ i++ /* 算术表达式语句 */ 表达式能构成...5复合语句语句块 由大括号
  • 在程序中应把复合语句看成单条语句,而不是多条语句,例如 { x=y+z; a=b+c; printf(“%d%d”,x,a); } 一条复合语句复合语句内的各条语句都必须以分号“;”结尾,在括号“}”外不能加分号。 5.空语句 ...
  • C语言讲义.doc

    2018-01-27 10:41:43
    4.2 复合语句 31 4.3 空语句 31 4.4 类型转化 31 5 条件分支语句 31 5.1 关系运算符 31 5.1.1 5.1.2 5.1.3 > 32 5.1.4 >= 32 5.1.5 == 32 5.1.6 != 32 5.2 关系运算符优先级 32 5.3 逻辑运算符 32 5.3.1 && 32 ...
  • C语言的学习(五)

    2019-10-23 22:51:56
    2)语句可以多条语句,必须加括号构成一个复合句。 2.逻辑运算符及其优先次序 与:&&;同为真时则为真,否则为假。(双目运算符); 或:II;至少有一个为真则为真。(双目运算符); 非:!;若a为真则!...
  • 局部变量定义变量一般有三种形式:在函数的开头定义在函数的外部定义在复合语句中定义其中在函数的开头和在复合语句中定义的时候,只能在函数内部和该复合语句中使用,像这种变量称为局部变量。 例...
  • 局部变量定义变量一般有三种形式:在函数的开头定义在函数的外部定义在复合语句中定义其中在函数的开头和在复合语句中定义的时候,只能在函数内部和该复合语句中使用,像这种变量称为局部变量。 例...
  • 是复合语句的定义 把多个语bai句用括号du{}括起来组成的一个语句称复合语句zhi。dao 在程序中应把复合语句看成是单条语句,而不是多条语句,例如  {  x=y+z;  a=b+c;  printf("%d%d",x,a);  } 是一条复合语句...
  • C语言变量的作用域

    2019-04-21 18:30:01
    代码块就是我们在复合语句中的就要代码块,在代码块中的auto(自动变量)无法超出这个范围的,一旦超出了这个范围的话就会消失它的作用,比如:void main() { 这个main函数的花括号就是一个代码块,而我们要在它的...
  • 局部变量定义变量一般有三种形式:在函数的开头定义在函数的外部定义在复合语句中定义其中在函数的开头和在复合语句中定义的时候,只能在函数内部和该复合语句中使用,像这种变量称为局部变量。 例...
  • C语言全局变量和局部变量

    千次阅读 多人点赞 2018-09-03 22:45:43
    前言 本博文的代码基于VC++6.0编写; 讨论全局和局部变量时,其实就是对变量的作用域进行...2. 函数内的复合语句内定义; 3. 形式参数; 4. 函数中间(非开头); #include &lt;stdio.h&gt; void m...
  • (3)还有就是一些复合语句有用,比如说 for循环里面的,while循环,if语句等等 (4)如果没有定义初值,系统就会分配给他一个随机值 说明:可以看出局部变量在出函数生命周期就已经结束了,怎么结束的呢,结束效果...
  • C语言的科学和艺术.pdf

    热门讨论 2012-01-19 14:09:05
    1.2 什么是计算机科学 4 1.3 计算机硬件简介 5 1.3.1 cpu 5 1.3.2 内存 6 1.3.3 辅助存储器 6 1.3.4 i/o设备 6 1.4 算法 7 1.5 程序设计语言和编译 7 1.6 编程错误和调试 9 1.7 软件维护 10 1.8 软件工程...
  • 4.2 复合表达式 27 4.3 if 语句 27 4.4 循环语句的效率 29 4.5 for 语句的循环控制变量 30 4.6 switch语句 30 4.7 goto语句 31 第5章 常量 33 5.1 为什么需要常量 33 5.2 const 与 #define的比较 33 5.3 常量定义...
  • 1、在了解程序的三种基本控制结构之前,我们先了解以下什么是复合语句,即块语句。 2、与C语言及其他语言不同,Java语言的复合语句是以整个块区为单位的语句,所以又称为块语句。复合语句由开括号“ { ”开始,闭...
  • C语言中的局部变量和全局变量

    千次阅读 多人点赞 2019-03-17 16:25:02
    一.作用域 首先,我们先明白一个重要的概念,什么是作用域?...(2) 在函数内的复合语句内定义。 (3)形式参数 在一个函数内部定义的变量只在本函数范围内有效,也就是只有本函数内才能引用它们,在此...
  •  4.1.3 使用复合语句 35  4.2 表达式 35  4.2.1 简单表达式 35  4.2.2 复杂表达式 36  4.3 运算符 36  4.3.1 赋值运算符 36  4.3.2 数学运算符 37  4.3.3 运算符优先级和圆括号 40  4.3.4 子表达式...
  • 4.5 复合语句 4.6 表达式和空语句 4.7 if和if-else语句 4.8 while语句 4.9 for语句 4.10 例子:布尔变量 4.11 逗号操作符 4.12 do语句 4.13 例子:斐波那契数 4.14 goto语句 4.15 break和continue语句 4.16 switch...
  • 简单程序编写熟悉熟悉C HelloC(最最最easy) #include<stdio.h> //stdio.h 通知编译器printf函数的功能是什么,后面才可以使用该函数 ...{ //花括号包裹的程序语句叫做复合语句 printf("...
  • 1. 为什么计算机用二进制计数 2. 不同进制之间的换算 3. 整数的加减运算 3.1. Sign and Magnitude表示法 3.2. 1's Complement表示法 3.3. 2's Complement表示法 3.4. 有符号数和无符号数 4. 浮点数 15. 数据类型详解...
  • C语言大全第4版(高清PDF中文版)

    热门讨论 2011-06-07 09:23:56
    5. 1 什么是指针 5.2 指针变量 5.3 指针操作符 5.4 指针表达式 5.4.1 指针赋值 5.4.2 指针转换 5.4.3 指针算术操作 5.4.4 指针比较 5.5 指针和数组 5.5.1 指针数组 5.6 多级间址 5.7 ...
  • 复合语句(程序块)中的声明 79 读取一定范围内的值 80 逻辑非运算符·德摩根定律 81 德摩根定律 81 求多个整数的和及平均值 82 复合赋值运算符 84 后置递增运算符和后置递减运算符 85 4-2 while语句 87 ...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 175
精华内容 70
关键字:

c语言什么是复合语句

c语言 订阅