这里写目录标题
1. if分支语句
1.1 if
if 语句的语法形式如下:
if ( 表达式 )
语句
表达式成立(为真),则语句执行,表达式不成立(为假),则语句不执行
在C语言中,0为假,非0表示真,也就是表达式的结果如果是0,则语句不执行,表达式的结果如果不是0,则语句执行。
例子:输入一个整数,判断是否为奇数
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if(num % 2 == 1)
printf("%d 是奇数\n", num);
return 0;
}
1.2 else
如果一个数不是奇数,那就是偶数了,如果任意一个整数,我们要清楚的判断是奇数还是偶数怎么表示呢?
这里就需要if...else...
语句了,语法形式如下:
if ( 表达式 )
语句1
else
语句2
例子:输入一个整数,判断是否为奇数,如果是奇数打印是奇数,否则打印数偶数。
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if(num % 2 == 1)
printf("%d 是奇数\n", num);
else
printf("%d 是偶数\n", num);
return 0;
}
练习:输入一个年龄,>= 18
岁就输出:成年,否则就输出:未成年
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if(age>=18)
printf("成年\n");
else
printf("未成年\n");
return 0;
}
1.3 嵌套if
在if else
语句中,else
可以与另一个if 语句连用,构成多重判断。
比如:要求输入一个整数,判断输入的整数是0,还是正数或者负数。请看如下代码:
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if(num == 0)
printf("输入的数字是0\n");
else if(num > 0) //这里的if 相当于嵌套在els语句中,形成了嵌套结构
printf("输入的数字是正数\n");
else
printf("输入的数字是负数\n");
return 0;
}
上图中橙色背景的代码就是嵌套在前面的else
子句中的,构成了嵌套的if语句。
再比如:要求输入一个整数,如果是正数,再判断是奇数还是偶数,并输出;如果不是正数则输出不是整数。
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if(num>0)
{
if(num%2 == 0)
printf("偶数\n");
else
printf("奇数\n");
}
else
{
printf("输入的值是负数\n");
}
return 0;
}
上面的代码中橙色背景的代码也是嵌套在if
语句中的,构成了嵌套的if
语句。
以上就是嵌套if
语句的语法,有了嵌套if语句,就可以完成更多复杂逻辑的判断。
2. switch分支语句
除了if
语句外,C语言还提供了switch
语句来实现分支结构。
switch
语句是一种特殊形式的 if…else 结构,用于判断条件有多个结果的情况。它把多重的else if
改成更易用、可读性更好的形式。
switch (expression)
{
case value1: statement
case value2: statement
default: statement
}
上面代码中,根据表达式expression 不同的值,执行相应的case
分支。如果找不到对应的值,就执行default
分支。
2.1 if
语句和switch
语句的对比
练习:输入任意一个整数值,计算除3之后的余数如果使用if语句完成,如下:
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
if(n%3 == 0)
printf("整除,余数为0\n");
else if(n%3 == 1)
printf("余数是1\n");
else
printf("余数是2\n");
return 0;
}
如果使用switch
语句改写,就可以是这样的:
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
switch(n%3)
{
case 0:
printf("整除,余数为0\n");
break;
case 1:
printf("余数是1\n");
break;
case 2:
printf("余数是2\n");
break;
}
return 0;
}
上述的代码中,我们要注意的点有:
case
和后边的数字之间必须有空格- 每一个
case
语句中的代码执行完成后,需要加上break
,才能跳出这个switch
语句。
2.2 switch
语句中的break
前面的代码中,如果我们去掉case
语句中的break
,会出现什么情况呢?
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
switch(n%3)
{
case 0:
printf("整除,余数为0\n");
case 1:
printf("余数是1\n");
case 2:
printf("余数是2\n");
}
return 0;
}
测试一组,看一下结果:
我们发现,7除以3本来余数是1,但是我们发现程序运行的结果多了一行“余数是2”的打印。
原因是switch
语句也是分支效果的,只有在switch
语句中使用 break
才能在跳出switch
语句,如果某一个case
语句的后边没有break
语句,代码会继续玩下执行,有可能执行其他case
语句中的代码,直到遇到break 语句或者switch
语句结束。就比如上面的代码就执行了case2
中的语句。
所以在switch
语句中break
语句是非常重要的,能实现真正的分支效果。
当然, break
也不是每个case
语句都得有,这就得根据实际情况来看了。
2.3 switch
语句中的default
在使用 switch
语句的时候,我们经常可能遇到一种情况,比如switch
后的表达式中的值无法匹配代码中的case
语句的时候,这时候要不就不做处理,要不就得在switch
语句中加入default
子句。
switch (expression)
{
case value1: statement
case value2: statement
default: statement
}
switch
后边的expression
的结果不是value1 ,也不是value2
的时候,就会执行default
子句。
就比如前面做的打印星期的练习,如果day
的输入不是1~7的值,如果我们要提示:输入错误,则可以这样完成代码:
#include <stdio.h>
int main()
{
int day = 0;
scanf("%d", &day);
switch(day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("工作日\n");
break;
case 6:
case 7:
printf("休息日\n");
break;
default:
printf("输入错误\n");
break;
}
return 0;
}
3. while循环语句
C语言提供了3种循环语句, while 就是其中一种,接下来就介绍一下while 语句。
while 语句的语法结构和if 语句非常相似。
3.1 if 和 while的对比
if(表达式)
语句;
while(表达式)
语句;//如果循环体想包含更多的语句,可以加上大括号
你可以对比来看一下,具体写个代码吧
//代码1
#include <stdio.h>
int main()
{
if(1)
printf("hehe\n"); //if后边条件满足,打印一次hehe
return 0;
}
//代码2
#include <stdio.h>
int main()
{
while(1)
printf("hehe\n"); //while后边的条件满足,死循环的打印hehe
return 0;
}
这就是他们的区别,while语句是可以实现循环效果的。
3.2 while语句的执行流程
首先上来就是执行判断表达式,表达式的值为0,循环直接结束;表达式的值不为0,则执行循环语句,语句执行完后再继续判断,是否进行下一次判断。
3.3 while循环的实践
练习:在屏幕上打印1~10的值
参考代码:
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
printf("%d ", i);
i = i+1;
}
return 0;
}
4. for循环语句
4.1 语法形式
for 循环是三种循环中使用最多的, for 循环的语法形式如下:
for(1 表达式1; 表达式2; 表达式3)
语句;//如果2 循环体想包含更多的语句,可以加上大括号
表达式1 用于循环变量的初始化
表达式2 用于循环结束条件的判断
表达式3 用于循环变量的调整
4.2 for循环的执行流程
首先执行 表达式1 初始化循环变量,接下来就是执行 表达式2 的判断部分, 表达式2 的结果如果等于0,则循环结束; 表达式2 的结果如果!=0则执行循环语句,循环语句执行完后,再去执行表达式3 ,调整循环变量,然后再去表达式2 的地方执行判断, 表达式2 的结果是否为0,决定循环是否继续。
整个循环的过程中,表达式1初始化部分只被执行1次,剩下的就是表达式2、循环语句、表达式3在循环。
4.3 for循环的实践
练习:在屏幕上打印1~10的值
参考代码:
#include <stdio.h>
int main()
{
int i = 0;
for(i=1; i<=10; i++)
{
printf("%d ", i);
}
return 0;
}
运行结果:
5. do-while循环语句
5.1 语法形式
在循环语句中do while 语句的使用最少,它的语法如下:
do
语句;
while(表达式);
while 和for 这两种循环都是先判断,条件如果满足就进入循环,执行循环语句,如果不满足就跳出循环;
而 do while 循环则是先直接进入循环体,执行循环语句,然后再执行 while 后的判断表达式,表达式为真,就会进行下一次,表达式为假,则不再继续循环。
5.2 do while循环的执行流程
在do while 循环中先执行图上的“语句”,执行完语句,在去执行“判断表达式”,判断表达式的结果是!=0,则继续循环,执行循环语句;判断表达式的结果等于零,则循环结束。
所以在do while 语句中循环体是至少执行一次的,这是do while 循环比较特殊的地方。
5.3 do while循环的实例
在屏幕上打印1~10的值
#include <stdio.h>
int main()
{
int i = 1;
do
{
printf("%d ", i);
i = i + 1;
}while(i<=10);
return 0;
}
一般do while 使用在循环体至少被执行一次的场景下,所以较少一些。