C语言课件第5章循环结构程序设计2_第1页
C语言课件第5章循环结构程序设计2_第2页
C语言课件第5章循环结构程序设计2_第3页
C语言课件第5章循环结构程序设计2_第4页
C语言课件第5章循环结构程序设计2_第5页
已阅读5页,还剩78页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第5章主要内容一、循环的概念二、用while语句实现循环三、用do-while语句实现循环四、用for语句实现循环五、break语句和continue语句六、循环嵌套七、应用举例思考求1~100的累加和。分析换一种思路:首先设置一个累计器sum,其初值为0,利用sum+=n来计算(n依次取1、2、……、100),只要解决以下3个问题即可:

(1)将n的初值置为1;

(2)每执行1次“sum+=n;”后,n增1;

(3)当n增到101时,停止计算。此时,sum的值就是1~100的累计和。sum=1+2+…+100;.sum=sum+n;格式while(循环条件表达式)

{循环体语句}P70说明1、循环体如果包含一个以上的语句,必须使用复合语句形式。2、在循环体中,必须有使循环条件趋向于不满足(假)的语句。3、先判断表达式,后执行语句。功能当表达式成立(表达式的值为非0值)时,执行while语句中的循环体语句。执行过程表达式循环体语句不成立成立§5.1while语句?sum=凵5050举例例5.1:求1~100的累加和。#include<stdio.h>intmain(){

int

i,sum;i=1;sum=0;while(i<=100)

{

sum=sum+i;i++;

}

printf("sum=%5d\n",sum);return0;}思考1、如果去掉循环体中的大括号,执行过程将会怎样变化?2、在循环体中,使循环条件趋向于不满足(假)的语句是哪条?3、变量i和sum在循环外不赋予初值行不行?i=1;sum=0;?1求1~50的累加和.2求1~100的奇数和.3求1~100的偶数和.求1到100的奇数和

#include<stdio.h>

intmain()

{

inti,sum;

i=1;sum=0;

while(i<100)

{

sum=sum+i;

i++;i++;

}

printf("sum=

%d\n",sum);return0;

}运行结果:凵2500说明:(1)循环体如果包含一个以上的语句,应该用花括弧括起来,以复合语句形式出现。

(2)在循环体中应有使循环趋向于结束的语句举例练习:1、求1到100之间的偶数和;2、求N!#include<stdio.h>intmain(){

inti,sum=0;i=1;while(i<=100){if(i%2==0)sum=sum+i;i++;}

printf("%d\n",sum);return0;}#include<stdio.h>intmain(){

inti=1,n;floatfac=1;

printf("请输入n:");

scanf("%d",&n);while(i<=n){fac=fac*i;i++;}printf("%.0f\n",fac);return0;}运行结果:凵2550请输入n:5运行结果:120利用公式:sum=1-3+5-7+9-11…,求前10项的和。#include<stdio.h>intmain(){

int

s,i,sum,t,n;i=0;n=1,sum=0,t=1,s=1;

while(i<10){sum=sum+t;n=n+2;s=-s;t=s*n;i++;}

printf("sum=%d\n",sum);return0;}s:变化的符号i:第i项n:第i项的绝对值t:第i项的值sum:和运行结果:sum=-10举例举例例5.2:设s=1×2×3×……×n,求s不大于400000时最大的n。#include<stdio.h>intmain(){

intn=1;longints=1;

while(s<=400000){n=n+1;s=s*n;}

printf("不大于400000时的最大n为:%d\ns值为:%ld\n",n-1,s);return0;}运行结果:不大于400000时的最大n为:9s值为:3628800前n项的乘积举例现有某班20名学生的C语言成绩,求该班学生的C语言的平均成绩。即:输入20个学生的成绩,计算平均值,输出平均值。分析:定义变量表示学生的成绩、全班总和、平均成绩。算法设计:

第一步:输入20个学生的成绩

第二步:计算成绩总和(用累加求和的方法)

第三步:计算平均值(总和/人数)

第四步:输出平均值如果定义20个变量保存20个成绩,程序中计算成绩总和会有什么问题?回顾例题:求1到100的奇数和

