前言
C语言是一种广泛使用的编程语言,它提供了丰富的分支与循环语句来控制程序的流程。
在本篇文章中,我将介绍分支与循环语句,帮助大家理解与使用这些语句来实现复杂的编程逻辑。下面,我们来看看吧!
若要在VS2022中使用库函数scanf,请添加如下注释:
#define _CRT_SECURE_NO_WARNINGS//忽略scanf函数的安全警告
正文
分支语句
1. if语句
1.1 if
表达形式如下 :
1 if(表达式)
2 语句
表达式判断,如果为真,则执行语句,反之,则不执行语句。
在C语言中,0为假(非0为真),也就表达式为0(假),就不执行语句,表达式为非0(真),则执行语句。
代码示例
//输入一个整数,判断是否为偶数
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int num = 0;
printf("请输入一个整数:");
scanf("%d", &num);
if (num % 2 == 0)
{
printf("该数是偶数\n");
}
return 0;
}
运行结果
1.2 else
由上述代码使用if判断语句可以知道,对于一个正整数,不是奇数就是偶数,如果再加以判断,此时就要用到 if......else......语句,表达形式如下:
1 if(表达式)
2 语句1
3 else
4 语句2
我们再来判断一个正整数是奇数还是偶数
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int num = 0;
printf("请输入一个整数:");
scanf("%d", &num);
if (num % 2 == 0)
{
printf("该数是偶数\n");
}
else
{
printf("该数是奇数\n");
}
return 0;
}
运行结果
if 和 else 语句都默认只控制一个语句
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if(age >= 18)
printf("成年了\n");
printf("可以饮酒了\n");
return 0;
}
运行结果
由上面的运行结果可以看出,不管输入的年龄是否大于或等于18岁,都会把"可以饮酒了"打印在了屏幕上,显然不符合要求。
如果我们要if语句同时控制2条语句,该怎么办呢?那就要使用 { } 将代码括起来, else 后也可以跟上大括号{ }。
代码示例
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int age = 0;
printf("输入年龄:");
scanf("%d", &age);
if (age >= 18)
{
printf("成年了\n");
printf("可以饮酒了\n");
}
else
{
printf("未成年");
}
return 0;
}
运行结果
将代码修改后运行就不会出现上述问题。
1.3 嵌套if
在 if...... else...... 语句中, else 可以与另⼀个 if 语句连⽤,构成多重判断。
代码示例
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int num = 0;
printf("输入一个数:");
scanf("%d", &num);
if (num > 0)
{
printf("输⼊的数字是正数\n");
}
else if (num < 0) //这⾥的if 相当于嵌套在else语句中,形成了嵌套结构
{
printf("输⼊的数字是负数\n");
}
else
{
printf("输⼊的数字是0\n");
}
return 0;
}
1.4 悬空else问题
如果有多个 if 和 else ,可以记住这样⼀条规则, else 总是跟最接近的 if 匹配。
代码示例
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if (a == 1)
if (b == 2)
printf("hehe\n");
else
printf("haha\n");
return 0;
}
运行结果
在运行代码前,大家可能会认为 a 为 0 ,不等于 1 ,那就执行 else 子句,打印" haha"。但当你去运行代码,输出的结果是:啥都不输出。那是因为上面的代码排版,让 else 和第⼀个 if 语句对齐,让我们以为 else 是和第⼀个 if 匹配的,当 if 语句不成立的时候,自然想到的就是执行 else 子句,打印" haha" ,但实际上 else 是和第二个 if 进行匹配的,这样后边的 if...else 语句是嵌套在第⼀个 if 语句中的,如果第⼀个 if 语句不成立,嵌套 if 和 else 就没机会执行了,最终啥都不打印。
2.关系操作符
> //大于运算符
< //小于运算符
>= //大于等于运算符
<= //小于等于运算符
== //相等运算符
!= //不相等运算符
关系表达式通常返回 0 或 1 ,表示真假。
相等运算符 == 与赋值运算符 = 是两个不一样的运算符,不要混淆。
1 if(x=3)
/*将 3 的值赋给x,返回值为 3 ,if 判断总是为真*/
2 if(x==3)
/*x 等于 3 ,此时可以正常判断*/
多个关系运算符不宜连用。
1 i < J < k //错误的写法
2 (i < j)&&(j < k) //正确的写法
3.条件操作符
又称三目操作符,表达形式如下:
1 exp1 ? exp2 : exp3
条件操作符的计算逻辑是:如果 exp1 为真, exp2 计算,计算的结果是整个表达式的结果;如果 exp1 为假, exp3 计算,计算的结果是整个表达式的结果。
代码示例
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int num1,num2;
printf("请输入一个数:");
scanf("%d", &num1);
num2 = num1 > 4 ? 10 : -10;
printf("%d", num2);
return 0;
}
运行结果
4.逻辑操作符
! //逻辑取反运算符(改变单个表达式的真假)
&& //与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假)
|| //或运算符,就是或者的意思(两侧⾄少有⼀个表达式为真,则为真,否则为假)
在C语言中,0 表示为假,非 0 表示为真.
5.switch语句
表达形式如下:
1 switch (表达式)
{
case 1: 语句
case 2: 语句
default: statement
}
根据 表达式 不同的值,执行相应的 case 分⽀。如果找不到对应的值, 就执行 default 分支。
需要注意的是,switch 后的 表达式 必须是整型表达式,case 后的值,必须是整形常量表达式。
在使用 switch 语句的时候,我们经常可能遇到一种情况,比如 switch 后的表达式中的值无法匹配代码中的 case 语句的时候,这时候要不就不做处理,要不就得在 switch 语句中加入 default 子句。
在 switch 语句中 case 语句和 default 语句是没有顺序要求的,只要你的顺序是满足实际需求的就可以。
代码示例
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int day;
printf("请输入数字:");
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;
}
//输入数字1~5,打印"工作日",输入数字6~7,打印"休息日",可以将代码简化为如下形式
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int day;
printf("请输入数字:");
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;
}
循环语句
1.while循环
表达形式如下:
1 while(表达式)
2 语句 //如果循环体想包含更多的语句,可以加上⼤括号
代码示例
//在屏幕上打印1~20的数字
#include<stdio.h>
int main()
{
int i = 0;
while (i <= 20)
{
printf("%d ", i);
i++;
}
return 0;
}
运行结果
2.for循环
表达形式如下:
1 for(表达式1; 表达式2; 表达式3)
2 语句 //如果循环体想包含更多的语句,可以加上⼤括号
1 表达式1 ⽤于循环变量的初始化
2 表达式2 ⽤于循环结束条件的判断
3 表达式3 ⽤于循环变量的调整
代码示例
//在屏幕上打印1~20的数字
#include<stdio.h>
int main()
{
int i = 0;
for(i=1;i<=20;i++)
{
printf("%d ", i);
}
return 0;
}
运行结果
3.do-while循环
在循环语句中 do while 语句的使用最少,表达形式如下:
1 do
2 语句
3 while(表达式);
/*注意,while循环中的 while 后不加顿号,
而do-wwhile循环中的 whlie 后要加顿号*/
在 do while 语句中循环体是至少执行一次的,这是 do while 循环比较特殊的地方。
代码示例
//在屏幕上打印1~20的数字
#include<stdio.h>
int main()
{
int i = 0;
do
{
printf("%d ", i);
i++;
} while (i <= 20);
return 0;
}
运行结果
4.循环的嵌套
while , do-while , for ,这三种循环往往会嵌套在⼀起才能更好的解决 问题,就是我们所说的:循环嵌套。
代码示例
//找出1~200之间的素数,并打印在屏幕上
//素数⼜称质数,只能被1和本⾝整除的数字
#include<stdio.h>
int main()
{
int i, j;
for (i = 1; i <= 200; i++)//循环产生1~200之间的数
{
int flag = 1;//假设i是素数
for (j = 2; j < i; j++)//循环产生2~i-1之间的数
{
if (i % j == 0)
{
flag = 0;//不是素数
break;
}
}
if (flag == 1)//是素数
printf("%d ", i);
}
return 0;
}
运行结果
至此,对于C语言的分支和循环语句也介绍完了,希望本篇文章可以帮助大家更好地理解和应用分支与循环语句。
创作不易~ 大家动动手指点点关注、点点赞吧~~