当前位置:文档之家› C理论自测题及参考答案

C理论自测题及参考答案

一、单选题1.以下关于函数的叙述中,正确的是。

A.在函数体中可以直接引用另一个函数中声明为static类别的局部变量的值B.在函数体中至少必须有一个return语句C.在函数体中可以定义另一个函数D. 在函数体中可以调用函数自身2. 以下关于变量的叙述中,不正确的是。

A.一个变量的作用域完全取决于该变量声明的位置B.全局变量可以在函数以外的任何位置声明C.动态局部变量的生存期仅限于本次函数调用,无法将局部变量的值保存到函数下一次调用D.用static声明一个变量是为了限制其他编译单位引用该变量3. 以下选项是一个自定义函数的头部,其中正确的是。

A. int fun(int a, b)B. int fun(int a, int a)C. int fun(int a[],int b)D. int fun(static int a,int b)4. 关于函数返回值,以下叙述中正确的是。

A. 函数返回值的类型由函数体内return语句包含的表达式类型决定B.函数返回值的类型由函数头部定义的函数类型决定C.若函数体中有多个return语句,则函数返回值是排列在最后的return语句中表达式的值D.若函数体内没有return语句,则函数没有返回值5. 以下程序中main函数需要调用fun函数,所给选项中正确的调用语句是。

A. fun(1,2);B. fun((1,2));C. f();D. fun(fun(1));void fun (int c){ printf(“%d”,c ); }6. 已知函数f定义如下:void f(void){ printf(“ That’s great!”);}则调用f函数的正确形式是。

A. f;B. f();C. f(void);D. f(1);7. 已知有函数f的定义如下:int f(int a, int b){ if (a<b)return (a,b); else return (b,a); }在main函数中若调用函数f(2,3),得到的返回值是。

A. 2B. 3C. 2和3D. 3和28. 在以下程序中,需要在fun函数中声明一个int型的变量,所给选项中不能用作该变量名的是。

A. xB. y D. fun#include<>int y;main(){ int a=1;fun(a);}int fun(int x){ /* int 型变量声明位置*/}9.若有程序:int x;int f(int y){ return 标识符 ; }#include<>int w;main(){ int z=2; f(z); }则在函数f中,return语句后允许出现的标识符是。

A. x或wB. x或yC. z或wD. NULL10. 在main函数体内部和外部均允许出现的实体是。

A. 预处理命令B. 操作语句 C.另一函数的定义 D.函数形式参数声明11.设有下列程序段:static char b=2;void Y ( ){ static float d=4;....... }int a=1;void X ( ){ int c=3; ...... }关于程序段中各变量的属性,以下叙述中错误的是。

A. a是全局变量,函数X可以访问,函数Y不能访问B. b是全局变量,函数X和函数Y都可以访问C. c是动态局部变量,函数X可访问,函数Y不可访问D. d是静态局部变量,函数X和函数Y都可以访问12.对应main函数中的fun函数调用,以下给出的四个fun函数定义的首部中,错误的是。

main(){ int a,n;fun(n,&a);}A.void fun(int m,int x[]) B.void fun(int s,int h[41]) C.void fun(int p,int *s) D.void fun(int n,int a)13. 下列全局变量声明中,正确的是。

A.auto int i=1; B. float a=1, b=, c=a+b;C. char for=1;D. static char ch;14.若有数组 A和B的声明“static char A[ ] = "ABCDEF",B[ ] = { 'A', 'B', 'C', 'D', 'E','F'} ;”,则数组A和数组B的长度分别是。

A. 7,6B. 6,7C. 6,6D. 7,715.以下程序运行后的输出结果是。

2 2 C. 7 5 2#include<>main(){ char a[7]="a0\0a0\0"; int i,j;i=sizeof(a); j=strlen(a);printf("%d %d",i,j);}16.假定已有声明“char a[30],*p=a;”,则下列语句中能将字符串"This is a C program."正确地保存到数组a中的语句是。

A. a[30]="This is a C program.";B. a="This is a C program.";C. p= "This is a C program.";D. strcpy(p,"This is a C program.");17.以下数组声明中正确的是。

