第8章
函数
1、C语言规定,在一个源程序中,main函数的位置( )。 A.必须在最开始 B.必须在系统调用的库函数的后面
C.可以任意 D.必须在最后
[C] 教师批改:C
2、凡在函数中未指明存储类别的变量,其隐含的存储类别为 A.auto 型 B.static
型
C.extern 型 D.register 型
[A] 教师批改:A
3、函数调用语句func((exp1,exp2),(exp3,expD,exp5));中,实参的个数为:
A.1 B.2
C.D D.5
[B] 教师批改:B
4、以下程序的输出结果是
fun(int x, int y, int z)
{ z=x*x+y*y; }
main()
{ int a=31;
fun(5,2,a);
printf("%d",a);
} A.0 B.29
C.31 D.无定值
[C] 教师批改:C
5、以下对C语言函数的有关描述中,正确的是
A.在C中,调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参 B.C函数既可以嵌套定义又可以递归调用
C.函数必须有返回值,否则不能使用函数 D.C程序中有调用关系的所有函数必须放在同一个源程序文件中
[A] 教师批改:A
6、以下所列的各函数首部中,正确的是 A.void play(var :Integer,var
b:Integer) B.void play(int
a,b)
C.void play(int a,int b) D.Sub play(a as
integer,b as integer)
[C] 教师批改:C
7、以下叙述中不正确的是() A.在C中,函数中的自动变量可以赋初值,每调用一次,赋一次初值 B.在C中,在调用函数时,实参和对应形参在类型上只需赋值兼容
C.在C中,外部变量的隐含类别是自动存储类别 D.在C中,函数形参可以说明为register变量
[C] 教师批改:C
8、用数组名作为函数调用时的实参,实际上传送给形参的是 A.数组首地址 B.数组的第一个元素值
C.数组中全部元素的值 D.数组元素的个数
[A] 教师批改:A
9、当调用函数时,实参是一个数组名,则向函数传送的是 A.数组的长度 B.数组的首地址
C.数组每一个元素的地址 D.数组每个元素中的值
[B] 教师批改:B
10、函数调用:strcat(strcpy(str1,str2),str3)的功能是
A.将串str1复制到串str2中后再连接到串str3之后 B.将串str1连接到串str2之后再复制到串str3之后
C.将串str2复制到串str1中后再将串str3连接到串str1之后 D.将串str2连接到串str1之后再将串str1复制到串str3中
[C] 教师批改:C
11、一个C程序的执行是从( )。 A.本程序的main函数开始,到main函数的结束 B.本程序文件的第一个函数开始,到本程序文件的最后一个函数的结束
C.本程序文件的main开始,到本程序文件的最后一个函数的结束 D.本程序文件的第一个函数开始,到本程序文件的main函数的结束
[A] 教师批改:A
12、一个C语言程序是由( )。 A.一个主程序和若干子程序组成 B.函数组成
C.若干过程组成 D.若干子程序组成
[B] 教师批改:B
13、以下说法中正确的是 A.C语言程序总是从第一个定义的函数开始执行 B.在C语言程序中,要调用的函数必须在main()函数中定义
C.C语言程序总是从main()函数开始执行 D.C语言程序中的main()函数必须放在程序的开始部分
[C] 教师批改:C
14、以下叙述不正确的是( )。 A.一个C源程序可由一个或多个函数组成 B.一个C源程序必须包含一个main函数
C.C程序的基本组成单位是函数 D.在C程序中,注释说明只能位于一条语句的后面
[D] 教师批改:D
15、当调用函数时,实参是一个数组名,则向函数传送的是_____。 A) 数组的长度 B)
数组的首地址
C) 数组每一个元素的地址 D)
数组每个元素中的值
[B] 教师批改:B
16、请读程序:
#include
f(in b[],
int n)
{ int i,
r;
r=1;
for(i=0;
i<=n; i++) r=r*b[i];
return
r;
}
main()
{ int x,
a[]={ 2,3,4,5,6,7,8,9};
x=f(a,
3);
printf("%dn",x);
}
上面程序的输出结果是_____。 A) 720 B)
120
C) 24 D) 6
[B] 教师批改:B
第9章 预处理命令
1、程序中定义以下宏 #define S(a,b) a*b 若定义 int area;
且令area=S(3+1,3+D),则变量area的值为: A.10 B.12
C.21 D.28
[A] 教师批改:A
2、以下关于宏替换的叙述不正确的是: A.宏替换只是字符替换 B.宏名无类型
C.宏替换不占用运行时间 D.宏替换不占用编译时间
[D] 教师批改:D
3、执行下列语句后,a的值为:
int a;
#define M(x,y) (x*y)
a=M(1+2,3); A.9 B.7
C.5 D.以上均不是
[B] 教师批改:B
4、下列四组选项中,均不是C语言关键字的选项是( )。 A.define IF type B.getc char printf
C.invlude scanf case D.while go
pow
[A] 教师批改:A
第10章 指针
1、若有以下说明和语句,int c[4][5],(*p)[5];p=c;能正确引用c数组元素的是 A)
p+1 B) *(p+3)
C) *(p+1)+3 D)
*(p[0]+2))
[D] 教师批改:D
2、若有定义:int *p[3];, 则以下叙述中正确的是 A)
定义了一个基类型为int的指针变量p,该变量具有三个指针 B)
定义了一个指针数组p,该数组含有三个元素,每个元素都是基类型为int的指针
C) 定义了一个名为*p的整型数组,该数组含有三个int类型元素 D)
定义了一个可指向一维数组的指针变量p,所指一维数组应具有三个int类型元素
[B] 教师批改:B
3、有以下程序
main()
{ int a[3][3], *p, i;
p=&a [0][0] ;
for ( i=0
; i<9 ; i++) p[i]=i+1;
printf("%dn",a[1][2]);
}
程序运行后的输出结果是 A) 3 B) 6
C) 9 D) 2
[B] 教师批改:B
4、若有以下定义和语句:
int s[4][5],(*ps)[5];
ps=s;
则对s数组元素的正确引用形式是 A) ps+1 B)
*(ps+3)
C) ps[0][2] D) *(ps+1)+3
[C] 教师批改:C
5、若有以下的定义:int t[3][2];能正确表示t数组元素地址的表达式是 A)
&t[3][2] B)
t[3]
C) t[1] D) t[2]
[D] 教师批改:D
6、下列程序执行后的输出结果是
main()
{ int a[3][3], *p,i;
p=&a[0][0];
for(i=p; i<9; i++) p[i]=i+1;
printf("%d n",a[1][2]);
} A) 3 B) 6
C) 9 D) 随机数
[B] 教师批改:B
7、以下程序的输出结果是
main( )
{ 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 2 B) 5 1
C) 5 3 D) 9 7
[C] 教师批改:C
8、执行以下程序段后,m的值为
int a[2][3]={
{1,2,3},{4,5,6} };
int m,*p;
p=&a[0][0];
m=(*p)*(*(p+2))*(*(p+4)); A) 15 B)
14
C) 13 D) 12
[A] 教师批改:A
9、若有以下说明:
int w[3][4]o={{0,1},{2,4},{5,8}};
int(*p)[4]=w;
则数值为4的表达式是 A) *w[1]+1 B)
p++,*(p+1)
C) w[2][2] D) p[1][1]
[D] 教师批改:D
10、若有以下的说明和语句:
main()
{ int t[3][2], *pt[3],k;
fpr(k=o;
k<3;k++)pt[k]=t[k];
}
则以一选项中能正确表示t数组元素地址的表达式是 A)
&t[3][2] B)
*pt[0]
C) *(pt+1) D)
&pt[2]
[C] 教师批改:C
11、设有以下定义:
int
a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12};
int
(*prt)[3]=a,*p=a[0];
则下列能够正确表示数组元素a[1][2]的表达式是 A) *((*prt+1)[2]) B)
*(*(p+5))
C) (*prt+1)+2 D)
*(*(a+1)+2)
[D] 教师批改:D
12、下面程序的输出是
int
aa[3][3]={{2},{4},{6}};
main()
{ int i,
* p=&aa[0][0];
for(i=0;
i<2;i++)
{
if(i==0)
aa[i][i+1]=*p+1;
else
++p;
printf("%d",*p);}
} A)
23 B) 26
C) 33 D) 36
[A] 教师批改:A
13、若有以下说明和语句,请选出哪个是对c数组元素的正确引用
int
c[4][5], (*cp)[5];
cp=c; A)
cp+1 B) *(cp+3)
C) *(cp+1)+3 D) *(*cp+2)
[D] 教师批改:D
14、设有说明int(*ptr)[m];其中的标识符ptr是 。 A)M个指向整型变量的指针 B)指向M个整型变量的函数指针
C)一个指向具有M个整型元素的一维数组的指针 D)具有M个指针元素的一维指针数组,每个元素都只能指向整型量
[C] 教师批改:C
15、有以下程序,其中函数f的功能是将多个字符串按字典顺序排序
#include
void f(char *p[], int n)
{ char *t; int i,j;
for(i=0; i
for(j=i+1; j
if(strcmp(p[i],p[j])>0){ t=p[i]; p[i]=p[j]; p[j]=t; }
}
main()
{ char *p[5]={"abc","aabdfg","abbd","dcdbe","cd"};
f(p, 5);
printf("%dn",
strlen(p[1]));
}
程序运行后的输出结果是( ) A)2 B)3
C)6 D)4
[D] 教师批改:D
16、有以下程序
main()
{
char s[]="159",*p;
p=s;
printf("%c",*p++);
printf("%c",*p++);
}
程序运行后的输出结果是( ) A)15 B)16
C)12 D)59
[A] 教师批改:A
17、有以下函数
fun(char *a,char *b)
{
while((*a!=‘ ‘)&&(*b!=‘ ‘)&&(*a==*b))
{ a++; b++;}
return (*a-*b);
}
该函数的功能是
A)计算a和b所指字符串的长度之差 B)将b所指字符串复制到a所指字符串中
C)将b所指字符串连接到a所指字符串后面 D)比较a和b所指字符串的大小
[D] 教师批改:D
18、有以下程序
point(char *p)
{
p+=3;
}
main()
{ char b[4]={‘a‘,‘b‘,‘c‘,‘d‘},*p=b;
point(p); printf("%cn",*p);
}
程序运行后的输出结果是 A)a B)b
C)c D)d
[A] 教师批改:A
19、有以下程序
main()
{char
str[][10]={"China","Beijing"},*p=str;
printf("%sn",p+10);
}
程序运行后的输出结果是 A) China B)
Bejing
C) ng D) ing
[B] 教师批改:B
20、有以下程序
main()
{char
s[]="ABCD",*p;
for(p=s+1;p
}
程序运行后的输出结果是 A) ABCD
BCD
CD
D B) A
B
C
D
C)
B
C
D D) BCD
CD
D
[D] 教师批改:D
21、有以下程序
main(
)
{ char
*p[10]={“abc”,”aabdfg”,”dcdbe”,”abbd”,”cd”};
printf(“%dn”,strlen(p[4]));
}
执行后输出结果是
A) 2 B) 3
C) 4 D) 5
[A] 教师批改:A
22、已定义以下函数
fun(char *p2, char *p1)
{ while((*p2=*p1)!=‘ ’){p1++;p2++; } }
函数的功能是 A)
将p1所指字符串复制到p2所指内存空间 B) 将p1 所指字符串的地址赋给指针
p2
C) 对p1和p2两个指针所指字符串进行比较 D)
检查p1和p2两个指针所指字符串中是否有‘ ’
[A] 教师批改:A
23、有以下程序
#include
main()
{ char
*p=“abcdeOfghjik ”;
printf(“%dn”,strlen(p));
}
程序运行后的输出结果是 A) 12 B) 15
C) 6 D) 5
[D] 教师批改:D
24、以下程序的输出结果是
#include
#include
main()
{ char b1[8]="abcdefg",b2[8],*pb=b1+3;
while
(--pb>=b1) strcpy(b2,pb);
printf("%dn",strlen(b2));
} A)
8 B) 3
C) 1 D) 7
[D] 教师批改:D
25、以下程序的输出结果是
main( )
{ char ch[3][4]={"123","456","78"},*p[3];
int i;
for(i=0;i<3;i++) p[i]=ch[i];
for(i=0;i<3;i++) printf("%s",p[i]);
} A) 123456780 B) 123 456 780
C) 12345678 D) 147
[C] 教师批改:C
26、以下程序的输出结果是
main( )
{ char *s="12134211"; int
v[4]={0,0,0,0},k,i;
for(k=0;s[k];k++)
{ switch(s[k])
{ case ‘1‘:i=0;
case ‘2‘:i=1;
case ‘3‘:i=2;
case ‘4‘:i=3;
}
v[i]++;
}
for(k=0;k<4;k++) printf("%d ",v[k]);
} A)4 2 1 1 B) 0 0 0 8
C) 4 6 7 8 D) 8 8 8 8
[B] 教师批改:B
27、以下程序运行后,输出结果是
main()
{ char ch[2][5]={‘693","825"},*p[2];
int i,j,s=0;
for(i=0;i<2;i++) p[i]=ch[i];
for(i=0;i<2;i++)
for(j=0;p[i][j]=‘0‘ && p[i][j]<=‘9‘;j+=2)
s=10*s+p[i][j]-‘0‘;
printf("%dn",s);
} A) 6385 B) 22
C) 33 D) 693825
[A] 教师批改:A
28、以下程序运行后,输出结果是
#inchude
#inchude
fun(char *w, int n)
{ char t,
*s1,*s2;
s1=w: s2=w+n-1;
while(s1
{ t=*s1++;
*s1=*s2--;
*s2=t;
}
}
main()
{ char *p;
p="1234567";
fun(p,strlen(p));
puts(p);
} A) 1234567 B) 7654321
C) 1711717 D) 7177171
[C] 教师批改:C
29、有以下程序
main()
{ char a[]="programming",
b[]="language";
char *p1,*p2;
int i;
p1=a; p2=b;
for(i=0;i<7;i++)
if(*(p1+i)==*(p2+i)) printf("%c",*(p1+i));
}
输出结果是 A) gm B) rg
C) or D) ga
[D] 教师批改:D
30、若有以下定义:
char s[20]="programming",*ps=s;
则不能代表字符o的表达式是 A) ps+2 B)s[2]
C) ps[2] D)ps+=2,*ps
[A] 教师批改:A