
第一章 - 程序设计和C语言
- 程序:一组计算机能够识别和执行的指令。
- 指令:使计算机执行特定的操作,如加法指令使计算机执行一次加法运算。
- 计算机语言:计算机和人都能识别的语言,作为沟通的桥梁。
- 计算机语言的分类:低级语言、高级语言(面向过程的语言、面向对象的语言)。
核心概念对比
- 低级语言与高级语言的区别:低级语言更加贴近计算机,也就是用 0 和 1 表示为主。高级语言则更接近人们习惯,如直接用英文表示。
- 面向过程与面向对象的区别:面向过程更注重实现过程中的细节,而面向对象更注重实现过程的对象,如对象的属性和方法。
- 程序文件分类:
- 源程序:是编写好的算法,保存后的文件。
- 目标程序:是编译后的文件。
- 可执行文件:当目标程序加上库函数时就成了可执行文件,也就是可以运行出结果的文件。
第二章 - 算法
- 程序 = 算法 + 数据结构
- 数据结构:对数据的描述。也就是在程序中要指定用到的数据,以及数据的类型和数据的组织形式。
- 算法:对操作的描述。描述计算机进行的操作步骤。
算法的特性与方法
- 算法的五大特性:有穷性、有效性、确定性、输入、输出。
- 算法的四大表示方法:自然语言、流程图、结构化流程图、伪代码。
- 结构化程序设计的方法:自顶向下、逐步细化、模块化设计、结构化编程。
- 三种基本结构:顺序结构、选择结构、循环结构。
第三章 - 顺序程序设计
-
标识符:标识符即为一个对象的名字。只能由字母、数字、下划线中一种或多种组合而成,且第一个字符必须为字母或下划线。
-
基本数据类型:整型类型(
int、char、bool)、浮点类型(float、double)。 -
派生类型:指针、数组、结构体、函数。
-
补码的求法:正数直接用二进制数表示;负数则取反加一。
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 条评论还没有评论,欢迎成为第一个留言的人。