#include<stdio.h>

intmain()

{

inti,sum;

i=1;sum=0;

while(i<100)

{

sum=sum+i;

i=i+2;

}

printf("sum=

%d\n",sum);return0;

}用while循环实现累加求和累加项是谁?累加项是如何不断被更新的?ii=i+2;例题现有某班20名学生的C语言成绩,求该班学生的C语言的平均成绩。即:输入20个学生的成绩,计算平均值,输出平均值。运行结果:

请输入学生成绩:23凵89凵67凵78凵94凵56凵34凵83凵90

凵67凵48凵72凵81凵65凵74凵87凵73凵67凵90凵98

20名学生的C语言平均成绩为:71.8#include<stdio.h>intmain(){floatscore,total=0,average;

inti=1;

printf("请输入学生成绩:");

while(i<=20){

scanf("%f",&score);total=total+score;i++;}average=total/20;printf("20名学生的C语言平均成绩为:%5.1f\n",average);return0;}total前i名学生的成绩的和score每一名学生的成绩average

平均成绩i用来计数举例

从键盘输入一个非负整数,判断m是否是素数。素数(质数):只能被1和它本身整除的数。判别方法:57:若2~56之间的每一个数都不能整除56,则57为素数,否则57不是素数。m,k=m-1,i=2~k:若每一个i的值都不能整除m,则m为素数,否则m不是素数。flag=1;k=m-1;for(i=2;i<=k;i++)if(m%i==0)flag=0;if(flag==1)printf(“yes!”);elseprintf(“no!”);k=m-1;for(i=2;i<=k;i++)if(m%i==0)break;if(i>=k+1)printf(“yes!”);elseprintf(“no!”);k=m-1;k=[m/2];[(m+1)/2];k=[sqrt(m)];[sqrt(m+1)]#include"math.h"#include"stdio.h"intmain(){

int

m,flag=0,i=2,k;

printf("请输入一个非负整数:\n");

scanf("%d",&m);k=sqrt(m);

while(i<k&&flag==0) {

if(m%i==0) flag=1;//m不是素数,修改flag的值

elsei++; }

if(flag==0)

printf("%d是素数。\n",m); else

printf("%d不是素数。\n",m); return0;}举例求两个非负整数m和n的最大公约数和最小公倍数。#include<stdio.h>intmain(){int

m,n,t;

printf("请输入两个非负整数:");

scanf("%d%d",&m,&n);t=(m<=n)?m:n;while(m%t!=0||n%t!=0)//t能否整除m、nt--;

printf("最大公约数为:%d\n",t);t=(m>n)?m:t;while(t%m!=0||t%n!=0)//m、n能否整除tt++;

printf("最小公倍数为:%d\n",t);return0;}找m、n中较小数找m、n中较大数格式do

{循环体语句}while(循环条件表达式);说明1、循环体如果包含一个以上的语句,必须使用复合语句形式。2、在循环体中,必须有使循环条件趋向于不满足(假)的语句。3、先执行循环体语句,后判断表达式的值。含义执行do-while语句中的循环体语句,直到表达式的值为假(0)才跳出循环。执行过程至少执行一次§5.2do-while语句表达式循环体语句假真举例例5.6求1~100之间的奇数和。

#include<stdio.h>intmain(){inti,sum;i=1;sum=0;do{sum=sum+i;i++;

i++;}while(i<=100);printf("sum=%5d\n",sum);return0;}思考1、如果去掉循环体中的大括号会怎样?2、在循环体中,使循环条件趋向于不满足(假)的语句是哪条?运行结果:凵2500举例while和do-while循环的比较。

#include<stdio.h>intmain(){int

i,sum=0;scanf("%d",&i);while(i<=10){sum=sum+i;i++;}printf("sum=%d\n",sum);return0;}#include<stdio.h>intmain(){int

i,sum=0;scanf("%d",&i);do{sum=sum+i;i++;}while(i<=10);printf("sum=%d\n",sum);return0;}输入:1输入:11sum=55输出:sum=55sum=0输出:sum=11此程序的功能?什么情况下两者结果相同?举例例5.7设有一张厚为x毫米,面积足够大的纸,将它不断对折。试问对折多少次后,其厚度可达8848米的珠穆朗玛峰的高度。P76#include<stdio.h>intmain(){

