C语言中的分支与循环 ~~介绍来了~~

本文详细介绍了C语言中的分支与循环语句,包括if,else,if...else,switch,while,for,do-while以及它们的嵌套使用,旨在帮助程序员掌握这些基本结构的用法和实现复杂逻辑。
摘要由CSDN通过智能技术生成

前言

        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;
}

运行结果

601aa72979574ec8870edad0130225c7.png

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;
}

运行结果

cc2e75b54ab74d88b51c903652c91759.png6a0ea9808d404b46bdf994eb70e7653e.png

if else 语句都默认只控制一个语句

#include <stdio.h>
int main()
{
 int age = 0;
 scanf("%d", &age);

 if(age >= 18)
 printf("成年了\n");
 printf("可以饮酒了\n");

 return 0;
}

运行结果

53041aedffbf48d0993f17f67682f36b.png4da5ae73f89341339b04a052be08b424.png

由上面的运行结果可以看出,不管输入的年龄是否大于或等于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;
}

运行结果

a3067c5a30bd405c905e33a30a14c9eb.png49c72e5d98e34058bc389b162b0c7018.png

将代码修改后运行就不会出现上述问题。

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;
}

运行结果

98b73e4f9e6249188c18d87bf039cf2a.png

在运行代码前,大家可能会认为 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;
}

运行结果

84e901c00fb6463c87d2cbde8516ccb2.png559eb835b0c7403fb73ea1a4faa94013.png

 

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;
}

运行结果

2ea28d3f9191424f892e1c5da1ac5e4c.png

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;
}

运行结果

f48b8a1600984d9cb4f59bc0ee1664d6.png

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;
}

运行结果

7168000274914f4a84b3cc065db04349.png

 

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;
}

运行结果

f0adcfd11bef4657ab3a71e6416b9323.png

        至此,对于C语言的分支和循环语句也介绍完了,希望本篇文章可以帮助大家更好地理解和应用分支与循环语句。

        创作不易~ 大家动动手指点点关注、点点赞吧~~

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值