分支与循环

前言:文章若是有错误,欢迎大家指导,也希望大家能够理解。

引言C语言中语句可分为5种:空语句表达式语句函数调用语句复合语句控制语句。在初识C语言中我们已经介绍过空语句表达式语句函数调用语句复合语句了。今天我们就一起来学习最后的控制语句吧。

1 分支语句

分支语句包括2种if语句switch语句

.if语句的表达形式:

if(表达式)//如果表达式为真,则执行代码块里面的语句,否则不执行
{
	语句								
}

代码示例

#include<stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d",&a,&b);
	if(a>b)
	{
		printf("a>b\n");
	}
	return 0;
}

运行结果

3 2
a>b

.else
在上述代码中,如果输入的a小于b又该如何呢。让我们来看看if.....else语句

#include<stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d",&a,&b);
	if(a>b)
	{
		printf("a>b\n");
	}
	else
	{
		printf("a<b\n");
	}
	return 0;
}

运行结果

4 5
a<b

a与b之间的关系也并不是只有这两种情况,接下来就让我们看一下if...else if...else 语句吧。适用于多种情况的判断

#include<stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d",&a,&b);
	if(a>b)
	{
		printf("a>b\n");
	}
	else if(a==b)//C语言中,==用来判断两个数之间是否相等
	{
		printf("a=b\n");
	}
	else
	{
		printf("a<b\n");
	}
	return 0;
}

运行结果

5 5
a=b

需要注意的是
.这些语句如果不使用大括号,默认控制一条语句。要想控制多条语句,必须使用大括号

#include<stdio.h>
int main()
{
	int age = 0;
	scanf("%d",&age);
	if(age>=18)
		printf("可以谈恋爱了\n");
		printf("不可以早恋哦\n");
		return 0;
}

运行结果

18
可以谈恋爱了
不可以早恋哦

可以看到这并不是我们想要的结果。

.else总是与离它最近的if语句匹配

#include<stdio.h>
int main()
{
	int a = 0;
	int b = 2;
	if(a==1)
	{
		printf("heihei\n");
	}
		if(b==2)
		{
			printf("haha\n");
		}
	else
	{
		printf("hehe\n");
	}
	return 0;
}

运行结果

haha

.switch语句也适用于多分支
形式:

switch(expresssion)
{
	case value1:statment
	break;
	case value2: statment
	break;
	default :statment
	break;
}

注意
.expression必须为整型表达式

.value必须为整型常量表达式

.每一个case语句后面都要加上break才可以跳出switch语句。根据具体情况,break可加可不加

.每一个case和后边的数字必须有一个空格

.case语句和default语句位置是任意的。通常将default 语句放在最后。

上面代码中根据expression的值,找到相应的case分支,如果找不到,就执行default语句。

#include<stdio.h>
int main()
{
	int day = 0;
	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;
}

运行结果

3
星期三

2 关系运算符

C语言中用于比较的表达式叫做关系表达式,表达式里面的运算符就叫做关系运算符,包括大于(>)等于(==)小于(<)大于等于(>=)小于等于(<=)不等于(!=)

关系表达式通常返回0或1用来表示真假

.注意以下几点:
.相等运算符(==)赋值运算符(=)不一样的。
.关系运算符不宜连用

#include<stdio.h>
int main()
{
	int age = 0;
	scanf("%d",&age);
	if(18<=age<=30)
	{
		printf("青年\n");
	}
	return 0;
}

运行结果

45
青年

这种写法是错误,应该这样去写。

#include<stdio.h>
int main()
{
	int age = 0;
	scanf("%d",&age);
	if(age>=18&&age<=30)
	{
		printf("青年\n");
	}
	else
	{
		printf("壮年\n");
	}
	return 0;
}

运行结果

45
壮年

3 条件操作符

条件操作符也叫做三目操作符。形式:表达式1?表达式2:表达式3,如果表达式1为真,那么表达式2计算出的结果为最终执行结果否则,表达式3的结果为最终结果

#include<stdio.h>
int main()
{
	int a = 3;
	int b = 2;
	int max = a > b? a: b;
	printf("%d\n",max);
	return 0;
}

运行结果

3

4 逻辑操作符

逻辑操作符包括(&&)(||)逻辑取反操作符(!)

.&&就是并且的意思,两侧结果都为真,则为真,否则为假
.||就是或者的意思,只要有一个结果为真,则为真,否则为假
.!改变表达式的真假

#include<stdio.h>
int main()
{
	int age = 18;
	if(!age)
	{
		printf("我要谈恋爱\n");
	}
	else
	{
		printf("年龄不够,你还想谈恋爱\n");
	}
	return 0;
}

运算结果

年龄不够,你还想谈恋爱

接下来,我们实现一个判断闰年的程序。
闰年的判断规则是:
(1)能被4整除不能被100整除
(2)能被400整除
满足一个条件就可以了。

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

运行结果

2000
2000年是闰年

注意
逻辑操作符中有一个特殊的情况短路情况
C 语言逻辑运算符有一个特点,它总是先对左侧的表达式求值,再对右侧的表达式求值如果仅仅根据左侧的表达式的结果就能知道整个表达式的结果,不再对右侧表达式进行运算的情况叫做短路

#include<stdio.h>
int main()
{
	int i = 0,a = 0,b = 2,c = 3,d = 4;
	i = a++ && ++b && d++;
	printf("a=%d\nb=%d\nc=%d\nd=%d\n",a,b,c,d);
	return 0;
}

运行结果

a=1
b=2
c=3
d=4

5 循环语句

C语言中有三种循环语句:while语句,for语句,do...while语句
.while语句的形式