A. int n=10, a[n];B. int a[];C. int a[2][3]={{1},{2},{3}};D. int a[][3]={{1},{2},{3}};18.若有声明int a[10],b[3][3]; 则以下对数组元素赋值的操作中,不会出现越界访问的是。

A. a [-1]=0B. a[10]=0C. b[3][0]=0D. b[0][3]=019.已有声明“int S[2][3]”,以下选项中正确地引用了数组S中的元素。

A. S[1>2][!1])B. S[2][0]C. S[1]D. S20. 已知函数fun的定义如下:void fun(int x[],int y){ int k;for(k=0;k<y;k++)x[k]+=y;}若main函数中有声明int a[10]={10};及调用fun函数的语句,则正确的fun函数调用形式是。

A. fun(a[],a[0]); (a[0],a[0]); (&a[0],a[0]); D. fun(a[0],&a[0]);21.以下单目运算符均只需要一个操作数,其中要求操作数类型必须是指针型的选项是。

A. &B. ++C. !D. *22.已有声明“int a[5];”,以下表达式中不能正确取得数组元素a[1]地址的选项是。

A.&a[1] B.++a C.&a[0]+1 D.a+123.已知有声明:“int good=1;”, 若要使得表达式p="good"+good在编译时不出现语法错和警告,p应当声明为。

p; B. char *p; C. int p; D. int *p;24.下列程序段的输出结果是。

int i,x[3][3]={9,8,7,6,5,4,3,2,1},*p=&x[1][1];for(i=0;i<4;i+=2)printf("%d ", *(p+i));A. 5 2B. 5 1C. 5 3D. 9 725.若有以下声明和定义,如果在main函数中需要调用fun函数,以下调用语句中错误是。

A. fun(1);B. (*a)(1);C. b=fun; (*b)(1);D. c=a;(*c)(1);void fun (int c) { printf(“%d”,c ); }main (){ void (*a)(int)=fun , *b(int), (*c)(int);/*调用fun函数语句位置*/}void *b(int c){ }26.若有声明“int a[][4]={1,2,3,4,5,6,7,8,9,10},*p=*(a+1);”,则值为9的表达式是 .+=3,*p++ B. p+=4,*(p++) C. p+=4,*++p D. p+=4,++*p27. 已知某程序中有声明int a[4],j;及语句for(j=0;j<4;j++)p[j]=a+j;,则标识符p正确的声明形式应为。

A.int p[4]; B.int *p[4]; C.int **p[4]; D.int (*p)[4];参考答案:1~5:DDCBB 6~10:BBABA 11~15:DDDAB 16~20:DDDAC21~25:DBBCC 26~27:BB二、多选题1. 在定义一个函数时,下列选项中(21)可以缺省。

A. 函数名之前的数据类型B. 函数名之后一对圆括号C. 函数名D. 形式参数声明E. 函数体中的语句2. 以下程序中需要在main函数之后定义一个函数,在所给的选项中不能用作该函数名的标识符是。

C. p#define p 1int y;main(){ int a=1;函数名(a);}int 函数名(int x){ return x*x;}3.若已定义一个无返回值的函数,则以下关于调用该函数的叙述中错误的是。

A.函数调用可以作为独立的语句存在B.函数调用可以出现在表达式中C.函数调用可以作为一个函数实参D.函数调用可以作为一个函数形参参考答案:2. BCD三、填空题1. 以下程序运行后输出结果是。

#include<>fun (int k){ static int i;int j=0;return(++k*(++i+(++j)));}{ int i,n;for (i=0;i<3;i++)printf("%3d\t",fun(i));}2. 以下程序运行后输出结果是。

void fun1(int);void fun2(void);main(){ extern int x;printf("%d ",x+=2);fun1(2);}int x=1;void fun1(int x){ printf("%d ",x++);fun2();}void fun2(void){ printf("%d ",x);while(1){ int x=5;printf("%d ",x); break;}}3. 以下程序运行后输出结果是。

相关主题