分支与循环(2)

本文详细介绍了C语言中的if、switch、while、for、do-while、break、continue、goto等控制流结构以及循环语句的使用,包括switch语句的工作原理、break和continue的作用,以及各种循环的用法示例。
摘要由CSDN通过智能技术生成

⽬录

  1. if语句
  2. 关系操作符
  3. 条件操作符
  4. 逻辑操作符:&& , || , !
  5. switch语句
  6. while循环
  7. for循环
  8. do-while循环
  9. break和continue语句
  10. 循环的嵌套
  11. goto语句@TOC

五、switch语句

switch等价于if…else语句
如下为基本结构

#include<stdio.h>
int main()
{
	int a=0;
	scanf("%d",&a);
	switch (a)
	{
	case 0:
		printf("输入的是0");
	case 2:
		printf("输入的是2");
	case 3:
		printf("输入的是3");
	}
	return 0;
}

a等于几,就从哪个case进入。
注意:switch中的a必须为整型表达式,所以不能为double这种类型,可以为字符型,因为字符存储是对应的ASILL值。
case后必须要有空格,且空格后只能为一个整型常量表达式,不能为a,b这种变量。

5.1break

switch中含有break,会直接跳出switch语句
但若没有break,则继续往后运行

#include<stdio.h>
int main()
{
	int a=0;
	scanf("%d", &a);
	switch (a)
	{
	case 0:
		printf("输入的是0\n");
	case 2:
		printf("输入的是2\n");
	case 3:
		printf("输入的是3\n");
	}
	return 0;
}

请添加图片描述
有个break,那么就只会运行一个case了

#include<stdio.h>
int main()
{
	int a=0;
	scanf("%d", &a);
	switch (a)
	{
	case 0:
		printf("输入的是0\n");
		break;
	case 2:
		printf("输入的是2\n");
		break;
	case 3:
		printf("输入的是3\n");
		break;
	}
	return 0;
}

请添加图片描述
另外,如果有时多个case表达的意思一样,还可以简写。

#include<stdio.h>
int main()
{
	int a=0;
	scanf("%d", &a);
	switch (a)
	{
	case 0:
	case 2:
		printf("输入的是2或0\n");
		break;
	case 3:
		printf("输入的是3\n");
		break;
	}
	return 0;
}

请添加图片描述

5.3default

如果输入的值不是case中含有的值就会走default语句

#include<stdio.h>
int main()
{
	int a=0;
	scanf("%d", &a);
	switch (a)
	{
	case 0:
	case 2:
		printf("输入的是2或0\n");
		break;
	case 3:
		printf("输入的是3\n");
		break;
	default:
		printf("输入错误\n");
		break;
	}

	return 0;
}

请添加图片描述
还有,default与case的顺序都是随意,谁先谁后都无所谓的。

六.while循环

while(表达式)
语句;
若要循环多条语句,可以用{}来执行;

6.1实践

练习:在屏幕上打印 1~100的值,并计算它们的和。

#include<stdio.h>
int main()
{
	int a = 1;
	int sum = 0;
	while (a <= 100)
	{
		printf("%d ", a);
		sum = sum + a;
		a++;
	}
	printf("\nsum=%d", sum);
	return 0;
}

请添加图片描述
输⼊⼀个正的整数,逆序打印这个整数的每⼀位 例如: 输⼊:1234,输出:4 3 2 1 输⼊:521,输出:1 2 5.

#include<stdio.h>
int main()
{
	int a = 0;
	scanf("%d", &a);
	while (a != 0)
	{
		printf("%d ", a % 10);
		a = a / 10;
	}
	return 0;
}

请添加图片描述

这道题,只需用%来求个位数,再用/来去掉个位数,就可以做了,最后a会变为0。

七.for循环

7.1语法

for(表达式1;表达式2;表达式3)
语句;
其中表达式1为变量的初始化,表达式2为循环条件的判断,表达式3为循环变量的调整

7.2实践

练习:在屏幕上打印 1~100的值,并计算它们的和。

#include<stdio.h>
int main()
{

	int a = 1;
	int sum = 0;
	for(a=1;a<=100;a++)
	{
		printf("%d ", a);
		sum = sum + a;
	}
	printf("\nsum=%d", sum);
	return 0;
}

由此可见,while与for循环相比,for循环把初始化,条件判断,变量调整更加紧密的联系到了一起,所以说,for循环往往要比while用的要多。

八.do-while循环

8.1语法

do
语句;
while(表达式);

先做一遍循环,在判断是否满足循环条件,满足就继续循环,所以说,do-while循环要比前两个循环特殊一点,它的执行循环次数总是与判断条件次数一样,不像前两个,总是判断条件次数比循环次数一次。

