c语言分支和循环(上)

本文详细介绍了C语言中的分支结构(if、else、elseif)和循环结构(for、while、do-while),包括if语句的工作原理、关系和逻辑操作符的使用,以及短路求值的概念。通过实例演示了如何判断闰年和年龄分类。
摘要由CSDN通过智能技术生成

分支与循环(1)


c语言是一门具有结构化的语言,其中“结构”指的是顺序结构、选择结构、循环结构。今天让我来总结分支与循环结构,我们可以用if、switch实现分支结构,使用for、while、do-while实现循环结构。

if语句

1.1 if

1 if(表达式)
2 {
3 }

其中表达式是用来判断if下面语句能否执行。表达式成立(为真),则语句执行;表达式不成立(为假),则语句不执行。
对于真假的判断,0为真,非0为假。
下面我们给出一个简单的例子:

1#include <stdio.h>
2int main()
3{
4 int a = 0,b = 1;
5 if(a == 0)
6 {
7  b++;
8  }
9   printf("%d",b);
10   return 0;
11 }

该代码的运行结果是2,其中a初始化为0,满足if语句,执行b++,则b = 2,于是打印写出来2。
1.2 else
如果上述例子a不等于0呢?我们如果想要进行a不为0的其他操作,这就需要与if相配对的else来解决。即使用下列语句

1 if(表达式)
2 语句
3 else
4 语句

例子:输入一个年龄,>=18岁就输出:成年,否则就输出:未成年。

1#include <stdio.h>
2int main()
3{
4	int age = 0;
5	scanf("%d", &age);
6	if (age >= 18)
7	{
8		printf("成年\n");
9	}
10	else
11	{
12		printf("未成年\n");
13	}
14	return 0;
15}

需要注意的是:如果if下面需要执行的语句有两条即以上,则需要用大括号{}括起来,一条语句的时候不需要。
如果分支情况大于2种,则需要用到

if(表达式)
语句
else if(表达式)
语句
else
表达式

1.3 悬空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;
 }

许多新手看到下面的else与第一个if对其,就认为else与第一个if配对,就要输出haha,实则什么也不输出。

操作符

2.1 关系操作符
c语言中用于比较的表达式,称为“关系表达式”,里面使用的运算符就称为“关系运算符”,主要有下面6个:

*<小于运算符
>=大于等于运算符
<=小于等于运算符
==等于运算符
!=不相等运算符

值得注意的是在c语言中的等于是“==”,赋值时“=”,这与我们平时用的不同。
这是新手常犯错误。
关系表达式通常返回 0 或 1 ,表示真假。返回表示真假通常用于上面所说的if语句或while语句。

另一个需要避免的错误是:多个关系运算符不宜连用

1 i<j<k

上述例子中,连续用两个小于运算符,不会报错,但是通常达不到想要的结果。
因为关系运算符是从左到右进行计算,所以实际执行下面的表达式:

1 (i<j) < k

上述式子中,i < j 返回0或1,所以最终是0 或 1与k比较,达不到理想的效果。如果想要判断 j 的值是否在 i 和 k 之间,可以用下面写法:

1 i < j && j < k
//&&是并且的意思。

以上便是关系操作符,只需按照字面意思使用即可。
2.2 逻辑操作符
逻辑操作符提供逻辑判断能力,用于构建更复杂的表达式,主要有下面三个运算符:

!:逻辑取反运算符(改变单个表达式的真假)*
&&:与运算符,就是并且的意思(两侧的表达式都为真才为真,否则为假)*
||:或运算符,就是或者的意思

练习:闰年的判断:
闰年的判断规则:
1.能被4整除并且不能被100整除是闰年
2.能被400整除是闰年

#include <stdio.h>
//代码1
int main()
{
	int year = 0;
	scanf("%d", &year);
	if (year % 4 == 0 && year % 100 != 0)
		printf("是闰年\n");
	else if (year % 400 == 0)
		printf("是闰年\n");
	return 0;
}
//代码2
int main
{
	int year = 0;
    scanf("%d",&year);
	if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
		printf("是闰年\n");
	return 0;

}

2.3 短路
c语言逻辑运算符还有一个特点,它总是先对左侧的表达式求值,再对右边的表达式求值,这个情况称为“短路”
例如:

1 if(month>=3 && month<=5)

当&&左操作数返回值为0时,右操作数就不会执行。
像这种仅仅根据左操作数就能知道整个表达式的结果,不再对右操作值进行计算的运算称为短路求值

谢谢观看!

  • 8
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值