C语言答案解析.doc_第1页
C语言答案解析.doc_第2页
C语言答案解析.doc_第3页
C语言答案解析.doc_第4页
C语言答案解析.doc_第5页
已阅读5页,还剩29页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

C语言模拟题答案一、选择题:1、下列哪一个选项不是结构化程序三种基本结构的共同特点:D:有分支结构2、设int a,b,c;执行表达式a=b=1,a+,b+1,c=a+b-后,a,b和c的值分别是:B:2,0,33、若整型变量A、B、C、D中的值依次为:1、4、3、2。 则条件表达式DB?A:C 的值为:A:14、表示数学中的关系 xyz,在C语言中所对应的表达式是:B:(x y) & (y z)5、在C语言中,设x为int型变量,则执行以下语句后,x的值为x=10; x=x+- -x;:C:186、在C语言中,执行下面语句后,输出的结果是int x=10,y=3; printf(%dn,y=x/y);C:37、在C语言中,假定所有变量均已正确说明,下列程序段运行后x的值是a=b=c=0;x=99;if(!a) x=9;else x=3;B:98、在C语言中,执行语句:for (i=1; i0 ) fc *=x; y-; return fc; 的功能是:A:求x的y次方12、对两个静态字符数组A和B进行如下初始化。 static char A=ABCDEF; static char B=A,B,C,D,E,F; 则下列叙述正确的是:D:A数组长度比B数组长13、对于for(表达式1;表达式3)可理解为:B:for(表达式1;1;表达式3)14、C语言中,FILE结构指针变量名stdin代表哪类文件。D:标准输入15、下列循环体执行( )次k=70; while(k=0) k-=1;D:0次16、有以下程序 #define P 3 void F(int x)return(P*x*x); main() printf(%dn,F(3+5); 程序运行后的输出结果是D:编译出错17、在一个源程序文件中定义的全局变量的有效范围为C:从定义处开始到该源程序文件结束18、有以下程序main() int p3=11,12,13,i=0,j=0; while(i+2) if(pi%2) j+=pi; printf(%dn,j); 程序运行后的输出结果是A:1319、以下能正确定义一维数组的选项是:D:char a5=0123;20、与定义char c=GOD;不等价的是D:char c3=GOD;21、对于下面程序段,执行的结果是char c5=a,b,0,c,0;printf(“%s”,c);B:ab22、设char Q=a, *p=&Q;下面说法中错误的是C:&p=&Q23、有以下程序main() int a=1,2,3,4,5,6,7,8,9,0,*p; for(p=a;p=a+9;p+)printf(%d,*p);) 程序运行后的输出结果是A:1,2,3,4,5,6,7,8,9,0,24、若有语句:int a=4, *p=&a;,下面均代表地址的一组选项是C:&a,p,&*p25、设有语句:int a10,*p =a;,则下面的语句中,不正确的是D:a=a+1;26、当int类型长度为2字节时,则类型unsigned int的值域范围为0至6553527、有如下程序:#include int b;void f() int t2; t2=b*3; b=100; void main() int a=2; b=4; f1();叙述正确的是:D:a是局部变量,b是全局变量。28、下面的for循环最多可执行_次。 for(x=0,y=0;(y!=99)&(x=0)&(C1=9)30、若有以下的说明,则对初值中字符a的引用方式为_。 static struct char ch; double x; char t; c22=a,35,b,c,45,d,a,86, m;D:c00.ch二、判断题:1、在C程序中,注释部分从/*开始,到*/结束。T2、switch语句中,case后面既可以跟常量,也可以跟已赋值的变量。F3、一个C语言程序中包含有多个函数时,按书写顺序从上到下执行各函数。F4、若一个函数的返回类型为void,则表示其没有返回值。T5、student_name、_name、name8和name_8都是合法标识符。T6、不对自动(auto)数组进行初始化,数值型数组隐含初值为0,字符数组隐含初值空字符0。F7、假设int型数组a的起始地址为2000,则元素a3的地址为:2000+42=2008。F8、结构化程序设计认为一个好程序主要应该是:程序短而紧凑。F9、如果知道整型变量a的地址是2000,可以直接用 int *pa=2000; 给指针变量pa赋值,使其指向变量a。F10、在C语言的if语句中,用作判断的表达式只能为逻辑表达式和关系表达式。F三、综合应用题1、计算下面公式的值。T=1/1!+1/2!+1/3!+1/m! 当m=10时的结果(按四舍五入保留3位小数)。(注:所有变量用float数据类型定义!)答案:1.7182、求10,2000之间能被2或3或5整除的数之和。改正程序中的错误(共3处错误)。答案:1466295#include void main()int sum;int i;for(i=10;i2000;i+)if(i%2=0 & i%3=0 & i%5=0)sum=sum+i;printf(sum=%dn,sum);3、/*下面程序的功能是:计算并输出500以内的最大的10个能被13或者17整除的自然数之和。请改正程序中的错误,并运行,最后给出程序运行的正确结果。(注:只有一处错误!)*/#include void main() int total=0, mc=1, k=500; int pm10,count=0; while( (k=2) & mc=10 ) if (k%13=0) | (k%17=0) pmmc = k; mc+; k-; for( k=1;k=10;k+ ) total += pmk-1; printf( %dn,total); 答案:46224、下列程序的功能是:求出以下分数序列的前30项之和,2/1,3/2,5/3,8/5,13/8,21/13,请改正程序中的错误,并运行修改后程序,给出程序结果(按四舍五入保留6位小数)。结果:48.840601。(有3处错误)#include #include main() int k; double s;long a,b,c; clrscr(); s=0.0; a=2; b=1; for(k=1;k=30;k+) s=s+a/b;c=a; a=a+b; b=c; printf(n 结果: %lfn, s); 5、/*求200到1000之间的双胞胎数的对数。双胞胎数:两素数差为2称为双胞胎数。例如227和229是一对双胞胎数,它们都是素数且差为2。*/#include int prime(int x) int k; for(k=2;kx;k+) if(_) break; if(k=x) return 1; else return 0;void main( ) int a,b,n=0; int prime(int x); for(a=200;a=998;a+) if(prime(a)=1) b=a+2; if(_) n+; printf( %d n,n);答案:20C语言程序设计题库及答案1、计算下面公式的值。T=1/1!+1/2!+1/3!+1/m! 当m=5时的结果(按四舍五入保留3位小数)。(注:所有变量用float数据类型定义!)答案:1.717#include float jc(float x)float jc=1,i;for(i=1;i=x;i+)jc=jc*i;return jc;void main()float jc(float x);float m,t=0,i; printf(Please Input:n);scanf(%f,&m); for(i=1;i=m;i+)t=t+1/jc(i);printf(t=%.3fn,t);2、程序填空:用*号输出字母C的图案。#include stdio.h#include conio.hmain()_printf( *n);_printf( *n);printf( *n); printf( *n);getch(); 3、8232和9678,它们的个、十、百、千各位数字之和是15的倍数,8+2+3+2=15,9+6+7+8=30。编写程序,求四位数的所有奇数中,这样的数(各位数字之和是15的倍数)的总和。(注:所有变量用long数据类型定义!) 答案:1533459#include long f(long x)long s=0;if(x%2!=0)while(x0)s=s+x%10;x=x/10;if(s%15=0) return 1;else return 0;else return 0;void main()long f(long x);long i,sum=0;for(i=1000;i=9999;i+)if(f(i) sum=sum+i;printf(sum=%ldn,sum);4、下面程序的功能是:计算并输出700以内的最大的10个能被13或者17整除的自然数之和。请改正程序中的错误,并运行,最后给出程序运行的正确结果。(注:只有一处错误!) 答案:6591#include void main() int total=0, mc=1, k=700; /改为:int total=0,mc=0,k=700; int pm10,count=0; while( (k=2) & mc=10 ) if (k%13=0) | (k%17=0) pmmc = k; mc+; k-; for( k=1;k=10;k+ ) total += pmk-1; printf( %dn,total); 5、求x = 1+1/5+1/7+1/9+的近似值,直到最后一项的绝对值小于10-5为止。#include #includemain( )int i;double x;x=1;i=5;dox=x+1/(double)i;i=i+2;while(fabs(1/(double)i)1e-5);printf(%.2lfn,x);输出:6.0586、计算如下公式的A20值。 A1=1, A2=1/(1+A1), A3=1/(1+A2), A4=1/(1+A3), .(按四舍五入保留10位小数)。答案:0.6180339850(1)可用递归: 1 n=1F(n)= 1/(1+f(n-1) n1#include double f(double n)double a;if(n=1) a=1;else a=1.0/(1+f(n-1);return a;void main()double f(double n);printf(f(20)=%.10lfn,f(20);(2)不用递归:#include void main()double i,c,a=1,b=1,x;for(i=1;i20;i+)c=a;a=b;b=c+b;x=a/b; printf(x=%.10lfn,x);7、求10,1600之间能被7整除的奇数之和。答案:90965(1)用函数可写成:#include int jx(int x)if(x%2!=0) return 1;else return 0;int f(int x)if(jx(x)if(x%7=0) return 1;else return 0;else return 0;void main()int jx(int x);int f(int x);int i,s=0;for(i=10;i=1600;i+)if(f(i) s=s+i;printf(s=%dn,s);(2)不用函数可写成:#include void main()int jx(int x);int f(int x);int i,s=0;for(i=10;i=1600;i+)if(i%2!=0 & i%7=0) s=s+i;printf(s=%dn,s);8、函数mystrlen(char *s)的功能是求字符串s的长度。请填空。int mystrlen(char *s)int num=0;while(*s+!=0 ) _ num+_;return (num);9、100,500之间同时满足除以7余5,除以5余3,除以3余1的整数之和。答案:1042#include void main() int i,sum=0; for(i=100;i=500;i+) if(i%7=5 & i%5=3 & i%3=1) sum=sum+i; printf(sum=%dn,sum);10、求100,999之间所有的素数的个数。答案:143#include int sushu(int x)int i;for(i=2;ix;i+)if(x%i=0) break;if(i=x) return 1;else return 0;void main()int sushu(int x);int i,num=0;for(i=100;i=999;i+)if(sushu(i)num+;printf(num=%dn,num);11、编写程序,求满足下列条件的所有四位数ABCD的个数,该四位数是8的倍数,且A+B=B+C,即第1位数加上第2位数等于第2位数加上第3位数。答案:110#include int f(int x)int a,b,c,d;a=x/1000;b=x/100%10;c=x/10%10;d=x%10;if(a+b=b+c) return 1;return 0;void main()int i,num=0;for(i=1000;i=9999;i+)if(i%8=0) if(f(i) num+;printf(num=%dn,num);12、数列1,2,1,4,7,12,23具有这样的特征,从第四项(也就是4)开始,每一项是前三项之和,4=1+2+1,7=2+1+4,12=1+4+7.。下列程序的功能是求出该数列前10项的和。请改正程序中的错误,并运行修改后的程序,给出程序结果。(注:只有一处错误!) 答案:311#include void main() long sum=0,a30=1,2,1; int k,j; for( k=3;k10;k+ ) ak = ak-1+ak-2+ak-3; for( j=1;j=10;j+ ) sum += aj; /改为:sum+=aj-1; printf( %ldn,sum); 13、 /*求1到2000之间的双胞胎数的对数。双胞胎数:两素数差为2称为双胞胎数。例如227和229是一对双胞胎数,它们都是素数且差为2。*/ 答案:61#include int prime(int x) int k; for(k=2;kx;k+) if(_x%k=0_) break; if(k=x) return 1; else return 0;void main( ) int a,b,n=0; int prime(int x); for(a=2;a=1998;a+) if(prime(a)=1) b=a+2; if(_prime(b)=1_) n+; printf( %d n,n);14、编写程序,统计200400之间的所有满足三个数字之积为42,三个数字之和为12的数的个数。答案:4#include void main()int i,num=0;int a,b,c;for(i=200;i=400;i+)a=i/100;b=i/10%10;c=i%10;if(a*b*c=42 & a+b+c=12)num+;printf(num=%dn,num);15、有30个学生一起买小吃,共花钱50元,其中每个大学生花3元,每个中学生花2元,每个小学生花1元,问大、中、小学生的人数分配共有多少种不同的解(去掉某类学生数为0的解)?答案:9#include void main()int num=0;int i,j,k; /i为大学生人数,j为中学生人数,k为小学生人数for(i=1;i=30;i+)for(j=1;j=30-i;j+)for(k=1;k=30-i-j;k+)if(i*3+j*2+k*1=50 & i+j+k=30)printf(%d,%d,%dn,i,j,k);num+;printf(num=%dn,num);16、爱因斯坦走台阶:有一台阶,如果每次走两阶,最后剩一阶;如果每次走三阶,最后剩两阶;如果每次走四阶,最后剩三阶;如果每次走五阶,最后剩四阶;如果每次走六阶,最后剩五阶;如果每次走七阶,刚好走完.求满足上述条件的最小台阶数是多少?答案:119#includevoid main() int x;for(x=1;x+) if (x%2=1)&(x%3=2)&(x%5=4)&(x%6=5)&(x%7=0) printf(%dn,x);break;17、求1000以内最大的10个素数的和。 答案:9664#include int prime(long n) long k; for(k=2;k=2;t-) if(_prime(t)_) total=total+t; num+; if(num=10)break; printf(n%ld,total);18、 /*求1!+2!+3!+.+7!,7!表示7的阶乘。*/ 答案:5913#include long jc( long x) long k,fac=1; for(k=1;_ k=x_;k+) fac *=k ; _return fac_;void main( ) long n,sum=0; long jc(long x); for(n=1;n=7;n+) _sum=sum+jc(n)_; printf(n%ld,sum);19、求10000以内所有完数之和,完数是指:一个数如果刚好与它所有的真因子(不包括该数本身)之和相等,如:6=1+2+3,则6就是一个完数。(注:所有变量用int数据类型定义!) 答案:8658#include int ws(int x)int i,s=0;for(i=1;ix;i+)if(x%i=0)s=s+i;if(s=x) return 1;else return 0;void main()int ws(int x);int i,sum=0;for(i=1;i=10000;i+)if(ws(i)sum=sum+i;printf(sum=%dn,sum);20、/*数列1,2,1,4,7,12,23具有这样的特征,从第四项(也就是4)开始,每一项是前三项之和,4=1+2+1,7=2+1+4,12=1+4+7.。下列程序先给出数列的第一项(1)、第二项(2)、第三项(1),再逐步计算其它项并保存在数组a中,最后求出该数列的第25项。请改正程序中的错误,并运行修改后的程序,给出程序结果。(注:只有一处错误!)*/答案:1323525#include #include #define N 30void main() long aN; int k; clrscr(); a0 = 1; a1 = 2; a2=1; for( k=3;k=20;k+ ) /改为:for( k=3;k=24;k+ ) ak = ak-1+ak-2+ak-3; printf( %ldn,ak-1); 21、/*求区间200,3000中所有回文数的和,回文数是正读与反读都是一样的数,如525,1551。*/ 答案:87970#include int hws(long n) long x=n,t=0,k; while(x0) k=x%10; t = t*10 + k; x=x/10; if( _t=n_) return 1; else return 0;void main( ) long k,s=0; int hws(long n); for(k=200; k=3000;k+) if(_hws(k)_) s=s+k; printf(n%ld,s);22、/*下面的程序是求表达式的值:s=1+1/3+(1*2)/(3*5)+(1*2*3)/(3*5*7)+.+(1*2*3*.*n)/(3*5*7*.(2*n+1)请将程序补充完整,并给出当n=25时,程序的运行结果(按四舍五入保留10位小数)。*/答案:1.5707963267#include double fun(int n) double s=1.0, t=1.0; int k; double rtn=1.0; for(k=1;k=n; k+) t = t*k; s = s*(2*k+1); rtn=rtn+t/s;_ return rtn;void main() double sum; _sum=fun(25);_ printf(n %.10lf,sum);23、已知:Sn=2/1+3/2+4/3+(n+1)/n, 求Sn不超过50的最大值(按四舍五入的方式精确到小数点后第三位)。答案:49.395#include double fun() double t=0,s=0; double n; for(n=1;n+) t=t+(n+1)/n; if(t50) break; s=t; return s;void main() printf(%.3lfn,fun();24、计算Y=X/1!-X3/3!+X5/5!-X7/7!+前20项的值(已知:X=2)。要求:按四舍五入的方式精确到小数点后第二位。答案: 0.91#include main( ) int i;double a,b,x,y;x=2;y=x;a=x;b=1;for(i=1;i=20;i+)a=-a*x*x;b=b*2*i*(2*i+1);y=y+a/b;printf(%.2lfn,y);25、若某正整数平方等于某两个正整数平方之和,称该正整数为弦数。例:32+42=52,则5为弦数,求131,200之间最小的弦数。答案:135#include int xs(int x)int i,j; for(i=1;ix;i+)for(j=1;jx;j+)if(i*i+j*j=x*x)return 1;return 0;void main( ) int i,j,x,flag=0;x=131; for(x=131;x=200;x+)if(xs(x)printf(%dn,x);break;26、已知X,Y,Z为三个正整数,且X2+Y2+Z2=252,求X+Y+Z的最大值。答案:43#include void main()int x,y,z,max,sum;max=0;for(x=1;x=25;x+)for(y=1;y=25;y+)for(z=1;zmax) max=sum;printf(max=%dn,max);27、猴吃桃:有一天小猴子摘下了若干个桃子,当即吃掉一半,还觉得不过瘾,又多吃了一个。第二天接着吃了剩下的桃子中的一半,仍不过瘾,又多吃了一个。以后每天都是吃尚存桃子的一半零一个。到第10天早上小猴子再去吃桃子时,看到只剩下一个桃子了。问小猴子第一天共摘下了多少个桃子。答案:1534#include void main()float x,i,t;for(x=1;x+)t=x;for(i=1;i10;i+)t=t-(t/2+1); if(t=1) break;printf(%fn,x);28、求1,50之间的所有整数能构成直角三角形的三边的组数。例如:3*3+4*4=5*5,它们构成直角三角形,所以3,4,5作为一组,但4,3,5视为跟3,4,5相同的一组。答案:20#include void main()int i,j,k,num=0;for(i=1;i=50;i+)for(j=i;j=50;j+)for(k=j;k=50;k+)if(i*i+j*j=k*k)num+;printf(%dn,num);29、15元钱换成1元、2元、5元的票面,问有多少种不同的兑换方法?输出所有的兑换方法。 答案: 18种#include void main()int i,j,k,num=0,t=0;for(i=0;i=15;i+)for(j=0;j=15;j+)for(k=0;k=15;k+)if(i*1+j*2+k*5=15)num+; t+;printf(%dn,num);30、用迭代法求x等于a开平方的正数值。迭代公式为:xn+1=1/2*(xn+a/xn),要求直到前后两次求出的x的差的绝对值小于10-5为止。A的值从键盘输入。#include #includemain( ) float x0,x,a; scanf(%f,&a); x=1; do x0=x; x=1.0/2*(x0+a/x0); while(fabs(x-x0)=1e-5); printf(%fn,x);31、求最大的水仙花数,所谓水仙花数,指的是一个三位数,其各个数字的立方之和等于该数。 答案:407#includeint flower(int n)int x=0,i,j,k;i=(n%10); j= (n/10%10);k=(n/100);x=i*i*i+j*j*j+k*k*k;if(x=n) return 1;else return 0;void main()int i,max=0;for(i=100;imax)max=i;printf(max=%dn,max);32、一球从100米的高度自由落下,每次落地后反跳回原高度的一半,再落下。求它在第10次落地时,共经过多少米?第10次反弹多高? 答案: 299.609375 0.097656分析:设x=100,距离之和s的初值s=100落地次数(i)123经过距离(s)1005025。s=s+x反弹距离(x)502525/2。x=x/2#includevoid main()float x,s=0;int i;x=100; s=100; for(i=1;i=10;i+)if(i10)s=s+x;x=x/2;printf(sum=%f,x=%fn,s,x);33、编写程序,完成如下功能,输入8个float类型的实数,分别求最大值和最小值,保留三位小数输出最大值和最小值。#includemain( )int i;float x,max,min;printf(Please input:);scanf(%f,&x);max=min=x;for(i=1;imax) max=x;elseif (xmin) min=x;printf(max=%.3f,min=%.3fn,max,min);34、编写程序输出如下字符图形: #includemain( )int i,j;for(i=11;i=1;i-)for(j=1;j=1; f(x)=0 如果 x=0 或 x=2 ;f(x)=(x-1)/(x-2) 如果 x0。(按四舍五入保留6位小数) 答案:65.223018#includefloat f(float x)float result;if (x=0 | x=2)result=0;else if (x=1)result=(x+1)/(x-2);else if (x0)result=(x-1)/(x-2);return result;void main()float i,s=0;for(i=-30;i=30;i+)s=s+f(i);printf(s=%.6fn,s);36、编写程序输出如下字符图形(最后一行19颗星):* * * * * * * * * * * * * * * * * * *#includevoid main()int i,j,k;for(i=1;i=9;i+)for(j=1;j=10-i;j+)printf( );for(k=1;k=2*i+1;k+)printf(*);printf(n);37、企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?#include main()double i;double bonus1,bonus2,bonus4,bonus6,bonus10,bonus;scanf(%lf,&i); bonus1=10*0.1;bonus2=bonus1+100000*0.075; bonus4=bonus2+200000*0.05; bonus6=bonus4+200000*0.03; bonus10=bonus6+400000*0.015; if(i=100000)bonus=i*0.1; else if(i=200000)bonus=bonus1+(i-100000)*0.075;else if(i=400000)bonus=bonus2+(i-200000)*0.05;else if(i=600000)bonus=bonus4+(i-400000)*0.03;else if(i=1000000)bonus=bonus6+(i-600000)*0.015;elsebonus=bonus10+(i-1000000)*0.01;printf(bonus=%lfn,bonus);38、计算下面公式的值。 T=1+1/(2*3)+1/(3*4)+1/(m*(m+1

温馨提示

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

评论

0/150

提交评论