inti=0;floatx;

printf("请输入纸张的厚度:");

scanf("%f",&x);x=x*0.001;//将毫米转换为米

do{x=x*2;i=i+1;}while(x<8848);

printf("折叠次数=%d\n",i);return0;}数据描述:x:纸张厚度i:对折次数对折后纸张厚度运行结果:请输入纸张的厚度:1

折叠次数=24格式for(表达式1;表达式2;表达式3)语句P77for(循环变量赋初值;循环条件;循环变量增值)语句执行过程(1)先求解表达式1;(2)求解表达式2,若其值为真,则执行循环体语句,然后执行第(3)步;若为假,则结束循环,转到第(5)步;(3)求解表达式3;(4)转向步骤(2);(5)循环结束,执行for语句下面的一个语句。§5.3for语句表达式2循环体语句假真求解表达式1求解表达式3sum=5050举例求1~100的累加和。#include<stdio.h>intmain(){inti,sum;sum=0;for(i=1;i<=100;i++)sum=sum+i;printf(“sum=%5d\n”,sum);return0;}?1求1~55的累加和.2求1~100的奇数和.3求1~100的偶数和.for(表达式1;表达式2;表达式3)语句说明三个表达式都可以省略。表达式2循环体语句假真求解表达式3表达式1省略需在循环体外赋初值循环体语句求解表达式1求解表达式3表达式2省略恒真循环表达式2循环体语句假真求解表达式1表达式3省略两种情况?结果?说明1i=1;for(;i<=10;i++)sum=sum+i;2for(i=1;

;i++)sum=sum+i;?3for(i=1;i<=10;){sum=sum+i;i++;}for(i=1;i<=10;i++)sum=sum+i;表达式1可以省略,但其后的分号不可以省略。没有循环结束条件,构成了死循环for(i=1;i<=10;i++)sum=sum+i;说明45for(;;)sum=sum+i;6表达式1和表达式3可以是与循环变量无关的表达式。for(;i<=10;){sum=sum+i;i++;}7表达式2一般是关系表达式,也可以是数值或字符表达式。while(i<=10){sum=sum+i;i++;}while(1)sum=sum+i;表达式1和表达式3可以同时省略,此时等同于while语句。for(sum=0,i=1;i<=100,i++)sum=sum+i;例建议:for语句中只放与循环控制有关的语句。说明:①for(i=0;(c=getchar())!=′\n′;i+=c);

在表达式2中先从终端接收一个字符赋给c,然后判断此赋值表达式的值是否不等于′\n′(换行符),如果不等于′\n′,就执行循环体。注意:此for语句的循环体为空语句,把本来要在循环体内处理的内容放在表达式3中,作用是一样的。可见for语句功能强,可以在表达式中完成本来应在循环体内完成的操作。说明:②for(;(c=getchar())!=′\n′;)

printf(″%c″,c);

for语句中只有表达式2,而无表达式1和表达式3。其作用是每读入一个字符后立即输出该字符,直到输入一个“换行”为止。请注意,从终端键盘向计算机输入时,是在按Enter键以后才将一批数据一起送到内存缓冲区中去的。运行情况:Computer↙(输入)Computer(输出)而不是Ccoommppuutteerr举例#include<stdio.h>intmain(){floatsum=0.0;

intn;

for(n=1;n<=30;n++)sum=sum+(float)n/(float)(n+1);

printf("sum=%5.2f\n",sum);return0;}例5.8:计算。格式表达式1,表达式2,…,表达式nP79说明1.逗号表达式常用于for循环语句中。2.并不是在所有出现逗号的地方都组成逗号表达式,如:int

a,b,c;scanf("%d%d%d",&a,&b,&c);含义从左到右,依次计算各表达式的值,最后一个表达式的值即为整个逗号表达式的值。逗号运算符和逗号表达式

