分支和循环(上)

「鸿蒙心迹」“2025・领航者闯关记“主题征文活动 10w+人浏览 476人参与

C语言是结构化的程序设计语言,这里的结构指的是:顺序结构、选择结构、循环结构

在C语言中,使用if , switch实现分支结构,使用for  ,while  do ...while实现循环结构

1、if语句

1.1if

if语句的语法形式如下:

if(表达式)

  语句

表达式成立(即:表达式结果为真)的时候,语句才会执行;表达式不成立(即:表达式结果为假)时,语句不执行

注意:在C语言中,0代表假,非0代表真,也就是表达式的结果如果是0,则语句不执行,表达式的结果如果不是0,则语句执行。

示例:用if语句判断输入的数字是否是奇数

//用if语句判断输入的数字是否是奇数
#include<stdio.h>
int main()
{
	int   number = 0;
	scanf("%d", &number);
	if (number %2==1)
	{
		printf("%d 是奇数\n", number);
	}
	return 0;
}

结果:(注意:C语言中用==来判断等于关系,而=是赋值操作)

1.2 else

在上述示例中,如果一个数不是奇数,那肯定就是偶数了。如果我们输入一个数来判断是奇数还是偶数,那么就可以使用else语句。

这里要使用if...else...语句,语法形式如下:

if(表达式)

   语句1

else

  语句2

上述代码执行逻辑是:如果表达式结果为真,则执行语句1,表达式结果为假时,才执行语句2(注意:语句1和语句2只会执行一个)

示例:输入一个整数,判断其是奇数还是偶数,如果是奇数借就打印奇数,否则打印偶数

//示例:输入一个整数,判断其是奇数还是偶数,如果是奇数借就打印奇数,否则打印偶数--if..else..语句
#include<stdio.h>
int main()
{
	int number = 0;
	scanf("%d", &number);
	if (number % 2 == 0)
	{
		printf("偶数");
	}
	else
	{
		printf("奇数");
	}
	return 0;
}

结果:

1.3分支中包含多条语句

默认情况下,if和else语句中默认都只控制一条语句,比如:

//if语句默认值控制一条语句,
#include<stdio.h>
int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age >= 18)
		printf("成年了\n");
	printf("ok\n");
	
	return 0;
}

上述代码中,不管age取什么值,ok都会被输出到屏幕上。因为:if和else语句中默认都只控制一条语句

如果想让if和else语句控制多条语句,可以加上大括号{ },例如:

//if语句默认值控制一条语句,如果想让if语句控制多条语句,可以加上大括号:{ }
#include<stdio.h>
int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age >= 18)
	{
		printf("成年了\n");
		printf("ok\n");
	}

	return 0;
}

结果:

上述代码只有age>=18时,才会输入ok

1.4嵌套if

在if...else语句中,else可以和另一个if语句合用,构成多重判断。

示例:输入一个数,判断输入的整数是0还是正数,还是负数。

代码:

//嵌套if
#include<stdio.h>
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;
}

事实上,上述代码还可以写成,下述代码与上述代码是等价的:

//与上述代码是等价的
#include<stdio.h>
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;
}

1.5悬空else问题

如果有多个if和else,可以记住一条规则,else总是跟最近的if匹配。以如下代码举例:

对于如上代码,我们可能会认为:a为0,不等于1,那就执行else语句,那结果就是haha

但是当运行上述代码时,什么也不输出

解释:这涉及了悬空else的问题,如果有多个if和else,可以记住一条原则,else总是跟最接近的if匹配。上述代码实际上else语句是跟第二个if(b==2)进行匹配的,这样后边的if...else..语句就是嵌套在第一个if(a==1)语句中的,如果if(a==1)不成立,那么嵌套在该语句中的if...else就不会执行,这就是为什么这个代码什么也不打印的原因。

2、关系运算符

C语言中用于比较的表达式,称为:关系表达式,在关系表达式中使用的运算符就称为关系运算符,关系运算符主要有如下六个:

(1)>大于运算符

(2)<小于运算符

(3)>=大于等于运算符

(4)<=小于等于运算符

(5)==相等运算符

(6)!=不等于运算符

关系运算符通常返回0或1来表示真假

C语言中,0表示假,所有非零值表示真。比如:20>12返回1,12>20返回0

关系运算符常用于if或while结构

注意:相等运算符==与赋值运算符=是两个不一样的运算符。

注意:多个关系运算符不宜连用,比如:i<j<k

该示例:i<j<k,连续使用两个小于运算符。虽然这是个合法的表达式,但是通常达不到想要的效果,即不能保证变量j的值在i和k之间。因为关系运算符是从左到右计算,所以上述代码实际执行的效果是:(i<k)<j.上面式子中,i<j返回0或1,所以上述式子最终是0或1与变量k进行比较。如果想要判断变量j的值是否在i和k之间,应该使用下面的写法:i<j && j<k(&&运算符下面会讲)

3、条件操作符

条件操作符也叫三目操作符,该操作符需要接收三个操作数,语法如下:

exp1 ? exp2 :exp3

条件操作符的计算逻辑是:如果exp1为真,则计算exp2,exp2的结果就是整个表达式的结果;如果exp1为假,则计算exp3,exp3的结果就是整个表达式的结果。

示例:

//使用条件操作符计算两个整型变量的最大值
#include<stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d", &a);
	scanf("%d", &b);
	int max_value = a > b ? a : b;
	printf("%d与%d的最大值为:%d\n", a, b, max_value);
	return 0;
}

结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值