文章目录
3. 控制结构
3.1 条件语句
条件语句用于根据不同的条件执行不同的代码块。在C语言中,主要的条件语句是 if
语句。
if
语句
if
语句用于执行条件为真时的代码块,可以结合 else if
和 else
来处理多个条件分支和默认情况。
int a = 10;
if (a > 5) {
// 如果条件为真执行这里的代码
} else if (a == 5) {
// 如果第二个条件为真执行这里的代码
} else {
// 如果以上条件都不成立执行这里的代码
}
- 语法:
if (condition)
:如果条件为真,则执行后面的代码块。else if (condition)
:可选的,如果前面的if
条件不成立且该条件成立,则执行对应的代码块。else
:可选的,默认情况,当所有的if
和else if
条件都不成立时执行的代码块。
示例:
int score = 85;
if (score >= 90) {
printf("优秀\n");
} else if (score >= 80) {
printf("良好\n");
} else if (score >= 70) {
printf("中等\n");
} else if (score >= 60) {
printf("及格\n");
} else {
printf("不及格\n");
}
在上面的示例中,根据 score
的值,程序会打印出相应的评分等级。
3.2 循环语句
循环语句用于重复执行一段代码,直到达到指定的条件。C语言中有 for
、while
和 do-while
三种循环语句。
for
循环
for
循环通过设置初始值、条件表达式和更新表达式来控制循环次数。
for (int i = 0; i < 10; i++) {
// 循环体中的代码
}
- 语法:
for (initialization; condition; update)
:initialization
:在循环开始前执行的初始化语句,通常用于初始化循环变量。condition
:在每次迭代开始前检查的条件,如果为真则执行循环体,否则退出循环。update
:在每次循环体执行完毕后执行的表达式,通常用于更新循环变量。
示例:
for (int i = 0; i < 10; i++) {
printf("%d ", i); // 打印0到9之间的数字
}
while
循环
while
循环根据条件表达式的真假来重复执行代码块,条件表达式在每次迭代之前进行检查。
int i = 0;
while (i < 10) {
// 循环体中的代码
i++;
}
- 语法:
while (condition)
:condition
:在每次迭代开始前检查的条件,如果为真则执行循环体,否则退出循环。
示例:
int i = 0;
while (i < 10) {
printf("%d ", i); // 打印0到9之间的数字
i++;
}
do-while
循环
do-while
循环先执行一次循环体,然后检查条件是否成立,如果条件为真则继续执行循环。
int i = 0;
do {
// 循环体中的代码
i++;
} while (i < 10);
- 语法:
do { // 循环体 } while (condition);
condition
:在每次迭代之后检查的条件,如果为真则继续执行循环,否则退出循环。
示例:
int i = 0;
do {
printf("%d ", i); // 打印0到9之间的数字
i++;
} while (i < 10);
3.3 跳转语句
跳转语句用于控制程序的执行流程,包括 break
、continue
和 goto
。
break
语句
break
语句用于立即终止包含它的 for
循环、while
循环或 switch
语句。
for (int i = 0; i < 10; i++) {
if (i == 5) {
break; // 当i等于5时跳出循环
}
}
break
语句使程序流程立即跳出当前循环或switch
语句。
continue
语句
continue
语句用于跳过当前循环中剩余的语句,并继续下一次循环的执行。
for (int i = 0; i < 10; i++) {
if (i == 5) {
continue; // 当i等于5时跳过本次循环,继续下一次循环
}
printf("%d ", i); // 打印除了5以外的数字
}
continue
语句用于提前结束当前循环的迭代,继续下一次迭代。
goto
语句
goto
语句用于无条件地将控制转移到带有标签的代码块中的某个位置。
goto label;
// 其他代码
label:
// 跳转到这里执行标签处的代码
- 注意:
goto
语句通常被视为不良编程实践,因为它可以使程序结构不清晰和难以维护。
4. 函数详解
4.1 函数的定义
在C语言中,函数是执行特定任务的代码块。函数由函数名、参数列表、返回类型、函数体组成。
函数定义的一般形式:
返回类型 函数名(参数列表) {
// 函数体
return 返回值;
}
- 返回类型:函数执行完毕后返回的数据类型。如果函数不返回任何值,返回类型为
void
。 - 函数名:函数的标识符,用来调用函数。
- 参数列表:函数接受的输入,可以是零个或多个参数。
- 函数体:包含函数执行的代码块。
- 返回值:函数执行完毕后返回的值,与返回类型一致。
示例:
// 函数原型声明
int add(int, int);
// 函数定义
int add(int a, int b) {
int sum = a + b;
return sum;
}
在这个例子中:
add
是函数名。(int a, int b)
是参数列表,表示函数接受两个int
类型的参数。int
是返回类型,函数执行完毕后返回一个int
类型的值。- 函数体中的
int sum = a + b;
计算了参数a
和b
的和,然后通过return sum;
返回这个和作为函数的结果。
4.2 函数的声明
函数声明告诉编译器函数的存在、名称、返回类型以及参数列表。通常在使用函数之前进行声明。
函数声明的目的:
- 告诉编译器函数的原型,以便在调用函数时进行类型检查。
- 允许在一个文件中使用定义在另一个文件中的函数。
函数声明的形式:
返回类型 函数名(参数列表);
示例:
// 函数原型声明
int add(int, int);
// 函数定义
int add(int a, int b) {
int sum = a + b;
return sum;
}
在这个例子中,int add(int, int);
是 add
函数的声明,告诉编译器有一个名为 add
的函数,它接受两个 int
类型的参数并返回一个 int
类型的值。
4.3 函数的调用
函数通过函数名和传递给它的参数来调用。
调用函数的一般形式:
返回类型 变量名 = 函数名(参数列表);
示例:
int result = add(5, 3);
这个例子中,add(5, 3)
调用了 add
函数,并将参数 5
和 3
传递给函数。int result =
将函数返回的结果赋值给 result
变量。
4.4 函数参数与返回值
函数参数
函数可以接受零个或多个参数。参数列表指定了函数接受的参数类型和顺序。
返回类型 函数名(参数类型1 参数名1, 参数类型2 参数名2, ...) {
// 函数体
return 返回值;
}
示例:
int add(int a, int b) {
int sum = a + b;
return sum;
}
这个例子中,add
函数有两个 int
类型的参数 a
和 b
。
函数返回值
函数可以返回一个值,返回值的类型由函数的返回类型指定。如果函数没有返回值,返回类型应为 void
。
返回类型 函数名(参数列表) {
// 函数体
return 返回值;
}
示例:
int add(int a, int b) {
int sum = a + b;
return sum;
}
这个例子中,add
函数返回两个参数 a
和 b
的和作为 int
类型的结果。
4.5 函数示例
计算阶乘的例子:
#include <stdio.h>
// 函数原型声明
int factorial(int);
int main() {
int n = 5;
int fact = factorial(n); // 调用factorial函数计算阶乘
printf("Factorial of %d = %d\n", n, fact);
return 0;
}
// 函数定义:计算阶乘
int factorial(int n) {
if (n == 0 || n == 1) {
return 1;
} else {
return n * factorial(n - 1);
}
}
在这个例子中:
factorial
函数计算输入n
的阶乘。main
函数调用factorial
函数,并输出计算结果。
这样,你就可以更详细地了解C语言中函数的定义、声明、调用以及参数与返回值的使用方法了。