出卷时间:2014-07-11 11:24
答题时间:120分钟
一 单选题
1.要把高级语言编写的源程序转换为目标程序,需要使用( D )[2分]
A.编辑程序
B.驱动程序
C.诊断程序
D.编译程序
2.以下叙述中正确的是( C )[2分]
A.C语言程序将从源程序中第一个函数开始执行
B.可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行
C.C语言规定必须用main作为主函数名,程序将从此开始执行,在此结束
D.main可作为用户标识符,用以命名任意一个函数作为主函数
3.若变量a是int类型,并执行了语句:a=‘A'+1.6;,则正确的叙述是 ( D )[2分]
A.a的值是字符B
B.a的值是浮点型
C.不允许字符型和浮点型相加
D.a的值是字符‘A’的ASCII值加上2
4.若变量已正确定义并赋值,以下符合C语言语法的表达式是( B )[2分]
A.a:=b+1
B.a=b=c+2
C.int 18.5%3
D.a=a+7=c+b
5.下列可用于C语言用户标识符的一组是( )[2分]
A.void, define, WORD
B.a3_b3, _123,car
C.For, -abc, IF Case
D.2a, DO, sizeof
6.若在定义语句:int a,b,c,*p=&c;之后,接着执行以下选项中的语句,则能正确执行的语句是( )[2分]
A.scanf("%d",a,b,c);
B.scanf("%d%d%d",a,b,c);
C.scanf("%d",p);
D. scanf("%d",&p);
7.以下关于long、int和short类型数据占用内存大小的叙述中正确的是( )[2分]
A.均占4个字节
B.根据数据的大小来决定所占内存的字节数
C.由用户自己定义
D.由C语言编译系统决定
8.若变量已正确定义,有以下程序段
i=0;
do
{
printf("%d,",i);
}while(i++);
printf("%d\\n",i);
其输出结果是( )[2分]
A. 0,0
B. 0,1
C. 1,1
D. 程序进入无限循环
9.有以下计算公式
若程序前面已在命令中包含math.h文件,不能够正确计算上述公式的程序段是( )[2分]
A. if(x>=0) y=sqrt(x); else y=sqrt(-x);
B. y=sqrt(x)if(x<0) y=sqrt(-x);
C. if(x>=0)y=sqrt(x); if(x<0)y=sqrt(-x);
D. y=sqrt(x>=0?x:-x);
10.设有条件表达式:(EXP)?i++;j--,则以下表达式中(EXP)完全等价的是( )[2分]
A.(EXP==0)
B.(EXP!=0)
C.(EXP==1)
D.(EXP!=1)
11.有以下程序
#include int main(void) { int y=9; for( ; y>0;y--) { if(y%3= =0) printf("%d",--y); } } 程序的运行结果是( )[2分] A.741 B.963 C.852 D.875421 12.若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是( )[2分] A.函数的实参和其对应的形参共占同一存储单元 B.形参只是形式上的存在,不占用具体存储单元 C.同名的实参和形参占同一存储单元 D.函数的形参和实参分别占用不同的存储单元 13.已知字符'A'的ASCⅡ代码值是65,字符变量c1的值是'A',c2的值是'D'。执行语句printf("%d,%d",c1,c2-2);后,输出结果是( )[2分] A.A,B B.A,68 C.65,66 D.65,68 14.以下叙述中错误的是( )[2分] A.改变函数形参的值,不会改变对应实参的值 B.函数可以返回地址值 C.可以给指针变量赋一个整数作为地址值 D.当在程序的开头包含文件stdio.h时,可以给指针变量赋NULL 15.以下正确的字符串常量是( )[2分] A."\\\\\\" B.'abc' C.Olympic Games D." " 16.设有定义:char p[]={’1’,’2’,’3’},*q=p; ,以下不能计算出一个char型数据所占字节数的表达式是( )[2分] A.sizeof(p) B.sizeof(char) C.sizeof(*q) D.sizeof(p[0]) 17.有以下函数 int func(char *s) { char *t=s; while(*t++); t--; return(t-s); } 以下关于func函数的功能叙述正确的是( )[2分] A.求字符串s的长度 B.比较两个串的大小 C.将串s复制到串t D.求字符串s所占字节数 18.若有定义语句:int a[3][6]; ,按在内存中的存放顺序,a数组的第10个元素是( )[2分] A.a[0][4] B.a[1][3] C.a[0][3] D.a[1][4] 19.有以下程序 #include void fun(char **p) { ++p; printf("%s\\n",*p); } int main(void) { char *a[ ]={"Morning fun(a); } 程序的运行结果是( )[2分] A.Afternoon B.fternoon C.Morning D. orning 20.若有定义语句:int a[2][3],*p[3]; ,则以下语句中正确的是( )[2分] A.p=a; B.p[0]=a; C.p[0]=&a[1][2]; D. p[1]=&a; 21.有以下程序 #include int fun(char s[ ]) { int n=0; while(*s<=’9’&&*s>=’0’) { n=10*n+*s-’0’; s++; } return(n); } int main(void) { char s[10]={’6’,’1’,’*’,’4’,’*’,’9’,’*’,’0’,’*’}; printf("%d\\n",fun(s)); } 程序运行的结果是( )[2分] A.9 B.61490 C.61 D.5 22.以下能正确定义一维数组的选项是( )[2分] A.int a[5]={0,1,2,3,4,5}; B.char a[ ]={0,1,2,3,4,5}; C.char a={’A’,’B’,’C’}; D.int a[5]="0123"; 23.以下叙述中正确的是( ) [2分] A.预处理命令行必须位于源文件的开头 B.在源文件的一行上可以有多条预处理命令 C.宏名必须用大写字母表示 D.宏替换不占用程序的运行时间 24.若有以下说明和定义( ) union dt { int a; char b; double c; }data; 以下叙述中错误的是[[2分] A.data的每个成员起始地址都相同 B.变量data所占的内存字节数与成员c所占字节数相等 C.程序段:data.a=5;printf("%f\\n",data.c);输出结果为5.000000 D. data可以作为函数的实参 25.以下语句或语句组中,能正确进行字符串赋值的是 ( ) [2分] A.char *sp;*sp="right!"; B.char s[10];s="right!"; C.char s[10];*s="right!"; D.char *sp="right!"; 二 填空题 1.以下程序的功能是:输出a、b、c三个变量中的最小值.请填空。 #include int main(void) { int a,b,c,t1,t2; scanf("%d%d%d",&a,&b,&c); t1=a t2=c }[每空2分] 2.以下程序的输出结果是 . #include int main(void) { int n=12345, d; while(n!=0) { d=n%10; printf("%d",d); n/=10; } }[每空4分] 3.已有定义如下: struct node { int data; struct node *next; } *p; 以下语句调用malloc函数,使指针p指向一个具有struct node类型的动态存储空间。 p = (struct node *)malloc( );[每空4分] 4.表达式(int)((double)5/2+2.5)的值是: [每空4分] 5.写出以下两段程序的执行结果。如果程序无法编译,请指出出错部分并写明原因;如果程序陷入死循环,请回答“死循环”。 如果执行结果出现内存错误,请指出出错部分并写明原因。 int main(void) { char s[ ]="man"; int i; for(i=0;s[ i ];i++) printf("\\n%c%c%c%c",s[ i ], *(s+i), *(i+s), i[s]); return 0; } int main(void) { char *cptr,c; void *vptr,v; c=10; v=0; cptr=&c; vptr=&v; return 0; } [每空2分] 6.对下面的代码进行解释: typedef void (*lpFunction)(void); lpFunction lpReset = (lpFunction)0xF000FFF0; lpReset(); [4分] 7. 指出下面代码的不妥之处(不需要修改): void GetMemory(T_S8 *p, T_S16 nNum) { p = (T_S8 *)malloc(sizeof(T_S8) * nNum); } void Test(void) { T_S8 *str = NULL; GetMemory(str, 100); strcpy(str, "hello"); } [每空4分] 8.Test函数的运行结果如何?原因? char *GetMemory(void) { char p[] = "hello world"; return p; } void Test(void) { char *str = NULL; str = GetMemory(); printf("%s\\n", str); } [每空4分] 9.Test函数的运行结果如何?原因? Void GetMemory2(char **p, int num) { *p = (char *)malloc(num); } void Test(void) { char *str = NULL; GetMemory(&str, 100); strcpy(str, "hello"); printf("%s\\n", str); } [每空4分] 10. Test函数的运行结果如何?原因? void Test(void) { char *str = (char *) malloc(100); strcpy(str, “hello”); free(str); if(str != NULL) { strcpy(str, “world”); printf("%s\\n", str); } } [每空4分] 三 编程题 1.请编写一个函数func, 用来删除字符串中的所有空格。 例如,传入字符串“asd af aa z67”, 则返回为字符串 “asdafaaz67”。[10分] ============ 本试卷共计36题,此处为结束标志。考试酷examcoo ============下载本文