一.break语句
1.break表示退出整个循环,嵌套循环中退出最近的一个循环语句;
2.break在循环中一般与if一起用;
#include <stdio.h>
int main()
{
int sum = 0, i = 1;
while (1)
{
sum += i;
if (i==100)
{
break;
}
++i;
}
printf("%d\n", sum);
}
5050
二.continue语句
1.continue表示退出循环中的某次循环;
2.continue在循环中一般与if一起用;
#include <stdio.h>
int main()
{
for (int i = 1; i <= 10; i++)
{
if (i%2==0)
{
continue;
}
printf("%d\n", i);
}
}
运行结果:
1
3
5
7
9
三.趣例:吃饭.睡觉.打豆豆
#include <stdio.h>
int main()
{
int cChioce;
do
{
printf("* 1. 吃饭\n");
printf("* 2. 睡觉\n");
printf("* 3. 打豆豆\n");
printf("* 0. 退出\n");
printf("* 请选择(0-3) : ");
scanf_s("%d", &cChioce);
if (cChioce == 1)
printf("我吃吃吃...\n");
else if (cChioce == 2)
printf("我睡觉觉...\n");
else if (cChioce == 3)
printf("我打打打...\n");
else if (cChioce == 0)
break;//退出do while循环
else
{
printf("\007选择错误!\n");
continue;//退出本次循环,不输出下一句
}
printf("恭喜你完成了一项工作!\n");
} while (1);
}
四.程序“单入口,单出口”原则的破坏
1.循环中加入break,循环语句变成"单入口,多出口"
2.循环中加入continue,循环语句变成"多入口,单出口"
五.程序阅读
(1)
#include <stdio.h>
int main()
{
int a, b;
for (a = 1, b = 1; a <= 100; a++)
{
if (b >= 20) break;
if (b % 3 == 1)//a=1;a=2;a=3; a=4; a=5; a=6; a=7; a=8;
{
//b=4;b=7;b=10;b=13;b=16;b=19;b=22;退出;
b += 3;
continue;
}
b -= 5;
}
printf("%d %d\n", a,b);
}
运行结果:
8 22
(2)
#include <stdio.h>
int main()
{
int i, j;
for (i = 0; i < 3; i++, i++)
{
for (j = 4; j >= 0; j--)
{
if ((j + i) % 2)
{
j--;
printf("%d,", j);
continue;
}
--i;
j--;
printf("%d,", j);
}
}
}
运行结果:
3,1,-1,3,1,-1,
(3)
#include <stdio.h>
int main()
{
int a = 10, y = 0;
do
{
a += 2; //a值变化:12,14,16,14,16,14,16
y += a; //y值变化:12,12,28,28,44,44,60
if (y > 50)
break;
} while (a = 14);//每次循环完,a被赋值为14;
printf("a=%d y=%d\n", a, y);
}
运行结果:
a=16 y=60
(4)
#include <stdio.h>
int main( )
{
int i,j,k=19;
while (i=k-1)//此处是赋值
{
k-=3 ;
if (k%5==0)
{
i++ ;
continue ;
}
else if (k<5)
break ;
i++;
}
printf("i=%d,k=%d\n",i,k);
return 0;
}
运行结果:
i=6,k=4
六.实践项目
【项目1:大奖赛计分(续一)】
在歌手大奖赛中,有10个评委为参赛的选手打分,分数为1~10分。请在大奖赛计分程序基础上,增加功能,若用户输入不在0-10范围内,则立即要求重输,直到正确。
#include <stdio.h>
#define n 3
int main()
{
int i;
double ave, score, sum, max, min;
char choice;
do
{
i = 1;
max = -1;
min = 11;
sum = 0;
printf("请输入选手的成绩(0-10)\n");
do
{
printf("第 %d 位评委给分:", i);
scanf_s("%lf", &score);
if (score < 0 || score>10)
continue; //输入不对不执行到后面的i++,提示的还是原评委
sum += score;
if (max < score)
max = score;
if (min > score)
min = score;
i++;
} while (i <= n);
ave = (sum - max - min) / (n - 2.0);
printf("减去一个最高分: %.3f\n", max);
printf("减去一个最低分: %.3f\n", min);
printf("选手的最后得分:%.3f\n", ave);
printf("************* 完成选手的打分 **************\n");
printf("按N或n退出,其他键继续....\n");
rewind(stdin);//清理缓冲区操作,VS2019使用fflush(stdin)清理无效!!!!!
choice = getchar();
} while (choice != 'n' && choice != 'N');
}
总结:
1.最新版的VS2019无法使用fflush(stdin)函数可用rewind(stdin)函数替换,效果相同。
2.这个也可以清理缓冲区: while ((choice = getchar()) != EOF && choice != ‘\n’) { ; }
3.choice改成int型,不用清空缓冲区也可以!!
【项目2:打豆豆】
设计一个程序,能重复地在显示下面的信息:
/* 1. 吃饭
/* 2. 睡觉
/* 3. 打豆豆
/* 0. 退出
/* 请选择(0-3):
根据用户输入的选项,输出一句提示性的话语(将来会对应实现某个功能)。输入0,则退出。
请在下面的程序段基础上完成
#include <stdio.h>
int main()
{
char cChioce;
do
{
printf("\n");
printf("* 1. 吃饭\n");
printf("* 2. 睡觉\n");
printf("* 3. 打豆豆\n");
printf("* 0. 退出\n");
printf("* 请选择(0-3):");
rewind(stdin); //读字符前清除键盘缓存区
scanf_s("%c", &cChioce,1);
if (cChioce == '0')
{
printf("撤退!\n");
break; //此break跳出循环语句
}
else
{
switch (cChioce)
{
case '1':
printf("我吃吃吃... ...\n");
break; //此break只跳出switch语句
case '2':
printf("我睡觉觉... ...\n");
break; //此break只跳出switch语句
case '3':
printf("我打打打... ...\n");
break; //此break只跳出switch语句
default:
printf("\007选择错误!\n");
//语句在最后,可以不写continue;
}
}
} while (1); //死循环,要利用break跳出循环;
}