思考是不是所有出现逗号的地方都组成逗号表达式。?举例例5.10若a=5,求下列表达式及经过运算后a的值:a=(3+2,7+8)a=2*5,a*3(a=3*5,a*4),a+5,a+=10结果:15结果:10结果:25格式while(表达式1){…if(表达式2)break;

…}举例

…...sum=0;for(i=1;i<=10;i++){if(i>5)break;sum=sum+i;}

printf(“sum=%5d\n”,sum);…...while(表达式1){…if(表达式2)conitue;

…}结束整个循环结束本次循环

…...sum=0;for(i=1;i<=10;i++){if(i<=5)continue;sum=sum+i;}

printf(“sum=%5d\n”,sum);…...§5.4break和continue语句举例例5.11分析下面程序的运行结果。结束整个循环#include<stdio.h>intmain(){

inti=0,a=0;

while(i<20){if(i%10==0)break;elsei++;}i+=11;a+=i;

printf("%d\n",a);return0;}

ii%10第1次执行循环00条件表达式i%10==0成立,执行break语句,跳出循环运行结果:11举例例5.12:输出100以内能被7整除的最大数。结束整个循环#include"stdio.h"intmain(){

intn;

for(n=100;n>=1;n--)if(n%7==0){printf("100以内能被7整除的最大数为:“);

printf("%d\n",n);

break;}return0;}

nn%7第1次执行循环1002第2次执行循环

99

1第3次执行循环980第4次执行循环时条件表达式n%7==0成立,执行break语句,跳出循环运行结果:100以内能被7整除的最大数为:98举例例5.13:分析下面程序的运行结果。结束本次循环#include"stdio.h"intmain(){

inti=0,s=0;do{if(i%2)//n为奇数

{i++;continue;}i++;s+=i;}while(i<7);

printf("%d\n",s);return0;}

ii%2i++scontinue

是否执行第1次执行循环0011否第2次执行循环1

121是第3次执行循环2034

否第4次执行循环3144

是第5次执行循环4059否第6次执行循环5169是第7次执行循环60716否此时条件表达式1<7不成立,结束循环运行结果:16#include<stdio.h>intmain(){

inti;for(i=1;i<=5;i++){ if(i>3)break; if(i%2)printf("*"); elsecontinue;

printf("#"); }

printf("$\n");return0;}分析如下程序的输出结果:

*#*#$举例举例把100~200之间的能被13整除的数输出。

#include"stdio.h"

intmain()

{

intn;

for(n=100;n<=200;n++)

{

if(n%13!=0)

continue;

else

printf("%d",n);

}

printf("\n");

return0;

}运行结果:104117130143156169182195说明:当n不能被13整除时,执行continue语句,结束本次循环(即跳过printf函数语句),只有n能被13整除时才执行printf函数。结束本次循环1、三种循环语句在处理循环问题时,一般可以相互替代。2、对于循环次数固定的问题,用for语句实现比较简单。3、对于循环次数不确定的问题,可用while语句或do-while语句实现。4、while语句:先判断,后执行。

do-while语句:先执行,后判断。§6.7几种循环语句的比较概念一个循环体内又包含另一个完整的循环结构,称为循环嵌套。举例例5.15马克思曾经做过这样一道趣味数学题:有30个人在一家小饭馆里用餐,其中有男人、女人和小孩。每个男人花3先令,每个女人花2先令,每个小孩花1先令,共花去50先令。问男人、女人和小孩各几人(男人、女人和小孩均存在)?P83#include"stdio.h"intmain(){int

man,women,child;

for(man=1;man<29;man++)

for(women=1;women<=29-man;women++) {child=30-man-women;

if(man*3+women*2+child*1==50)

printf("man=%-6dwowen=%-6dchild=%-6d\n",man,women,child);}return0;}§5.5循环嵌套男人人数,最多28人女人人数,29-man小孩人数=30-man-women运行结果:man=1women=18chile=11man=2women=16chile=12man=3women=14chile=13man=4women=12chile=14man=5women=10chile=15man=6women=8chile=16man=7women=6chile=17man=8women=4chile=18man=9women=2chile=19举例例5.16打印乘法口诀表。#include"stdio.h"intmain(){inti,j,result;for(i=1;i<=9;i++){for(j=1;j<=9;j++){result=i*j;//计算i行j列上的元素值

printf("%d*%d=%-3d\t",i,j,result);}printf("\n");}return0;}

resulti=1,j=11*1j=21*2j=31*3

j=91*9i=2,j=12*1j=22*2

┇j=92*9……i=9,j=19*1j=29*2┇j=99*91*1=11*2=2…1*9=92*1=22*2=4…2*9=18…9*1=99*2=18…9*9=81

124369481216#include<stdio.h>intmain(){

int

i,j;for(i=1;i<=4;i++)

{for(j=1;j<=i;j++)printf(“%4d”,i*j);

printf(“\n”);

}

return0;}思考1#include<stdio.h>intmain(){

inti,j;for(i=1;i<=4;i++)

{for(j=1;j<=5-i;j++)printf(“%4d”,i*j);

printf(“\n”);

}

return0;}思考2

1234246364#include<stdio.h>intmain(){

inti,j;for(i=1;i<=4;i++)

{for(j=1;j<=4-i;j++)printf(“%4c”,’‘);for(j=5-i;j<=4;j++)printf(“%4d”,i*j);

printf(“\n”);

}return0;}思考34686912481216#include<stdio.h>intmain(){

inti,j;for(i=1;i<=4;i++)

{for(j=1;j<=i-1;j++)printf(“%4d”,’‘);for(j=i;j<=4;j++)printf(“%4d”,i*j);

printf(“\n”);

}return0;}思考4

123446891216举例例5.17求Fibonacci数列的前40个数。按每行4个进行输出。#include"stdio.h"intmain(){

intn;longintf1,f2;f1=1;f2=1;printf("%10d%10d",f1,f2);

for(n=1;n<=19;n++){if(n%2==0)

printf("\n");f1=f1+f2;f2=f2+f1;printf("%10d%10d",f1,f2);}

printf("\n");return0;}特点:第1、2个数为1、1。从第三个数开始,该数是其前面两个数之和。F1=1(n=1)F2=1(n=2)Fn=Fn-1+Fn-2(n>=3)

1123581321345589144……§5.8程序举例求Si=a+aa+aaa+……+的值。如a=5,i=3时,即求表达式5+55+555的值。a和i由键盘输入。举例#include"math.h"#include"stdio.h"intmain(){intj,i,a,s=0;

printf("请输入a和i的值:\n");

scanf("%d%d",&a,&i);longintsum=0

for(j=1;j<=i;j++){s=s+a*(int)pow(10,(j-1));sum=sum+s;}

printf("SUM=%ld\n",sum);return0;}pow()函数:求xy程序显示:请输入a和i的值:用户输入:53并回车程序输出:SUM=615i:第i项n:第i项的分母t:第i项的值sum:和举例利用公式:sum=1+1/3+1/5+1/7+1/9…,求前10项的和。#include<stdio.h>#include<math.h>intmain(){

int

s,i,n;floatt,sum;i=0;n=1,sum=0,t=1.0;

while(i<10){sum=sum+t;n=n+2;t=1.0/n;i++;}

printf("sum=%.2f\n",sum);return0;}运行结果:sum=2.13举例利用公式sum=1-3+5-7+9-11…求前10项的和。#include<stdio.h>#include<math.h>intmain(){

int

s,i,sum,t,n;i=0;n=1,sum=0,t=1,s=1;

while(i<10){sum=sum+t;n=n+2;s=-s;t=s*n;i++;}

printf("sum=%d\n",sum);return0;}s:变化的符号i:第i项n:第i项的绝对值t:第i项的值sum:和运行结果:sum=-10举例利用公式:

/4=1-1/3+1/5-1/7+…求

的近似值,直到某一项的绝对值小于10-6为止。#include<stdio.h>#include<math.h>intmain(){

ints;floatn,t,pi;t=1;pi=0;n=1.0;s=1;

while((fabs(t))>1e-6)

{

pi=pi+t;n=n+2;s=-s;t=s/n;}pi=pi*4;

printf("pi=%10.6f\n",pi);return0;}思考:使用那一种循环控制语句?pi=1-1/3+…输出4*pis=1(-1)n=1,3,5,7…t=s/n运行结果:sum=3.141594举例输出101~200之间的全部素数。每行输出10个。#include<stdio.h>#include<math.h>voidmain(){

intm,k,i,n=0;for(m=101;m<=200;m=m+2){k=sqrt(m);for(i=2;i<=k;i++)if(m%i==0)break;if(i>=k+1)

{printf("%d",m);n=n+1;if(n%10==0)printf("\n");

}

}

printf("\n");}正常结束循环m不是素数例5.18用双重for循环打印出下列图形。P86

* *** ***** ******* ***** *** *

#include"stdio.h"intmain(){

int

i,j;

for(i=1;i<=4;i++)

{

for(j=1;j<=4-i;j++)

printf("");

for(j=1;j<=2*i-1;j++)

printf("*");

printf("\n");

}for(i=1;i<=3;i++)

{

for(j=1;j<=i;j++)

printf("");

for(j=1;j<=7-2*i;j++)

printf("*");

printf("\n");

}return0;}打印上三角(1-4行)打印下三角(1-3行)举例#include"stdio.h"intmain(){charch;

intletter=0,space=0,number=0,other=0;

printf("请输入一串字符");scanf("%c",&ch);

while(ch!='\n')

{if(ch>='a'&&ch<='z'||ch>='A'&&ch<='Z')letter++;elseif(ch=='')space++; elseif(ch>='0'&&ch<='9')number++; elseother++;

scanf("%c",&ch);}

printf("字符数=%d\n空格数=%d\n数字数=%d\n其它字符的个数=%d\n",letter,space,number,other);return0;}letter:字符个数space:空格个数number:数字个数other:其它字符个数例5.19例

输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。举例举例译密码。输入一行字符,输出其相应的密码。译码规律:将字母变成其后的第4个字母,非字母字符不变。#include<stdio.h>voidmain(){charc;while((c=getchar())!='\n'){if((c>'a'&&c<='z')||(c>'A'&&c<='Z')){

c=c+4;if((c>'Z'&&c<='Z'+4)||c>'z')c=c-26;

}

printf("%c\n",c);}}循环部分编程及上机要注意的问题:1、for循环的末尾不能有:for(i=0;i<10;i++);

2、循环控制变量在循环体内最好不要重新赋值:x=a;for(x=1;x<=n;x++)

sn=sn+x;x=x*10+a;3、注意循环中使用的{}m=a;for(x=1;x<=n;x++){sn=sn+m;m=m*10+a;}for(x=1;x<=n;x++){y=(pow(10,x)-1)*a/9

sn=sn+y;}4、countine的用法:当countine后面没有语句时,可以省略for(x=1,t=0;x<=n;x++){t=t+a;

sn=sn+t;a=a*10;}if(i%7==0)

printf(“%8d”,i);else

countine;注意一.选择题C语言程序的三种基本结构是顺序结构、选择结构和()。A.递归结构 B.转移结构C.循环结构 D.嵌套结构2.

下面程序段中while循环执行的次数是()。

intt=0;

while(t=1)t=t+1;A.无限次 B一次也不行C执行一次 D有语法错,不能执行3.以下程序的输出结果是()。

#include<stdio.h>

intmain(){inti,sum;for(i=1;i<6;i++)sum+=i;

printf("%d\n",sum);return0;}A.15 B.14 C.0 D.不确定作业及练习4.设x和y均为int型变量,则执行下面的循环后,x值为()。

for(y=1,x=1;y<=50;y++){

if(x>=10)break;if(x%2==1) {x+=5;continue;}x-=3;}

printf("%d",x);A.4 B.6 C.8 D.105.指出程序结束之时,i,j,k的值()。

#include"stdio.h"

intmain(){

inta=10,b=5,c=5,d=5;

inti=0,j=0,k=0;

for(;a>b;++b)i++;

while(a>++c)j++;dok++;

while(a>d++);return0;}A.i=5j=5k=6 B.i=5j=4k=6C.i=6j=5k=7 D.i=6j=6k=66.下面程序的输出是()。

#include<stdio.h>

intmain()

{inti,j;for(i=0,j=10;i<j;i+=2)j=j-1;printf("i=%d,j=%d\n",i,j);return0;

}A.i=8,j=6 B.i=8,j=5 C.i=8,j=7 D.i=8,j=87.若已有定义inti,j,k;执行语句scanf(“%d%d%2d”,&i,&j,&k);时的键盘输入为:

123<回车>456789<回车>所得的i,j,k的值分别为()。A.123,456和789 B.1,2和3C.123,456和78 D.1,4和788.

若已定义inti,x,则for(i=0,x=0;i<=9&&x!=5;i++,x++)控制的循环体执行()次。A.10 B.9 C.5 D.69.

若已定义a、b为整型变量,用scanf(“%d%d”,&a,&b);语句输入a、b的值时,不可以用()作为输入的分隔符。A., B.空格 C.回车 D.Tab10、执行下列程序的输出显示是()。

intmain()

{intx=1,y=2,z;z=x+++y;

printf(“%d%d%d\n”,x,y,z);return0;}A.223 B.123 C.224 D.13411.有以下程序段,其中x为整形变量:

x=0;

while(!x!=0)x++;一下选项中正确的是()。

A.

退出循环后x得值为0

B.

退出循环后x得值为1

C.while的控制表达是非法

D.

while循环执行无数次

12.表达式3&&6&&9的值为()。A.3 B.6 C.9 D.113.以下while循环中,循环体执行的次数是()。

k=1;while(--k)k=10;A.10次 B.一次也不执行 C.无限次 D.1次14.有以下程序段,其中t为整形变量:

t=1;

while(-1)

{t--;

if(t)break;

}

以下选项中叙述正确的是()。

循环1次也不执行 B.循环执行一次C.循环控制表达式不合法 D.循环执行两次15.有以下程序段,其中x为整形变量:

x=-1;do

{;}

while(x++);

printf(“x=%d\n”,x);

以下选项中叙述正确的是()。

程序错误 B.x=1 C.x=-1 D.x=01.下面程序的输出结果是________。#include"stdio.h"intmain(){

int

x,i;

for(i=1;i<=100;i++){x=i;if(++x%2==0)if(++x%3==0)if(++x%7==0)

printf("%d\n",x);}return0;}2.下面程序的输出结果是________。#include"stdio.h"intmain(){

int

i,k=19;

while(i=k-1){k-=3;if(k%5==0){i++;continue;}elseif(k<5)break;i++;}

printf("i=%d,k=%d\n",i,k);return0;}二.程序分析题3.下面程序的输出结果是________。#include"stdio.h"intmain(){int

i,j;floats;

for(i=6;i>4;i--){s=0.0;

for(j=i;j>3;j--)s=s+i*j;}

printf("%f\n",s);return0;}4.下面程序的输出结果是________。#include"stdio.h"intmain(){inta=10,b=0;

while(a!=0){--a;if(a%3!=0)continue;b++;

if(a<=4)break;}

printf("b=%d\n",b);return0;}5.下面程序的输出结果是________。#include<stdio.h>intmain(){int

i,k=19;

while(i=k-1){k-=3;if(k%5==0){i++;continue;}elseif(k<5)break;i++;

}printf("i=%d,k=%d\n",i,k);return0;}6.下面程序的输出结果是________。#include<stdio.h>intmain(){int

i,j;floats;

for(i=6;i>4;i--){s=0.0;

for(j=i;j>3;j--)s=s+i*j;}

printf("%f\n",s);return0}7.下面程序的输出结果是

。#include<stdio.h>intmain(){int

a,b;

for(a=1,b=1;a<=100;a++){if(b>=10)break;if(b%3==1){b+=3;continue;}}

printf(“%d\n”,a);return0;}8.下面程序的输出结果是

#include<stdio.h>

intmain(){intI=0;

for(I+=3;I<=5;I=I+2)switch(I%5){case0:printf(“*”);case1:printf(“#”);break;

default:printf(“!”);break;case2:printf(“&”);}return0;}9.当给x输入789时,下面程序段的输出结果是________。

intmain(){int

r,x;

printf(“Inputx:”);scanf(“%d”,&x);

while(x!=0){r=x%10;printf(“%d”,r);x=x/10;}return0;}10.下面程序段的输出结果是________。

intmain(){intx=2;

while(x--);

printf(“%d\n”,x);return0;}11.下面程序段的输出结果是________

intx=3;do{printf(“%3d”,x-=2);}while(!(--x));12.下面程序段的输出结果是________。

intn=0;

while(n++<=2);printf(“%d\n”,n);13.下面程序段的输出结果是________。

intk=10;

while(k=0)k=k-1;14.下面程序段的输出结果是________。

intx;

for(x=3;x<6;x++)printf((x%2)?(“**%d”):(“##%d\n”),x);15.下面程序段的输出结果是________。

intmain(){intx=2;

while(x--);

printf(“%d\n”,x);return0;}1.下面程序功能是打印100以内个位数为6且能被3整除的所有数。

#include<stdio.h>

intmain(){inti,j;for(i=0;⑴;i++)

{j=i*10+6;if(⑵)continue;

printf("%d,",j);}return0;}三、程序填空题2.下面程序的功能是求1至1000之间满足“用3除余2;用5除余3;用7除余2”的数,且一行只打印五个数。#include"stdio.h"intmain(){inti=1,j=0;do{if(⑴){printf("%4d",i);j=j+1;if(⑵)printf("\n");}i=i+1;}while(i<1000);return0;}3.下面程序的功能是计算正整数234的各位数字之和。

#include<stdio.h>

intmain(){int

n,sum=0;n=234;

while(n){sum+=n%10;n=(1);}

printf(“sum=%d\n”,sum);return0;}4.下面程序的功能是计算xy

#include<stdio.h>

intmain(){inti;doublex,y,z;

printf(“Input

x,y”);

scanf(“%f%f”,&x,&y);z=1;for(i=1;(1);i++)z=z*x;

printf(“z=%f\n”,z);return0;}1.输入一整数初始值,输出该初始值后的20个不能被3整除的自然数。四、编程题#include"stdio.h"intmain(){int

num,count=0;

printf("请输入初始数值num的值:\n");

scanf("%d",&num);

while(count<20)

{if(num%3==0)

{num++;continue;}else

{

printf("%d\t",num); count++; num++;

}

}return0;}2.鸡和兔一共有40只,脚共有100只,计算鸡兔各有多少只。#include"stdio.h"intmain(){int

chicken,rabbit;

for(chicken=1;chicken<40;chicken++)

{rabbit=40-chicken;

if(chicken*2+rabbit*4==100)

printf("鸡=%d\t兔=%d\t\n",chicken,rabbit);

}return0;}3.求1+(1+2)+(1+2+3)+…+(1+2+3+…+n)的值。#include"stdio.h"intmain(){ints=0,sum=0,i,n;

printf("请输入n的值:\n");

scanf("%d",&n);

for(i=1;i<=n;i++){s=s+i;sum=sum+s;}

printf("sum=%d\n",sum);return0;}4.打印出所有的“水仙花数”。所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数。例:153=13+53+33#include"stdio.h"intmain(){int

num,x,y,z;

for(num=100;num<1000;num++)

{x=num/100;y=num/10%10; z=num%10;

if(x*x*x+y*y*y+z*z*z==num)

printf("%d\n",num);

}return0;}5.输入两个正整数m和n,用辗转相除法求m和n的最大公约数,然后再求它们的最小公倍数。#include"stdio.h"intmain(){int

m,n,r,temp;

printf("请输入m和n的值:\n");

scanf("%d%d",&m,&n);

if(m<n)

{temp=m;m=n;n=temp;

}r=m%n;

while(r!=0)

{m=n;n=r;r=m%n;}

printf("最大公约数是%d\n",n);return0;}6.求100~200之间的素数,把它们按每行5个数全部显示出来,并给出素数的个数。#include<stdio.h>#include<math.h>intmain(){int

m,k,i,n=0;

for(m=101;m<=200;m=m+2)

{k=(int)sqrt(m);

for(i=2;i<=k;i++)

if(m%i==0)break;

if(i>=k+1)

{

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论