首页 > 其他分享 >分支与循环

分支与循环

时间:2024-07-21 20:00:56浏览次数:7  
标签:语句 main int 循环 printf include 表达式 分支

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

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

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

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

标签:语句,main,int,循环,printf,include,表达式,分支
From: https://blog.csdn.net/2402_84532723/article/details/140583398

相关文章

  • js的for循环
    在JavaScript中,没有直接类似于for(i:arr)的语法,但你可以利用ES6引入的for...of循环来遍历数组或可迭代对象。此外,还有forEach方法,它提供了一种更函数式的方式来遍历数组。以下是几种遍历数组的方法:1.for...of循环这是最接近for(i:arr)语法的方法,它允许你遍历数组中......
  • python入门课程Pro(2)--循环
    循环第1课for循环的基本操作1.循环2.遍历3.for循环遍历字典(1)遍历字典的键(2)遍历字典的值(3)遍历字典的键和值4.练习题(1)班级成绩单(2)最出名的城市(3)修改成绩(4)打招呼第2课for循环的复杂应用1.累加2.练习题(1)有多少个字母(2)零食支出(3)同学加油(4)被罚了(5)几条鱼几头羊(6)高分......
  • 如何使用 for 循环存储列略有不同的多个数据帧?
    在我的目录中,有9个txt文件的列表。无需手动运行pd.read_table()每个文件,我想有效地运行一个循环,并为每个文件保存一个数据帧。请注意,由于列不同,我不会将这些文件附加到一个数据框中。这些文件的范围为all_alpha_10.txt,all_alpha_11.txt...all_alpha_18......
  • Python pyTelegramBotAPI:设置不受循环影响的变量
    我想创建一个基本上是布尔值的变量(无论机器人是否工作)。但是,当使用TeleBot.polling()时,脚本开始无限循环,所以如果我在代码开头设置一个变量就像:is_bot_working=True,变量将始终为真,反之亦然。那么,我应该如何设置一个不受循环影响的变量?这就是代码:impor......
  • 我猜ESP8266陷入了无限的socket.accept()循环?
    我一直在使用ESP8266,并遇到了一个似乎不知从何而来且无法解决的问题。至少-对我来说。基本上我继续了这个构建一个简单的服务器套接字的教程。然而我的esp突然停止允许与其自身的连接。代码正常工作,直到main.py:whileTrue:conn,addr=s.ac......
  • 如何使用 for 循环在 python jupyter 笔记本中创建动态图?
    我正在学习本课关于用Python求解热方程。该课程指出,在求解热方程后,我们可以通过在循环中简单地调用pyplot.plot()来可视化解的动画图,其中下面的代码将动态绘制每次每个点的温度,从而得到一个动画情节(课程帖子中提供了动画情节的示例)。importnumpyfrommatplotlibi......
  • 如何在 github 操作中排除对主分支文件夹的检查黑色格式化程序?
    我学习Python,我想使用GitHub操作,但我对BlackFormatter有疑问,因为它检查拉请求中的所有文件(也来自主分支),但我不需要它。我已尝试使用命令包含/排除搜索的任何选项,但都不起作用。我的问题是什么?我在.yml中使用此代码:-uses:actions/checkout@v3-u......
  • 学Java的第三周(循环)
    在Java中,循环是指重复的操作或需要重复执行的代码。任何循环都需要有循环开始或结束的条件,如果循环无休止地进行,则称之为死循环。一个完整的循环结构必须满足以下特征:(1)循环有开始或结束的条件。(2)需要重复执行的操作或代码,称为循环操作或循环体。Java中while循环是-种非......
  • Scanner,switch,分支语句,循环语句
    Scanner1.概述:​Scanner是java定义好的类2.用法:​a.导包importjava.util.Scanner​b.创建对象Scanner对象名=newScanner(System.in);​c.调用方法对象名.next() //录入字符串对象名.nextInt() //录入整数publicclassDemo02{publicstat......
  • 干货 |Python中的循环结构
    应用场景我们在写程序的时候,一定会遇到需要重复执行某条或某些指令的场景。例如用程序控制机器人踢足球,如果机器人持球而且还没有进入射门范围,那么我们就要一直发出让机器人向球门方向移动的指令。在这个场景中,让机器人向球门方向移动就是一个需要重复的动作,当然这里还会......