第八章若有语句:int i,*p=i; 则均表示变量地址的选项是________。 (A) *p,*p,i (B) i,p,*i (C) *i,i,*p (D) i,p,*p以下程序的输出结果是________。 #include<stdio.h> void fun(int *p1,int *p2)( int *p; *p=*p1; *p1=*p2; *p2=*p; ) void main()( int x=5,y=8; fun(x,y); printf("%d,%dn",x,y); ) (A) 5,8 (B) 8,5 (C) 程序运行时报错 (D) 程序编译时[1]报错若有语句:int x=6,*p=x; 则下面正确的表达式是________。 (A) ++x (B) (*p)-- (C) (x+5) (D) p=1000若有语句:int a[10],*p1=a+8,*p2=a[3]; 则p1-p2的值是________。 (A) 20 (B) 4 (C) 16 (D) 5以下程序段[2]执行完毕后,变量a和b的值分别是________。 int a=4,b=5,*p1=a,*p2=b; a=2*(*p1%-*p2)+5; b=*p1**p2++; (A) 13,65 (B) -3,-15 (C) -3,-18 (D) 13,78以下程序段调用scanf函数为变量x赋值,则填入下划线所在位置的错误代码是________。 int x,*p=x; scanf("%d",__________); (A) x (B) *p (C) p (D) *p若有语句:int a[]=(1,3,2,7,3,4),*p=a+3,k; 则变量k的值不等于3的选项是________。 (A) k=(p++,*p++) (B) k=(p-=2,*p--) (C) k=(p--,*--p) (D) k=(p++,*++p)以下程序段在运行时,若通过键盘输入“2 6 9 7 5”,则输出结果是________。 int a[5],*p,t; for(p=a;p<a+5;p++) scanf("%d",p); for(p=a;p<a+3;p++) (t=*p; *p=*(a+(a+4-p)); *(a+(a+4-p))=t;) for(p=a;p<a+5;p++) printf("%d ",*p); (A) 2 6 9 7 5 (B) 7 5 9 2 6 (C) 5 7 9 6 2 (D) 6 2 7 9 5若有定义:int a[10],*p=a; 则表示数组元素a[3]的错误选项是________。 (A) *(a+=3) (B) *(p+=3) (C) *(a+3) (D) p[3]以下程序执行完毕后,变量a和b的值分别是________。 #include<stdio.h> void fun(int *p,int *q)( int *t; if(*p>*q) {t=p; p=q; q=t;) } void main()( int a=13,b=9; fun(a,b); ) (A) 9,13 (B) 13,13 (C) 13,9 (D) 9,9以下程序输出数组a中的最小值,则下划线所在位置应填入的代码是________。 #include<stdio.h> int findmin(int *p,int n)( int *m,*q=p+n; for(m=p;p<q;p++) if(__________) m=p; return *m; ) void main()( int a[6]={21,17,34,9,12,45); printf("%dn",findmin(a,6)); } (A) p<m (B) p>m (C) *p>*m (D) *p<*m以下说法正确的是________。 (A) 可以将整型常量[3]作为存储单元[4]地址存放到指针变量中。 (B) 指针变量的值是指针。 (C) 可以采用为数组名重新赋值的方法使其指向不同的元素。 (D) 使用地址值作为实参[5]、指针变量作为形参,形参值的改变可以使实参值发生变化。以下对程序输出结果的判断中,正确的是________。 #include<stdio.h> void fun(int x,int a[50])( do{ *a++=x%10; x=x/10; printf("%d",*(a-1)); )while(x); } void main()( int x=6985,a[50]; fun(x,a); ) (A) 程序能正常运行,输出结果为5896 (B) 程序编译时报错,因为形参数组名不能进行自增运算 (C) 程序能正常运行,输出结果为6985 (D) 程序能正常运行,输出结果为随机数若有函数定义:double fun(int a[10])(...),则在对该函数进行原型声明时,错误的声明语句是________。 (A) double fun(int []); (B) double fun(int b[10]); (C) double fun(int a); (D) double fun(int *a);若有语句:int x,*p=x; 则与该语句等价的语句是________。 (A) int x,*p; *p=x; (B) int x,*p; p=x; (C) int x,*p; *p=x; (D) int x,*p; p=x;判断题B 当两个指针变量指向同一数组时,两个指针变量相减的差值即为两个指针变量相隔的字节个数。A. 如果某个指针变量赋值为0,表示该指针变量不指向任何变量。 B. 若有语句:int x[]=(5,7,3,8),*p=x+2,y; y=++*p--; 则变量y的值是3。 C. 若有函数定义:int fun(int *a)(return *a;),则函数的返回值是形参a中存放的地址值。 D. 以下程序段的功能是交换变量a和b的值。 int a=9,b=7,*p=a,*q=b; *p=*p+*q-(*q=*p); E. 以下程序段在数组a中查找数值x,则在下划线所在位置应填入的代码是“*p!=x”。 double a[5]=(1.4,0.78,23.6,-4.5,19.3),x,*p=a; scanf("%lf",x); for(p=a;__________;p++); if(p<a+5) printf("Find!n"); else printf("Not Find!n"); F. 以下程序段的输出结果是75。 int x=61,a[100],*p=a; while(x)( *p++=x%8; x=x/8; ) for(p=p-1;p>=a;p--)(printf("%d",*p);) G. 以下程序执行完毕后,全局变量[6]X和局部变量[7]r的值分别是0和5。 #include<stdio.h> int X=4; int fun(int x,int *p)( static int m=5; X*=m-x; m=++*p; return m; ) void main()( int a=2,b=3,r; r=fun(fun(a,b),b); ) 以下程序执行完毕后,main函数中数组a各元素的值依次是1、9、6、5、8、7、3。 #include<stdio.h> void fun(int a[],int n,int m)( int i,t,*p; for(i=1;i<=m;i++){ t=*(a+n-1); for(p=a+n-2;p>=a;p--) *(p+1)=*p; *a=t; ) } void main()( int a[7]={8,7,3,5,1,9,6); fun(a,7,3); } 填空 [ 指针变量]。 [ 15 ]。 #include<stdio.h> void fun(int *p,int m,int n)( if(n<=m) fun(p,m/2,2*n); *p+=n; ) void main()( int x=0; fun(x,16,1); ) 进行由大到小排序,请填空。 #include<stdio.h> #define N 6 void fun(int *p,int *q)( int t; t=*p; *p=*q; *q=t; ) void main()( int a[N]={1,2,3,4,5,6),*p,*q; for(p=a;p<a+N-1;p++) for(q=p;q<a+N;q++) [ *p<*q?fun(p,q):1 ]; } 中,并将这些数的个数放在变量n中,请填空。 void fun(int *p,int *q)( int x; for(x=1;x<=100;x++) if(x%7==0||x%11==0){*p++=x; (*q)++;) } void main()( int a[1000],n=0; [ fun(a,n) ]; ) [ 1 5 9 8 6 ]。 int a[5]=(6,5,9,8,1),*p,*q; for(p=q=a+2;q<a+5;p--,q++) if(*p>*q) (*p=*p+*q; *q=*p-*q; *p=*p-*q;) for(p=a;p<a+5;p++) printf("%d ",*p); [7]=(2,5,3,4,7,8,1),*p=a+1; 则p[*(a+*(a+2))]的值是[ 8 ]。 x11T101C"的长度是[5 ]。 [ int ]。 [double ]。 Visual C++ 6.0环境中,一个char型变量在内存中占[ 1 ]个字节,一个int型变量在内存中占[ 4]个字节,一个double型变量在内存中占[ 8 ]个字节。 [ 6 ],表达式y=(y=3,x=y,x+3)的值是[ 6 ]。 可以把一个字符常量赋给一个整型变量。 说明语句int t1=t2=10;可以把t1、t2定义成int型变量并初始化为10。 A k1=k2=k3=10;是一条合法的赋值语句[8]。 A 可以把define定义为用户标识[9]符,但不能把if定义为用户标识符。 A 设有说明语句:int x=3,y=5; ,当执行语句x=x+y; y=x-y; x=x-y;后,变量x和y的值实现了交换。 B 在 语言的运算符中,条件运算符的优先级最低。
第八章
若有语句:int i,*p=i; 则均表示变量地址的选项是________。 (A) *p,*p,i (B) i,p,*i (C) *i,i,*p (D) i,p,*p
以下程序的输出结果是________。 #include<stdio.h> void fun(int *p1,int *p2){ int *p; *p=*p1; *p1=*p2; *p2=*p; } void main(){ int x=5,y=8; fun(x,y); printf("%d,%d\n",x,y); } (A) 5,8 (B) 8,5 (C) 程序运行时报错 (D) 程序编译时[1]报错
若有语句:int x=6,*p=x; 则下面正确的表达式是________。 (A) ++x (B) (*p)-- (C) (x+5) (D) p=1000
若有语句:int a[10],*p1=a+8,*p2=a[3]; 则p1-p2的值是________。 (A) 20 (B) 4 (C) 16 (D) 5
以下程序段[2]执行完毕后,变量a和b的值分别是________。 int a=4,b=5,*p1=a,*p2=b; a=2*(*p1%-*p2)+5; b=*p1**p2++; (A) 13,65 (B) -3,-15 (C) -3,-18 (D) 13,78
以下程序段调用scanf函数为变量x赋值,则填入下划线所在位置的错误代码是________。 int x,*p=x; scanf("%d",__________); (A) x (B) *p (C) p (D) *p
若有语句:int a[]={1,3,2,7,3,4},*p=a+3,k; 则变量k的值不等于3的选项是________。 (A) k=(p++,*p++) (B) k=(p-=2,*p--) (C) k=(p--,*--p) (D) k=(p++,*++p)
以下程序段在运行时,若通过键盘输入“2 6 9 7 5”,则输出结果是________。 int a[5],*p,t; for(p=a;p<a+5;p++) scanf("%d",p); for(p=a;p<a+3;p++) {t=*p; *p=*(a+(a+4-p)); *(a+(a+4-p))=t;} for(p=a;p<a+5;p++) printf("%d ",*p); (A) 2 6 9 7 5 (B) 7 5 9 2 6 (C) 5 7 9 6 2 (D) 6 2 7 9 5
若有定义:int a[10],*p=a; 则表示数组元素a[3]的错误选项是________。 (A) *(a+=3) (B) *(p+=3) (C) *(a+3) (D) p[3]
以下程序执行完毕后,变量a和b的值分别是________。 #include<stdio.h> void fun(int *p,int *q){ int *t; if(*p>*q) {t=p; p=q; q=t;} } void main(){ int a=13,b=9; fun(a,b); } (A) 9,13 (B) 13,13 (C) 13,9 (D) 9,9
以下程序输出数组a中的最小值,则下划线所在位置应填入的代码是________。 #include<stdio.h> int findmin(int *p,int n){ int *m,*q=p+n; for(m=p;p<q;p++) if(__________) m=p; return *m; } void main(){ int a[6]={21,17,34,9,12,45}; printf("%d\n",findmin(a,6)); } (A) p<m (B) p>m (C) *p>*m (D) *p<*m
以下说法正确的是________。 (A) 可以将整型常量[3]作为存储单元[4]地址存放到指针变量中。 (B) 指针变量的值是指针。 (C) 可以采用为数组名重新赋值的方法使其指向不同的元素。 (D) 使用地址值作为实参[5]、指针变量作为形参,形参值的改变可以使实参值发生变化。
以下对程序输出结果的判断中,正确的是________。 #include<stdio.h> void fun(int x,int a[50]){ do{ *a++=x%10; x=x/10; printf("%d",*(a-1)); }while(x); } void main(){ int x=6985,a[50]; fun(x,a); } (A) 程序能正常运行,输出结果为5896 (B) 程序编译时报错,因为形参数组名不能进行自增运算 (C) 程序能正常运行,输出结果为6985 (D) 程序能正常运行,输出结果为随机数
若有函数定义:double fun(int a[10]){...},则在对该函数进行原型声明时,错误的声明语句是________。 (A) double fun(int []); (B) double fun(int b[10]); (C) double fun(int a); (D) double fun(int *a);
若有语句:int x,*p=x; 则与该语句等价的语句是________。 (A) int x,*p; *p=x; (B) int x,*p; p=x; (C) int x,*p; *p=x; (D) int x,*p; p=x;
判断题
B 当两个指针变量指向同一数组时,两个指针变量相减的差值即为两个指针变量相隔的字节个数。
A. 如果某个指针变量赋值为0,表示该指针变量不指向任何变量。B. 若有语句:int x[]={5,7,3,8},*p=x+2,y; y=++*p--; 则变量y的值是3。
C. 若有函数定义:int fun(int *a){return *a;},则函数的返回值是形参a中存放的地址值。
D. 以下程序段的功能是交换变量a和b的值。 int a=9,b=7,*p=a,*q=b; *p=*p+*q-(*q=*p);
E. 以下程序段在数组a中查找数值x,则在下划线所在位置应填入的代码是“*p!=x”。 double a[5]={1.4,0.78,23.6,-4.5,19.3},x,*p=a; scanf("%lf",x); for(p=a;__________;p++); if(p<a+5) printf("Find!\n"); else printf("Not Find!\n");
F. 以下程序段的输出结果是75。 int x=61,a[100],*p=a; while(x){ *p++=x%8; x=x/8; } for(p=p-1;p>=a;p--){printf("%d",*p);}
G. 以下程序执行完毕后,全局变量[6]X和局部变量[7]r的值分别是0和5。 #include<stdio.h> int X=4; int fun(int x,int *p){ static int m=5; X*=m-x; m=++*p; return m; } void main(){ int a=2,b=3,r; r=fun(fun(a,b),b); }
以下程序执行完毕后,main函数中数组a各元素的值依次是1、9、6、5、8、7、3。 #include<stdio.h> void fun(int a[],int n,int m){ int i,t,*p; for(i=1;i<=m;i++){ t=*(a+n-1); for(p=a+n-2;p>=a;p--) *(p+1)=*p; *a=t; } } void main(){ int a[7]={8,7,3,5,1,9,6}; fun(a,7,3); }
填空
[ 指针变量]。
[ 15 ]。 #include<stdio.h> void fun(int *p,int m,int n){ if(n<=m) fun(p,m/2,2*n); *p+=n; } void main(){ int x=0; fun(x,16,1); }
进行由大到小排序,请填空。 #include<stdio.h> #define N 6 void fun(int *p,int *q){ int t; t=*p; *p=*q; *q=t; } void main(){ int a[N]={1,2,3,4,5,6},*p,*q; for(p=a;p<a+N-1;p++) for(q=p;q<a+N;q++) [ *p<*q?fun(p,q):1 ]; }
中,并将这些数的个数放在变量n中,请填空。 void fun(int *p,int *q){ int x; for(x=1;x<=100;x++) if(x%7==0||x%11==0){*p++=x; (*q)++;} } void main(){ int a[1000],n=0; [ fun(a,n) ]; }
[ 1 5 9 8 6 ]。 int a[5]={6,5,9,8,1},*p,*q; for(p=q=a+2;q<a+5;p--,q++) if(*p>*q) {*p=*p+*q; *q=*p-*q; *p=*p-*q;} for(p=a;p<a+5;p++) printf("%d ",*p);
[7]={2,5,3,4,7,8,1},*p=a+1; 则p[*(a+*(a+2))]的值是[ 8 ]。
\x11T\101C"的长度是[5 ]。
[ int ]。
[double ]。
Visual C++ 6.0环境中,一个char型变量在内存中占[ 1 ]个字节,一个int型变量在内存中占[ 4]个字节,一个double型变量在内存中占[ 8 ]个字节。
[ 6 ],表达式y=(y=3,x=y,x+3)的值是[ 6 ]。
可以把一个字符常量赋给一个整型变量。
说明语句int t1=t2=10;可以把t1、t2定义成int型变量并初始化为10。 A k1=k2=k3=10;是一条合法的赋值语句[8]。 A 可以把define定义为用户标识[9]符,但不能把if定义为用户标识符。 A 设有说明语句:int x=3,y=5; ,当执行语句x=x+y; y=x-y; x=x-y;后,变量x和y的值实现了交换。 B 在
语言的运算符中,条件运算符的优先级最低。
题目解答
答案
A 如果某个指针变量赋值为 0 ,表示该指针变量不指向任何变量。 B 若有语句: int x[]={5,7,3,8},*p=x+2,y; y=++*p--; 则变量 y 的值是 3 。 B 若有函数定义: int fun(int *a){return *a;} ,则函数的返回值是形参 a 中存放的地址值。 A 以下程序段的功能是交换变量 a 和 b 的值。 int a=9,b=7,*p=a,*q=b; *p=*p+*q-(*q=*p); B 以下程序段在数组 a 中查找数值 x ,则在下划线所在位置应填入的代码是 “*p!=x” 。 double a[5]={1.4,0.78,23.6,-4.5,19.3},x,*p=a; scanf("%lf",x); for(p=a;__________;p++); if(p<a+5) printf("Find!\n"); else printf("Not Find!\n"); A 以下程序段的输出结果是 75 。 int x=61,a[100],*p=a; while(x){ *p++=x%8; x=x/8; } for(p=p-1;p>=a;p--){printf("%d",*p);} A 以下程序执行完毕后,全局变量 X 和局部变量 r 的值分别是 0 和 5 。 #include<stdio.h> int X=4; int fun(int x,int *p){ static int m=5; X*=m-x; m=++*p; return m; } void main(){ int a=2,b=3,r; r=fun(fun(a,b),b); } B 以下程序执行完毕后, main 函数中数组 a 各元素的值依次是 1 、 9 、 6 、 5 、 8 、 7 、 3 。 #include<stdio.h> void fun(int a[],int n,int m){ int i,t,*p; for(i=1;i<=m;i++){ t=*(a+n-1); for(p=a+n-2;p>=a;p--) *(p+1)=*p; *a=t; } } void main(){ int a[7]={8,7,3,5,1,9,6}; fun(a,7,3); } 填空 作为形参的数组名并不表示数组的首地址,其实质是一个【 指针变量 】。 以下程序执行完毕后,变量 x 的值是【 15 】。 #include<stdio.h> void fun(int *p,int m,int n){ if(n<=m) fun(p,m/2,2*n); *p+=n; } void main(){ int x=0; fun(x,16,1); } 以下程序对数组 a 进行由大到小排序,请填空。 #include<stdio.h> #define N 6 void fun(int *p,int *q){ int t; t=*p; *p=*q; *q=t; } void main(){ int a[N]={1,2,3,4,5,6},*p,*q; for(p=a;p<a+N-1;p++) for(q=p;q<a+N;q++) 【 *p<*q?fun(p,q):1 】 ; } 以下程序的功能是将 1 到 100 之间能被 7 或 11 整除的所有整数放在数组 a 中,并将这些数的个数放在变量 n 中,请填空。 void fun(int *p,int *q){ int x; for(x=1;x<=100;x++) if(x%7==0||x%11==0){*p++=x; (*q)++;} } void main(){ int a[1000],n=0; 【 fun(a,n) 】 ; } 以下程序段的输出结果是【 1 5 9 8 6 】。 int a[5]={6,5,9,8,1},*p,*q; for(p=q=a+2;q<a+5;p--,q++) if(*p>*q) {*p=*p+*q; *q=*p-*q; *p=*p-*q;} for(p=a;p<a+5;p++) printf("%d ",*p); 若有语句: int a[7]={2,5,3,4,7,8,1},*p=a+1; 则 p[*(a+*(a+2))] 的值是【 8 】。 字符串 "A\x11T\101C" 的长度是【 5 】。 设有说明语句: int k=5; double t; ,执行语句 t=(double)k; 之后,变量 k 的数据类型[10]是【 int 】。 表达式 2+sqrt(4) 值的数据类型为【 double 】。 在 Visual C++ 6.0 环境中,一个 char 型变量在内存中占【 1 】个字节,一个 int 型变量在内存中占【 4 】个字节,一个 double 型变量在内存中占【 8 】个字节。 若变量 x 、 y 均为 int 型,则表达式 (x=3,x+3,y=3,x+y) 的值是【 6 】 , 表达式 y=(y=3,x=y,x+3) 的值是【 6 】。 A 可以把一个字符常量赋给一个整型变量。 B 说明语句 int t1=t2=10; 可以把 t1 、 t2 定义成 int 型变量并初始化为 10 。 A k1=k2=k3=10; 是一条合法的赋值语句。 A 可以把 define 定义为用户标识符,但不能把 if 定义为用户标识符。 A 设有说明语句: int x=3,y=5; ,当执行语句 x=x+y; y=x-y; x=x-y; 后,变量 x 和 y 的值实现了交换。 B 在 C 语言的运算符中,条件运算符的优先级最低。