文章目录
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;
}