#接嵌入式初学-C语言-十,以及部分例题#
循环结构
break和continue
break
功能:
1. 用在switch中,用来跳出switch的case语句;如果case没有break,可能会产生case穿透。
2. 用在循环中(while、do..while、for..),提前结束循环,也就是跳出整个循环。
说明:
1. break不能用于循环语句和switch语句之外的任何其它语句之中。
2. break只能终止并跳出最近一层的结构。 图示:
案例:
/**
* 需求:break案例-同学参与一阶段分段考试,如果考试及格,就跳出循环,否则就一直考
*/
#include <stdio.h>
int main()
{
printf("一阶段分段考试\n");
// 声明一个变量,用来存放考试成绩
int score = 0;
do
{
// int score = 78; // score的作用域只能作用域到{}以内
printf("开始一阶段分段考试...\n");
scanf("%d",&score);
// 开始合格,结束考试
if(score >= 60){
break;
}
}
while(1);
printf("恭喜你考试通过!\n");
return 0;
}
案例:
/**
* 需求:break案例-输出1~100以内的偶数,只输出前10个
*/
#include <stdio.h>
int main()
{
for(int i = 1,count = 1;i <= 100;i++)
{
if(i % 2 == 0)
{
if(count > 10){
break;
}
count++;// 注意位置:只记录偶数
printf("%d\t",i);
}
}
printf("\n");
return 0;
}
continue
功能:continue语句不会结束整个循环,而是跳过本次循环尚未执行的语句,进入下一次循环。
说明:
1. 仅用于循环语句中。
2. 在嵌套循环的情况下,continue语句只对包含它的最内层的循环体语句起作用。
图示:
案例:
/**
* 需求:continue案例-求1~100之内的偶数和
*/
#include <stdio.h>
// 不使用continue
void fun01()
{
int sum = 0;
for(int i = 1; i <= 100; i++)
{
// 判断偶数
if(i % 2 == 0)
{
sum += i;
}
}
printf("1~100之内的偶数和是:%d\n",sum);
}
// 使用continue
void fun02()
{
int sum = 0;
for(int i = 1; i <= 100; i++)
{
// 判断奇数
if(i % 2 != 0)
{
continue;// 跳出所有的奇数
}
sum += i;
}
printf("1~100之内的偶数和是:%d\n",sum);
}
int main()
{
fun01();
fun02();
}
跳出多层循环
跳出多层循环是不能使用break和continue的,因为他们只能跳出单层循环,跳出多层循环,需要 我们自己定义标志位进行跳出。
案例:
// 定义一个标志位
int isFlag = 1;// 默认循环成立
char fu;
while(isFlag)
{
printf("第一层循环执行的内容...\n");
while(isFlag)
{
printf("第二层循环执行的内容...\n");
printf("是否跳出循环?(y/n)");
scanf("%c",&fu);
if(fu == 'Y' || fu == 'y')
{
isFlag = 0;
}
}
}
注意:如果是多层循环,进的时候是从外到内,跳出的时候是从内到外。
习题:
1.计算n以内所有正奇数的和 ? n值通过键盘输入
1 /*
2 需求:计算n以内所有正奇数的和 ? n值通过键盘输入
3 */
4 #include <stdio.h>
5
6 int main()
7 {
8 int sum = 0;
9 int a = 0;
10
11 printf("请输入一个正值:");
12 scanf("%d",&sum);
13
14 for(int i = 1;i <= sum;i++)
15 {
16 if(i % 2 != 0)
17 {
18 a += i;
19 }
20 }
21
22 printf("正奇数和为:%d\n",a);
23
24 return 0;
25 }
2.计算 1 + 1/(2 * 3) + 1/(3 * 4) + ...+ 1/(n * (n + 1)) = ?直到最后一相值小于0.00001为至。
1 /*
2 计算 1+1/(2*3)+1/(3*4)+...+1/(n*(n+1))=?直到最后一相值小于0.00001为至。
3 */
4 #include <stdio.h>
5
6 int main()
7 {
8 double sum = 1.0;
9 double i = 1.0;
10 do
11 {
12
13 sum = sum + 1.0 / ((i + 1) * (i + 2));
14 i++;
15
16 }while(1.0 / ((i + 1) * (i + 2)) >= 0.00001);
17
18
19 printf("%lf\n",sum);
20
21 return 0;
22 }
3.计算1+1/2 - 1/3 + 1/4 - 1/5 ...+1/n= ? n通过键盘输入
1 /*
2 需求:计算1+1/2 - 1/3 + 1/4 - 1/5 ...+1/n= ? n通过键盘输入
3 */
4 #include <stdio.h>
5
6 int main()
7 {
8 int a;
9 int b = 2;
10 double sum = 1; //找出题目的关系为1加上n分之1,再减n+1分之1,将算是前1直接赋给sum,利于找出关系表达式
11 printf("请输入一个数字:\n");
12 scanf("%d",&a);
13
14 do
15 {
16 if(b % 2 == 0) //题目可知被二整除为加号
17 {
18 sum += 1.0 / b;
19 }
20 else //不被二整除为减号
21 {
22 sum -= 1.0 / b;
23 }
24 b++;
25 }while(b <= a); //当b大于输入值时跳出循环
26
27 printf("输出的值为:%f\n",sum);
28
29
30
31 return 0;
32 }
4.计算n的阶乘 ? n! = 123.....*n n值通过键盘输入
1 /*
2 需求:计算n的阶乘 ? n! = 123.....*n n值通过键盘输入
3 */
4 #include <stdio.h>
5
6 int main()
7 {
8 int b = 0,sum = 1; //sum要算乘法所以赋值不能为0
9 printf("请输入一个整数数值:");
10 scanf("%d",&b);
11
12 for(int a = 1;a <= b;a++) //当a循环到大于输入值b时停止循环
13 {
14 sum *= a; //等价于 sum = sum * a
15 }
16
17 printf("你输入的数值%d的阶乘为%d\n",b,sum);
18
19 return 0;
20 }
5.输出半径为1~10的圆面积,面积大于100时停止
1 /*
2 需求:输出半径为1~10的圆面积,面积大于100时停止
3 */
4 #include <stdio.h>
5
6 int main()
7 {
8 double s = 1.0;
9 int r = 1;
10 double PI = 3.1415926;
11 while(1) //当前循环为死循环,但是是可控制死循环
12 {
13 s = PI * r * r; //圆的面积=pi×r×r
14 r++;
15 if(s > 100)
16 {
17 break; //面积大于100,提前跳出,不再输出
18 }
19 printf("当前圆的面积为:%.3f\n",s); //每次输出圆的面积
20 }
21
22 printf("输出结束!\n");
23
24 return 0;
25 }