1. if语句
C语言if语句是一种条件语句,用于根据表达式的计算结果选择是否执行特定的代码块。if语句的基本语法如下:
if (expression) {
// 需要执行的代码块
}
其中,expression(这串英文其实没啥作用只不过官方是这样弄的,可以直接替换成汉字“表达式”)是一个条件表达式,如果它的值为true(非0),那么if语句后面的代码块会被执行;否则,代码块不会被执行。可以在if语句后面跟上一个可选的else语句,用于在条件不成立时执行另外一段代码,如下所示:
if (expression) {
// 需要执行的代码块
} else {
// 可选的代码块
}
也可以嵌套多个if语句,实现更复杂的条件判断,如下所示:
if (expression1) {
// 需要执行的代码块1
} else if (expression2) {
// 需要执行的代码块2
} else {
// 需要执行的代码块3
}
其中,如果expression1的值为true,则执行代码块1;如果expression1的值为false,判断expression2,如果expression2为true,则执行代码块2;如果expression2为false,则执行代码块3。
2.三种操作符
a.关系操作符
- 等于:==
- 不等于:!=
- 大于:>
- 小于:<
- 大于等于:>=
- 小于等于:<=
这些关系操作符常用于条件判断语句(如if语句、while语句等),它们可以比较两个值的大小,判断它们之间的关系,并返回一个布尔值(true或false)。
b.条件操作符
C语言中的条件操作符又称为三目运算符,其语法格式为:
表达式1 ? 表达式2 : 表达式3
个运算符先计算表达式1的值,如果为真(非0),则返回表达式2的值;否则,返回表达式3的值。使用条件操作符可以简化if语句嵌套的代码。
例如,以下代码使用if语句实现了对两个数的比较:
if (a > b) {
max = a;
} else {
max = b;
}
使用条件操作符可以简化为:
max = (a > b) ? a : b;
这样,代码变得更加简单易懂。但需要注意的是,不要滥用条件操作符,避免影响代码可读性。
c.逻辑操作符:&& , || , !
C语言中的逻辑操作符有三个:&&(逻辑与)、||(逻辑或)和!(逻辑非)。
逻辑与(&&)操作符用于两个操作数都为真时才返回真。例如,如果x>3且y<5,则可以使用&&操作符来检查它们是否同时成立:
if (x > 3 && y < 5) {
// some code to execute
}
逻辑或(||)操作符用于当两个操作数中至少有一个为真时就返回真。例如,如果x>3或y<5,则可以使用||操作符来检查它们是否至少有一个条件成立:
if (x > 3 || y < 5) {
// some code to execute
}
逻辑非(!)操作符用于取反操作数的值。例如,!x表示“如果x为假,则返回真”,而!(x>3)表示“如果x小于或等于3,则返回真”。
if (!x) {
// some code to execute if x is false
}
3. switch语句
C语言的switch语句用于在一系列条件语句中进行选择。它的格式如下:
switch(expression) {
case constant1:
// code to be executed if expression matches constant1
break;
case constant2:
// code to be executed if expression matches constant2
break;
.
.
.
default:
// code to be executed if none of the cases match expression
}
switch语句的关键字是switch,expression是要进行比较的值,常量常用整数或字符常量,case后面是常量,代表一种选择,当expression的值和case后面常量相等时,就执行该case下的代码;default是可选的,当expression的值与所有case后面的常量都不相等时,就执行default下的代码。
在每个case下都需要有break语句,用于结束该case并跳出switch语句,因为如果没有break语句,程序会继续执行下一个case,并导致逻辑错误。
以下是一个简单的例子:
int a = 3;
switch(a) {
case 1:
printf("a is 1");
break;
case 2:
printf("a is 2");
break;
case 3:
printf("a is 3");
break;
default:
printf("a is not 1, 2 or 3");
}
在这个例子中,当a等于3时,程序会输出“a is 3”。
4. while循环
C语言的while循环是一种基本的循环语句,用于重复执行一段代码,直到满足指定的条件停止。其语法格式如下:
while (expression) {
statement(s);
}
其中,expression
是用于判断循环是否需要继续执行的条件表达式,statement(s)
是要重复执行的语句块。
while循环的执行过程是:先对expression
进行求值,如果值为真,则执行statement(s)
,然后再对expression
进行求值,直到expression
的值为假为止。在循环执行期间,如果expression
一开始的值为假,则不会执行statement(s)
。
在使用while循环时,需要注意控制循环的条件,避免陷入无限循环而导致程序崩溃。以下是一个简单的例子:
#include <stdio.h>
int main() {
int i = 1;
while (i <= 10) {
printf("%d ", i);
i++;
}
return 0;
}
在这个例子中,循环条件是i <= 10
,当i
的值小于或等于10时,循环会继续执行。每次循环中,i
的值会加1,并将其打印输出,直到i
的值大于10时停止循环。运行程序后,输出结果为1 2 3 4 5 6 7 8 9 10
。
5. for循环
C语言的for循环是一种循环结构,用于重复执行某个语句。它的一般形式如下:
for (初始化; 条件表达式; 更新表达式) {
循环体语句;
}
其中:
- 初始化:在循环开始前执行一次的语句,通常用于初始化计数器等变量。
- 条件表达式:每次循环开始前都会被执行,如果结果为真,则继续循环;否则跳出循环。
- 更新表达式:每次循环结束后都会被执行,用于更新计数器等变量的值。
- 循环体语句:每次循环开始前都会被执行的语句。
举个例子,下面的代码展示了一个简单的倒数计时程序,使用for循环从10开始倒数,直到0为止:
#include <stdio.h>
int main() {
int i;
for (i = 10; i >= 0; i--) {
printf("%d\n", i);
}
return 0;
}
输出结果为:
10
9
8
7
6
5
4
3
2
1
0
6. do-while循环
C语言的do-while循环是一种循环结构,用于重复执行某个语句。与while循环不同的是,do-while循环会先执行一次循环体语句,再根据条件表达式判断是否继续循环。
它的一般形式如下:
do {
循环体语句;
} while (条件表达式);
其中:
- 循环体语句:每次循环开始前都会被执行的语句。
- 条件表达式:每次循环结束后都会被执行,如果结果为真,则继续循环;否则跳出循环。
与while循环相比,do-while循环能够保证循环体内的语句至少被执行一次。举个例子,下面的代码展示了一个简单的数字猜谜游戏,使用do-while循环直到猜对为止:
#include <stdio.h>
int main() {
int number = 7;
int guess;
do {
printf("Enter your guess:");
scanf("%d", &guess);
if (guess > number) {
printf("Too high!\n");
} else if (guess < number) {
printf("Too low!\n");
}
} while (guess != number);
printf("You got it!\n");
return 0;
}
在上述代码中,循环体内的语句会至少被执行一次,直到猜对数字为止。
7. break和continue语句
在C语言中,break和continue语句用于控制程序跳出循环的执行。
- break语句:当在循环内部使用break语句时,程序将立即跳出循环结构,继续执行循环后面的语句。
- continue语句:当在循环内部使用continue语句时,程序将跳过当前循环的剩余部分,继续执行下一次的循环。
下面分别对它们进行详细说明。
- break语句
break语句主要用于跳出循环结构,它可以用在for、while、do-while循环中。当程序执行到break语句时,将会跳出当前的循环,继续执行循环语句后面的语句。下面是一个使用break语句的示例:
for (int i = 1; i <= 10; i++) {
if (i == 6) {
break;
}
printf("%d ", i);
}
在上述代码中,当i等于6时,break语句会跳出循环,输出结果为1 2 3 4 5。
- continue语句
continue语句主要用于跳过当前循环中的某次迭代,它可以用在for、while、do-while循环中。当程序执行到continue语句时,将会跳过当前的迭代,继续执行下一次的迭代。下面是一个使用continue语句的示例:
for (int i = 1; i <= 10; i++) {
if (i == 6 || i == 8) {
continue;
}
printf("%d ", i);
}
在上述代码中,当i等于6或8时,continue语句会跳过当前迭代,输出结果为1 2 3 4 5 7 9 10。
需要注意的是,在循环语句中使用break和continue语句时,也需要注意不要使用过度。过多的break和continue语句会使程序变得难以理解和维护,容易产生错误。
8. 循环的嵌套
C语言中循环嵌套是在一个循环体内部嵌套另一个循环体,常用于多重循环、数组处理、矩阵运算等操作。
以下是一个简单的C语言循环嵌套示例:
#include <stdio.h>
int main() {
int i, j;
for (i = 1; i <= 5; i++) {
for (j = 1; j <= i; j++) {
printf("%d ", j);
}
printf("\n");
}
return 0;
}
上述示例代码中,第一个for循环用来控制外层循环,第二个for循环用来控制内层循环。每次内层循环执行完毕后,外层循环再次执行,直到外层循环执行完毕为止。输出结果如下:
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
在实际开发中,循环嵌套的使用需要注意以下几点:
- 循环次数不能过多,否则会影响程序的性能,甚至会造成死循环。
- 尽量使用较少的循环嵌套,以提高程序的可读性和可维护性。
- 循环内部的操作需要尽量简单,避免对内存的大量读写操作,以提高程序的效率。
9. goto语句(这个不建议使用啦~)
C语言中的goto
语句可以无条件地转移到在同一函数内的其它标记,即可以将程序的执行直接转移到代码中的另一个位置,跳过中间的部分。goto
语句的使用需要谨慎,在不恰当的使用下可能产生一些可怕的副作用,比如死循环,程序跳转混乱,或者造成难以维护的代码等。
goto
语句的格式如下:
goto label;
其中,label
是标号,标号由一个标识符和一个冒号组成,用来标识代码中的某个位置,例如:
label: statement
其中,statement
是一个语句。
下面是一个简单的goto
语句示例:
#include <stdio.h>
int main() {
int i = 1;
label: // 标号
printf("%d\n", i);
i++;
if (i <= 5) {
goto label; // 跳转到标号处
}
return 0;
}
上述示例代码中,使用goto
语句实现了简单的循环输出。输出结果如下:
1
2
3
4
5
需要注意的是,goto
语句在使用前必须定义好对应的标号,否则会编译错误。
虽然goto
语句在某些情况下可以方便地实现代码跳转(但特别特别容易跳错,代码逻辑不强的建议不要用,虽然某些情况下非常好用,比如在多层循环的代码中,如果想快速跳出 使⽤ goto 就⾮常的⽅便了),但在实际开发中尽量避免使用,以保证代码的可读性和可维护性。