x ++;
printf(\
}
9.若有以下程序,执行后输出结果是 。 int f(int x,int y)
{ return((y-x)*x); } main()
{ int a=3,b=4,c=5,d; d=f(f(3,4),f(3,5)); printf(\}
10. 假如在运行程序时输入5 ,写出程序的运行情况及最终结果: 。
float fac(int n) { float f ;
if(n<0){printf(“n<0,dataerror!”);
f=-1;}
else if (n==0||n==1) f=1;
else f=fac(n-1)*n; return(f);
} main( ) {int n ; float y ;
printf(“input a integer number:”); scanf(“%d”,&n); y=fac(n);
printf(“%d!=%5.0f”, n,y); }
11.下面程序的运行结果是: 。 func( int x, int y) { int z;
z=x+y; return(z); } main( )
{ int a=6, b=7, c=8, r;
r=func( ( a--, b++, a+b), c--);
printf(“%d”, r) ; }
12.下面程序的运行结果是: 。 func( int a) { int b=0,c=3;
b++;c++; return(a+b+c);} main( ) { int a=2,i;
for(i=0;i<3;i++)
printf(“%d”,func(a)); }
13. 下面程序的运行结果是: 。 main( ) { int i=5 ;
printf(“%d\\n”, sub(i) ); } sub( int n) { int a;
if(n==1) a=1;
else a= n+sub(n-1); return(a); }
14.下面程序的运行结果是:___________。 main( ) { int i=2,p; p=f( i++, ++i ); printf(“%d”, p); } int f( int a, int b ) { int c;
if(a>b) c=1;
else if(a==b) c=0; else c=-1; return(c); }
15. 以下程序的运行结果是:____________。 main( )
{ int a[3][3] = { 1, 3, 5, 7, 9, 11, 13, 15, 17 } ; int sum ;
sum = func ( a ) ;
printf ( “\\nsum = %d\\n”, sum ) ; }
func ( int a[ ][3] ) { int i, j, sum = 0;
for ( i=0; i<3; i++ ) for ( j=0; j<3; j++ ) { a[i][j] = i + j ;
if ( i==j ) sum = sum + a[i][j] ; } return ( sum ); }
第七
一、选择题
1.变量的指针,其含义是指该变量的 。
A)值 B)地址 C)名 D)一个标志 2.设有说明 int (﹡ptr)[M];其中ptr是 。
A) M个指向整型变量的指针
B) 指向M个整型变量的函数指针
C) 一个指向具有M 个整型元素的一维数组的指针
D) 具有 M个指针元素的一维指针数组,每个元素都只能指向整型量 4.如下程序的执行结果是 。 # include
{int i; char ﹡s=〞a\\\\\\\\\\n 〞;
for( i=0; s[i]!=?\\0?;i++) printf(〞%c 〞,﹡(s+i)); } A)a B)a\\ C)a\\\\ D)a\\\\\\\\ 5.如下程序的执行结果是 。 # include
main() { static int a[ ]={1,2,3,4,5,6}; int ﹡p; p=a;
﹡(p+3)+=2; printf(〞%d,%d\\n 〞,﹡p,﹡(p+3)); }
A)1,3 B)1,6 C)3,6 D)1,4 6.如下程序的执行结果是 。 # include
main( ) { static int a[ ][4]={1,3,5,7,9,11,13,15,17,19,21,23};
int (﹡p)[4], i=1,j=2; p=a;
printf(〞%d \\n 〞, ﹡(﹡(p+i)+j)); }
A)9 B)11 C)13 D)17
7.若有以下定义,则对a数组元素的正确引用是 。 int a[5], ﹡p=a;
A)﹡&a[5] B)a+2 C)﹡(p+5) D)﹡(a+2)
8.若有以下定义,则对a数组元素地址的正确引用是 。
int a[5], ﹡p=a;
A)p+5 B)﹡a+1 C)&a+1 D)&a[0]
9.若有定义: int a[2][3];则对a数组的第i行第j列(假设i,j已正确说明并赋值)元素值的正确引用为 。
A)﹡(﹡(a +i) +j ) B)(a+i) [j] C)﹡(a+i+j) D)﹡(a +i)+j 11.设有下面的程序段: char s[ ]= 〞china 〞; char ﹡p; p=s; 则下列叙述正确的是 。
A)s和p完全相同 B)数组s中的内容和指针变量p中的内容相等 C)s数组长度和p所指向的字符串长度相等 D)﹡p与s[0]相等
12.若有语句:char s1[ ]= 〞string 〞, s2[8],﹡s3,﹡s4= 〞string2 〞;则对库函数strcpy的错误调用是 。
A)strcpy(s1, 〞string2 〞); B)strcpy(s4, 〞string1 〞); C)strcpy(s3, 〞string1 〞); D)strcpy(s1, s2);
13.若有定义:int a[5];则a数组中首元素的地址可以表示为 。
A)&a B)a+1 C)a D)&a[1] 14.以下与int ﹡q[5];等价的定义语句是 。
A)int q[5] B)int ﹡q
C)int ﹡(q[5]); D)int (﹡q)[5];
15.若有int a[5], ﹡p=a;定义,则﹡(p+5)表示 。
A)元素a[5]的地址 B)元素a[5]的值 C)元素a[6]的地址 D)元素a[6]的值
16.若有定义:int ﹡p[4];则标识符p 。
A)是一个指向整型变量的指针 B)是一个指针数组名
C)是一个指针,它指向一个含有四个整型元素的一维数组 D)说明不合法
17.若有语句int *point,a=4;和point=&a;下面均代表地址的一组选项是 。
A)a,point,*&a B) &*a,&a,*point C)*&point,*point,&a D) &a,&*point,point 18.若有说明:int *p,m=5,n;以下正确的程序段是 。
A)p=&n; scanf(“%d”,&p); B) p=&n; scanf(“%d”,*p); C) scanf(“%d”,&n); *p=n; D) p=&n; *p=m; 19.下面程序段的运行结果是 。
char str[ ]=“ABC”,*p=str; printf(“%s\\n”,*(p+1));
A) 66 B) BC C)字符?B?的地址 D)字符?B?
20.已有定义int k=2, *ptr1,*ptr2;且ptr1和ptr2均已指向同一个变量k,下面不正确执行的赋值语句是: 。
A) k=*ptr1+*ptr2 ; B) ptr2=k; C) ptr1=ptr2; D)k=*ptr1*(*ptr2); 24.有以下程序 main()
{ char *s[]={\p=s[1];
printf(\}
执行后输出结果是 。
A) n,two B) t,one C) w,one D) o,two 25.有以下程序 main()
{ int x[8]={8,7,6,5,0,0},*s; s=x+3;
printf(\}
执行后输出结果是 。
A) 随机值 B) 0 C) 5 D) 6 26.有以下程序 main()
{ char str[]=\while(*ps) ps++;
for(ps--;ps-str>=0;ps--) puts(ps);}
执行后输出结果是 。
A) yz<回车>xyz B) z<回车>yz
C) z<回车>yz<回车>xyz D) x<回车>xy<回车>xyz 30.有如下程序段 int *p,a=10,b=1 p=&a; a=*p+b;
执行该程序段后,a的值为 。
A) 12 B) 11 C) 10 D) 编译出错
31.对于基类型相同的两个指针变量之间,不能进行的运算是 。
A)< B) = C) + D) –
32.以下函数返回a所指数组中最小的值所在的下标值。
fun(int *a, int n) { int i,j=0,p; p=j;
for(i=j;i
A) i=p B) a[p]=a[i] C) p=j D) p=i
33.有如下说明
int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a; 则数值为9的表达式是 。
A) *p+9 B) *(p+8) C) *p+=9 D) p+8
36.执行以下程序后,a的值为 。 int *p, a = 10, b=1; p = &a; a = *p*b;
A) 12 B) 编译出错 C) 10 D) 1
37.以下各语句或语句组中,正确的操作是 。
A) char s[5]=\B) char *s; gets(s);
C) char *s; s=\ D) char s[5]; scanf(\
38.若已定义:int a[9],*p=a;并在以后的语句中未改变p的值,则不能表示a[1]地址的表达式是 。
A) p+1 B) a+1 C) a++ D) ++p
39.下列语句行中,哪些语句能正确进行字符串赋值操作 。
A) char st[4][5]
B) char s[5]={?A?, ?B?, ?C?, ?D?, ?E?} C) char *s; s = “ABCDE”; D) char *s; scanf(“%s”,s);
40.以下程序的输出结果是 。 #include
{ char a[] = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0}, *p = a+5;
printf(“%d”, *--p);
}