#接嵌入式初学-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 do11 {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 do15 {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要算乘法所以赋值不能为09 printf("请输入一个整数数值:");10 scanf("%d",&b);11 12 for(int a = 1;a <= b;a++) //当a循环到大于输入值b时停止循环13 {14 sum *= a; //等价于 sum = sum * a15 }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×r14 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 }