首先,简单介绍一下 if else 语句的书写格式:
if (条件语句)
{
满足条件后的执行内容;
}(ps:此处在 if 后的执行语句只有一行的时候可以不用加这个大括号 ,但此时会默认执行内容为条件语句后的第一条语句;而当有多个执行语句时,务必要加上大括号 。当然还是建议大家不论什么情况都加上个大括号也算是养成一个编程的好习惯。)
else(条件语句)
{
满足条件语句后的执行内容;
}
当然 if else 语句是支持多分支食用的。举例如下:
int age =0;
if(age<=18)
{
printf("少年\n");
}
else if (age<=25)
{
printf("青年\n");
}
else
{
printf("壮年\n");
}
此时就是一个三分支的句例
嵌套如下:
int age =0;
if(age<=18)
{
if (age<=10 )
{
printf ("幼年\n")
}; <--注意:此处就进行了 if 语句的嵌套使用。
else
{
printf ("少年\n");
}
}
else if (age<=25)
{
printf ("青年\n");
}
else
{
printf ("壮年\n");
}
比如,在条件语句中需描述 a 的值要大于等于1且小于等于2时
大部分小萌新们会将数学语言直接照搬到条件语句中,
错误示例
if(1=<a<=2)
长期以来数学语言的熏陶下,这种根深蒂固的惯性思维也将使我们困扰许久。于是在这里便和大家分享此题正解:
正确示例
if (a>=1&&a<=2)ps:此处的 && 是逻辑与符号,在这块就表示并且、
当然还有一些需要注意的点,在下面与你娓娓道来。
刚学这块内容时,我相信很多与我一样的小萌新都曾在这个地方上栽过跟头。
例如此处我想设计一个程序:问自己每天在编程上花的时间有三个小时吗?(1 Yes / 2 No)
输入 1 就在屏幕上打印 ”很棒,要继续努力!“ 而输入 2 就在屏幕上打印”是想回家放羊去了吗?“
接下来我们来实现这个函数
常见错误示范:
#include
int main()
{
int a=0;
scanf("%d",&a);
if(a=1)
{
printf(" 很棒,要继续努力\n");
}
else
printf("是想回家放羊去了吗 ?\n");
return 0;
}
如果这样写的话输出结果就会是下面这样
你会问号的发现不管是输入 1 还是 2 输出的结果都为 ”很棒,要继续努力“了。并且编译器也不会给你报任何错误。那么其实这就是走入了 赋值符号 “=" 与 等于 ”== “ 弄混 的这个误区。对于这种一个常量和变量进行对比的条件语句 我们可以在写的时候将常量与变量的位置互换一下
if(1==a)
这样一来即使你不小心将两个符号混乱使用了,也能够即使发现错误(因为如果此处写成了赋值的符号,变量在右边,常量在左边,变量是不能给常量赋值的,产生了语法错误,此时编译器会报错。这样一来就将逻辑错误转换成了语法错误,妈妈再也不用担心我因此头昏脑胀了。)
并且前后对调位置后对程序运行的结果是不会有影响的
直接上代码
#include
int main()
{
int a = 0;
int b = 2;
if(1==a)//这里就现学现用,把常量和变量的位置互调。
if(2==b)
{
printf("haha\n");
}
else
{
printf("hehe\n");
}
return 0;
}
那么大家思考一下上述代码输出的结果应该是多少。
其实并不是 hehe 噢,答案是什么都不输出。
原因就是因为 else 会与最近的一条 if 语句相匹配,而不是与位置上对齐的 if 语句相匹配。(此处特意把第一条if 与后面的 else 在位置上对齐,混淆一下同学们。)
经过前面对 if else语句的学习,我们简单分析一下这串代码,首先走到第一个 if 的条件语句判断 a是否等于1,如果等于程序才走后面的一套 if else 语句(注意后面的if else语句虽然中间有两个分号但本质上两个合起来才算组成一条语句,且因为if else是选择执行一个的,所以必然是一条)。而很明显不满足第一个 if 的判断语句,所以后面的无论是 haha 还是hehe就算符合条件了也根本不会输出,因为程序都不会走过去。这就造成了所谓的"悬空else"的情况。
简单来说就是在使用分支语句时要使所有分支都有返回值,否则编译器将会发出警告.
如果你只写了 if 的返回值情况,没在其他情况下设置返回值,编译器就会认为在 if 语句不满足时该函数没有返回值。 因为编译器要求在 if 不符合的情况下也得有相应返回值。
直接上代码
#include
int main()
{
switch(整型表达式)//
{
case 整型常量表达式: //注意这里和上面不同,既要是整型类型又要为常量
执行内容
break;
case 整型常量表达式:
执行内容
break;
default:
执行内容;
break;
}
return 0;
}
讲讲switch case语句逻辑: 程序会将 switch 后面的整型表达式与 case 后面的整型常量表达式进行匹配,符合哪个,程序就从哪个 case 语句开始往下一直执行,直到遇到 break 语句或者是走完所有 case 语句。(所以这里必须注意的是,如果只想执行对应的一条 case 语句的话,就要在其后面加入 break 语句来跳出 switch case语句)其中 case 语句可以有无穷多个,即可以无限分支。
default 语句的逻辑是当所有 case 语句都不符合时,就会进入 default 语句(default是任何情况下都能进入的),它是可有可无的,不加也不会出现任何语法错误,并且放在任何地方的效果都是一样的。(当然个人认为加不论上面情况都加上 default 是一种写代码的好习惯。)
那么它能起到什么作用呢?直接上代码
#include
int main()
{
int day = 0;
scanf("%d",&day);
switch(day)
{
case 1:
printf("星期一\n");
break;
case 2:
printf("星期二\n");
break;
case 3:
printf("星期三\n");
break;
case 4:
printf("星期四\n");
break;
case 5:
printf("星期五\n");
break;
case 6:
printf("星期六\n");
break;
case 7:
printf("星期天\n");
break;
default :
printf("请重新输入\n");
break;
}
return 0;
}
代码效果如下
但此时假若你输入的 switch 后面的整型表达式是不符合任何一个语句的时候,根据我们上面提到此时程序就应该走到 default 语句里面,所以这时候就会在屏幕上打印出"请重新输入" ,就能达到提示我们输入的表达式不匹配的效果。接着看一下效果
多分支这点,case语句越多当然分支就越多了。
嵌套使用就直接上代码
#include
int main()
{
int a=2;
switch(a)
{
case 1:
printf("heihei\n");
break;
case 2:
++a; \\这里的意思是先使 a+1 再使用变化后的值
switch(a) \\这里就是嵌套了,将switch case 语句嵌套在case 2 的执行内容中
{
case 2:
printf("hehe\n");
break;
case 3:
printf("haha\n");
case 4:
printf("wuhu\n");
break;
}
break;
default :
break;
}
return 0;
}
这个代码就相对复杂一点了,小伙伴们要自己耐心观察一下,看看结果是什么
还有注意一点就是,有些人可能会得出只有 haha 的结果,但是我们仔细看会发现嵌套语句的 case 3 执行内容后面是没有加 break 的,所以会一直执行完 case 4 语句直到遇到 break 为止。
卧槽,写完了才发现好像把这一块要写的内容都写上面了,不过真的花了比较长的时间来整理,所以也就懒得再腾到下面来了。友友们就累一点将就一下在上面多花一点精力吧,不过可能会眼花哈哈哈哈,建议戴上老花镜食用。
其实如果认真看完了应该也就能感觉的出来了,在分支较多的情况下优先使用 switch case 语句会大大提高程序效率。emmm暂时也还没想到其他的,等以后接触多了再来补充吧…
好了,今天的相关内容就到这里。笔者编写不易,觉得好的话可以给个三连噢。也希望大家能对写的不好的地方多多指正。往后会一直坚持更博客,写的越来越好的!