C语言是结构化的程序设计语言,这里的结构指的是顺序结构、选择结构、循环结构,C语言能够通过语句实现这三种结构,其实就可以通过这三个结构来实现我们的代码。
选择结构(分支结构):我们可以通过 if、switch 语句来实现我们分支结构
循环结构:我们可以通过for、while、do while 语句实现我们的循环语句。
if语句的语法形式:
if(表达式)
语句;
如果表达式为真,执行语句;如果表达式为假,语句不执行。
这个时候我们可以输入简单的代码,来实现我们的分支语句:
#include
int main()
{
//先给我们的 a 赋上3的值。
int a = 3;
// if 语句来判断a是否等于1。很显然a = 3,那么结果就会打印hehe.
if( a == 3 )
printf("hehe");
return 0;
}
结果:hehe
# 其中 if( a == 3) 中的 == 是表判断,a 是否等于3.
#而 = 为赋值,而非判断,如果我们写成if(a = 0)
#那么 a 会被赋值0.
在C语⾔中,0为假,⾮0表⽰真,也就是表达式的结果如果是0,则语句不执⾏,表达式的结果如果不是0,则语句执⾏。
那我们来看例子:
#include
int main()
{
if(0)
printf("hehe");
return 0;
}
结果:
并没有打印hehe;
#include
int main()
{
if(1)
printf("hehe");
return 0;
}
结果:hehe
所以如果我们将 == 不小心写成了 = ,那么结果就很容易出现问题
if...else...语句让我们实现分支,语法形式:
if(表达式)
语句1;
else
语句2;
如果表达式为真,我们就直接执行语句1;如果表达式为假,我们就执行语句2;
#include
int main()
{
//给一个变量初始化
int a = 0;
//我们通过输入一个值,如何将这个值赋给a,下面就是执行程序。
scanf("%d",&a);
//分支语句,如果 a 不是0 ,那么就是打印好好学习C语言,如果 a 是 0 ,那么就是打印我要睡懒觉
if(a)
printf("好好学习C语言");
else
printf("我要睡懒觉");
return 0;
}
默认在if 和 else 语句中默认都只能控制一条语句。什么意思呢?
无论 if 后面的表达式是否为真,第三行的表达式都会执行。
1|if(表达式)
2| printf("hehe");
3| printf("haha");
#include
int main()
{
int age = 0;
//输入
scanf("%d",&age);
if(age >=18)
printf("成年了\n");//\n为换行符,相当于enter回车;
printf("可以交女朋友了\n");
return 0;
}
无论我们输入的年龄是多少,都会给我们打印可以交女朋友了。
输入:16
结果:可以交女朋友了
输入:18
结果:成年了
可以交女朋友了
我们可以看到 printf("可以交女朋友了\n"); 这条语句是根本不受到 if 语句的控制的。
那么我们来介绍一个可以将它们两条语句进行管控的东西
程序块:{ }
通过程序块,将两个语句括在一起,就能将它们看作一个整体,进行判断执行。
#include
int main()
{
int age = 0;
scanf("%d",&age);
if(age>=18)
{
printf("成年了\n");
printf("可以交女朋友了\n");
}
else
{
printf("未成年\n");
printf("不可以早恋喔\n");
}
return 0;
}
else if :
如果我们的分支语句只有两种可能,用 if 和 else来进行两种选择的判断,那是不是太单调了。
#include
int main()
{
int num = 0;
scanf("%d",&num);
if(num == 0)
printf("输入的数字是0\n");
else if(num>0)
printf("输入的数字是正数\n");
else
printf("输入的数字是负数\n");
return 0;
}
我们其中出现了3个语句:if else if else
我们新出来的else if 我们可能不明白它的意思,但是我再写个代码你们就明白了。
#include
int main()
{
int num = 0;
scanf("%d",&num);
if(num == 0)
printf("输入的数字是0\n");
else
{
if(num>0)
printf("输入的数字是正数\n");
else
printf("输入的数字是负数\n");
}
return 0;
}
原来elseif 其实就是if 语句嵌套在了else语句当中。由于为了方便,我们写成elseif方便我们书写。
#include
int main()
{
int age = 0;
scanf("%d", &age);
if(age<18)
printf("少年\n");
else if(age<=44)
printf("⻘年\n");
else if(age<=59)
printf("中⽼年\n");
else if(age<=90)
printf("⽼年\n");
else
printf("⽼寿星\n");
return 0;
}
我们使用多个elseif 都是没有问题的,我们可以运用elseif 来实现多个选择的分支结构。
如果有多个if 和else,可以记得这样一条规则,else总是和更最接近的 if匹配。
#include
int main()
{
int a = 0;
int b = 0;
if(a == 1)
if(b == 2)
printf("hehe\n");
else
printf("haha\n");
return 0;
}
我们看到else是和 if(a == 1)对齐的,如果说else和 if(a == 1)是匹配的,那么结果就打印haha,
结果是什么都没有打印,为什么会这样呢?
else总是和更最接近的 if匹配。
这个代码实际上是这样子的,下面的else和上面的第一个 if 相匹配
#include
int main()
{
int a = 0;
int b = 0;
if(a == 1)
{
if(b == 2)
printf("hehe\n");
else
printf("haha\n");
}
return 0;
}
if 语句和switch语句的区别:在多分支中,switch语句相对较为直观,可读性高。
通过题目来比较 if 语句和switch语句的不同:
输入一个1~7的数字,对应打印对应的星期几
if 语句:
#include
int main()
{
int day = 0;
//输入
scanf("%d",&day);
if(day==1)
printf("星期一\n");
else if(day==2)
printf("星期二\n");
else if(day==3)
printf("星期三\n");
else if(day==4)
printf("星期四\n");
else if(day==5)
printf("星期五\n");
else if(day==6)
printf("星期六\n");
else (day==7)
printf("星期七\n");
return 0;
}
switch 语句:
#include
int main()
{
int day = 0;
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;
}
return 0;
}
switch的语法形式:
switch(变量)
{
case 值:
语句 1;
break;
case 值:
语句 2;
break;
default:
语句 3;
break;
}
- switch语句中的case用来判断day的值,
如果day为1,那么就会打印下面的语句
- case与后面的值要隔一个空格喔
switch(day)
{
case 1:
printf("星期一");
break;
}
day=1
打印:星期一
switch语句中的case后面不需要用程序块{}
如果case表达式为真,后面的语句全部执行
如果case表达式为假,直接跳到下一个case表达式
#include
int main()
{
int day = 0;
scanf("%d",&day);
switch(day)
{
case 1:
printf("星期一\n");
case 2:
printf("星期二\n");
}
return 0;
}
输入:1
结果:星期一
星期二
#include
int main()
{
int day = 0;
scanf("%d",&day);
switch(day)
{
case 1:
printf("星期一\n");
break;
case 2:
printf("星期二\n");
break;
}
return 0;
}
输入:1
结果:星期一
如果前面的case表达式都不满足的话,就会跳到default,执行default后面的表达式。
#include
int main()
{ int day = 0;
scanf("%d", &day);
switch(day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("⼯作⽇\n");
break;
default:
printf("休息⽇\n");
break;
}
return 0;
}
其实default和if 语句中的 else有类似之处。