观前提示:scanf在vs中会报错,所以我习惯使用scanf_s。
分支语句有if语句和switch语句两种。二者在用法上最突出的不同是:if语句适用于分支较少的情况,而switch语句则在分支较多的情境中更泛用一些。在此篇中讲解的是if语句。
这里就不得不插入一个程序员笑话了。
女朋友说,下班回来带一个西瓜。如果看到卖番茄的,就买两个。最后程序员买回来两个西瓜。
为什么程序员会搞错呢?if语句能解释这个问题。
if语句的语法结构是这样的:
if(条件表达式)
{
语句1;
}
else
{
语句2;
}
如果条件为真则执行花括号内的代码段,如果为假则不执行。
比如输入一个代表自己年龄的整数判断一下有没有成年:
#include <stdio.h>
int main ()
{
int age = 0;
scanf_s ("%d",&age);
if (age < 18)
{
printf ("未成年");
}
return 0;
}
这种就是单分支if语句。 满足if中的条件花括号内的语句,即会打印未成年三个字。如果不满足便不会输出。
但显然这样的输出没完全分到位,把大于18岁的忽略了。如果更细节一点呢?
#include <stdio.h>
int main ()
{
int age = 0;
scanf_s ("%d",&age);
if (age < 18)
{
printf ("未成年");
}
else
{
printf ("成年人");
}
return 0;
}
加上else,此时就变成了双分支语句。如果你的输入的数字满足if内条件也就是小于18,那就会输出未成年,相反则会满足else的语句,输出成年人。
但是20是成年80也是成年,能不能分得更细一点?
#include <stdio.h>
int main ()
{
int age = 0;
scanf_s ("%d",&age);
if (age < 18)
{
printf ("未成年");
}
else if (age >= 18 && age < 30)
{
printf ("青年");
}
else if (age >= 30 && age < 50)
{
printf ("中年");
}
else if (age >= 50 && age < 80)
{
printf ("老年");
}
else
{
printf ("老寿星");
}
return 0;
}
在大于18岁的情况下进行了进一步的细分,此时便形成了一个多分支语句。代码由上至下运行,满足哪个条件就执行对应代码。
当然一个花括号内不仅仅只能运行一条语句了。比如在上面双语句的基础上进行修改,输出能不能谈恋爱:
#include <stdio.h>
int main()
{
int age = 0;
scanf_s("%d", &age);
if (age >= 18)
{
printf("成年\n");
printf("谈恋爱\n");
}
else
{
printf("未成年\n");
printf("不能谈恋爱\n");
}
return 0;
}
如果条件成立需要执行多条语句,则使用代码块{}。
但是代码块的使用不当也会出现问题。比如下面这条代码:
#include <stdio.h>
int main ()
{
int a = 0;
int b = 0;
if (a == 1)
if (b == 0)
{
printf ("hehe");
}
else
{
printf ("haha");
}
return 0;
}
这条代码会输出hehe还是haha?但运行起来的结果是——什么也没有。
因为此时的else是与第二个if匹配的而不是第一个,由于第一个if语句的不成立,直接跳过了第二个if。
改正后是这样的:
#include <stdio.h>
int main ()
{
int a = 0;
int b = 0;
if (a == 1)
{
if (b == 0)
{
printf ("hehe");
}
else
{
printf ("haha");
}
}
return 0;
}
逻辑不清晰,代码被人批。为了程序易读性还是加上大括号吧。
还要提醒的是:如果if后面没有花括号,且有两个printf()语句,那么只有第一个printf()语句属于if的代码段,而另一个printf()语句和if语句同级,无论如何都会被执行。
再来看开头买西瓜的笑话,它可以被if-else语句这样表示:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int tomato=0;
printf("是否看到了卖番茄的?0--没有 1--有\n");
scanf_s("%d", &tomato);
if (tomato == 0)//没有看到卖番茄的
printf("买一个西瓜\n");
else //看到了卖番茄的
printf("买两个西瓜\n");
return 0;
}
是否看见卖番茄的变成了买几个西瓜的条件,完全没有番茄的事了。
代码没有错误,关键是程序员要理解女朋友说的话的意思,不是程序员和电脑之间的沟通。
关于if-else语句的讲解就到这里了,感谢阅读。