在这一章节中我们的学习内容如下,咱们一步步来。
分支结构
循环结构
本章分支结构的学习内容如下:
三、C语言中的分支与循环—if语句 (1)
三、C语言中的分支与循环—关系操作符 (2)
三、C语言中的分支与循环—条件操作符 与逻辑操作符(3)
三、C语言中的分支与循环—switch语句(4)分支结构 完
本章循环结构的学习内容如下:
三、C语言中的分支与循环—while循环 (5)
三、C语言中的分支与循环—for循环 (6)
三、C语言中的分支与循环—do-while循环 (7)
三、C语言中的分支与循环—break和continue语句(8)循环结构 完
1. if 语句的语法
注意if这句后面没有分号
1 if (表达式)
2 语句;
如果表达式为真,则语句执行;如果表达式为假,则后面那一语句不执行。
1)判断输入整数是奇数还是偶数
咱们思考这个判断条件,可以写成对该整数关于2取模的结果是否为0
同时注意if后的执行语句需要缩进,按下Tab键即可
int main()
{
int num = 0;
scanf("%d", &num);
if (num % 2 == 0)//注意这句后面没有分号;
//注意判断左右表达式是否相等的符号是“==”
printf("%d是偶数",num);
return 0;
}
输入10
输入9后,因为if()括号内的表达式为假,该语句不执行
2.else的用法
对于奇数偶数这种非此即彼的问题,我们可以用if....else....来处理,如果为真就怎样,否则就怎样
我们来改善上一个代码
int main()
{
int num = 0;
scanf("%d", &num);
if (num % 2 == 0)
printf("%d是偶数",num);//if后的表达式为真执行这一句
else
printf("%d是奇数", num);//否则,if后的表达式为假执行这一句
return 0;
}
3. 如何让if和else控制多条语句
1)if和else默认控制一条语句,如果有多条,则代码运行出错;
如果只有if ,代码没有错误,但是从第二条往下就不归if管了,继续执行:
2)解决方案:加花括号
int main()
{
int num = 0;
scanf("%d", &num);
if (num % 2 == 0)
{
printf("%d是偶数\n", num);
printf("%d可以被2整除\n", num);
}
else
{
printf("%d是奇数\n", num);
printf("%d不可以被2整除\n", num);
}
return 0;
}
4.嵌套if
当我们的问题有多种选择的时候,可以选择嵌套的方法,主要是自己需要梳理清楚逻辑
1)判断输入的数是0,还是正数,负数
可以嵌套进if或者else的任意一个中
形式1 嵌套进if中
//判断输入的数是0,还是正数,负数
int main()
{
int num = 0;
scanf("%d", &num);
if (num != 0)
{
if (num > 0)
printf("输入的值为正数");
else
printf("输入的值为负数");
}
else
printf("输入的值为0");
return 0;
}
形式2 嵌套进else中
//判断输入的数是0,还是正数,负数
int main()
{
int num = 0;
scanf("%d", &num);
if (num == 0)
printf("输入的值为0");
else
{
if (num > 0)
printf("输入的值为正数");
else
printf("输入的值为负数");
}
return 0;
}
也可以用if else if else这种写法,注意想要控制多条语句时需要打上花括号
if-else if-else
结构是一种条件控制语句,用于在多个条件之间进行选择执行。这种结构允许程序根据不同的条件执行不同的代码块。下面是其基本结构和工作原理的解释:
if (condition1)
{
// 代码块1: 当 condition1 为真时执行
}
else if (condition2)
{
// 代码块2: 当 condition1 为假且 condition2 为真时执行
}
else if (condition3)
{
// 代码块3: 当 condition1 和 condition2 都为假且 condition3 为真时执行
}
else {
// 代码块4: 当所有上面的条件都不满足时执行
}
所以该问题的代码还可以写作:
int main()
{
int num = 0;
scanf("%d", &num);
if (num == 0)
printf("输入的值为0");
else if(num > 0)
printf("输入的值为正数");
else
printf("输入的值为负数");
return 0;
}
2)练习题
- 输⼊⼀个⼈的年龄
- 如果年龄<18岁,打印"少年"
- 如果年龄在18岁⾄44岁打印"⻘年"
- 如果年龄在45岁⾄59岁打印"中⽼年"
- 如果年龄在60岁⾄89岁打印"⽼年"
- 如果90岁以上打印"⽼寿星"
int main()
{
int age = 0;//初始化
int r = scanf("%d", &age);
if (age < 18)
printf("少年\n");
else
{
if (age <= 44)
printf("青年\n");
else if (age <= 59 && age >= 45)
printf("中老年\n");
else if (age <= 89 && age >= 60)
printf("老年\n");
else
printf("老寿星\n");
}
return 0;
}
5. 悬空else问题
悬空else:当有多个 `if` 语句嵌套而没有足够的 `else` 语句时,就可能产生悬空else的情况。例如:
if (condition1)
if (condition2)
statement1;
else
statement2;
在这个例子中,`else` 语句到底是与第一个 `if` 语句匹配,还是与第二个 `if` 语句匹配呢?这就是悬空else问题。C和C++,有一个清晰的规则来处理这个问题:`else` 总是与最近的未匹配的 `if` 与之配对。因此,在上面的例子中,`else` 与第二个 `if`(`if (condition2)`)配对。
为了避免悬空else问题带来的混淆,建议总是使用大括号 `{}` 明确地指明 `if-else` 语句的范围,即使语句体只有一行。例如:
if (condition1)
{
if (condition2)
{
statement1;
}
}
else
{
statement2;
}
这样的代码结构可以清晰地表达程序的逻辑,避免悬空else问题。