C语言进阶版第2课—break、continue语句和goto语句

1. break和continue语句

  在循环中,如果我们想要在某些特定的情况下跳出循环,这时我们就要使用break和continue来终止循环。
  break的作用是用来永久的终止循环,continue的作用是跳过本次循环中continue后面的代码,因此两者在for循环和while循环里还是有差异的.

1.1 while循环中的break和continue

while循环中的break
在这里插入图片描述

while循环中的continue
在这里插入图片描述
  由以上两组数据对比我们可以看出,当满足条件i=5时break是直接跳出整个循环,而continue是跳过其后的代码后又返回至判断部分i<10,由于i=5仍满足条件,重新进入循环,此时i还是5,仍跳过continue后面的代码,从而打印1 2 3 4后进陷入了死循环。

  如何打破这种死循环呢?
在这里插入图片描述

1.2 for循环中的break和continue语句

for循环中的break
在这里插入图片描述

for循环中的continue
在这里插入图片描述
  通过for循环中的break和continue对比,我们了解到continue并非跳过其后的代码后重新进入循环,而是跳过其后代码后进入for循环的调整部分,然后重新判断,满足条件重新进入循环,以此往复.

1.3 do……while循环中的break和continue

do……while循环中的break
在这里插入图片描述

do……while循环中的continue
在这里插入图片描述
  从以上两种结果对比来看,do……while循环中的break依旧是满足条件则跳出循环,而continue是跳过其后部分直至判断部分i < 10,满足继续进入循环.

2 goto语句

int main()  
   {
    goto 自定义变量;
变量:
    语句;             //goto语句是直接跳转到其指定的代码
    return 0}

在这里插入图片描述
  通常是不建议使用goto语句,因为它可能会带来不必要的麻烦,但它也不是一无是处.

for()
  {
     for()
     {
        for()
        {
        goto 变量;  //如果我们想要跳出多个循环嵌套,需要在每个循环里加break
        }
     }
  }
变量:               //而goto语句可以直接跳转
    语句;

3. 练习

3.1 打印1-100以内的素数

  • 解题思路:首先我们要知道什么是素数,只能被1和它本身整除的才是素数,也称为质数.
  • 通过循环,找到符合条件的打印出来
//打印1-100以内的素数
int main()
{
	int i = 0;
	for (i = 2; i <= 100; i++)           //1不是素数
	{
		int flag = 1;                  //flag用来判断其是否是素数
		for (int j = 2; j < i; j++)
		{
			if (i % j == 0)
			{
				flag = 0;
				break;
			}
		}
		if (flag)
		{
			printf("%d ", i);
		}
	}
	return 0;
}

在这里插入图片描述

  • 当然,代码还可以进行优化
  • 简单举个例子:25=5*5  24=4*6   30=5*6
  • 如果这个数不是素数,那么它一定可以写成两个数相乘的形式,且其中最小的那个数一定不超过这个数的算术平方根.
    在这里插入图片描述

3.2 打印乘法口诀表

//乘法口诀表
int main()
{
	int n = 0;
	scanf("%d", &n);
	for (int i = 1; i <= n; i++)                   //i是行数
	{
		for (int j = 1; j <= i; j++)               //j是列数
		{ 
			printf("%d*%d=%-2d ", j, i, i * j);    //%-2d表示左对齐输出两位
		}
		printf("\n");
	}
	return 0;
}

在这里插入图片描述

3.3 计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值

  • 解题思路:分两部分,利用循环使正分数和负分数分开计算,然后相减
//计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值
int main()
{
	float sum1 = 0.0;        //vs编译器默认double类型
	float sum2 = 0.0;
	for (int i = 1; i < 100; i+= 2)
	{
		sum1 += 1.0 / i;     //使用小数时,两个操作数至少有一个带小数点
	}
	for (int j = 2; j <= 100; j += 2)
	{
		sum2 += 1.0 / j;
	}
	printf("%.5f\n", sum1 - sum2);//%.5f意思是打印float类型浮点数小数点后五位
}

在这里插入图片描述

3.4 编写程序数一下 1到 100 的所有整数中出现多少个数字9

  • 解题思路:9 19 29 39 49 59 69 79 89 99个位出现9的次数
  • 90 91 92 93 94 95 96 97 98 99十位出现9的次数
  • 99会出现两次
//编写程序数一下 1到 100 的所有整数中出现多少个数字9
int main()
{
	int i = 0;
	int sum = 0;                   //判断9出现的次数
	for (int i = 1; i <= 100; i++)
	{
		if (i / 10 == 9)            //判断十位为9
		{
			printf("%d ", i);
			sum++;
		}
		
		if (i % 10 == 9)            //判断个位为9
		{
			printf("%d ", i);
			sum++;
		}
	}
	printf("\n");
	printf("9的次数出现了%d次\n", sum);
	return 0;
}

在这里插入图片描述

3.5 给定两个数,求这两个数的最大公约数

  • 解题思路:用最大数a%最小数b,得到的余数赋给b,把b的原来的值赋给a,继续用a%b,继续赋值,直到模值为0,则此时的b就是最大公约数.
  • 假如求18和24的最大公约数
  • 用 24(a)% 18(b)→余数6
  • b的值赋给a,余数赋给b,得到18(a)% 6(b)→余数0
  • 则24和18的最大公约数就是新赋予b的值6
//给定两个数,求这两个数的最大公约数
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	while (1)
	{
		int c = a % b;
		a = b;                    //b的值赋给a
		b = c;                    //余数c的值赋给b
		if (a % b == 0)
		{
			printf("两个数的最大公约数是%d\n", b);
			break;
		}
	}
	return 0;
}

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值