1、C语言程序设计模拟试卷一一、 单项选择题(每题2分,共30分)1、下列有关C语言的叙述中错误的是()。A) C语句必须以分号结束 B) 任何一个C程序中有且只有一个主函数C) 复合语句在语法上可被看作一条语句 D) C程序中对数据的任何操作都可由运算符实现2、以下不能定义为用户标识符的是()。 A) MAIN B) _HJ C) 2ong D) LINE13、下列符号中用来表示C语言中的回车换行的是()。 A) r B) n C) b D) t4、如有如下定义:int a=1,则语句printf(“%d,%d”, a, +a);的运行结果为()。 A) 1, 1 B) 1, 2 C) 2, 2
2、 D) 2, 15、已知ch为字符型变量,下面表达式中正确的是()。 A) ch=xff B) ch=ff C) ch= ff D) ch=” ff ”6、以下能正确定义一维数组的是()。 A) int a5=0,1,2,3,4,5; B) int a5=”012345”; C) char a =”012345”; D) char a5=0,1,2,3,4,5;7、以下语句中能正确定义变量并赋初值的是()。 A) char c=65; B) float f=f+1.1; C) double x=12.3e3.6; D) int m=n=2.0;8、在执行下列程序时输入:1357924,则程序的
3、运行结果为()。 main( ) int x, y;scanf(“%2d%2d”,&x,&y);printf(“%2d”,x*y); A) 13 B) 1357 C) 74 D) 7419、执行下列程序段后输出的结果是()。 x = 9; while (x 7) printf(“*”); x- -; A) * B) * C) * D) *10、设char str110 = “ABCDE”, str210 = “xyz”;则执行语句 printf(“%d”, strlen(strcpy(str1, str2); 后的输出结果是() A) 9 B) 8 C) 5 D) 311、若用数组名作为函数调
4、用的实参,则传递给形参的是() A) 数组的首地址 B) 数组第一个元素的值 C) 数组中全部元素的值 D) 数组元素的个数12、在C程序中,若未在函数定义时说明函数类型,则函数默认的类型为( ) A)void B)double C)int D)char13、下面不能正确进行字符串赋值操作的语句是( ) A) char s5=ABCD; B) char s5; s=ABCD; C) char *s;s=ABCDEF; D) char *s=ABCD;14、设有说明int s5=1,3,5,7,9; int *p=s; 则下列表达式中值为3的是 ( ) A)+p B)+(*p) C) *(+p)
5、 D) *(p+=2)15、下面程序的输出结果是()int m=13;int fun( int x, int y) int m=3; return( x*y-m); main( ) int a=7,b=5;printf(“%dn”, fun(a,b)/m); A) 1 B) 2 C) 3 D) 10二、 判断(每空1分,共10分)1、C语言有三种结构化程序设计方法,分别为顺序结构、选择结构和循环结构。( )2、C语言规定:标识符应由字母、下划线和数字组成,且可以是上述字符的任意组合,其长度也是任意的。( ) 3、数组在定义时没有必要指定数组的长度,其长度可以在程序中根据元素个数再决定。( )4
6、、if语句有多种使用方法,其中if子句和else 子句也都可以单独使用。( )5、for语句作为循环控制语句时,从语法上将其括号内各个表达式都可缺省,但表达式内的分号却不可以却省。( )6、字符串是C语言中一种基本数据类型,字符串总是以n作为结束标志。( )7、在C语言中,程序的最小编译单位是源文件,最小功能单位是函数。( )8、在定义指针型变量时指定的基类型为该指针变量所能指向的变量类型。( )9、结构体与数组一样,属于构造类型数据,且在结构体中的各个成员的类型也可不同。( )10、在发生函数调用时,主被调函数中的参数可以是简单变量,也可以是数组名,当采用数组名作为参数时其数据传递方式为单向
7、值传递。( )三、 程序填空(每小题2分,共12分)1、以下程序可求出所有水仙花数(指3位正整数中各位数字立方和等于该数本身,如153=13+53+33),请填空。main( ) int x, y ,z, m; printf(“shui xian huan shu :n”); for(m=100;m1000;m+) x=m/100; y= (1) ; z=m%10; if( (2) ) printf(“%6d”,m ) ; 2、输入一个字符,如果是大写字母,则把其变成小写字母;如果是小写字母,则变成大写字母;其它字符不变。请补充()内缺省的内容。#include main( ) char ch
8、; ch=getchar( ); if (_(3)_) ch=ch+32; putchar(ch); else if(_(4)_) ch=ch-32; putchar(ch); else putchar(ch);3、以下程序使用递归法求n!, 请填空。main( ) int n, y; printf(“input a integer number”); scanf(“%d”,&n); y=(5); printf(“%d! = %6d”, n, y ); int fac(int n) int f; if(n0) printf(“n0” data error); f=-1; else if(n=0
9、|n=1) f=1; else f=(6) ; return( f ); 四、 读程序写出结果(本大题共5道小题,每小题4分,共20分)1、写出下面程序的执行结果 #include main( ) int a,b,x;x=(a=3,b=a-);printf(“x=%d,a=%d,b=%d”,x,a,b); 2、以下程序的运行结果是 #include main( ) int a = 2, b = 3, c ;c = a ;if ( ab ) c = 1 ;else if ( a = b ) c = 0 ; else c = -1 ; printf ( “%dn”, c ) ; 3、以下程序的运行
10、结果是 #include main() int i,j,k; for(i=1;i4;i+) for(j=1;j4-i;j+) printf( ); for(k=1;k=2*i-1;k+) printf(%c,A+i-1); printf(n); 4、以下程序的运行结果是 main( ) int a55,i, j ; for( i=0;i5;i+) ai0 =1; aii =1; for( i=2; i5; i+ ) for(j=1; ji ; j+ ) aij =ai-1j-1 + ai-1j; for(i=0; i5; i+) for( j=1; j=i; j+) printf(“%5d”,
11、aij); printf(“n”); 5、以下程序运行后,如果从键盘上输入ABCDE,则输出结果为 #include#includeint func(char str) int num =0; while(*(str+num)!=0) num+; return(num); main( ) char str10,*p=str; gets(p); printf(%dn,func(p); 五、 编程题(本大题28分,第一题8分,第二题9分,第三题11分)1、请编程实现下列分段函数的值: (1-x) 1/ 2 (x0) y= 1-x (x1) (1-x)2 (x1) 2、百钱百鸡问题:用100元钱买1
12、00只鸡,公鸡每只5元,母鸡每只3元,小鸡每3只1元,要求每种鸡至少买1只,试编程求各种鸡各买多少只。3、输入20位学生的成绩,分别用函数实现:(1)将20位学生的成绩按从高到低进行排名。(2)求所有成绩的平均分,并输出所有成绩中比平均分低的分数。参考答案:一、 单项选择题1、D2、C3、B4、B5、A6、C7、A8、D9、C10、D11、A12、A13、A14、B15、B二、判断题1、T2、F3、F4、F5、T6、F7、T8、T9、T10、F三、程序填空题1、(1) m/10%10(2) m=x*x*x+y*y*y+z*z*z2、(3) chA&cha&chz3、(5) fac(n)(6)n
13、*fac(n-1)四、读程序写结果1、 x=3,a=2,b=32、 -13、 A BBB CCCCC4、12133146415、5五、编程题1、#include#includevoid main()int x;double y;printf(Please input x value:);scanf(%d,&x);if(x=0)y=sqrt(1-x);else if(x=1)y=1-x;elsey=(1-x)*(1-x);printf(y=%fn,y);2、#includevoid main()int x,y,z;/*分别代表所买的公鸡数,母鸡数,小鸡数*/for(x=1;x99;x+)for(
14、y=1;y99;y+) for(z=1;z99;z+) if(x*5+y*3+z/3=100)&(z%3=0)&(x+y+z=100)printf(公鸡数为%d只,母鸡数为%d只,小鸡数为%d只n,x,y,z);3、#includevoid sort(int b20)int i,j;int temp;for(i=0;i20;i+)for(j=0;j20;j+)if(bibj)temp=bi;bi=bj;bj=temp;for(i=0;i20;i+)printf(%d ,bi);printf(n); double ave(int c20)double sum=0.0;int i;for(i=0;
15、i20;i+)sum=sum+ci;sum=sum/20;return sum;void main()int i;int a20;double pingjun;printf(Please input 20 students score!n);for(i=0;i20;i+)printf(Please input %d student score:,i+1);scanf(%d,&ai);for(i=0;i20;i+)printf(%d ,ai);printf(n); sort(a);pingjun=ave(a);printf(平均分为:%fn,pingjun);printf(比平均分低的有:n);
16、for(i=0;i20;i+)if(aipingjun)printf(%d ,ai);printf(n); C语言程序设计模拟试卷二一、填空题。(每空2分,共30分) 1.设有变量说明语句 int x=1,y=2;则执行下述printf语句的输出结果是_ _。 printf(%fn,1.0+x/y);2.执行下述程序 #include main() int x,y; scanf(%2d%*2s%1d,&x,&y); printf(%dn,x+y); 若从键盘输入 12345671 则程序的输出结果是_。3.以下程序的功能是:从键盘上输入若干名学生的成绩(百分制,可带小数,以输入负数或0为结束标
17、志),统计并输出最高成绩和最低成绩。请填空。 #include main() float x,amax,amin; scanf(%f,&x); amax=x; amin=x; while ( ) if (xamax) amax=x; else if (xamin) amin=x; scanf(%f,&x); printf(namax=%fnamin=%fn,amax,amin); 4.设n是整型变量,且已具有某正整数值。根据下述数学式求s的值并输出。可编写如下之程序段实现之。请填空。 int k; double s,d; s=0.0; d=1.0; K=0; do s=s+d; _ _; d=
18、1.0/(k*(k+1); while (k=n); printf(%fn,s);5.执行下述程序的输出结果是_ _。 #inclued main() int a6,i; for (i=0;i3)%5; printf(%3d,ai); printf(n); 6.执行下述程序时的输出结果是_ _。 #include main() int a=2,4,6,*ptr=&a0,x=8,y,z; for (y=0;y3;y+) z=(*(ptr+y)x)?*(ptr+y):x; printf(%dn,z); 7.执行下述程序的输出结果是_ _。 #include main() int a2=10,20,
19、30,40,50,60,(*p)2; p=a; printf(%dn,*(*(p+2)+1); 8.执行以下程序的输出结果是_ _。 #include main() int s,i,sum(); for (i=1;i=10;i+) s=sum(i); printf(s=%dn,s); sum(int k) int x=0; return (x+=k); 9.下述函数定义用来求出两个整数之和,并通过函数的模拟传地址调用,传回两整数相加之和值,请填空。 void add(int x,int y,_ _) *z=x+y; 10.函数func的功能是将整型变量x的值转换成二进制数,并将该二进制数的每一
20、位存入由整型指针b所指向的一维数组a,最低位存放于a0中,次低位存放于a1中,依此类推。请填空。 void func(int x,int *b) int r; do r=x%2; _=r; x/=2; while (x); 11.以下程序中函数invert实现将数组内所有数组元素的值逆置。比如,执行本程序将输出 10 9 8 7 6 5 4 3 2 1请填空。 #include main() int a10=1,2,3,4,5,6,7,8,9,10,i,n=10; invert(a,n-1); for (i=0;i10;i+) printf(%3d”,ai); printf(n); inver
21、t(int *s,int num) int *t,k; t=s+num; while (_ _) k=*s; *s=*t; *t=k; s+; t-; 12.若有以下定义和说明,则结构体变量w在内存中所占的字节数是_union aa float x; float y; char c6; ;struct st union aa v; float w5; double ave; w; 13.执行下述程序的输出结果是_ _。 #include struct str float x; char *y; *m; struct str group3= 95.0,Li, 82.5,Wang, 73.5,Su
22、n ; main() m=group; printf(%.lf,%sn,m-x,m-y); 14.下面的程序用来统计某文件文件中字符的个数。请填空。 #include #include main() FILE *fp; long num=0; if (fp=fopen(fnam.dat,r)=NULL) printf(Cant open this file!n); exit(0); while (_ _) fgetc(fp); num+; printf(num=%dn,num); fclose(fp); 15.执行下述程序后,输出结果为_ _。 #include #define FUN1(a,
23、b) a+b #define FUN2(a,b) a-b #define CAL(a,b) a*b+a+3 main() printf(%dn,CAL(FUN1(3,5),FUN2(4,5); 二、单项选择题。(每题1分,共20分)1以下不是c语言规定保留字的是( )。(A)float (B)integer (C)signed (D) unsigned2.设int型变量x有初始值3,则表达式x+*5/10的值是( )(A)0 (B)1 (C)2 (D)33.下述程序执行后的输出结果是( ) include main() int x=f; printf(%cn,a+(x-a+1); (A)g (
24、B)h (C)i (D)j4.设有程序#include main() int i,j; for (i=0,j=1;i100) break; (B)for (;);(C)int k=1000; do +k; while (k=10000);(D) int s=36; while (s);-s;6.假定a和b为int型变量,则执行下述语句组后,b的值为( )。 a=1; b=10; do b-=a; a+; while (b-0); (A)9 (B)-2 (C)-1 (D)87.设有变量说明语句 int a=1,b=0;则执行以下程序段的输出结果为( )。 switch (a) case 1: s
25、witch (b) case 0:printf(*0*);break; case 1:printf(*1*);break; case 2:printf(*2*);break; printf(n); (A)*0* (B)*0*2* (C)*0*1*2* (D)有语法错误8.以下合法的数组说明是( )。 (A)char a7=string; (B)int a5=0,1,2,3,4,5; (C)char a=string; (D)INT a=0,12,3,4,5;9.下述程序代码中有语法错误的行是( )。 int i,ia10,ib10; /*第1行*/ for (i=0;i=9;i+) /*第2行
26、*/ iai=0; /*第3行*/ ib=ia; /第4行*/ (A)第1行 (B)第2行 (C)第3行 (D)第4行10.若已定义 int a9,*p=a;并在以后的语句中未改变p的值,则不能表示a1地址的表达式是( )。(A)p+1 (B)a+1 (C)a+ (D)+p11.若有下述说明和语句 int *pp,*p,a=10,b=20; pp=&p; p=&a; p=&b; printf(%d,%dn,*p,*pp);则输出结果是( )。 (A)10,10 (B)10,20 (C)20,10 (D)20,2012.执行下述程序后的输出结果是( )。 #include func(int a)
27、 int b=0; static int c=3; a=c+,b+; return (a); main() int a=2,i,k; for (i=0;i2;i+) k=func(a+); printf(%dn,k); (A)3 (B)0 (C)5 (D)413.执行下述程序的输出结果是( )。 #include main() int aa33=2,4,6; int i,*p=&aa00; for (i=0;i2;i+) if (i=0) aaii+1=*p+1; else +p; printf(%d,*p); printf(n); (A)23 (B)26 (C)33 (D)3614.读下面的
28、程序,正确的输出结果是( )。 #include static int a=50; void f1(int a) printf(%d,a+=10); void f2(void) printf(%d,a+=3); void main() int a=10; f1(a); f2(); printf(%dn,a); (A)60,63,60 (B)20,23,23 (C)20,13,10 (D)20,53,1015.执行下述程序的输出结果是( )。 #include int power(int x,int y); main() float a=2.6,b=3.4; int p; p=power(int
29、)a,(int)b); printf(%dn,p); int power(int x,int y) int i,p=1; for (i=y;i0;i-) p=p*x; return (p); (A)8 (B)9 (C)27 (D)8116.已知函数scopy的定义如下 void scopy(char *s,char *t) while (*s+=*t+); 则该函数的功能是( )。(A)串复制 (B)求串长度 (C)串比较 (D)串反向17.执行下述程序的输出是( )。 #include void main() struct complex int re; int im; ; struct c
30、omplex cp3=2,5,4,7; cp2.re=cp0.re+cp1.re; cp2.im=cp0.im+cp1.im; printf(%d %dn,cp2.re,cp2.im); (A)7 11 (B)6 12 (C)9 9 (D)12 618.执行下述程序的输出结果是( )。 #include main() union int k; char i2; *s,a; s=&a; s-i0=0x39; s-i1=0x38; printf(%xn,s-k); (A)cccc3839 (B)3938 (C)380039 (D)39003819.有以下程序,则结果为 。struct abc in
31、t a, b, c; ;main() struct abc s2=1,2,3,4,5,6; int t; t=s0.a+s1.b;printf(“%d n”,t);A) 5 B) 6 C) 7 D) 820.以下程序for语句循环体中printf语句执行次数是( )。 #include #define N 2 #define M N+1 #define NUM (M+1)*M/2 main() int i; for (i=1;i=NUM;i+) printf(%dn,i); (A)5 (B)6 (C)8 (D)9三、程序分析题(每题5分,共30分)1.阅读程序,写出执行该程序的输出结果。 #include main()