B)数组名代表的是数组所占存储区的首地址,其值不可改变
C)当程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出―下标越
界‖的出错信息
D)可以通过赋初值的方式确定数组元素的个数 答案:C
评析:在c语言中,如果出现下标越界的情况,系统不管在编译还是执行时都不会给出―下标越界‖的错误提示。
(31)有以下程序
#define N20
fun(int a[],int n,int m) { int i,j;
for(i=m;i>=n;i–)a[i+1]=a[i]; } main() {
int i,a[N]={1,2,3,4,5,6,7,8,9,10};
fun(a,2,9);
for(i=O;i<5;i++) printf(―%d‖,a[i]);
}
程序运行后的输出结果是________。
A)10234 B)12344 C)12334 D)12234 答案:C
评析:本题函数fun的作用是将指定的数组元素(从下标n到下标m)向后移一位。由函数调用―fun(a,2,9);‖可知,函数fun用于将a[2]到a[9]的各元素依次向后移一位,移完后,a数组中各元素的值分别为1,2,3,3,4,5,6,7,8,9,10,故输出的前5个数组元素为12334。
(32)有以下程序 main() {
int a[3][2]={0},(*ptr)[2],i,j;
for(i=0;i<2;i++) {ptr=a+i; scanf(―%d‖,ptr); ptr++;}
for(i=0;i<3;i++)
{ for(i=0;j<2;j++) printf(―%2d‖,a[i][j]);
printf(―\n‖); } }
若运行时输入:1 2 3,则输出结果是________。
A)产生错误信息
B)l0 C)l 2 D)l 0
2 O 3 0 2 0
0 0 0 O 3 0 答案:B
评析:二维数组a,通过a[3][2]={0}将数组中的各个元素初始化为0,指针变量ptr,指向包含2个元素的一维数组。a[0][0]:l,a[1][0]=2,故本题的输出选B。
(33)有以下程序
prt(int *m, int n) { int i;
for(i=O;i int a[]={ 1,2,3,4,5 },i; prt(a,5); for(i=O;i<5;i++) printf(―%d,‖,a[i]); 程序运行后的输出结果是________。 A)l,2,3,4,5, B)2,3,4,5,6, C)3,4,5,6,7, D)2,3,4,5,1, 答案:B 评析:用数组名作函数实参时,不是把数组的值传递给形参,而是把实参数组的起始地址传递给形参数组,这样两个数组就共同占用同一段内存单元。 (34)有以下程序 main() { int a[]={1,2,3,4,5,6,7,8,9,0},*p; for(p=a;p 程序运行后的输出结果是________。 A)l,2,3,4,5,6,7,8,9,0, B)2,3,4,5,6,7,8,9,10,1, C)0,1,2,3,4,5,6,7,8,9, D)l,l,1,l,l,l,l,l,l,l, 答案:A 评析:c语言规定数组变量名代表数组的首地址,即第0号元素的地址。本题将a数组中的值全部输出,即为l,2,3,4,5,6,7,8,9,0,。 (35)有以下程序 #define P 3 void F(int x){return(P*x*x);} main() {printf(―%d\n‖,F(3+5));} 程序运行后的输出结果是________。 A)192 B)29 C)25 D)编译出错 答案:D 评析:return语句用于从被调函数带回一个函数值。void关键字表示―无类型‖,即不需要从被调函数中带回函数值,所以不需要return语句,故编译时出错。 (36)有以下程序 main() {int c=35;printf(―%d\n‖,c&C);} 程序运行后的输出结果是________。 A)0 B)70 C)35 D)1 答案:C 评析:按位―与‖时,1&1=1,其他都等O。因为本题中相与的两个值相等,即对应位上的二进制值相等,所以―与‖的结果也即为其值本身。 (37)以下叙述中正确的是________。