专升本C语言历年考试题及答案一、单项选择题(1~30题每小题1分,31~45题每小题2分,共60分)1.以下合法的用户自定义标识符是(D)。A、b-bB、floatC、frD、_isw2.若变量已正确定义并赋值,以下不符合C语言语法的表达式是(B)。A、a*b/c;B、3.14%2C、2,bD、a/b/c3.下列不正确的字符常量是(C)A、'n'B、'1'C、aD、'101'4.在C语言中,表示逻辑值“真”用(B)A、1B、非0的数C、非1的数D、大于0的数5.把x、y定义成float类型变量,并赋同一初值3.14是(C)A、floatx,y=3.14;B、floatx,y=2*3.14;C、floatx=3.14,y=x=3.14;D、floatx=y=3.14;6.若变量已正确定义,值不为2的表达式是(C)A、2&3B、11C、a==2D、1^37.若变量已正确定义,和语句“if(ab)k=0;elsek=1;”等价的是(C)A、k=(ab)?1:0;B、k=ab;C、k=a=b;D、a=b?0:1;8.设变量定义为“inta,b;”,执行下列语句时,若a和b的值都是10,则应输入(D)scanf(a=%d,b=%d,&a,&b);A、1010B、10,10C、a=10b=10D、a=10,b=109.下列程序的输出结果是(D)fun(inta,intb,intc){c=a*b;}voidmain(){intc;fun(2,3,c);printf(”%dn”,c);}A、0B、1C、6D、无法确定10.在C程序中,若对函数类型未加说明,则函数的隐含类型为(A)A、intB、doubleC、voidD、char11.表达式strlen(”hello”)的值是(B)A、4B、5C、6D、712.设变量定义为“inta[4];”,则不符合C语言语法的表达式是(D)A、*aB、a[0]C、aD、a++13.设变量定义为“intx,*p=&x;”,则&*p相当于(A)A、pB、*pC、xD、*&x14.若变量已正确定义,不能使指针p成为空指针的是(A)A、p=EOFB、p=0C、p=’’D、p=NULL15.对于以下的变量定义,不符合C语言语法的表达式是(D)structnode{intlen;char*pk;}x={2,right},*p=&x;A、p-pkB、*p.pkC、*p-pkD、*x.pk16.有如下程序\d\n”,r);该程序的输出的结果是(D)17.对于基类型相同的两个指针变量之间,不能进行的运算是(C)-18.有如下程序-1)+fib(n-2));\n”,fib(3));该程序的输出结果是(B)19.有如下定义;};根据上述定义,能输出字母M的语句是(D)\n”,class[3].mane);\n”,class[3].name[1]);\n”,class[2].name[1]);\n”,class[2].name[0]);20.以下所列的C语言常量中,错误的是(B)\72’21.有以下程序段循环执行的次数是(A)无限次B)有语法错,不能执行一次也不执行D)执行1次22.以下程序的输出结果是(C)无定值ain()23.下列程序段的输出结果是(A));24.当调用函数时,实参是一个数组名,则向函数传送的是(B)数组的长度B)数组的首地址数组每一个元素的地址D)数组每个元素中的值25.以下程序的输出结果是(A)-fun(n-1);\n”,fun(3));}26.以下程序的输出结果是(B)\n”,a);27.有以下程序-m++;\n,x);程序运行后的输出结果是:(D)-1D)-228.以下叙述中正确的是:(A)构成C程序的基本单位是函数可以在一个函数中定义另一个函数函数必须放在其它函数之前所有被调用的函数一定要在调用函数之前进行定义29.以下选项中非法的表达式是:(D)A)0=x100B)i=j==0C)(char)(65+3)D)x+1=x+130.下列条件语句中,功能与其他语句不同的是:(D)\n,x);elseprintf(%d\n,y);\n,y);elseprintf(%d\n,x);\n,x);elseprintf(%d\n,y);\n,x);elseprintf(%d\n,y);31.以下不能定义为用户标识符的是:(D)A)scanfB)VoidC)_3com_D)int32.C语言中用于结构化程序设计的三种基本结构是:(A)顺序结构、选择结构、循环结构B)if、switch、break、while、do-whileD)if、for、continue33.若有说明语句:inta,b,c,*d=&c;,则能正确从键盘读入三个整数分别赋给变量a、b、c的语句是:(A)A)scanf(%d%d%d,&a,&b,d);B)scanf(%d%d%d,&a,&b,&d);C)scanf(%d%d%d,a,b,d);D)scanf(%d%d%d,a,b,*d);34.若有定义:intaa[8];。则以下表达式中不能代表数组元aa[1]的地址的是:(C)A)&aa[0]+1B)&aa[1]C)&aa[0]++D)aa+135.有以下程序str[][10]={China,Beijing},*p=str;\n,p+10);程序运行后的输出结果是:(B)36.以下程序的输出结果是:(A)main(){inta=0,i;for(i=1;i5;i++){switch(i){case0:case3:a+=2;case1:case2:a+=3;default:a+=5;}}printf(%d\n,a);}A)31B)13C)10D)2037.有以下程序#includestring.hmain(intargc,char*argv[]){inti,len=0;for(i=1;iargc;i+=2)len+=strlen(argv[i]);printf(“5d\n”,len);}经编译链接后生成的可执行文件是ex.exe,若运行时输入以下带参数的命令行exabcdefgh3k44执行后输出结果是:(D)A)14B)12C)8D)638.下列选项中正确的语句组是:(D)A)chars[8];s={Beijing};B)char*s;s={Beijing};C)chars[8];s=Beijing;D)char*s;s=Beijing;39.有以下程序main(){inta[3][3],*p,i;p=&a[0][0];for(i=0;i9;i++)p[i]=i+1;printf(%d\n,a[1][2]);}程序运行后的输出结果是:(B)A)3B)6C)9D)240.以下符合C语言语法的实型常量是:(C)A)1.2E0.5B)3.14.159EC).5E-3D)E1541.以下程序段中与语句k=ab?(bc?1:0):0;功能等价的是:(A)A)if((ab)&&(bc))k=1;B)if((ab)||(bc))k=1;elsek=0;elsek=0;C)if(a=b)k=0;D)if(ab)k=1;elseif(b=c)k=1;elseif(bc)k=1;elsek=0;42.若程序中定义了以下函数doublemyadd(doublea,doubleb){return(a+b);}并将其放在调用语句之后,则在调用之前应该对该函数进行说明,以下选项中错误的说明是:(A)A)doublemyadd(doublea,b);B)doublemyadd(double,double);C)doublemyadd(doubleb,doublea);D)doublemyadd(doublex,doubley);43.若fp已正确定义并指向某个文件,当未遇到该文件结束标志时函数feof(fp)的值为:(A)A)0B)1C)-1D)一个非0值44.下列关于C语言数据文件的叙述中正确的是:(D)A)文件由ASCII码字符序列组成,C语言只能读写文本文件B)文件由二进制数据序列组成,C语言只能读写二进制文件C)文件由记录序列组成,可按数据存放形式分为二进制文件和文本文件D)文件由数据流形式组成,可按数据的存放形式分为二进制文件和文本文件45.有以下程序main(){intaa[4][4]={{1,2,3,4},{5,6,7,8},{3,9,10,2},{4,2,9,6}};inti,s=0;for(i=0;i4;i++)s+=aa[i][1];printf(%d\n,s);}程序运行后的输出结果是:(B)A)11B)19C)13D)20二、填空题(每题2分,共30分)1.表示“x≥y≥z”的C表达式是___x=y&&y=z____。2.下列程序段的输出是__1____。printf(%on,0101^1);3.下列程序段的输出是__6,90____。intk;floats;for(k=0,s=0;k7;k++)s+=k/2;printf(%d,%fn,k,s);4.下列程序段的输出是__5,25_____。#definef(a,b,x)a*x+bprintf(%d,%dn,f(3,2,1),f(6,5,f(3,2,1)));5.下列程序段的输出是_*#*#____。main(){intk;for(k=1;k5;k++){if(k%2)printf(*);elsecontinue;printf(#);}}6.下列程序段的输出是__58___。#includestdio.hintf(intx){staticy=1;y++;x+=y;returnx;}voidmain(){intk;k=f(3);printf(%d%dn,k,f(k));}7.下列程序段的输出是___5__。int*p,*q,k=5,j=6;q=&k;p=q;q=&j;printf(%d,*p);8.函数voidf(chars[],chart[]){intk=0;while(s[k]=t[k])k++;}等价于voidf(char*s,char*t){while(_*s++=*t++____);}9.下列程序段的输出是_ne,s____。char*a[2]={one,two},**p=a;printf(%s,,*(p++)+1);printf(%cn,**p-1);10.下列程序编译后生成t.exe,运行tinputoutputzoooil的输出结果是__zoo__。voidmain(intargc,char*argv[]){intk;char*p=argv[1];for(k=2;kargc;k++)if(strcmp(argv[k],p)0)p=argv[k];printf(%sn,p);}11.以下程序段的输出结果是___11__\n,i);12.以下程序输出的结果是0main(){inta=5,b=4,c=3,d;d=(abc);printf(%d\n,d);}13.以下程序中给指针p分配三个double型动态内存单元,请填空。#includestdlib.hmain(){double*p;p=(double*)malloc(3*sizeof(double));p[0]=1.5;p[1]=2.5;p[2]=3.5;printf(“%f%f%f\n”,p[0],p[1],p[2]);}14.有以下程序voidf(inty,int*x){y=y+*x;*x=*x+y;}main(){intx=2,y=4;f(y,&x);printf(“%d%d\n”,x,y);}执行后输出的结果是8415.以下程序的运行结果是2002Shangxian#includestring.htypedefstructstudent{charname[10];longsno;floatscore;}STU;main(){STUa={“zhangsan”,2001,95},b={“Shangxian”,2002,90},c={