1.选择题:
(1)如果x是整型变量,则合法的形式是( )。 A.&(x+5) B.*x C.&*x D.*&x
(2)若有语句int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a;则( )不是对a数组元素的正确引用(其中0≤i<10)。
A.p[i] B.*(*(a+i)) C.a[p-a] D.*(&a[i])
(3)以下程序的输出结果是( )。 #include void main()
{ int a[3]={10,15,20}; // a[0]=10,a[1]=15,a[2]=20
int *p1=a,*p2=&a[1]; // p1取a[0]地址,p2取a[1]地址 *p1=*(p2-1)+5; // a[0]=15,a[1]=15,a[2]=20 *(p1+1)=*p1-5; // a[0]=15,a[1]=10,a[2]=2 printf(\A.5 B.10 C.15 D.20
(4)执行以下程序段后,m的值为 ( )。 int a[2][3]={{1,2,3},{4,5,6}}; int m,*p=&a[0][0]; m=(*p)*(*(p+2))*(*(p+4));
A.15 B.14 C.13 D.12 (5)以下程序的输出结果是( )。 #include
void fun(int x,int y,int *cp,int *dp)
{ cp=x+y; //*cp=30+50=80 dp=x-y; //*dp=30-50=-20 }
void main() { int a,b,c,d; a=30,b=50; fun(a,b,&c,&d); printf(\ }
A.50,30 B.30,50 C.80,-20 D.80,20
(6)要求函数的功能是交换x和y中的值,且通过正确调用返回交换结果。能正确执行此功能的函数是( )。 A.funa(int *x,int *y) B.funb(int x,int y) { int *p=new int ; { int t; p=*x; t=x; *x=*y; x=y;
*y=*p; } y=t; }
C.func(int *x,int *y) D.fund(int x,int y) { *x=*y; { *x=*x+*y; *y=*x; *y=*x-*y; } *x=*x-*y; } (7)以下程序的输出结果是( )。 #include void main()
{ char *s=\ int v1=0,v2=0,v3=0,v4=0; for (int k=0;s[k];k++) switch(s[k]) { default:v4++; case '1':v1++; case '3':v3++; case '2':v2++; } printf(\ A.4,2,1,1 B.4,9,3,1 C.5,8,6,1 (8)设有如下定义,下面关于ptr正确叙述是()。 int (*ptr)();
D.8,8,8,8
A.ptr是指向一维数组的指针变量 B.ptr是指向int 型数据的指针变量
C.ptr是指向函数的指针,该函数返回一个int型数据
D.ptr是一个函数名,该函数的返回值是指向int型数据的指针 9,以下关于指针的叙述正确是
A) 所有类型的指针变量所占内存的大小是一样的
B) 指针变量所占内存的大小与其类型有关,char型指针变量只占1个字节,double型指针变量占8个字节
C) 指针变量可直接指向任何类型的变量,而不会出现编译或运行错误
D) 指针变量既可以直接指向结构体,也可直接指向结构体中某个成员,而不会出现编译或运行错误
10,以下定义语句中正确的是 A) int a=b=0;
B) char A=65+1,b='b';
C) float a=1,*b=&a,*c=&b; D) double a=0.0; b=1.1; 11,以下叙述中正确的是
A) 如果p是指针变量,则&p是不合法的表达式 B) 如果p是指针变量,则*p表示变量p的地址值
C) 在对指针进行加、减算术运算时,数字1表示1个存储单元的长度 D) 如果p是指针变量,则*p+1和*(p+1)的效果是一样的 12,有以下程序
#include
int m=1,n=2,*r=&m; f(r, &n);
printf(\ }
void f(int *p,int *q) {
p=p+1; *q=*q+1; }
程序运行后的输出结果是
A) 2,3 B) 1,3 C) 1,4 D) 1,2 13,以下对指针变量的操作中,错误的程序段是 A) int x=0,*p; *p=x; B) int x=1,*p,*q=&x; p=q;
C) int *p,*q; q=p=NULL; D) int p,*q; q=&p;
14,有以下程序 #include
char* p1 = 0; int* p2 = 0; float* p3 = 0;
printf(\}
程序运行后的输出结果是
A) 1,4,8 B) 4,4,4 C) 1,2,4 D) 15,有以下程序 #include
printf(\ } main()
{ char *a[] = {\ fun(a); } 程序的运行结果是
A) Afternoon B) fternoon C) Morning D) orning 二,填空
16,有以下程序
1,1,4 #include
char *b = \main( )
{ char *p; p = b;
while (*p != *a) p++; printf(\}
程序运行后的输出结果是 17,有以下函数 int fun(char *ps) { char *p; p=ps;
if(*ps==0) return 0; while(*++p); return(p-ps); }
该函数的功能是计算字符串的长度 18,有以下程序 #include
{ int x[3][3] = {{2},{4},{6}}, i, *q = &x[0][0]; for(i=0; i<2; i++) {
if (i == 0)
x[i][i+1] = *q+1; else ++q;
printf(\ }
printf(\}
程序的运行结果是 19,有以下程序 #include
{ printf(\ f(x, n-1);
printf(\ } else
printf(\
you to Beijing! 2 3 }
main( )
{ int z[3] = {1, 2, 3}; f(z,3); printf(\}
程序运行后的输出结果是 3,2,1,2,3, 20,有以下程序
#include
while(*s <= '9'&&*s >='0') { n=10*n+*s-'0' ; s++; } return (n); }
main()
{ char s[10]={ '6', '1', '*', '4', '*', '9', '*', '0', '*'}; printf(\ }
程序的运行结果是 61 三、编写程序.
1. 在堆内存中申请一个float型数组,把10个float型数据0.1、0.2、0.3、?、1.0赋予该数组,然后使用float型指针输出该数组的各元素值并求出其累加和。 2. 编写一个函数,该函数的功能是判断一个整数是不是素数,在main函数中输入一个整数,调用该函数,
判断该数是不是素数,若是则输出“yes”,否则输出“no” */
3. 写一个函数,判断某一个四位数是不是玫瑰花数(所谓玫瑰花数即该四位数各位数字的四次方和恰好等于该数本身,如:1634=14+64+34+44)。在主函数中从键盘任意输入一个四位数,调用该函数,判断该数是否为玫瑰花数,若是则输出“yes”,否则输出“no”。*/
相关推荐: