C语言程序设计笔试模拟试题-答案.docx
C语言程序设计笔试模拟试题一、 选择题(每小题1.5分,共60分)1)C语言的基本数据类型包括( )。A)整型,实型,逻辑型 B)整型,实型,字符型C)整型,字符型,逻辑型 D)整型,实型,逻辑型,字符型2)以下( )组中的标识符都是合法的C语言用户标识符。A)a_10 B)CHAR C)_int D)signed3ab a#b day a3)"b"在内存中以( )个字节存放。A)1 B)2 C)3 D)不确定4)下述合法的C语言的字符常量是( )。A)A B)65 C)"A" D)'t'5)C语言中的函数( )。A)可以嵌套定义 B)不可以嵌套调C)可以嵌套调用,但不可以递归调用 D)嵌套调用和递归调用均可6)在一个C语言程序中( ):A) main函数必须出现在所有函数之前B) main函数可以在任何地方出现C) main函数必须出现在所有函数之后D) main函数必须出现在固定位置7)C语言中用于结构化程序设计的三种基本结构是( )。 A)顺序结构、选择结构、循环结构 B)if、switch、break C)for、while、do-while D)if、for、continue8)执行a=3*4,a+5;后a的值为( )。A)17 B)12 C)60 D)59)对于int x=12, y=8; printf (“%d%d%d”, !x, x | y, x&&y); 输出的结果是( )。 A)0 1 1 B)0 1 0 C)0 0 0 D)1 1 110)C语言中函数返回值的类型是由( )决定的。A)return语句中的表达式类型 B)调用该函数的主调函数类型C)调用函数时临时指定 D)定义函数时所指定的函数类型11)若用数组名作为函数调用时的实参,则实际上传递给形参的是( )。A)数组地址 B)数组的第一个元素值C)数组中全部元素的值 D)数组元素的个数12)下列各语句定义了数组,其中哪一个是正确的( )。A)int a5,b2,3; B)char no(30);C)int x; D)int x5=1,2,3;13)将整型变量a、b中的较小值为变量c赋值,下列语句中正确的是( )。 A)c= =(a<b)? a:b; B)c=if(a<b)a else b;C)c=(a<b)? a:b; D)(a<b)? c=a:c=b;14) 有以下程序段 int m=0,n=0; char c='a'scanf("%d%c%d",&m,&c,&n);printf("%d,%c,%dn",m,c,n);若从键盘上输入:10A10<回车>,则输出结果是( )。A)10,A,10 B) 10,a,10 C) 10,a,0 D) 10,A,015)有定义语句:int x, y;,若要通过scanf("%d,%d",&x,&y);语句使变量x得到数值11,变量y得到数值12,下面四组输入形式中,错误的是( )。 A)11 12<回车> B)1112<回车> C)11,12<回车> D)11,<回车>12<回车>16) 若有定义:int a=8,b=5,c;,执行语句c=a/b+0.4;后,c的值是( )。A) 1.4 B) 1 C) 2.0 D) 217)运行下列程序段后,i的结果是( )。 int i=10; switch(i) case 9: i+=1; case 10: i+=1; case 11: i+=1; default: i+=1; A)11 B)12 C)13 D)1418)下列程序输出结果是( )。 main() int i; for(i=1;i<=5;i+) if(i%2) printf("*"); else continue; printf("#"); printf("$n"); A)*#*#*#$ B)#*#*#*$ C)*#*#$ D)#*#*$19)下列条件语句中,功能与其他语句不同的是( )。A) if(a) printf("%dn",x); else printf("%dn",y);B) if(a=0) printf("%dn",y); else printf("%dn",x);C) if (a!=0) printf("%dn",x); else printf("%dn",y);D) if(a=0) printf("%dn",x); else printf("%dn",y);(20) 以下选项中,与k=n+完全等价的表达式是( )。A) k=n,n=n+1 B) n=n+1,k=n C) k=+n D) k+=n+121)已知小写字母a的ASCII码为97,对于int a=99, b=b; printf(“%c,%d”, a , b);的结果是( )。A) 99, b B)c, 98 C)99, 98 D)c, b22)下列程序正确的运行结果是( )。main() fun(int x,int y) int j=4,m=1,k; int m=0,i=2;k=fun(j,m); i+=m+1;printf("%d,",k); m=i+x+y;k=fun(j,m); return(m);printf("%dn",k); A)8,20 B)8,8 C)8,17 D)8,1623) 有以下程序main() int i=1,j=1,k=2;if(j+|k+)&&i+) printf("%d,%d,%dn",i,j,k);执行后输出的结果是( )。 A) 1,1,2 B) 2,2,1 C) 2,2,2 D) 2,2,324)执行以下程序段后的结果是( )。main() int a=-5; do printf("%2d",a-);while(!a);A)-5 B)-6 C)不打印任何内容 D)陷入死循环25) 有以下程序:main() int i=0,s=0;doif(i%2)i+;continue;i+;s+=i; while(i<7);printf("%dn",s);执行后输出的结果是( )。A) 16 B) 12 C) 28 D) 2126) 有以下程序:void f(int x,int y) int t;if(x<y) t=x; x=y; y=t; main() int a=4,b=3,c=5;f(a,b); f(a,c); f(b,c);printf("%d,%d,%dn",a,b,c);执行后输出的结果是( )。A) 3,4,5 B) 5,3,4 C) 5,4,3 D) 4,3,527) 若有一些定义和语句#include <stdio.h>int a=4,b=3,*p,*q,*w;p=&a; q=&b; w=q; q=NULL;则以下选项中错误的语句是( )。A) *q=0; B) w=p; C) *p=&a; D) *p=*w;28) 有以下程序main() char s="n123"printf("%d,%dn",strlen(s),sizeof(s);执行后输出结果是( )。A) 赋初值的字符串有错 B) 6,7 C) 5,6 D) 6,629) 以下程序中,能够通过调用函数fun,使main函数中的指针变量p指向一个合法的整型单元的是( )。A) main()int *p; fun(p); int fun(int *p) int s; p=&s;B) main()int *p;fun(&p); int fun(int *p) int s; *p=&s;C) #include<stdlib.h>main() int *p;fun(&p); int fun(int *p)*p=(int*)malloc(2);D) #include<stdlib.h>main() int *p;fun(p); int fun(int *p)p=(int*)malloc(sizeof(int);30)表示图中坐标轴上阴影部分的正确表达式是( )。x a b cA)(x<=a)&&(x>=b)&&(x<=c) B)(x<=a)|(b<=x<=c)C)(x<=a)|(x>=b)&&(x<=c) D)(x<=a)&&(b<=x<=c)31)变量ch是英文字母的表达式为( )。 A)('a'<=ch<='z')|('A'<=ch<='z') B)(ch>='a' && ch<='z')&&(ch>='A' && ch<='Z') C)(ch>='a' && ch<='z')| (ch>='A' && ch<='Z') D) ('A'<=ch<='z')&&('A'<=ch<='z')32)( )等价于while(!x)。 A)while(x=1) B)while(x=0)C)while(x!=0) D)while(x!=1)33)设变量定义为:int n,*p;char ch,*q,*g;,则语句( )是不正确的。 A)p=&n;g=q=&ch; B)p=&n;q=&ch; C)p=&n;g=&ch D)p=&n;q=&ch;g=p;34)设变量定义如下,则对其中的结构分量num正确的引用是( )。 struct student int num; Char name20; float scire; stud10; A)stud1.num = 10; B)student.stud.num = 10; C)struct.stud.num = 10; D)struct student.num = 10;35)下列程序段的输出结果是( )。 int t,a3 = 10,5,1; int *p; for(p =a; p<a+3; p+) t =t + *p; /没有赋初始值 printf(“%d” ,t); A)15 B)16 C)10 D)不确定36)以下函数的功能是:通过键盘输入数据,为数组中的所有元素赋值。 #define N 10 void arrin(int xN) int i=0; while(i<N) scanf("%d", ( ) ); 在下划线处应填入的是 A)x+i B)&xi+1 C)x+(i+) D)&xi+37)下列程序功能是根据下式计算s 的值,要求精确到最后一项的绝对值小于106,请选择以下各小题,完成程序。 s = 1-1/3+1/5-1/7+. #include <stdio.h> #include <math.h> void main() int flag = 1, t = 1; ( )while( ) item = flag * 1.0 / t ; s = s + item ; ; t =t+2; printf ( “s = %fn” ,s); A) double item = 2 , s = 0; B) double item = 0 , s = 0; C) double item = 1 , s = 1; D) double item = 3 , s = 1; A)item<1E-6 B)item>=1e-6; C)fabs(item)<1E-6 D)fabs(item)>=1E-6 A)flag = -1 B)s = -s C)flag = -flag; D)t = -t 38)假设定义:int x = 3, y = 3; 则复合赋值表达式x /= 1+y的值为( )。 A) 0 B) 0.75 C) 6 D) 以上都错二、填空题(每空2分,共40分)1)若有程序main() int i,j;scanf("i=%d,j=%d",&i,&j);printf("i=%d,j=%dn ",i,j);要求给i赋10,给j赋20,则应该从键盘输入【1】i=10,j=20 。2)以下程序从终端读入数据到数组中,统计其中正数的个数,并计算它们之和。main() int i,a20,sum,count;sum=count=0;for(i=0;i<20;i+) scanf("%d",【2】&ai );for(i=0;i<20;i+) if(ai>0) count+;sum+=【3】ai ;printf("sum=%d,count=%dn",sum,count);3)下面程序的功能是输出以下形式的金字塔图案是: * * * *main( ) int i,j; for(i=1;i<=4;i+) for(j=1;j<=4-i;j+) printf(“ “); for(j=1;j<=【4】2*i-1_;j+) printf(“*”); printf(“n”);4)以下程序的功能是计算s=1+,请填空。main() int n,i;double s=0.0,fac=1.0; scanf("%d",&n);for(i=1;i<=n;i+)fac=fac【5】/double(i) ;s=s+fac; printf(“%lf”,s);5) indmax返回数组s中最大元素的下标,数组中元素的个数由t传入,请填空 。int findmax(int s, int t) int k,p; for(p=0, k=p; p<t; p+) if (sp>sk) 【6】k=p ; return 【7】(k) ;6)以下fun函数的功能是将一个字符串的内容颠倒过来,请填空。#include “string.h”void fun(char str) int i,j,k; for(i=0,j= 【8】strlen(str)-1 ; i<j; i+, 【9】j- ) k=stri; stri=strj; strj=k; 7)以下程序的功能是:从键盘上输入若干学生的成绩,统计并输出最高成绩和最低成绩,当输入负数时结束输入。请填空。main() float x,amax,amin; scanf(“%f”,&x); amax=x; amin=x; while( 【10】x>=0 ) if ( x>amax ) amax=x; else if(x<amin)【11】amin=x ; printf(“namax=%fnamin=%fn”,amax,amin); 8)以下函数的功能是删除字符串s中的所有数字字符。请填空。viod dele(char *s) int n=0,i; for(i=0;si;i+) if(【12】not(si>=0 and si<=9) sn+=si;sn=【13】0 ;9)输入一个小于32768的正整数,程序求该数各位之和,如325,3+2+510。main() int i,t=【14】0 ; scanf(“%d”,&i); while(【15】i>0 ) t+= 【16】i%10 ; i/=10; printf(“%dn”,t);10)以下程序输出如右图所示的九九乘法表。Main() int i, 【17】j ; for(i=【18】1 ;i<=9;i+) for(j=1; 【19】j<=i ;j+)printf(“%4d”,i*j);printf( 【20】”n” );12 43 6 94 8 12 16 图: