C语言第三次模拟练习题部分解答

上传人:hs****ma 文档编号:507719790 上传时间:2024-01-15 格式:DOC 页数:20 大小:131.42KB
返回 下载 相关 举报
C语言第三次模拟练习题部分解答_第1页
第1页 / 共20页
C语言第三次模拟练习题部分解答_第2页
第2页 / 共20页
C语言第三次模拟练习题部分解答_第3页
第3页 / 共20页
C语言第三次模拟练习题部分解答_第4页
第4页 / 共20页
C语言第三次模拟练习题部分解答_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《C语言第三次模拟练习题部分解答》由会员分享,可在线阅读,更多相关《C语言第三次模拟练习题部分解答(20页珍藏版)》请在金锄头文库上搜索。

1、单项选择1. 题号:13334若有如下语句 int x=3; doprintf(%dn,x-=2);while(!(-x);则上面程序段_。A、输出的是1B、输出的是1和-2C、输出的是3和0D、是死循环答案:B解答:循环变量x初值为3. Do-while是先执行循环体,后判断条件。若条件为假,循环结束。条件为真,执行循环体。第一次循环:l 循环体printf(%dn,x-=2);是输出x的值。而x-=2 等价于x=x-2 = 3-2 =1。所以输出1l 条件是自增表达式与逻辑非表达式的综合。先计算- -x. 自增表达式- -x的值是x自减1后的值,为0.自增变量x的值是0. 条件!(- -x

2、)=!0=1.为真。继续执行循环体。第二次循环l 循环体printf(%dn,x-=2);是输出x的值。而x-=2 等价于x=x-2 = 0-2 =-2。所以输出-2l 条件是自增表达式与逻辑非表达式的综合。先计算- -x. 自增表达式- -x的值是x自减1后的值,为-3.自增变量x的值是-3. 条件!(- -x)=!(-3)=0.为假。循环结束。总结:输出1-2 2. 题号:13353下面程序的功能是在输入的一批正整数中求出最大者,输入0结束循环。请选择填空。#includevoid main() int a,max=0; scanf(%d,&a); while(_) if(maxa) ma

3、x=a; scanf(%d,&a); printf(%d,max);A、a=0B、aC、!a=1D、!a答案:B解答:题目中说输入0结束循环。它的另一个意思是输入的变量a的值不是0时就执行循环或者说a为真就执行循环,为假就结束循环。所以条件是a!=0或al 答案A a=0 a为假,即等于0时,0=0,为真,执行循环体。为真,即非0,则a=0的逻辑值为假。结束循环。总结:a为假执行循环体。为真,结束循环。l 答案C !a=1 非运算符!优先级高于比较运算符=。所以先计算!a,然后再判断是否和1相等。a为假时,!a值是真,与1恒等,逻辑值为1.a为真时,!a值是假,与1不等,逻辑值为0.所以它的含

4、义是a为假执行循环体。为真,结束循环。l 答案D 。!a的含义,是a为假执行循环体。为真,结束循环。 3. 题号:13357与下面程序段等价的是_。for(n=100;n=200;n+) if(n%3=0) continue; printf(%4d,n);A、for(n=100;n=200;n+) if(n%3=0) printf(%4d,n);B、for(n=100;(n%3)&n=200;n+) printf(%4d,n);C、for(n=100;(n%3)|n=200;n+) printf(%4d,n);D、for(n=100;n=200;n+) if(n%3) printf(%4d,n

5、); else continue; 答案:D解答:l 程序的含义:1) n=100;n=200;n+。 含义是循环变量n的初值为100,终值为200,步长为1.2) if(n%3=0) continue; 含义是若n是3的倍数,则结束此次循环,进入下一次循环。即后面的printf(%4d,n);不执行。直接执行步长加1.3) 若n不是3的倍数,则执行printf(%4d,n);,即输出n的值。且值占四列,右对齐。输出100-200中所有不是3的倍数的数。l 看四个答案:1) 答案A if(n%3=0) printf(%4d,n);的含义是n是3的倍数,则输出。与源程序的题意不符。2) 答案B

6、与关系表达式,两边的逻辑值均为1,结果才是真。若有一个为假,结果为假。(n%3)&n=200 n%3为真,同时n=200为真,则执行循环体,即输出变量n .n%3为真,说明n不是3的倍数时为真。(n%3)&n200,则条件为假,结束循环。所以,当n是3的倍数时,就结束。即n=102时,102%3=0,为假,就结束循环。不符合题意。3) 答案C (n%3)|n=200; 是或关系表达式。有一个为真,结果为真。全为假,结果为假。n%3 n是3的倍数时,如n=102,n%3为假,但n=102=200为真。所以102也要输出。不符合题意。4) 答案D if(n%3) printf(%4d,n); el

7、se continue; n%3为真时,输出。为假时,结束本次循环,步长加1,进入下一次循环。符合题意。4. 题号:13367下面程序的运行结果是_。#includevoid main() 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,x); A、2668 B、3981 C、4284 D、2870答案:D解答:l i=1;i=100;i+ 循环变量i初值为1,终值为100,步长为1l if(+x%2=0) if(+x%3=0) if(+x%7=0) 是分支嵌套。+x自增表达式的值是x+1.所

8、以 +x%2=0等价于(x+1)%2=0 x=x+1 以此类推 +x%3=0等价于(x+1)%3=0 x=x+1; +x%7=0等价于(x+1)%7=0 x=x+1;总结:x=i;若x+1能被2整除,x+2能被3整除,x+3能被7整除,则输出x的值。最后输出的x值是能被7整除的。l 1-100中能被7整除的数有100/7=14个,个位数的只有7。四个答案中第一个数字没有7。所以确定是有两个整数满足这样的条件。所以首先排除AB。因为答案A的26和答案B的39均不是7的倍数。其他的题目依次代入法解决即可。答案C 42%7=0 41%3!=0 所以不符合答案D 28%7=0 27%3=0 26%2=

9、0 正确 70%7=0 69%3=0 68%2=0 正确5. 题号:13344以下程序段运行的结果是_。for(y=1;y10;) y=(x=3*y,x+1),x-1);printf(x=%d,y=%d,x,y);A、x=15,y=14 B、x=12,y=13 C、x=27,y=27 D、x=y=27答案:A解答:y=1;y10; 循环变量y初值为1,终值为9,y值为10时结束循环。步长省略。若循环体中循环变量没有变化,则是死循环,没有结果。所以循环体中循环变化一定要发生变化。循环体:y=(x=3*y,x+1),x-1);将一个逗号嵌套表达式赋值给循环变量y。逗号表达式的规则是从左往右依次对每

10、个表达式进行计算,结果是最后一个表达式的结果。先计算(x=3*y,x+1)。第一次循环时,y=1,所以(x=3,4),结果是2;计算(x=3*y,x+1),x-1),((x=3,4),x-1)=(4,2)=2; 所以y=2. 210为真,进行第二次循环。y=(x=3*y,x+1),x-1)=((x=6,7),5)=5 510为真,进行第三次循环。y=(x=3*y,x+1),x-1)=((x=15,16),14)=14,1410为假,结束循环。此时x=15,y=14 ,答案选A6. 题号:13351有以下程序void main() int i=0,s=0; do if (i%2) i+; con

11、tinue; i+; s+=i; while(i7); printf(%dn, s);执行后输出结果是_。A、21 B、12 C、16 D、28答案:C解答:if (i%2) i+; continue; 若i不是2的倍数,则i自增1,然后结束此次循环,即后面的语句i+; s+=i;不执行,直接判断条件i7的真假。若i是2的倍数,则i自增1,同时进行累加求和。i1;n-) s=s+1/n; printf(%6.4fn,s);程序运行后输出结果错误,导致错误结果的程序行是_。A、printf(%6.4fn,s);B、for(n=10;n1;n-)C、s=s+1/n;D、s=1.0;答案:C解答:/

12、是算术运算符的除。它的规则是两端是整数,结果为整数。若有一个为小数,结果为小数。int n;n为整型。1/n结果为0. 所以s=s+1/n;结果永远为0.答案选CA、printf(%6.4fn,s); 输出结果占6列,保留四位小数。8. 题号:13355下面程序的运行结果是_。#includevoid main() int i,b,k=0; for(i=1;i=5;i+) b=i%2; while(b=1) k+;b-; printf(%d,%d,k,b);A、8,-1 B、8,-2 C、3,0 D、3,-1答案:C解答:找规律快速解法:b=i%2 i是偶数,b=0;i是奇数,b=1;whil

13、e(b=1) k+;b-; b是1,执行循环体,k自增1,b自减1。b是0,不执行循环体。综合:i是奇数,则k自增1,b自减1。因为每次循环,b值都要更新,所以b值只可能是0.i的范围是1-5,奇数有1,3,5,所以k自增3次,k初值为0,自增3次,值为3.所以选择C中规中矩的传统解法:1. 第一次循环: i=1,i=5为真,执行循环体。循环体有两个语句;语句 b=i%2=1%2=1 语句 while循环中,条件b=1为真,所以执行循环体:k=1,b=0; 条件0=b为假,结束循环。 执行步长i+,i等于22. 第二次循环:i=2,i=5为真。语句 b=i%2=2%2=0 语句 while循环中,条件0=1为假,结束循环。 执行步长i+,i等于33. 第三次循环: i=3,i

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 习题/试题

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号