当前位置 博文首页 > 小丞同学:【期末复习】考试月来临!??C语言复习,这一篇带你逃

    小丞同学:【期末复习】考试月来临!??C语言复习,这一篇带你逃

    作者:[db:作者] 时间:2021-07-02 18:43

    考试月来临,划水划了大半学期,想起来我已经几个月没有打过C的代码了,C语言是刚开学的时候自学的,学院下学期才开设C语言课程,上课的时候都在干自己的事情,现在快考试了,来整理顺便复习一下C语言的相关内容吧~🍰

    小丞

    1. 程序设计和C语言

    1.1 Hello world

    #include <stdio.h>                  //预处理指令
    int main() {                        //定义主函数    
        printf("这是一篇复习博客");      //输出语句
        return 0;                      //函数执行完毕
    }
    

    1.2 程序的结构

    1. 一个程序由一个或多个原程序文件组成
    2. 函数是C程序的主要组成部分,函数是程序的基本单位
    3. 一个函数包括两个部分,函数首部(int max(int a, int b))和函数体(花括号中的部分)
    4. 程序总是main函数开始执行,无论main函数在什么位置
    5. 程序中要求计算机的操作是由函数中的C语句完成的
    6. 在每个数据声明和语句的最后必须有一个分号
    7. C语言本身不提供输入输出语句,是通过库函数scanfprintf提供的
    8. 程序应当包含注释,注释能大大的提升代码的可读性

    对于长期打js代码的来说,分号真的是它容易忘记了!!

    注意: 手写代码的时候一定要注意分号,以及注意双引号

    1.3 运行 C 语言的步骤

    编辑-编译-连接-执行

    1.4 练习题

    答案在习题后面噢~

    第一题:

    一个C程序的组成部分可以是(  )。

    A) 一个主函数和一至若干个其他函数 B) 一至若干个主函数

    C) 一个主程序和一至若干个其他函数 D) 一个主程序和一至若干个子程序

    第二题:

    一个C程序的执行是从(  )。

    (A) 本程序的main函数开始,到main函数结束

    (B) 本程序文件的第一个函数开始,到本程序文件的最后一个函数结束

    ? 本程序的main函数开始,到本程序文件的最后一个函数结束

    (D) 本程序文件的第一个函数开始,到本程序main函数结束

    第一题: A,第二题:A

    2. 顺序、选择、循环结构

    2.1 标识符

    标识符的命名规则是:

    1. 只能由字母、数字和下划线组成,字母区分大小写。
    2. 第一个字符必须是字母或下划线,不能为数字

    C语言中标识符有以下3类

    1. 关键字。它们在程序中有固定的含义,不能另作他用。如intforswitch等。
    2. 预定义标识符。预先定义并具有特定含义的标识符。如defineinclude等。
    3. 用户标识符。用户自定义标识符,符合命名规则且不能与关键字冲突。

    2.2 常量与变量

    2.2.1 常量

    常量是指在程序运行过程中,其值不能改变的量称为常量,常见的常量有以下几类:

    1. 整形常量:如1000,12345,0,-345
    2. 实型常量:两种形式,小数和指数(123.456和12.34e3)
    3. 字符常量:可以是一个普通的字符( 如x)、一个转义序列(例 \t),或一个通用的字符(如 \u02C0
    4. 字符串常量:如"boy""123"等,用双撇号把若干字符括起来,字符串常量是双撇号里的全部字符
    5. 符号常量:用define指令,指定用一个符号名称代表一个常量,如#define PI 3.14结尾没有分号
    转义序列含义
    \\ 字符
    ’ 字符
    "" 字符
    ?? 字符
    \a警告
    \b退格键
    \f换页符
    \n换行符
    \r回车
    \t水平制表符
    \v垂直制表符
    \o或\oo或\ooo其中o表示一个八进制数字一到三位的八进制数
    \xh[h…]一个或多个数字的十六进制数

    \ooo 是对用三位八进制数转义表示任意字符的形象化描述。

    例如 char ch = '\111'; 等价于 char ch = 0111; (以0开头的表示八进制)

    2.2.2 变量

    int a = 3;
    

    小丞

    注意:变量必须先定义后使用,在变量取值时,实际上是通过变量名找到相应的内存地址,从该存储单元中读取数据

    2.2.3 练习题

    第一题:

    下列定义变量的语句中错误的是______。

    A、int int B、double int

    C、char For D、float US$

    答案:D

    第二题:

    以下不合法的用户标识符是______。

    A、j2_KEY B、Double

    C、4d D、_8_

    答案:C

    2.3 数据类型

    小丞

    2.3.1 整数类型

    在这里插入图片描述

    注意

    1. int short int long int是根据编译环境的不同,所取范围不同

    2. int的取值范围在于他占用的字节数 ,不同的编译器,规定是不一样。

    2.3.2 浮点型

    浮点数据根据精度的不同分为3种

    在这里插入图片描述

    注意:C语言中不存在字符串变量,字符串只能存在字符数组中

    2.3.3 类型转换

    1. 自动类型转换

    自动转换发生在不同数据类型运算时,在编译的时候自动完成

    注意

    只有字节小的可以向字节大的自动转换,不可逆

    #include <stdio.h>
    int main()
    {
        char c1, c2;
        c1 = 'A';
        c2 = c1 + 32;
        printf("%c\n", c2); // a
        printf("%d\n", c2); // 97
    }
    

    如上,自动的将c1转化为ASCII码再进行加法运算

    2. 强制类型转化

    强制类型转换是通过定义类型转换运算来实现的。其一般形式为:

    //(转化类型)值
    (double) a  // 将a转化成double类型
    (int) (x + y) //将x+y转化成int类型 
    

    %运算符要求其两侧均为整型量,若xfloat型,则x % 3不合法,则这时候就需要强制类型转化了,(int)x % 3,因为强制类型转换运算符优先于%运算,所以会先进行(int)x运算再进行取余运算

    3. tips
    1. 转换类型和表达式都必须加括号, 如把(int)(x / 3 + y)写成(int)x / 3 + y则成了把x转换成int型之后再除3再与y相加了。

    2. 强制转换不存在四舍五入

    3. 强制类型转换时,得到一个所需类型的中间数据,而原来变量的类型未发生变化

    2.4 运算符和表达式

    2.4.1 基本算术运算符

    假定A = 10, B = 20

    运算符描述实例
    +把两个操作数相加A + B 将得到 30
    -从第一个操作数中减去第二个操作数A - B 将得到 -10
    *把两个操作数相乘A * B 将得到 200
    /分子除以分母B / A 将得到 2
    %取模运算符,整除后的余数B % A 将得到 0
    ++自增运算符,整数值增加 1A++ 将得到 11
    自减运算符,整数值减少 1A-- 将得到 9

    2.4.2 自增和自减运算符

    自加运算符++与自减运算符--是单目运算符,运算的对象是变量。自增自减运算有两种一种前缀,一种后缀,两种表达式的值是有区别的,前缀是:先运算再取值,后缀是:先取值后运算

    如:

    #include<stdio.h>
    int main() {
        int i = 3;
        printf("%d",++i); // 4
    }
    

    又如:可以很清楚的理解!

    #include<stdio.h>
    int main() {
        int i = 3;
        printf("%d",i++); // 3
    }
    

    2.4.3 逻辑运算符

    假设变量 A 的值为 1,变量 B 的值为 0

    运算符描述实例
    &&称为逻辑与运算符。如果两个操作数都非零,则条件为真。(A && B) 为假。
    ||称为逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真。(A || B) 为真。
    !称为逻辑非运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假。!(A && B) 为真。

    也就是说a并b有假则假,a或b有真则真

    2.4.4 赋值运算符

    简单赋值运算符为=

    int a = 3;// 给a赋值为3
    

    复合赋值运算符就是在简单赋值符之前加上其它运算符构成

    例如+=-=*=/=

    a += 3;等价于 a = a + 3
    

    注意:复合运算符中运算符和等号之间不存在空格。

    2.4.5 关系运算符

    假设变量 A 的值为 10,变量 B 的值为 20

    运算符描述实例
    ==检查两个操作数的值是否相等,如果相等则条件为真。(A == B) 为假。
    !=检查两个操作数的值是否相等,如果不相等则条件为真。(A != B) 为真。
    >检查左操作数的值是否大于右操作数的值,如果是则条件为真。(A > B) 为假。
    <检查左操作数的值是否小于右操作数的值,如果是则条件为真。(A < B) 为真。
    >=检查左操作数的值是否大于或等于右操作数的值,如果是则条件为真。(A >= B) 为假。
    <=检查左操作数的值是否小于或等于右操作数的值,如果是则条件为真。(A <= B) 为真。

    2.4.6 三目运算符

    三目运算符的格式为:

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

    如果表达式1为真则值为表达式2,否则为表达式3

    如:

    #include <stdio.h>
    int main()
    {
        int a = 10;
        int b;
        b = (a == 4) ? 1 : 2;
        printf("b 的值是 %d\n", b); // b 的值是 2
    }
    

    2.4.7 运算符优先级

    初等运算符的优先级别最高,然后是单目运算符算术运算符关系运算符逻辑运算符(除逻辑非!)条件运算符赋值运算符逗号运算符。大多数都是自左向右结合,而单目运算符、条件运算符和赋值运算符自右向左结合

    运算符优先级及结合性汇总自上向下优先级降低

    类别运算符结合性
    后缀() [] -> . ++ - -从左到右
    一元+ - ! ~ ++ - - (type)* & sizeof从右到左
    乘除* / %从左到右
    加减+ -从左到右
    移位<< >>从左到右
    关系< <= > >=从左到右
    相等== !=从左到右
    位与 AND&从左到右
    位异或 XOR^从左到右
    位或 OR|从左到右
    逻辑与 AND&&从左到右
    逻辑或 OR||从左到右
    条件?:从右到左
    赋值= += -= *= /= %=>>= <<= &= ^= |=从右到左
    逗号,从左到右

    菜鸟教程中的运算符优先级

    2.4.8 练习题

    复习了这么多关于运算符的知识,来练几道题吧

    第一题:
    #include <stdio.h>
    int main()
    {
        int a = 1, b = 2, c = 4, d = 8;
        int e;
        e = (a + b) * c / d;
        printf("e的值是 %d\n", e); 
    }
    //输出 :e的值是 1
    
    第二题:

    这题要好好思考噢

    int main()
    {
        int x = 12, n = 5;
        x %= (n % 2);
        printf("%d", x);
    }
    // 输出: 0
    

    n % 2余数是1,12对1取余为0

    第三题:

    在C语言中,字符型数据在内存中的存储形式是

    A)原码 B)补码 C)反码 D)ASCII码

    答案: D

    第四题:

    若执下面程序时从键盘上输入5,

    #include <stdio.h>
    int main()
    {
        int x;
        scanf("%d",&x);
        if(x++ > 5) {
            printf("%d", x);
        }else {
            printf("%d", x--);
        }
    }
    

    则输出是______。

    A、7 B、6 C、5 D、4

    答案:B

    第五题:

    做对这题才算真真掌握噢~

    设有语句int a = 3;则执行语句a += a -= a * a后,变量a的值是(  )。

    (A) 3   (B) 0   ? 9    (D) -12

    答案:D

    上面的语句可以转换成:

    int a = 3;
    a -= (a * a);//*优先级高,先计算a*a为9,此时a -= 9;即 a = a - 9; a = -6
    a += a // a = a + a; a = -6 + (-6),a = -12
    

    2.5 C语句

    在这里插入图片描述

    2.5.1 if语句

    if(表达式) { 执行内容 }
    

    如果表达式为真,则执行{}里的内容,否则将跳过不执行该code

    2.5.2 if…else 语句

    if(表达式) {
    	代码块1;
    }else {
    	代码块2;
    }
    

    如果表达式的值为真,则执行代码块1,否则执行代码块2

    注意ifelse后面都没有分号噢~

    2.5.3 switch语句

    switch (表达式)
    {
    case 情况1:
        执行体1;
        break;
    case 情况2:
        执行体2;
        break;
    default:
        执行体3;
    }
    

    简单解释一下就是判断表达式的几种情况执行不一样的代码

    注意

    1. case后的情况不能相同
    2. 每个case都需要有一个break语句
    3. switch表达式只能是整型或者字符类型

    重点switch语句最大的好处是它能够简化if语句

    2.5.4 while循环

    while(