大一 C 语言考试必备知识点全解析
C 语言作为计算机专业的入门编程语言,是大一学生重要的基础课程,其考试内容涵盖多个核心知识点。掌握这些知识点不仅能帮助你顺利通过考试,更能为后续的编程学习打下坚实基础。以下是大一 C 语言考试中必须掌握的关键知识点梳理。
一、C 语言基础概念
C 语言的特点:C 语言是一种结构化编程语言,具有简洁紧凑、灵活性高、可移植性强等特点。它既可以用于编写系统软件,也能用于开发应用软件,在编程领域应用广泛。
程序的基本结构:一个完整的 C 语言程序通常由预处理命令、函数、变量定义和语句等部分组成。其中,main函数是程序的入口,每个 C 程序有且仅有一个main函数。
标识符:标识符是用来标识变量、函数、数组等名称的符号。其命名规则为:由字母、数字和下划线组成,且不能以数字开头,同时不能使用 C 语言中的关键字作为标识符。
关键字:C 语言中有 32 个关键字,这些关键字具有特定的含义,不能作为标识符使用。常见的关键字包括int、char、if、else、for、while、return等。
二、数据类型与变量
基本数据类型
整型:包括int(基本整型)、short(短整型)、long(长整型)、unsigned int(无符号整型)等,用于表示整数。不同类型的整型在内存中占用的字节数和表示范围不同。
字符型:char类型用于存储单个字符,在内存中占用 1 个字节。字符在存储时是以 ASCII 码的形式存放的,例如字符 'A' 的 ASCII 码是 65。
实型(浮点型):分为float(单精度浮点型)和double(双精度浮点型),用于表示带小数点的数。float型占用 4 个字节,double型占用 8 个字节,double型的精度更高。
变量的定义与初始化:变量定义的格式为 “数据类型 变量名;”,例如 “int a;” 定义了一个整型变量 a。变量初始化是在定义变量时赋予其初始值,如 “int b = 5;”。
常量:常量是指在程序运行过程中其值不能改变的量,包括字面常量(如 123、'a'、3.14)、符号常量(用#define定义的常量,如#define PI 3.14)。
三、运算符与表达式
算术运算符:包括+(加)、-(减)、*(乘)、/(除)、%(取余)。需要注意的是,两个整数相除结果为整数,取余运算只适用于整型数据。
赋值运算符:=是基本的赋值运算符,用于将右边表达式的值赋给左边的变量。复合赋值运算符如+=、-=、*=、/=等,例如 “a += 3” 等价于 “a = a + 3”。
关系运算符:用于比较两个表达式的大小,包括>(大于)、<(小于)、>=(大于等于)、<=(小于等于)、==(等于)、!=(不等于)。关系表达式的结果是逻辑值,真为 1,假为 0。
逻辑运算符:包括&&(逻辑与)、||(逻辑或)、!(逻辑非)。逻辑运算符用于连接关系表达式或逻辑量,其运算结果也是逻辑值。
运算符的优先级与结合性:在表达式中,不同运算符的优先级不同,优先级高的运算符先运算。例如,算术运算符的优先级高于关系运算符,关系运算符高于赋值运算符。当运算符优先级相同时,按照结合性进行运算,大部分运算符的结合性是从左到右。
四、控制语句
分支结构
if 语句:有单分支(if(表达式) 语句;)、双分支(if(表达式) 语句1;else 语句2;)和多分支(if(表达式1) 语句1;else if(表达式2) 语句2;... else 语句n;)三种形式,用于根据条件执行不同的语句。
switch 语句:用于多分支选择,格式为switch(表达式){case 常量1: 语句1; break; case 常量2: 语句2; break; ... default: 语句n; break;}。表达式的值必须是整型或字符型,case后的常量值不能重复,break用于跳出switch语句,default处理其他未匹配的情况。
循环结构
while 循环:格式为while(表达式) {循环体语句;},当表达式的值为真时,执行循环体语句,直到表达式的值为假时结束循环。
do-while 循环:格式为do {循环体语句;} while(表达式);,先执行一次循环体,再判断表达式的值,只要表达式为真就继续循环,至少执行一次循环体。
for 循环:格式为for(表达式1; 表达式2; 表达式3) {循环体语句;},表达式 1 用于初始化循环变量,表达式 2 是循环条件,表达式 3 用于更新循环变量。for 循环的灵活性较高,可以替代 while 循环和 do-while 循环。
跳转语句
break语句:用于跳出当前的循环体或switch语句,继续执行后面的语句。
continue语句:用于结束本次循环,直接进入下一次循环的判断。
return语句:用于从函数中返回,结束函数的执行,并可以带回返回值。
五、数组
一维数组:定义格式为 “数据类型 数组名 [常量表达式];”,例如 “int arr [5];” 定义了一个包含 5 个整型元素的一维数组。数组元素的下标从 0 开始,通过 “数组名 [下标]” 来访问数组元素。
二维数组:定义格式为 “数据类型 数组名 常量表达式 1;”,可以看作是由多个一维数组组成的数组。例如 “int arr2 2;” 定义了一个 2 行 3 列的二维数组,通过 “数组名 行下标” 访问元素。
字符数组:用于存储字符序列,定义方式与其他数组类似,如 “char str [10];”。可以用字符串常量对字符数组进行初始化,例如 “char str [] = "hello";”,字符串以 '\0' 作为结束标志。
数组的初始化:一维数组初始化可以在定义时指定初始值,如 “int a [5] = {1,2,3,4,5};”;二维数组初始化可以按行初始化,如 “int b 2 = {{1,2,3},{4,5,6}};”。
六、函数
函数的定义:函数定义的格式为 “返回值类型 函数名 (参数列表) {函数体}”。返回值类型指定函数返回值的数据类型,若函数无返回值,用void表示;参数列表是函数的输入,由参数类型和参数名组成;函数体是实现函数功能的语句集合。
函数的声明:函数声明的作用是告诉编译器函数的存在及其特征,格式与函数定义的首部类似,但末尾要加分号。函数声明通常放在程序的开头或调用函数之前。
函数的调用:函数调用的格式为 “函数名 (实参列表);”,实参的类型和个数要与形参一一对应。函数调用时,实参将值传递给形参,形参的变化不会影响实参。
函数的参数与返回值:参数分为形参(函数定义时的参数)和实参(函数调用时的参数)。函数可以通过return语句返回一个值,返回值的类型要与函数定义的返回值类型一致。
递归函数:递归函数是指在函数体内直接或间接调用自身的函数。使用递归函数需要有明确的递归结束条件,否则会导致无限递归。
七、指针
指针的概念:指针是指向变量地址的变量,指针变量存储的是另一个变量的内存地址。通过指针可以间接访问和修改所指向变量的值。
指针变量的定义与初始化:定义格式为 “数据类型 指针变量名;”,例如 “int p;” 定义了一个指向整型变量的指针。指针变量初始化可以将变量的地址赋给它,如 “int a = 5;int *p = &a;”,其中&是取地址运算符。
指针的运算:指针可以进行加减运算,对于指向数组元素的指针,p++表示指向数组的下一个元素。指针还可以进行比较运算,用于比较两个指针所指向地址的大小。
指针与数组:数组名代表数组的首地址,是一个常量指针。可以通过指针来访问数组元素,例如 “int arr [5];int *p = arr;”,则p[i]与arr[i]等价。
指针作为函数参数:将指针作为函数参数时,实参是变量的地址,形参是指针变量。在函数体内通过指针可以修改实参变量的值,实现参数的双向传递。
八、结构体与共用体
结构体
结构体的定义:结构体是一种用户自定义的数据类型,用于将不同类型的数据组合在一起。定义格式为 “struct 结构体名 {成员列表};”,例如 “struct Student {int id; char name [20]; float score;};”。
结构体变量的定义与初始化:可以通过 “struct 结构体名 变量名;” 定义结构体变量,初始化时可以对每个成员赋值,如 “struct Student s = {1001, "Tom", 90.5};”。
结构体成员的访问:通过 “结构体变量名。成员名” 来访问结构体成员,若通过指针访问,则用 “指针变量名 -> 成员名”。
共用体(联合体):共用体的定义格式与结构体类似,关键字为union。共用体的所有成员共享同一块内存空间,其大小等于最大成员的大小。共用体成员的访问方式与结构体相同。
九、文件操作
文件指针:文件指针是指向文件结构体的指针,用于标识和操作文件,定义格式为 “FILE * 指针变量名;”。
文件的打开与关闭
打开文件使用fopen函数,格式为 “FILE fopen (const char filename, const char *mode);”,filename是文件名,mode是打开方式(如 "r" 只读、"w" 只写、"a" 追加等)。
关闭文件使用fclose函数,格式为 “int fclose (FILE *stream);”,关闭文件可以释放文件相关资源。
文件的读写操作
字符读写:fgetc函数用于从文件读取一个字符,fputc函数用于向文件写入一个字符。
字符串读写:fgets函数用于从文件读取一个字符串,fputs函数用于向文件写入一个字符串。
格式化读写:fscanf函数和fprintf函数类似于scanf和printf,但操作对象是文件。
十、预处理命令
宏定义:#define用于定义宏,分为无参数宏(如#define MAX 100)和带参数宏(如#define ADD(a,b) (a + b))。宏在预处理阶段会被替换,带参数宏没有类型检查。
文件包含:#include用于将另一个文件的内容包含到当前文件中,有两种形式:#include <文件名>用于包含系统头文件,#include "文件名"用于包含用户自定义头文件。
条件编译:常用的条件编译命令有#if、#else、#elif、#endif、#ifdef、#ifndef等,用于根据条件决定是否编译某段代码,提高程序的可移植性和灵活性。
最后修改:2025 年 08 月 03 日
© 允许规范转载