文章目录
一.条件判断语句(分支语句)
1.if语句
1.1 if
if语句的语法如下:
if(表达式)
语句
表达式为真则语句执行,表达式为假则语句不执行(C语言中0为假,非0为真),也就是表达式结果为0语句才执行。
例子:输入一个整数,判断是否是正数
#include<stdio.h>
int main()
{
int num = 0;
scanf("%d",&num);
if (num > 0)
printf("是正数");
return 0;
}
1.2 if…else
如果一个数不是正数就是非正数了,那如何判断一个数是正数还是非正数呢?这时候就得借助if…else了。
if…else的语法如下:
if (表达式)
语句1;
else
语句2;
例子:输入一个整数判断其是正数还是非正数
#include<stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if (num > 0)
printf("该整数为正数");
else
printf("该整数为非正数");
return 0;
}
1.3 分支中包含多条语句
在if和else语句中都默认只能控制一条语句
例如:
#include<stdio.h>
int main()
{
int num = 0;
printf("请输入你的年龄\n");
scanf("%d", &num);
if (num < 16)
printf("未满16周岁\n");
printf("法律不允许打工,算童工");
return 0;
}
执行上面的代码,你会发现不管你输入的值是否小于16,“法律不允许打工,算童工”这行字都会被打印出来。
这是因为if语句只能控制一条语句,就是printf(“未满16周岁\n”)。if语句为真,则打印未满16周岁,if语句为假则不打印。而*printf(“法律不允许打工,算童工”)*这一语句是独立存在的,无论if语句的表达式是否为真都对打印。
那如何if语句控制多条语句呢?那就得用花括号{ }括起来,else同理。
例如:
#include<stdio.h>
int main()
{
int num = 0;
printf("请输入你的年龄\n");
scanf("%d", &num);
if (num < 16)
{
printf("未满16周岁\n");
printf("法律不允许打工,算童工");
}
else
{
printf("已满16周岁\n");
printf("法律允许正常打工了");
}
return 0;
}
1.4 if 的嵌套
在 if else 语句中, else 可以与另⼀个 if 语句连⽤,构成多重判断。
比如:要求输⼊⼀个整数,判断输⼊的整数是0,还是正数或者负数。
#include<stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if (num > 0)
printf("正数");
else if (num < 0)
printf("负数");
else
printf("0");
return 0;
}
从第一个else后面到return前的部分就是嵌套在前⾯的 else ⼦句中的,构成了嵌套的if语句。
带上大括号更容易看明白。
#include<stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if (num > 0)
printf("正数");
else
{
if (num < 0)
printf("负数");
else
printf("0");
}
return 0;
}
1.5 else的悬空问题
如果有多个if和else,不知道哪个else和哪个if匹配?可以记住一个规则,else总是和最近的if匹配。
请看如下代码
#include<stdio.h>
int main()
{
int a = 2;
int b = 3;
if (a == 1)
if (b == 3)
printf("hehe");
else
printf("haha");
return 0;
}
运行的结果是什么呢?很多人看else与第一个if对齐,判断else匹配的是第一个if打印的结果是haha,但你去运行代码却发现,什么都不打印。
这是为什么呢?这是因为else总是与其最接近的if相匹配。上⾯的代码排版,让 else 和第⼀个 if 语句对⻬,这是不规范的代码风格导致的,让我们以为 else 是和第⼀个if匹配的,当 if语句不成⽴的时候,⾃然想到的就是执⾏ else ⼦句,打印 haha ,但实际上 else 是和第⼆个 if进⾏匹配的,这样后边的 if…else 语句是嵌套在第⼀个 if 语句中的,如果第⼀个 if 语句就不成⽴,嵌套 if 和 else 就没机会执⾏了,最终啥都不打印。
加大括号改成下面这样更方便理解:
#include<stdio.h>
int main()
{
int a = 2;
int b = 3;
if (a == 1)
{
if (b == 3)
printf("hehe");
else
printf("haha");
}
return 0;
}
2. switch语句
除if语句外,还可以通过switch语句实现分支结构,用于判断有多种结果的情况,比if语句更易用更具可读性。
switch的语法如下:
switch (expression)
{
case value1: statement
case value2: statement
default: statement
}
上⾯代码中,根据表达式 expression 不同的值,执⾏相应的 case 分⽀。如果找不到对应的值,
就执⾏ default 分⽀。
注:1.switch后的expression必须是整型表达式。
2.case后的value必须是整型常量表达式。
3.case后与value间要用一个空格隔开。
4.每⼀个 case 语句中的代码执⾏完成后,需要加上 break ,才能跳出这个switch语句。
例如:输入1~7内数字,打印出对应星期几。
#include<stdio.h>
int main()
{
int a = 0;
scanf("%d", &a);
switch (a)
{
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;
}
那如果不使用break会发生什么呢?
#include<stdio.h>
int main()
{
int a = 0;
scanf("%d", &a);
switch (a)
{
case 1:
printf("星期一");
case 2:
printf("星期二");
case 3:
printf("星期三");
case 4:
printf("星期四");
case 5:
printf("星期五");
case 6:
printf("星期六");
case 7:
printf("星期天");
}
return 0;
}
运行代码后发现,所有结果都被打印出来了,这是为什么呢?原因是switch也是具有分支效果的,没有break结束代码,代码就会继续一行一行的运行下去,直到遇到break或者switch语句结束。 所以合理运用break结束代码是非常重要的。当然,并非所有case都必须得有break结束。
例如:输入1~7内数字,判断对应星期几是工作日还是非工作日(默认星期一到星期五为工作日,星期六和星期天为非工作日)。
#include<stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
switch (num)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("工作日");
break;
case 6:
case 7:
printf("非工作日");
break;
}
return 0;
}
如果输入的不是所以case的数字,这时候就得借助default来提醒“输入错误,请输入1~7内的数字”
#include<stdio.h>
int main()
{
int a = 0;
scanf("%d", &a);
switch (a)
{
case 1:
printf("星期一");
case 2:
printf("星期二");
case 3:
printf("星期三");
case 4:
printf("星期四");
case 5:
printf("星期五");
case 6:
printf("星期六");
case 7:
printf("星期天");
default:
printf("输入错误,请输入1~7内的数字");
}
return 0;
}
二.循环语句
C语言中共有三种循环语句,分别是for语句,while语句,do while语句。合理地这些语句能帮助我们处理一些重复的事情,能够简化代码,减少不必要的工作。
1.for语句
for语句的语法形式如下:
for(表达式1;表达式2;表达式3)
语句
表达式1用于循环变量的初始化
表达式2用于循环结束条件的判断
表达式3用于循环变量的调整
比如:打印0~10的数字
#include<stdio.h>
int main()
{
for (int a = 0; a <= 10; a++)
{
printf("%d ", a);
}
return 0;
}
for语句的嵌套
for语句能和while语句,do while语句,if语句等语句嵌套使用
#include<stdio.h>
int main()
{
for (int a = 0; a <= 10; a++)
{
if (a != 5)
printf("%d ", a);
}
return 0;
}
2.while语句
while语句的语法形式与if语句很像
while(表达式)
语句;
表达式为真则进行循环,语句为假则不进入循环
#include<stdio.h>
int main()
{
while (1)//语句一直为真,死循环打印haha
printf("haha");
return 0;
}
3.do while 语句
do while 的语法形式如下;
do
语句;
while(表达式);
while 和 for 这两种循环都是先判断,条件如果满⾜就进⼊循环,执⾏循环语句,如果不满⾜就跳
出循环;
⽽ do while 循环则是先直接进⼊循环体,执⾏循环语句,然后再执⾏ while 后的判断表达式,表
达式为真,就会进⾏下⼀次,表达式为假,则不再继续循环。
break和continue的使用
break
break 的作⽤是永久的终⽌循环,我们在某个条件发⽣的时候,不想再继续循环的时候,就可以
使⽤ break 来完成。
例如:
#include<stdio.h>
int main()
{
for (int a = 0; a <= 10; a++)
{
printf("%d ", a);
if (a == 5)
break;
}
return 0;
}
continue
在 for 循环中continue 的作⽤是跳过本次循环中 continue 后的代码,直接去到循环的调
整部分。当某个条件发⽣的时候,本次循环⽆需再执⾏后续某些操作的时候,就可以使⽤
continue 来实现。
比如:
#include<stdio.h>
int main()
{
for (int a = 0; a <= 10; a++)
{
if (a == 5)
{
continue;
}
printf("%d ", a);
}
return 0;
}
结尾
以上就是C语言中分支与循环的内容,合理的运用分支与循环语句能让我们事半功倍,一起加油叭!