《C语言基础》课程考试试卷总分:100分时间:90分钟姓名:班级:一、单项选择题(每题2分,共40分)1.能正确表示逻辑关系:“a≥=10或a≤0”的C语言表达式是()。A.a〉=10ora<=0B.a〉=0|a<=10C.a〉=10&&a<=0D.a=10‖a<=02.若定义了以下函数:voidf(……){……*p=(char*)malloc(10*sizeof(char));……}p是函数f的形参,要求通过p把动态分配存储单元的地址传回主调函数,则形参p的正确定义应当是()A.char*pB.int**pC.char**pD.int*p3.若有以下定义:chara;intb;floatc;doubled;则表达式a*b+d-c值的类型为()。A.floatB.intC.charD.double4.宏定义的宏展开是在()阶段完成的。A.预处理B.编译C.预处理前D.运行5.inta[10];int*pa;pa=a;则元素a[1]的地址可以表示为()A.pa+1B.pa+2C.pa+4D.a+26.表达式!x||a==b等效于()。A.!((x||a)==b)B.!(x||y)==bC.!(x||(a==b))D.(!x)||(a==b)7.下面是一个初始化指针的语句:int*px=&a;其中指针变量的名字应该是()。A.*pzB.aC.pxD.&a8.不能把字符串Hello!赋给数组b的语句是()。A.charb[10]={'H','e','l','l','o','!'};B.charb[10];b="Hello!";C.charb[10];strcpy(b,"Hello!");D.charb[10]="Hello!";9.在循环中使用break语句的功能是()。A.使程序的执行跳出break所在的那一重循环B.使程序执行结束C.跳出包含此break语句的所有循环D.终止本次循环,继续下次循环10.C语言中,函数值类型的定义可以缺省,此时函数值的隐含类型是()。A.voidB.intC.floatD.double11.按照标识符的要求,()符号不能组成标识符。A.连接符B.下划线C.大小写字母D.数字符号12.在inta=3;int*p=&a;*p=8;则a的值是()A.3B.无意义C.变量p的值D.813.循环语句while(!E)中的表达式!E等价于:()A.E!=0B.E!=1C.E==0D.E==114.typedefenum{PLAYMODE=0,PAUSEMODE,STOPMODE=5,TRACKRPTMODE,MIXMODE}Status_t;上述枚举定义中,元素MIXMODE的数值为:()A.4B.5C.6D.715.在将两个字符串连接起来组成一个字符串时,选用()函数。A.strlen()B.strcpy()C.strcat()D.strcmp()16.C语言运算对象必须是整型的运算符是______。A.%B./C.=D.<17.以下关于函数设计不正确的说法是()。A.函数设计应该追求高内聚低耦合B.要尽可能多的使用全局变量C.函数参数不易过多D.设计函数时,尽量做到谁申请的资源就由谁来释放18.执行下列程序后,其结果为()inta[]={2,4,6,8,10,12};*p;p=a;*(p+4)=2;printf(“%d,%d\n”,*p,*(p+4));A、0,10B、0,2C、2,10D、2,219.请问这个结构体所占的空间大小是_________。typedefstruct{inta,charb,shortc,shortd,}AA_t;A.16byteB.9byteC.12byteD.8byte20.不正确的赋值或赋初值的方式是()。A.charstr[6]={‘\0’};B.charstr[7]=“string”;C.charstr[10];str=“string”;D.charstr[6]=“g”;二、填空题(每题2分,共10分)1.求解逗号表达式(a=3*5,a*4),a+5,表达式的值为______。2.语句“printf(″s%s″,″mall″);”的输出结果为______。3.执行语句“for(s=0,i=1;i11;i++){if(i==6)break;s+=i;}”后,s值为______。4.以下程序运行后的输出结果是______inta=5;fun(intb){staticinta=10;a+=b++;printf(%d,a);}main(){intc=20;fun(c);a+=c++;printf(%d\n,a);}5.动态存储分配,是指程序在运行时由程序员用______函数申请内存,并且程序员自己负责在何时用______函数释放内存。三、判断题(每题1分,共5分)1.地址运算符(&)仅能应用于常量和表达式。()2.不同结构的成员可以有相同的名称。()3.同一数组可以存储不同类型的值。()4.函数调用可以出现在一个语句中。()5.switch语句不能用if语句来替代。()四、简答题(每题5分,共25分)1.char*constp;charconst*pconstchar*p上述三个有什么区别?(5分)2.请说明以下程序段的打印结果是什么,并解释原因。char*func1(){chara[10]=test;returna;}char*func2(){char*a=test;returna;}intmain(){char*a=func1();char*b=func2();printf(\na=%s,a);printf(\nb=%s,b);return0;}(5分)3.阅读程序:#defineADD(x)x+xmain(){intm=1,n=2,k=3;intsum=ADD(m+n)*k;printf(“sum=%d”,sum);}结果输出为_____:(5分)4.将下面的程序填写完整main(){inti,*p,a[7];p=a;for(i=0;i7;i++)scanf(%d,p++);printf(\n);()for(i=0;i7;i++,p++)printf(%d,*p);}(5分)5.static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?(5分)五.编程(每题10分,共20分)1.用宏定义写出swap(x,y),不用中间变量完成x,y的数据交换。2.已知strcpy函数的原型是voidstrcpy(char*strDest,char*strSrc);其中strDest是目的字符串,strSrc是源字符串。不调用C++/C的字符串库函数,请编写函数strcpy。(注意检查参数的有效性)