C程序设计第四章
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C语言
无锡润智图书有限公司
无锡润智图书有限公司制作
第四章
一、考试要求 理解
循环结构程序设计
掌握 for语句的执行过程 while语句的执行过程 Do while语句的执行 过程 循环嵌套的几种形式、 流程和功能
for语句的执行过程 while语句的执行过程 Do while语句的执行过程 循环嵌套结构的执行过程
无锡润智图书有限公司制作
(二)巩固练习 1、有如下程序 main( ) { int x=23; do { printf("%d",x--);}while(!x);} 该程序的执行结果是( B ) A、321 B、23 C、不输出任何内容 D、陷入死循环
无锡润智图书有限公司制作
54321 。 【问题3】以下程序的输出结果是__________ # include<stdio.h> main() { int n=12345,d; while(n!=0) { d=n% 10; printf("%d",d); n/= 10; } }
【思路分析】本题考查的重点是while循环的理解与 运用。若n不为O,则n对10进行模运算,并打印出 n%10的值,之后再进行n/一10运算,直至n为O时 结束循环。因此,依次输出54321。
无锡润智图书有限公司制作
5、以下程序中函数f的功能是在数组x的n个数(假定n个数互不相同 )中找出最大、最小数,将其中的数与第一个数对换,把最大的数与 最后一个数对换。请填空。 # include <stdio.h> void f(int x[],int n) { int p0,pl,i,j,t,m; i=j=x[0l; p0= pl=0; for(m=0;m<n;m++) { if(X[m]>i){i=x[m];p0=m;) else if(x[m]<j){j=x[m]; pl=“;) } t= x[p0]; x[p0]= x[n -1];x[n -1]=t; X[0] t; t=x[p1];x[p1]= x[O] ; ______= } main() { int a[10],u; for(u=0;u<10;u++)scanf(”%cf,,&a[u]); f(a,10); for(u= O;u<10;u++) printf(“%f,a[u]); printf("\n"); 无锡润智图书有限公司制作 }
无锡润智图书有限公司制作
【问题2】有以下程序: # include <stdio. h> main() { int s[12]={1,2,3,4,4,3,2,1,1,l,2,3),c[5]={O},i; for(i=O;i<12;i++) c[s[i]]++; for(i=l;i<5;i++) printf(“%d”,c[i]); printf(“\n"); ) C 。 程序的运行结果是____ A. 12 3 4 B.2344 C.4332 D.112 3 【思路分析】程序中定义了两个数组s和c,数组c中有5个元 素,每个元素的初始值为O;数组s中有12个元素,包含4个 “1”,3个“2”,3个“3”,2个“4”。第一个for语句中,用 s[i]作为c数组的下标,用于统计s[i]中相同数字的个数,同 时将统计的结果放在以该数字为下标的c数组中。第二个for 语句用于将c数组中a[1]~a[4]4个元素输出。
无锡润智图书有限公司制作
(二)巩固练习 1、语句while(!E); 中的表达式!E等价于_______ A 。 A)E==0 B)E!=1 C)E!=0 D)E==1
D 2、下面程序段的运行结源自文库是_______ 。 a=1;b=2; c=2; while(a<b) { t=a;a=b;b=t;c- -;} printf("%d,%d,%d",a,b,c);
无锡润智图书有限公司制作
第三节
用do-while语句构成的循环结构
课堂探析
无锡润智图书有限公司制作
(一)问题探析 【问题1】若变量已正确定义,有以下程序段: i=0: do printf(“%d” ,i); while(i++); printf(”%d\r,i); 其输出结果是_____ 。 B A)O,O B)O,1 C)1,1 D)程序进入无限循环 【思路分析】为本题考查的重点是do-while用法。do-while 循环是先执行循环体中的语句,然后再判断while中的条件 是否为真,如果为真(非零)则继续循环;如果为假,则终 止循环。因此,do-while循环至少要执行一次循环语句。
break和continue语句在循 环体中的作用
break语句和continue 语句的一般形式和功能
无锡润智图书有限公司制作
二、课堂探析
(一)问题探析
(二)巩固练习
(三)课堂总结
无锡润智图书有限公司制作
第一节
for语句构成的循环结构
课堂探析
无锡润智图书有限公司制作
(一)问题探析
【问题1】以下程序段中的变量已正确定义 for(i=0;i<4;i++,i++) for(k=l;k<3;k++); printf(“*”); D 。 程序段的输出结果是_____ A)****** B)**** C)** D)* 【思路分析】本题考查for循环语句中嵌套for循环语句的 情况。由于第一个for语句没有具体的执行语句,故当i-O 时,k-l时,执行一次语句printf(”*”);,程序便会跳出 整个循环,故运行结果为一个星号。
无锡润智图书有限公司制作
【问题2】有以下程序: # include <stdio. h> main() { int a=1,b=2; while(a<6) {b+=a;a+=2;b%=10;} printf(”%d,%d\n”,a,b); } B 。 程序运行后的输出结果是____ A) 5,11 B) 7,1 C) 7,11 D) 6,1 【思路分析】 第一次循环,a=l,b=b+a=3;a=a+2=3;b=b%10=3; 第二次循环,a=3,b=b+a=6;a=a+2=5; b=b%10=6; 第三次循环,a=5,b=b+a=ll; a=a+2=7.b=b%10=1; 结束循环;
无锡润智图书有限公司制作
(三)课堂总结 1、while语句的一般形式为: while(表达式) 循环语句; 2、while循环的执行过程 while循环的执行过程是:计算while后表达式的值,当 值为非零时,执行循环体中的语句;当值为零时,退出 while循环。 3、特别注意:进入while循环后,一定要有能使此表达式 的值变为O的操作,否则,循环将会无限制地进行下去, 即进入死循环。在程序设计中,这个是不允许出现的。
无锡润智图书有限公司制作
【问题3】有以下程序: main() (int k=5,n=0; do { switch(k) { case l: case 3:n+=1;k--;break; default:n=0;k--; case 2: case 4:n+=2;k--;break; } printf(”%d”,n); } while(k>0&&n<5); } 程序运行后的输出结果是_______。 A) 235 B) 0235 C) 02356 D) 2356
无锡润智图书有限公司制作
(二)巩固练习 B 1、对于for(表达式1;;表达式3)可理解为_______ A. for(表达式1;0;表达式3) B. for(表达式1;1;表达式3) C. for(表达式1;表达式1;表达式3) D. for(表达式1;表达式3;表达式3) 2、以下程序的输出结果是_________. D Main( ) { int x; for(x=3;x<6;x++) printf((x%2)?(“**%d”):(“##%d\n”),x); } A.**3 B.##3 C.##3 D.**3##4 ##4 **4 **4##5 **5 **5 ##5
A)1,2,0
B)2,1,0
C)1,2,1
D)2,1,1
无锡润智图书有限公司制作
3、若有以下程序段,且变量已正确定义和赋值: for(s=1.0,k=l;k<=n;k++) s=s+1.0/(k*(k+1)); printf(”s=%f\n\n”,s); 请填空,使下面程序段的功能与之完全相同: S=1.0;k=l; while( k<=n ) { s=s+1.0/(k*(k+1)); k++ ; } printf(”s=%f\n\n”,s);
无锡润智图书有限公司制作
3、以下程序段中的变量已正确定义 for(i=0;i<6;i++,i++) for(k=l;k<4;k++); printf(“*”); 程序段的输出结果是______ D 。 A.****** B.**** C.** D.* 4、有以下程序: # include<stdio. h> main() { int f,fl,f2,i; fl=0;f2=1; printf(”%d%f,fl,f2); for(i=3;i<=5;i++) { f= fl+ f2; printf(“%r,f); f1=f2;f2=f; } printf(”\n"); } 01123 。 程序运行后的输出结果是__________
无锡润智图书有限公司制作
第二节
用while语句构成的循环结构
课堂探析
无锡润智图书有限公司制作
【问题1】若有以下程序: main() { int y=10; while(y- -); printf(“y=%d\n”,y); } 程序运行后的输出结果是____ B 。 A) y=0 B) y= -1 C) y=l D) while构成无限循环 【思路分析】while语句一般形式为: while(表达式)语句; 其语句先判断表达式,后执行语句。 而表达式y- -先返回y的当前值,再 进行-1运算。
无锡润智图书有限公司制作
【问题2]以下程序运行后的输出结果是____ 5 。 # include <stdio. h> main() { int a=l,b=7; do { b= b/2; a+=b; } while (b>l); printf(”%d\n”,a); } 【思路分析】本题主要考查do-while语句,它先执行一 次指定的循环体语句,然后判别表达式,当表达式的值 为非零(“真”)时,返回重新执行循环体语句,如此 反 复,直到表达式的值等于O为止,此时循环结束。
无锡润智图书有限公司制作
【思路分析】do-while语句的特点是先执行循环体, 然后再判断循环条件是否成立,当循环条件的值为 O时循环结束。本题中执行switch语句,寻找与5匹 配的case 5分支,没有寻找到则执行default后的语 句,n-0,k的值变为4,继续执行switch语句,寻 找与4匹配的case 4分支,找到后开始执行其后的 语句“n+ =2;k--;”,n的值为2,k的值变为3, 遇到break语句跳出该switch语句体。执行print语 句输出2;此时n=2,k=3依旧满足do-while循环条 件,将用同样的方式再次执行switch语句,直到n5时不再满足do-while循环条件退出所有的循环。 答案:A
(三)课堂总结 1、for语句的一般形式为: for(表达式1;表达式2;表达式3) {循环体;} 2、for语句的执行过程:先求解表达式1,再求解表达式 2,如果其值为真,则执行for循环体,然后求解表达式3, 再去判断表达式2的值是否为真,则执行for循环体,然后 求解表达式3,……以些类推,直到表达式2的值为假,则 结束循环,转去执行for语句下面的一个语句。 3、for循环适用于已知循环次数的情况。
无锡润智图书有限公司制作
【问题4】有以下程序: # include <stdio.h> main() { int n=2,k=O; while(k++&&n++>2); printf(”%d%d\n”,k,n); ) 程序运行后的输出结果是____ D 。 A)0 2 B)1 3 C)5 7 D)1 2 【思路分析】本题考查逻辑运算,在进行逻辑与运算时, 若“&&”的左边运算结果已经为O,则“&&”右边的表达 式将不再进行计算,结果总为O。本题:在while语句的 表达式中由于k=0,所以只进行&&左边的运算,不进行 &&右边的运算,所以k的值为1,n的值仍为2。
无锡润智图书有限公司
无锡润智图书有限公司制作
第四章
一、考试要求 理解
循环结构程序设计
掌握 for语句的执行过程 while语句的执行过程 Do while语句的执行 过程 循环嵌套的几种形式、 流程和功能
for语句的执行过程 while语句的执行过程 Do while语句的执行过程 循环嵌套结构的执行过程
无锡润智图书有限公司制作
(二)巩固练习 1、有如下程序 main( ) { int x=23; do { printf("%d",x--);}while(!x);} 该程序的执行结果是( B ) A、321 B、23 C、不输出任何内容 D、陷入死循环
无锡润智图书有限公司制作
54321 。 【问题3】以下程序的输出结果是__________ # include<stdio.h> main() { int n=12345,d; while(n!=0) { d=n% 10; printf("%d",d); n/= 10; } }
【思路分析】本题考查的重点是while循环的理解与 运用。若n不为O,则n对10进行模运算,并打印出 n%10的值,之后再进行n/一10运算,直至n为O时 结束循环。因此,依次输出54321。
无锡润智图书有限公司制作
5、以下程序中函数f的功能是在数组x的n个数(假定n个数互不相同 )中找出最大、最小数,将其中的数与第一个数对换,把最大的数与 最后一个数对换。请填空。 # include <stdio.h> void f(int x[],int n) { int p0,pl,i,j,t,m; i=j=x[0l; p0= pl=0; for(m=0;m<n;m++) { if(X[m]>i){i=x[m];p0=m;) else if(x[m]<j){j=x[m]; pl=“;) } t= x[p0]; x[p0]= x[n -1];x[n -1]=t; X[0] t; t=x[p1];x[p1]= x[O] ; ______= } main() { int a[10],u; for(u=0;u<10;u++)scanf(”%cf,,&a[u]); f(a,10); for(u= O;u<10;u++) printf(“%f,a[u]); printf("\n"); 无锡润智图书有限公司制作 }
无锡润智图书有限公司制作
【问题2】有以下程序: # include <stdio. h> main() { int s[12]={1,2,3,4,4,3,2,1,1,l,2,3),c[5]={O},i; for(i=O;i<12;i++) c[s[i]]++; for(i=l;i<5;i++) printf(“%d”,c[i]); printf(“\n"); ) C 。 程序的运行结果是____ A. 12 3 4 B.2344 C.4332 D.112 3 【思路分析】程序中定义了两个数组s和c,数组c中有5个元 素,每个元素的初始值为O;数组s中有12个元素,包含4个 “1”,3个“2”,3个“3”,2个“4”。第一个for语句中,用 s[i]作为c数组的下标,用于统计s[i]中相同数字的个数,同 时将统计的结果放在以该数字为下标的c数组中。第二个for 语句用于将c数组中a[1]~a[4]4个元素输出。
无锡润智图书有限公司制作
(二)巩固练习 1、语句while(!E); 中的表达式!E等价于_______ A 。 A)E==0 B)E!=1 C)E!=0 D)E==1
D 2、下面程序段的运行结源自文库是_______ 。 a=1;b=2; c=2; while(a<b) { t=a;a=b;b=t;c- -;} printf("%d,%d,%d",a,b,c);
无锡润智图书有限公司制作
第三节
用do-while语句构成的循环结构
课堂探析
无锡润智图书有限公司制作
(一)问题探析 【问题1】若变量已正确定义,有以下程序段: i=0: do printf(“%d” ,i); while(i++); printf(”%d\r,i); 其输出结果是_____ 。 B A)O,O B)O,1 C)1,1 D)程序进入无限循环 【思路分析】为本题考查的重点是do-while用法。do-while 循环是先执行循环体中的语句,然后再判断while中的条件 是否为真,如果为真(非零)则继续循环;如果为假,则终 止循环。因此,do-while循环至少要执行一次循环语句。
break和continue语句在循 环体中的作用
break语句和continue 语句的一般形式和功能
无锡润智图书有限公司制作
二、课堂探析
(一)问题探析
(二)巩固练习
(三)课堂总结
无锡润智图书有限公司制作
第一节
for语句构成的循环结构
课堂探析
无锡润智图书有限公司制作
(一)问题探析
【问题1】以下程序段中的变量已正确定义 for(i=0;i<4;i++,i++) for(k=l;k<3;k++); printf(“*”); D 。 程序段的输出结果是_____ A)****** B)**** C)** D)* 【思路分析】本题考查for循环语句中嵌套for循环语句的 情况。由于第一个for语句没有具体的执行语句,故当i-O 时,k-l时,执行一次语句printf(”*”);,程序便会跳出 整个循环,故运行结果为一个星号。
无锡润智图书有限公司制作
【问题2】有以下程序: # include <stdio. h> main() { int a=1,b=2; while(a<6) {b+=a;a+=2;b%=10;} printf(”%d,%d\n”,a,b); } B 。 程序运行后的输出结果是____ A) 5,11 B) 7,1 C) 7,11 D) 6,1 【思路分析】 第一次循环,a=l,b=b+a=3;a=a+2=3;b=b%10=3; 第二次循环,a=3,b=b+a=6;a=a+2=5; b=b%10=6; 第三次循环,a=5,b=b+a=ll; a=a+2=7.b=b%10=1; 结束循环;
无锡润智图书有限公司制作
(三)课堂总结 1、while语句的一般形式为: while(表达式) 循环语句; 2、while循环的执行过程 while循环的执行过程是:计算while后表达式的值,当 值为非零时,执行循环体中的语句;当值为零时,退出 while循环。 3、特别注意:进入while循环后,一定要有能使此表达式 的值变为O的操作,否则,循环将会无限制地进行下去, 即进入死循环。在程序设计中,这个是不允许出现的。
无锡润智图书有限公司制作
【问题3】有以下程序: main() (int k=5,n=0; do { switch(k) { case l: case 3:n+=1;k--;break; default:n=0;k--; case 2: case 4:n+=2;k--;break; } printf(”%d”,n); } while(k>0&&n<5); } 程序运行后的输出结果是_______。 A) 235 B) 0235 C) 02356 D) 2356
无锡润智图书有限公司制作
(二)巩固练习 B 1、对于for(表达式1;;表达式3)可理解为_______ A. for(表达式1;0;表达式3) B. for(表达式1;1;表达式3) C. for(表达式1;表达式1;表达式3) D. for(表达式1;表达式3;表达式3) 2、以下程序的输出结果是_________. D Main( ) { int x; for(x=3;x<6;x++) printf((x%2)?(“**%d”):(“##%d\n”),x); } A.**3 B.##3 C.##3 D.**3##4 ##4 **4 **4##5 **5 **5 ##5
A)1,2,0
B)2,1,0
C)1,2,1
D)2,1,1
无锡润智图书有限公司制作
3、若有以下程序段,且变量已正确定义和赋值: for(s=1.0,k=l;k<=n;k++) s=s+1.0/(k*(k+1)); printf(”s=%f\n\n”,s); 请填空,使下面程序段的功能与之完全相同: S=1.0;k=l; while( k<=n ) { s=s+1.0/(k*(k+1)); k++ ; } printf(”s=%f\n\n”,s);
无锡润智图书有限公司制作
3、以下程序段中的变量已正确定义 for(i=0;i<6;i++,i++) for(k=l;k<4;k++); printf(“*”); 程序段的输出结果是______ D 。 A.****** B.**** C.** D.* 4、有以下程序: # include<stdio. h> main() { int f,fl,f2,i; fl=0;f2=1; printf(”%d%f,fl,f2); for(i=3;i<=5;i++) { f= fl+ f2; printf(“%r,f); f1=f2;f2=f; } printf(”\n"); } 01123 。 程序运行后的输出结果是__________
无锡润智图书有限公司制作
第二节
用while语句构成的循环结构
课堂探析
无锡润智图书有限公司制作
【问题1】若有以下程序: main() { int y=10; while(y- -); printf(“y=%d\n”,y); } 程序运行后的输出结果是____ B 。 A) y=0 B) y= -1 C) y=l D) while构成无限循环 【思路分析】while语句一般形式为: while(表达式)语句; 其语句先判断表达式,后执行语句。 而表达式y- -先返回y的当前值,再 进行-1运算。
无锡润智图书有限公司制作
【问题2]以下程序运行后的输出结果是____ 5 。 # include <stdio. h> main() { int a=l,b=7; do { b= b/2; a+=b; } while (b>l); printf(”%d\n”,a); } 【思路分析】本题主要考查do-while语句,它先执行一 次指定的循环体语句,然后判别表达式,当表达式的值 为非零(“真”)时,返回重新执行循环体语句,如此 反 复,直到表达式的值等于O为止,此时循环结束。
无锡润智图书有限公司制作
【思路分析】do-while语句的特点是先执行循环体, 然后再判断循环条件是否成立,当循环条件的值为 O时循环结束。本题中执行switch语句,寻找与5匹 配的case 5分支,没有寻找到则执行default后的语 句,n-0,k的值变为4,继续执行switch语句,寻 找与4匹配的case 4分支,找到后开始执行其后的 语句“n+ =2;k--;”,n的值为2,k的值变为3, 遇到break语句跳出该switch语句体。执行print语 句输出2;此时n=2,k=3依旧满足do-while循环条 件,将用同样的方式再次执行switch语句,直到n5时不再满足do-while循环条件退出所有的循环。 答案:A
(三)课堂总结 1、for语句的一般形式为: for(表达式1;表达式2;表达式3) {循环体;} 2、for语句的执行过程:先求解表达式1,再求解表达式 2,如果其值为真,则执行for循环体,然后求解表达式3, 再去判断表达式2的值是否为真,则执行for循环体,然后 求解表达式3,……以些类推,直到表达式2的值为假,则 结束循环,转去执行for语句下面的一个语句。 3、for循环适用于已知循环次数的情况。
无锡润智图书有限公司制作
【问题4】有以下程序: # include <stdio.h> main() { int n=2,k=O; while(k++&&n++>2); printf(”%d%d\n”,k,n); ) 程序运行后的输出结果是____ D 。 A)0 2 B)1 3 C)5 7 D)1 2 【思路分析】本题考查逻辑运算,在进行逻辑与运算时, 若“&&”的左边运算结果已经为O,则“&&”右边的表达 式将不再进行计算,结果总为O。本题:在while语句的 表达式中由于k=0,所以只进行&&左边的运算,不进行 &&右边的运算,所以k的值为1,n的值仍为2。