引言
c语言有三个结构,包括:顺序结构,循环结构,选择结构。if、switch实现分支结构,for、whlie、do whlie实现循环结构。
1. if语句
基本概念
-if 语句是一种条件控制语句,用于根据给定条件的真假来决定是否执行某段代码。它允许程序根据不同的情况做出不同的反应,这在实现逻辑判断和流程控制方面非常重要。
if语句的语法
if (表达式)
语句
例如:
int num = 10;
if (num > 5) {
printf("这个数大于5\n");
}
if-else形式
当我们判断一个数是奇数还是偶数的时候就用到了if-else语句。
例如:
#include <stdio.h>
int main() {
int num;
printf("请输入一个整数: ");
scanf("%d", &num);
if (num % 2 == 0) {
printf("%d 是偶数\n", num);
} else {
printf("%d 是奇数\n", num);
}
return 0;
}
if和else默认情况下都只控制一条语句。
例如:
上述代码对比可以看出俩个输出都把“可以谈恋爱”输出,因为 if 语句只能控制⼀条语句,就是 printf(" 成年了 \n"); if语句为真,则打印成年了if语句为假,则不打印,对于 printf(" 可以谈恋爱了 \n"); 是独⽴存在的,不管if语句的条件的真 假都会被执⾏。
当我们需要if和else控制俩条以上的时候需要加{ }。
例如:
在if-else语句中,else 可以与另⼀个 if 语句连⽤,构成多重判断。
例如:
如果有多个 if 和 else ,可以记住这样⼀条规则, else 总是跟最接近的 if 匹配
例如:
上来判断a>5吗?发现a<5,那就进行else,自以为会打印“只有前俩个条件满足”,实际上上面什么都不打印。原因就在于:else 总是跟最接近的 if 匹配
2. 关系操作符
C语⾔⽤于⽐较的表达式,称为“关系表达式”(relationalexpression)⾥⾯使⽤的运算符就称为“关系运算符”(relationaloperator),主要有下⾯6个。
• > ⼤于运算符
• < ⼩于运算符
• >= ⼤于等于运算符
• <= ⼩于等于运算符
• == 相等运算符
• != 不相等运算符
3. 条件操作符
条件操作符也叫三⽬操作符,需要接受三个操作数的。其语法形式是“条件表达式? 表达式1 : 表达式2”。意思是先对条件表达式进行判断,如果它的值为真(在C系语言中非0即为真),就返回表达式1的值;如果条件表达式的值为假(0),就返回表达式2的值。
例如:
4. 逻辑操作符:&&,||,!
逻辑运算符提供逻辑判断功能,逻辑操作符主要用于对布尔值(真或假)进行运算。
逻辑与(&&):当使用“&&”连接两个条件时,只有两个条件都为真,整个表达式才为真。例如在编程语言中,“if (a > 1 && b < 12)”,只有a大于1且b小于12同时成立,if语句中的条件才为真。
例如:
逻辑或(||):用“||”连接两个条件,只要其中一个条件为真,整个表达式就为真。如“if (x == 5 || x == 3)”,当x等于5或者x等于3时,if语句的条件为真。
逻辑非(!):用来对一个布尔值取反。如果原来是真,经过“!”操作后就为假;原来是假,经过“!”操作后就为真。例如“if (!(a > 10))”,如果a大于10为假,那么整个条件就为真。
一个小练习:如何判断是闰年?
注:闰年判断的规则1. 能被4整除并且不能被100整除是闰年
2. 能被400整除是闰年
5. switch语句
switch 语句是⼀种特殊形式的 的 el if...else 结构,⽤于判断条件有多个结果的情况。它把多重 se if 改成更易⽤、可读性更好的形式。
switch (expression) {
case value1: statement
case value2: statement
default: statement
}
例如:
int main() {
int day=0;
printf("请输入数字(1-7):");
scanf("%d", &day);
switch (day) {
case 1:
printf("星期一");
break;
case 2:
printf("星期二");
break;
case 3:
printf("星期三");
break;
case 4:
printf("星期四");
break;
case 5:
printf("星期五");
break;
case 6:
printf("星期六");
break;
case 7:
printf("星期日");
break;
default:
printf("输入错误");
break;
}
return 0;
}
运行结果:
注: • switch 后的 expression 必须是整型表达式
• case 后的值,必须是整形常量表达式
6. while循环
在C语言中, while 语句是一种循环结构。
它的基本语法是 while(条件表达式) {
循环体语句;
}
当条件表达式的值为真(非0)时,就会执行循环体语句;执行完循环体后,会再次判断条件表达式,若还是为真就继续执行循环体,直到条件表达式的值为假(0),此时循环结束。
例如:
7. for循环
在C语言中, for 循环是一种功能强大且常用的循环结构。
它的基本语法是 for(初始化表达式; 条件表达式; 更新表达式) {
循环体语句;
}
- 初始化表达式:在循环开始前执行一次,通常用于初始化循环变量,比如 int i = 0; 。
- 条件表达式:用于判断循环是否继续执行,只要这个表达式的值为真(非0),循环就会继续,例如 i < 10 。
- 更新表达式:在每次循环体执行完后执行,一般用于更新循环变量的值,像 i++ 。
例子:
注:在C语言中, i++ 和 ++i 都用于给变量 i 加1,但它们有一些区别。
i++ 是后置自增运算符。它先返回 i 的值,然后再将 i 的值加1。
例如:
int i = 5;
int a = i++;
// 执行后,a的值为5,i的值为6
++i 是前置自增运算符。它先将 i 的值加1,然后返回更新后 i 的值。
例如:
int i = 5;
int b = ++i;// 执行后,b的值为6,i的值为6
8. do-while循环
在C语言中, do - while 语句也是一种循环结构。
它的语法格式是
do {
循环体语句
} while(条件表达式);
和 while 语句、 for 语句不同的是, do - while 循环是先执行一次循环体,然后再判断条件表达式是否为真。如果条件表达式为真,就继续执行循环体;如果为假,循环结束。
例如:
9. break和continue语句
在C语言中, break 和 continue 语句都用于控制循环的流程。
break 语句用于跳出当前循环结构( for 循环、 while 循环、 do - while 循环)或者 switch 语句。当 break 语句在循环体中被执行时,循环会立即终止,程序将继续执行循环后面的语句。
例如:
continue 语句用于跳过当前循环体中剩余的语句,然后直接进入下一次循环的条件判断。
例如:
10. 循环的嵌套
循环嵌套是指在一个循环内部包含另一个循环。
最常见的是在 for 循环中嵌套 for 循环,或者 while 循环中嵌套 while 循环等多种组合形式。
例如,使用 for 循环嵌套来打印九九乘法表:
#include <stdio.h>
int main() {
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
printf("%d×%d=%d\t", j, i, i * j);
}
printf("\n");
}
return 0;
}
循环嵌套执行时,外层循环每执行一次,内层循环会完整地执行一遍它的循环周期。要注意合理设计循环条件和循环体内容,避免出现无限循环等错误。
运行结果:
11. goto语句
在C语言中, goto 语句是一种无条件跳转语句。
它的语法是 goto 标签; ,这里的标签是一个自定义的标识符,用于标记代码中的一个位置。标签的定义方式是在标识符后面加上冒号,如 label: 。
例如
在这个例子中,程序先打印变量 i 的值,然后 i 自增。接着判断 i 是否小于等于5,如果是就跳转到 loop 标签处,再次执行打印和自增的操作。这样就实现了循环输出1到5的功能。
不过, goto 语句如果使用不当,会使程序的流程难以理解和跟踪,导致代码的可读性和可维护性变差。所以在大多数情况下,应该谨慎使用 goto 语句,优先考虑使用 for 、 while 、do - while 等循环结构。