C程序设计总结(第五版-谭浩强)

C程序设计总结(第五版-谭浩强)

2021-12-02 13:16:001 浏览2105作者:dreamk技术

第一章 - 程序设计和C语言

  1. 程序:一组计算机能够识别和执行的指令
  2. 指令:使计算机执行特定的操作,如加法指令使计算机执行一次加法运算。
  3. 计算机语言:计算机和人都能识别的语言,作为沟通的桥梁。
  4. 计算机语言的分类:低级语言、高级语言(面向过程的语言、面向对象的语言)。

核心概念对比

  • 低级语言与高级语言的区别:低级语言更加贴近计算机,也就是用 0 和 1 表示为主。高级语言则更接近人们习惯,如直接用英文表示。
  • 面向过程与面向对象的区别:面向过程更注重实现过程中的细节,而面向对象更注重实现过程的对象,如对象的属性和方法。
  • 程序文件分类
    • 源程序:是编写好的算法,保存后的文件。
    • 目标程序:是编译后的文件。
    • 可执行文件:当目标程序加上库函数时就成了可执行文件,也就是可以运行出结果的文件。

第二章 - 算法

  • 程序 = 算法 + 数据结构
  • 数据结构:对数据的描述。也就是在程序中要指定用到的数据,以及数据的类型和数据的组织形式。
  • 算法:对操作的描述。描述计算机进行的操作步骤。

算法的特性与方法

  • 算法的五大特性:有穷性、有效性、确定性、输入、输出。
  • 算法的四大表示方法:自然语言、流程图、结构化流程图、伪代码。
  • 结构化程序设计的方法:自顶向下、逐步细化、模块化设计、结构化编程。
  • 三种基本结构:顺序结构、选择结构、循环结构。

第三章 - 顺序程序设计

  • 标识符:标识符即为一个对象的名字。只能由字母数字下划线中一种或多种组合而成,且第一个字符必须为字母或下划线。

  • 基本数据类型:整型类型(intcharbool)、浮点类型(floatdouble)。

  • 派生类型:指针、数组、结构体、函数。

  • 补码的求法:正数直接用二进制数表示;负数则取反加一。

    5 的补码: 0000000000000101

    -5 的补码: 1111111111111010(取反) 1111111111111011(加一)

  • i++ 与 ++i 的区别i++ 先使用原值 i 进行操作,再对 i+1;而 ++i 直接对 i+1,再参与运算。

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

    运行结果为 0

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

    运行结果为 1

  • 类型转换:低精度自动向高精度转化;使用 (int)x 可将 x 强制转化为 int 类型。

  • getchar() 接收字符,putchar() 输出字符。

    #include <stdio.h>
    int main() {
    	char x, y, z;
    	x = getchar();
    	y = getchar();
    	z = getchar();
    	
    	putchar(x);
    	putchar(y);
    	putchar(z);
    	
    	return 0;
    }

第四章 - 选择结构程序

  • 选择语法if 语句与 switch 语句。

    • 两者区别if 可以用于处理复杂的判断条件,if 语句的括号内支持复杂的表达式;switch 语句则适用于单个变量的多分支选择,且变量的类型必须是整型类型。
  • 双目运算符与单目运算符的区别

    • 双目运算符需要两个操作对象来参与运算;单目运算符只需要有一个操作对象参与运算,如:!(x>y)
  • 三目运算符表达式1 ? 表达式2 : 表达式3(作用相当于一个简化的 if-else 语句)。

    例如:判断两个整型数字中谁最大

    #include <stdio.h>
    int main() {
    	int x, y, z;
    	scanf("%d, %d", &x, &y);
    	z = (x > y) ? x : y;
    	printf("the max number is %d", z);
    	return 0;
    }

第五章 - 循环结构程序设计

  • 为何需要循环结构? 有了顺序结构和选择结构能够满足日常的程序设计,但是会存在很多重复的处理流程。如:输出全班所有同学的名字,为了避免多次重复的输出代码的编写,使用循环结构可以方便的进行重复操作,简化了代码的同时方便了设计,避免了代码的冗余。
  • 常见的循环结构有哪些? while 循环、for 循环。两者可互相转化。
  • break 与 continue 的区别
    • break 语句只能放在循环语句和 switch 语句中,不能单独使用,break 的作用是结束整个循环。
    • continue 语句则是结束本次循环,接着执行下一次循环。

第六章 - 数组

  • 为何需要数组? 为了解决变量过多而造成的繁琐,同时彰显其内在的联系(相同数据类型的集合)。
  • 数组的基本特征是什么? 数组是一组相同数据类型的集合。
  • 如何定义数组? 一维数组:数组类型 数组变量[数组大小]; 例如:int a[10];

第七章 - 函数

  • 为何使用函数?
    • 实现模块化编程,便于维护和后续开发。
    • 一个 C 程序由一个或多个程序模块组成,每个程序模块都作为一个源程序文件。
  • 如何实现函数? 声明、定义、调用。
  • 函数的种类:库函数与用户自定义的函数。
  • 局部变量与全局变量:两者作用域不同,一个作用局部,一个作用全局。
  • 动态存储方式与静态存储方式
    • 静态存储方式:指程序运行期间由程序分配固定的存储空间存储,容易造成浪费。
    • 动态存储方式:在程序运行期间根据需要进行动态的分配存储空间,节约空间。
  • 自动变量(auto)、静态局部变量(static)、寄存器变量(register)的区别 存储地址不同:
    • 自动变量存储在动态存储区。
    • 静态局部变量存储在静态存储区。
    • 寄存器变量存储在 CPU 中的寄存器中。

第八章 - 指针

  • 何为指针? 指针即地址。系统根据定义的变量类型分配一定的长度空间,内存区的每一个字节都有一个编号,这就是地址。通过地址能够找到所需要的变量单元,可以说,指针指向该变量单元。C 语言中的地址包括位置信息 and 它所指向的数据类型信息。

  • 何为指针变量? 存放地址的变量是指针变量,它用来指向另一个对象。

  • 何为空指针与野指针?

    注:原文中“空指针”的解释实际为“野指针”。

    指针变量的值是不确定的或无效的,这种指针叫野指针。使用野指针不一定会出现问题,但是可能会出现以下问题:

    • 一切正常
    • 段错误(Segmentation fault)
    • 脏数据
  • 数组与指针有什么关系?

    • 数组名就是一个指针(常指针)。
    • 数组名与数组首地址是映射关系,*p = arr 是指向关系。
    • 由于数组名就是指针,所以数组名可以使用指针的解引用运算符,而指针也可以使用数组下标形式。

第九章 - 用户建立自己的数据类型

  • 为何需要自己定义数据类型? 一方面由于常见的数据变量之间存在相互的联系,如:学生的学号与姓名之间存在联系。
  • 那为何不采用数组将其存储在一起,使其相互联系? 数组只能存放类型相同的变量,例如全部存放 int 型的数据,或者全部存放 char 型的数据,不可以混装。而用户自己建立的数据类型(如结构体)就可以避免此问题,可以存放不同类型的数据。
  • 如何定义?
    struct student {
    	int number;
    	char name[20];
    	char sex;
    };

评论区

0 条评论

还没有评论,欢迎成为第一个留言的人。