C语言第05次课
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4.3 do-while 语句
do-while 语句与while 语句十分相似,只是do-while 语句先执行循环体语句再进行判断循环条件,而while 语句是先判断循环条件再执行循环体语句。
do-while 语句的一般格式:
do
{
循环体语句;
} while(表达式) ;
● 表达式:用作循环条件,与在while 语句中的作用一样。 ● 循环体语句:被重复执行的语句。
● 注意:在while(表达式)后面一定有分号“;”。 其语义是:先执行循环体语句,再判断表达式的值,如为真(非0)则反复执行循环体语句,如为假(为0)则退出while 循环继续执行do-while 语句的后续语句。
其过程如图4.3所示。
用do-while 语句完成本章任务(1): main() {
int i,sum=0;
i=1; do { sum=sum+i; i++; } while(i<=100);
printf("1+2+...+100=%d",sum);
getch();
}
输出结果:1+2+...+100=5050
【例4.8】由键盘输入一个整数n ,反序输出。
如输入:3214665,则输出5664123 分析:
①可先取出此数n 的最后一位:n%10输出
②再用用此数除以10取整数部分n=n/10判断是不是为0,如果不是0则重复从①开始执行,直到(n=n/10)==0
程序如下: main() {
long n;
printf("Input n: "); scanf("%ld",&n); do
{
图4.3 do- while 语句执行流
printf("%ld",n%10);
}
while(n/=10);
getch();
}
【例4.9】编程实现猜数游戏,先由计算机随机生成一个1~100之间的数让人猜,如果人猜对了,在屏幕上输出此人猜了多少次猜对此数,以此来反映猜数者“猜”数水平,则结束游戏;否则计算机给出提示,告诉人所猜的数是太大还是太小,最多可以猜10次,如果猜了10次仍未猜中的话,给出失败提示,游戏结束。
分析:本题要完成的主要任务有如下几步,
①计算机随机产生一个1~100间的数,C语言提供了随机函数rand(),功能产生0~32767之间
的随机数。可以用rand()%100+1来得到1~100间的任意数。注意:使用此函数有的编译器需
要在程序的开始处添加文件包含:#include
②用循环语句实现猜数功能,循环体内用if语句判断是否猜对,并对猜对与否处出相应处理。
程序如下:
#include
main()
{
int i, n, ran, right; /*i用于统计猜数次数,ran用于存放计算机随机产生的数,
right用于标识是否猜的正确,如正确为1否则为0*/
i=0;
right=0;
randomize(); /*用在TC编译器中,初始化随机数发生器,如没有此语句会使
每次运行时,rand()得到的随机值都一样,从而不能实现随机*/ ran=rand()%100+1; /*在上一条语句的基础上实现随机得到1个1~100之间的数*/
do
{
printf("\nYou have %d chances. input a num: ",10-i);
scanf("%d",&n);
if(n==ran)
right=1;
else if(n>ran)
printf("\n%d is too big.\n",n);
else
printf("\n%d is too small.\n",n);
i++;
}
while(right!=1&&i<10); /*如没猜对且猜数次数没超过10次则重复进行猜数*/
if(right==1)
printf("\nCongratulations, num = %d, you are right at %dth time.",ran,i);
else
printf("\nSorry, you have no chanse to guess the num,num = %d.",ran);
getch();
}
4.4用于循环中的break语句和continue语句
在第3章学习switch结构时学到了break语句,用于退出switch语句。在循环语句中如果想要在循环条件仍然满足的情况下提前退出循环语句也可以用break语句。在循环语句的应用中,有时在某种特殊的情况下想结束某次循环而不是完全退出循环语句时可以使用continue语句来实现。下面就逐一介绍break 语句与continue语句在循环语句中的应用。
4.4.1break语句
break语句格式:
break ;
break语句适用于学过的任何一种循环语句,一般放在循环体中的某个if语句的分支中。作用在于一旦执行到break语句则立即结束break所在的循环语句。也可以起到替代循环条件的作用。
【例4.10】分析如下程序,给出程序执行结果。
main()
{
int i;
for(i=0; ;i++)
{
if(i>=10)break; /*执行到break语句则直接退出整个循环语句*/
if(i%2==0)
printf("%d ",i);
}
getch();
}
本程序中的for语句中如没有break语句就成为死循环,break语句起到了替代for语句中的条件语句的作用,据for语句的执行流程可得到本题的输出结果为:0 2 4 6 8。
【例4.11】从键盘任意输入一个正数n,判断其是不是素数(因子只有1及其本身,其值大于1的自然数)。
分析:可用2~n-1之间的各个自然数去除n,如某个数i整除则说明n除了1及其本身外还有其他的因子i,故可断定n不是素数。如所有的数都不能整除则可断定n是素数。经数学方法证明用于除n的数无需2~n-1只要用2~n之间的数去除即可。同时在C语言中有sqrt()这个函数求一个数的平方根。
程序如下:
#include
main()
{
int n,i,k; /*n作为要输入的数,i为循环变量,k存放n的平方根*/
clrscr();
printf("Input n (n>=2): ");
scanf("%d",&n);
k=sqrt(n); /*把n的平方根存在k变量中*/
for(i=2;i<=k;i++)
{
if(n%i==0)break; /*如i取某值时能整除n,则提前结束for循环*/
}
if(i==k+1 && n>1) /*如i的值已累加到k+1,则说明for循环没有提前结束,同时判断n的值