while(表达式)//表达式为真,进入循环,否则循环结束
	语句//如果要控制多条语句,要加上大括号,否则默认控制一条语句
#include<stdio.h>
int main()
{
	int i = 0;
	while(i<=10)
	{
		printf("%d ",i);
		i++;
	}
	return 0;
}

运行结果

0 1 2 3 4 5 6 7 8 9 10

让我们来做一个小小的练习吧。

输入一个整数,逆序打印这个整数的每一位。

#include<stdio.h>
int main()
{
	int m = 0;
	scanf("%d",&m);
	while(m)
	{
		printf("%d ",m%10);//先打印这个数的最低位
		m/=10;//再去掉这个数的最低位,一次循环结束,进行下一次循环的判断
	}
	return 0;
}

运行结果

4 3 2 1

.for语句的形式:

for(初始化部分;判断部分;调整部分)
	语句//判断部分为真,则执行语句

打印1-10之间的数字

#include<stdio.h>
int main()
{
	int i = 0;
	for(i = 1;i <= 10; i++)
	{
		printf("%d ",i);
	}
	return 0;
}

运行结果

1 2 3 4 5 6 7 8 9 10

whilefor语句都是先判断,条件满足就进入循环do...while语句是先进入循环体,执行循环语句,再执行while里面的判断表达式

#include<stdio.h>
int main()
{
	int i = 1;
	do
	{
		printf("%d ",i);
		i++;
	}while(i<=5);
	return 0;
}

运行结果

1 2 3 4 5

do...while循环至少循环一次

做一个小练习吧。

输入一个数,判断这个数是几位数?

#include<stdio.h>
int main()
{
	int n = 0;
	int i = 0;
	scanf("%d",&n);
	do
	{
		i++;//数字至少是一位数,所以上来我们就i++一次
		n/=10;//再不断的去掉最低位
	}while(n);
	printf("%d\n",i);
	return 0;
}

运行结果

1234
4

6 break语句

有的时候,我们需要提前结束程序,这是很常见的。就让我们来了解一下break的功能吧。

break语句可以用来提前终止循环的,并且是永久终止的,只能跳出一层循环

#include<stdio.h>
int main()
{
	int i = 0;
	while(i<=10)
	{
		if(i==5)
		{
			break;
		}
		printf("%d ",i);
		i++;
	}
	return 0;
}

运行结果

0 1 2 3 4

我们将上面的代码做一个小小的改动,看看会有什么不一样的烟火呢?

#include<stdio.h>
int main()
{
	int i = 0;
	while(i<=10)
	{
		i++;
		if(i==5)
		{
			break;
		}
		printf("%d ",i);
	}
	return 0;
}

运行结果

1 2 3 4

看吧,将代码做一点小小的改动,它就会有翻天覆地的变化。所以我们一定要仔细阅读代码。

7 continue语句

了解了break语句之后,我们来看一下缩小版的continue语句吧。

continue语句的作用是跳过本次循环continue后面的代码,执行下一次循环

#include<stdio.h>
int main()
{
	int i = 0;
	while(i<=10)
	{
		if(i==5)//当i==5时,会跳过后面的代码,因此i++没有机会被执行
		//i一直为5,程序会陷入死循环
		{
			continue;
		}
		printf("%d ",i);
		i++;
	}
	return 0;
}

运行结果

0 1 2 3 4

让我们来欣赏一下“双胞胎”之间是否有什么区别呢?

#include<stdio.h>
int main()
{
	int i = 0;
	while(i<=10)
	{
		i++;
		if(i==5)//当i==5时,依然会跳过后面的代码,但是i++可以被执行
		{
			continue;
		}
		printf("%d ",i);
	}
	return 0;
}

运行结果

1 2 3 4 6 7 8 9 10 11

注意
一定要注意,使用continue的时候,调整部分是在continue之前还是之后位置不同往往会造成意想不到的后果

8 循环的嵌套

我们已经了解了循环语句,让我们通过一个小练习来提高我们对于循环语句的理解。

打印100-200之间的素数

#include<stdio.h>
#include<math.h>
int main()
{
	int i = 0;
	for(i=101;i<200;i+=2)
	{
		int j = 0;
		int flag = 1;//假设i是素数
		for(j=2;j<=sqrt(i);j++)//sqrt是一个库函数,用来求一个数的平方根,需要包含头文件math.h
		{
			if(i%j==0)
			{
				flag=0;//如果i不是素数,则flag=0
				break;
			}
		}
		if(flag)
		{
			printf("%d ",i);
		}
	}
	return 0;
}

运行结果
在这里插入图片描述

代码分析:一个整数总能拆成两个正数相乘,其中至少有一个整数是小于等于这个数的平方根的。

举例分析:16=4*4=2*8=1*16

9 goto语句

goto语句可以用来跳出多层循环也可以实现在同一个函数内跳转到设置好的标号处

goto语句也可以理解为一种特殊的循环。(自己理解的)

我们来实现一个关机程序。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
again:
	printf("请注意,你的电脑将在一分钟后关机,如果想要取消关机,请输入罗大侠是我爸爸\n");
	system("shutdown -s -t 60");//系统执行命令,需要包含头文件stdlib.h
	char ch[20]={0};
	scanf("%s",ch);
	if(strcmp(ch,"罗大侠是我爸爸")==0)//strcmp是一个库函数,需要包含头文件string.h,两个字符串的比较不能使用==
	{
		system("shutdown -a");
	}
	else
	{
		goto again;
	}
	return 0;
}

这里就不展示结果了,有兴趣的小伙伴可以自己尝试一下。

结语:今天的文章分享到此结束,感兴趣的朋友为小编点赞吧。万分感谢。

  • 19
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值