🌟博主主页:我是一只海绵派大星
📚专栏分类:C语言
❤️感谢大家点赞👍收藏⭐评论✍️
目录
一、什么是语句
二、if语句
悬空else
三、switch语句
default
四、switch语句与if-else语句性能对比如何?
一、什么是语句
C语句可分为以下五类:
- 表达式语句
- 函数调用语句
- 控制语句
- 复合语句
- 空语句
二、if语句
语法结构:if ( 表达式 )语句 ;if ( 表达式 )语句 1 ;else语句 2 ;
// 多分支if ( 表达式 1 )语句 1 ;else if ( 表达式 2 )语句 2 ;else语句 3 ;
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if(age<18)
{
printf("少年\n");
}
else if(age>=18 && age<30)
{
printf("青年\n");
}
else if(age>=30 && age<50)
{
printf("中年\n");
}
else if(age>=50 && age<80)
{
printf("老年\n");
}
else
{
printf("老寿星\n");
}
}
悬空else
"悬空else"(dangling else)是编程中一个常见的错误,指的是在if-else语句中,else部分没有正确地与最近的未匹配的if语句配对。这通常是因为嵌套的if语句没有正确地使用大括号({})来明确指示其范围。
错误示例:
if (condition1)
if (condition2)
printf("Condition 1 and Condition 2 are true.\n");
else
printf("Only Condition 1 is true.\n");
在这个例子中,由于没有使用大括号,编译器无法确定else是与内部的if还是外部的if配对。为了解决这个问题,我们需要使用大括号来明确指示if-else语句的范围:
if (condition1) {
if (condition2) {
printf("Condition 1 and Condition 2 are true.\n");
}
} else {
printf("Only Condition 1 is true.\n");
}
else明确地与外部的if语句配对,而内部的if语句则独立存在。这样可以避免悬空else的问题。
三、switch语句
switch
语句是一种多分支选择结构,用于根据一个表达式的值来执行不同的代码块。它通常比多个嵌套的if-else
语句更简洁和易于理解。switch
语句的基本语法如下:
switch (expression) {
case constant1:
// Code to be executed if expression equals constant1
break;
case constant2:
// Code to be executed if expression equals constant2
break;
// ... more cases ...
default:
// Code to be executed if none of the constants match the expression
}
这里是
switch
语句的一些关键点:
expression
:这是一个表达式,其值将与case
标签的值进行比较。case
:每个case
标签都有一个常量值,用于与expression
的值进行比较。如果找到匹配的case
,则执行该case
后的代码块。break
:break
语句用于跳出switch
语句,防止执行下一个case
的代码。如果没有break
,程序将继续执行下一个case
的代码,直到遇到break
或switch
语句结束。default
:default
标签是可选的,当expression
的值与任何case
标签的值都不匹配时,将执行default
标签后的代码块。
代码示例:
#include<stdio.h>
int main() {
int day = 3;
switch (day) {
case 1:
printf("Monday\n");
break;
case 2:
printf("Tuesday\n");
break;
case 3:
printf("Wednesday\n");
break;
case 4:
printf("Thursday\n");
break;
case 5:
printf("Friday\n");
break;
case 6:
printf("Saturday\n");
break;
case 7:
printf("Sunday\n");
break;
default:
printf("Invalid day\n");
}
return 0;
}
default
- 写在任何一个 case 标签可以出现的位置。
- 当 switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。
- 每个switch语句中只能出现一条default子句。
- 但是它可以出现在语句列表的任何位置,而且语句流会像执行一个case标签一样执行default子句。
四、switch语句与if-else语句性能对比如何?
switch语句和if-else语句在性能上的差异取决于多种因素,如编译器的优化、代码的结构和目标平台等。在大多数情况下,这两种结构的性能差异可以忽略不计。然而,在某些特定情况下,它们之间可能存在一些性能差异。以下是这两种结构在不同方面的性能对比:
1. 分支预测:现代处理器使用分支预测技术来提前知道将要执行的指令。当使用switch语句时,编译器可能会生成跳转表(jump table),这是一种允许处理器直接跳转到正确代码块的数据结构。这在某些情况下可能比if-else语句的分支预测更有效。
2. 代码大小:switch语句在某些情况下可能会产生较小的代码,因为它可以将多个条件分支合并到一个跳转表中。然而,这种优化取决于编译器和目标平台。对于if-else语句,每个条件分支都需要单独的指令,可能导致更大的代码大小。
3. 执行速度:在大多数情况下,switch语句和if-else语句的执行速度差别不大。然而,在某些特定情况下,switch语句可能更快,因为它可以利用跳转表进行快速查找。此外,switch语句通常更适合处理大量条件分支的情况,因为它的结构更简洁。
总之,switch语句和if-else语句在性能上的差异取决于具体情况和编译器的优化。在大多数情况下,这两种结构的性能差异很小,不足以影响程序的运行速度。因此,在选择使用哪种结构时,应更多地考虑代码的可读性和可维护性,而不是性能。当然,在性能关键的场景下,建议对不同结构进行基准测试,以确定最佳的实现方式。
🎁结语:
本次精彩内容已圆满结束!希望各位读者在阅读过程中能够收获满满。在此,特别感谢各位读者的支持与三连赞。如果文章中存在任何问题或不足之处,欢迎在评论区留言,大星必定会认真对待并加以改进,以便为大家呈现更优质的文章。你们的支持与鼓励,将是博主不断前进的最大动力。再次感谢大家的陪伴与支持!