8.2实例

练习:在屏幕上打印 1~100的值,并计算它们的和。

#include<stdio.h>
int main()
{

	int a = 1;
	int sum = 0;
	do
	{
		printf("%d ", a);
		sum = sum + a;
		a++;
	} while (a <= 100);
	printf("\nsum=%d", sum);
	return 0;
}

输⼊⼀个正整数,计算这个整数是⼏位数? 例如: 输⼊:1234 输出:4 输⼊:12 输出:2

#include<stdio.h>
int main()
{

	int a = 0;
	int count = 0;
	scanf("%d", &a);
	do
	{
		a = a / 10;
		count++;
	} while (a);
	printf("%d", count);
	return 0;
}

使用do-while,相比for,while循环的优点就是循环至少执行了一次,所以当a等于0的时候也能判断出是一位数。

九.break与continue语句

9.1break描述

遇到break直接跳出一层循环

#include<stdio.h>
int main()
{

	int a = 1;
	for(a=1;a<=10;a++)
	{
		if(a==5)
		break;
		printf("%d ", a);
	}
	return 0;
}

例如如上代码,只会输出1 2 3 4

9.2continue描述

遇到continue会直接跳过continue后面的代码,直接跳到循环条件。

#include<stdio.h>
int main()
{

	int a = 1;
	for(a=1;a<=10;a++)
	{
		if(a==5)
		continue;
		printf("%d ", a);
	}
	return 0;
}

如上,会输出1 2 3 4 6 7 8 9 10

十.循环的嵌套

找出100~200之间的素数,并打印在屏幕上。 注:素数⼜称质数,只能被1和本⾝整除的数字。

#include<stdio.h>
int main()
{
	
	int a = 1,j;
	for (a = 100; a <= 200; a++)
	{
		int flag = 0;
		for(j=2;j<=a-1;j++)
		{
			if (a % j == 0)
			{
				flag = 1;
				break;
			}
		}
		if (flag == 0)
			printf("%d ", a);
	}
	return 0;
}

要判断一个数n是否是素数,只需把2到n-1,分别去整除n就可以了,还有如何判断是不是全部数无法整除而跳出的循环,只需用一个flag即可,用来区分是break跳出的(不是素数)还是所有j无法整除跳出的(是素数)

十一.goto语句

goto哪里就跳到哪里

change:
printf("hehe");
goto change;

如上,goto change就会跳到change,所以会一直打印hehe

11.1goto语句的玩法:关机程序

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
	char input[20] = { 0 };
	int get;
	again:
	system("shutdown -s -t 60");//60秒后关机
	printf("请注意哈,真的请注意,您的电脑或者手机将在一分钟内关机,目前只有一个解决方法,");
	printf("也就是输入我是猪,为了不让小的关机,请输入:");
	scanf("%s", input);
	get = strcmp(input, "我是猪");//对比是否相同,相同返回0
	if (get == 0)
		system("shutdown -a");//取消关机
	else
		goto again;
	return 0;
}

读者可以用这个代码去捉弄自己的好朋友哦。当且仅当输入“我是猪”才能取消关机。

十二.综合应用:猜数字游戏

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void menu()
{
	printf("**************\n");
	printf("****1.play****\n");
	printf("****0.exit****\n");
	printf("**************\n");
}
void game()
{
	printf("你有五次猜的机会,小心哦\n");
	int get = rand()%100+1;//产生的一个1到100的随机数
	for (int i = 4;;i--)
	{
		printf("请输入你要猜的数字:<");
		int guess;
		scanf("%d", &guess);
		if (guess > get)
			printf("猜大了\n");
		else if (guess < get)
			printf("猜小了\n");
		else
		{
			printf("恭喜你,猜对了\n");
			printf("你真厉害,你还要玩吗\n");
			break;
		}
		if (i >= 1)
		{
			printf("你还有%d次机会\n", i);
		}
		else
		{
			printf("你输了哦,五次机会都被你用完了,还没有猜出来\n");
			printf("正确的数字是:%d\n", get);
			printf("你还要来吗?\n");
			break;
		}
	}
}
int main()
{
	srand((unsigned int)time(NULL));//辅助产生随机数的
	int input = 1;
	do
	{
		menu();
		printf("请选择:<");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			printf("开始猜数字游戏\n");
			game();
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("输入错误,请重新输入\n");
			break;
		}
	} while (input);
	return 0;
}

在这里插入图片描述
还是挺好玩的,放在这里了哦😊😊😊😊。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值