【前言】
C 语言是一种通用的编程语言,最早由 Dennis Ritchie 在 1970 年代初开发。它是一种高级语言,具有结构化程序设计的特点,并且具有较强的移植性。
C 语言拥有较为简单的语法,并且具有高效的编译器和运行环境,因此被广泛应用于各种领域,包括操作系统、编译器、数据库、科学计算和嵌入式系统等。
关于 C 语言的基础知识,主要包括以下几个方面:
基本语法:包括 C 语言的基本数据类型、变量、常量、运算符、表达式、语句和函数等。
控制结构:包括 C 语言中的流程控制语句,如 if、for、while、do-while 等。
函数:C 语言中的函数是组成程序的基本单位,可以定义不同功能的函数,并在程序中调用。
数组与指针:C 语言中的数组是一组相同类型的变量的集合,可以用来存储一组数据。指针是一种特殊的变量。
一、基本语法
(一)基本数据类型
基本数据类型是指简单的数据类型,包括整型、浮点型、字符型和布尔型。
整型:整型变量用于存储整数。C 语言中提供了多种整型类型,如 short、int、long 等。不同的整型类型可以存储不同范围的整数。
浮点型:浮点型变量用于存储小数。C 语言中提供了两种浮点型类型,即 float 和 double。float 类型可以存储单精度浮点数,double 类型可以存储双精度浮点数。
字符型:字符型变量用于存储单个字符。C 语言中的字符型变量使用 char 类型表示。
布尔型:布尔型变量用于存储布尔值。C 语言中的布尔型变量使用 _Bool 类型表示。
(二)变量
变量是程序运行时可以改变的量。在使用变量之前,需要声明变量,声明变量时需要指定变量的类型和名称。例如:
int a; // 声明整型变量 a
float b; // 声明浮点型变量 b
char c; // 声明字符型变量 c
在声明变量时,也可以同时赋值:
int a = 10; // 声明整型变量 a 并赋值为 10
float b = 3.14; // 声明浮点型变量 b 并赋值为 3.14
char c = 'A'; // 声明字符型变量 c 并赋值为 'A'
在 C 语言中,变量名是大小写敏感的,也就是说 A 和 a 是两个不同的变量。变量名由字母、数字和下划线组成,但是不能以数字开头。
C 语言中还有一种特殊的变量——常量。常量是一种在程序运行时不能改变的量。常量可以使用 #define 宏定义,也可以使用 const 关键字声明。例如:
#define PI 3.14 // 定义常量 PI
const int MAX_VALUE = 100; // 声明常量 MAX_VALUE
常量的名称通常用大写字母表示,表明这是一个常量。
(三)常量
常量是一种在程序运行时不能改变的量。在 C 语言中,常量可以使用 #define 宏定义,也可以使用 const 关键字声明。
#define 宏定义是在预处理阶段进行的,可以用来定义常量和宏函数。宏定义的格式为:
#define 常量名 常量值
例如,定义常量 PI 的值为 3.14:
#define PI 3.14
使用 #define 宏定义时,常量名在程序中会被替换为常量值。这种方式定义的常量没有类型,也不占用内存空间。
使用 const 关键字声明常量的方式稍微复杂一些,格式为:
const 类型名 常量名 = 常量值;
例如,声明常量 MAX_VALUE 的值为 100:
const int MAX_VALUE = 100;
使用 const 关键字声明的常量有类型,且会占用内存空间。
常量的名称通常用大写字母表示,表明这是一个常量。在使用常量时,不能对它进行赋值操作。例如:
PI = 3.14159; // 错误,不能对常量赋值
MAX_VALUE = 200; // 错误,不能对常量赋值
使用常量的优点是可以提高代码的可读性,并且可以避免在程序中出现 magic number(即在代码中出现的难以理解的数字)。
(四)运算符
C 语言中的运算符是用来执行算术运算、比较运算、逻辑运算、赋值运算等操作的符号。
C 语言中的运算符分为以下几类:
算术运算符:包括 +、-、*、/ 和 % 等。
比较运算符:包括 >、<、>=、<=、== 和 != 等。
逻辑运算符:包括 &&、|| 和 ! 等。
赋值运算符:包括 =、+=、-=、*=、/= 和 %= 等。
位运算符:包括 &、|、^ 和 ~ 等。
条件运算符:即三目运算符(? :)。
逗号运算符:用于在一个表达式中包含多个子表达式。
运算符的优先级指的是在表达式中运算符的执行顺序。优先级高的运算符会优先执行。例如,在表达式 2 + 3 * 4 中,* 运算符的优先级
(五)表达式
在 C 语言中,表达式是指由运算符和操作数组成的式子。表达式会在程序运行时计算出一个值。
C 语言中的表达式可以使用算术运算符、比较运算符、逻辑运算符、赋值运算符等运算符来构成。例如:
1 + 2 // 算术表达式
a > b // 比较表达式
a == b && c != d // 逻辑表达式
a = b + c // 赋值表达式
表达式的值可以是常量、变量或者其他表达式的值。例如:
1 + 2 * 3 // 表达式的值为 7
a + b - c // 表达式的值取决于变量 a、b 和 c 的值
(a > b) ? a : b // 表达式的值取决于变量 a 和 b 的值
表达式的值可以赋值给变量,例如:
int x;
x = 1 + 2 * 3; // 表达式的值被赋值给变量 x
表达式的运算顺序取决于运算符的优先级。优先级高的运算符会优先进行运算。例如,在表达式 2 + 3 * 4 中,* 运算符的优先级比 + 运算符高,所以 3 * 4 会先进行运算,得到 12,再与 2 进行 + 运算,得到最终的结果 14。
(六)语句
在 C 语言中,语句是用来完成特定任务的代码块。在 C 语言中,语句以分号结尾。例如:
int x = 0; // 赋值语句
x += 1; // 赋值语句
printf("Hello, world!"); // 函数调用语句
C 语言中的语句分为以下几类:
赋值语句:用于将表达式的值赋值给变量。例如:
int x = 0; // 将 0 赋值给变量 x
x += 1; // 将 x 加上 1 后的值赋值给 x
函数调用语句:用于调用函数。例如:
printf("Hello, world!"); // 调用函数 printf
控制语句:用于控制程序的流程。C 语言中提供了多种控制语句,包括 if、for、while 和 switch 等。
(七)函数
在 C 语言中,函数是一段可以被多次调用的代码块,可以帮助我们实现特定功能。使用函数的好处是可以把复杂的代码拆分成若干个小的函数,使代码更加结构化、可读性更高。
在 C 语言中,函数的声明包括函数的返回类型、函数名、参数列表和函数体。例如,定义一个名为 max 的函数,返回两个整数的最大值:
int max(int a, int b) {
if (a > b) {
return a;
} else {
return b;
}
}
函数的返回类型是 int,函数名是 max,参数列表是 (int a, int b),函数体是 if-else 语句块。
在函数体中,可以使用 return 语句结束函数的执行并返回结果。
函数的调用是通过函数名和参数列表来调用的。例如,调用 max 函数:
int x = max(1, 2); // x 的值为 2
在 C 语言中,还有一种特殊的函数——库函数。库函数是由 C 语言标准库或者第三方库提供的函数,可以直接使用。
二、控制结构
控制结构是用来控制程序的流程的语句。C 语言中的控制结构包括分支结构和循环结构。
(一)分支结构
分支结构是用来控制程序执行不同代码块的结构。C 语言中提供了 if 和 switch 两种分支结构。
if 语句是用来在表达式为真时执行代码块的语句。if 语句的格式为:
if (表达式) {
// 代码块
}
例如,求两个数的最大值:
int a, b;
if (a > b) {
printf("a is larger than b\n");
}
if 语句还可以搭配 else 语句使用,在表达式为假时执行代码块。例如:
int a, b;
if (a > b) {
printf("a is larger than b\n");
} else {
printf("b is larger than or equal to a\n");
}
switch 语句是用来执行多个代码块的语句,根据表达式的值来决定执行哪个代码块。switch 语句的格式为:
switch (表达式) {
case 值1:
// 代码块1
break;
case 值2:
// 代码块2
break;
// ...
default:
// 默认代码块
break;
}
例如,输出数字对应的字符串:
int n;
switch (n) {
case 1:
printf("One\n");
break;
case 2:
printf("Two\n");
break;
case 3:
printf("Three\n");
break;
// ...
default:
printf("Invalid number\n")
(二)循环结构
循环结构是用来执行重复代码块的结构。C 语言中提供了 for 和 while 两种循环结构。
for 循环是用来执行指定次数的循环。for 循环的格式为:
for (初始化语句; 条件表达式; 更新语句) {
// 代码块
}
例如,输出 1 到 10 的数字:
for (int i = 1; i <= 10; i++) {
printf("%d\n", i);
}
while 循环是用来执行条件为真时的循环。while 循环的格式为:
while (条件表达式) {
// 代码块
}
例如,输入数字直到输入 0 为止:
int n;
while (n != 0) {
scanf("%d", &n);
}
循环结构还可以搭配 break 和 continue 语句使用。break 语句用于结束循环,continue 语句用于跳过本次循环剩余的代码并进行下一次循环。
今天的回顾就先到这里了,我们下期再见!