C语言第八章 指针

更新时间:2024-01-30 04:54:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第八章 指针

一、选择题

1.变量的指针,其含义是指该变量的 B 。(0级)

A)值 B)地址 C)名 D)一个标志 2.设有说明 int (﹡ptr)[M];其中ptr是 C 。(0级)

A) M个指向整型变量的指针

B) 指向M个整型变量的函数指针

C) 一个指向具有M 个整型元素的一维数组的指针

D) 具有 M个指针元素的一维指针数组,每个元素都只能指向整型量 3.选择出 i的正确结果 B 。(1级)

int i; char ﹡s=〞a\\045+045\\ˊb〞; for ( i=0;s++;i++); A)5 B)8 C)11 D)12 4.如下程序的执行结果是 C 。(1级) # include

main( ) {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.如下程序的执行结果是 B 。(2级) # 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.如下程序的执行结果是 C 。(2级) # 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数组元素的正确引用是 D 。(1级) int a[5], ﹡p=a;

A)﹡&a[5] B)a+2 C)﹡(p+5) D)﹡(a+2)

8.若有以下定义,则对a数组元素地址的正确引用是 D 。(1级)

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 。(1级)

A)﹡(﹡(a +i) +j ) B)(a+i) [j] C)﹡(a+i+j) D)﹡(a +i)+j

10.若有定义: int a[2][3];则对a数组的第i行第j列(假设i,j已正确说明并赋值)元素地址的正确引用为 D 。(1级)

A)﹡(a [i] +j ) B)(a+i) C)﹡(a+j) D)a[i]+j 11.设有下面的程序段: char s[ ]= 〞china 〞; char ﹡p; p=s;

则下列叙述正确的是 D 。(0级)

A)s和p完全相同 B)数组s中的内容和指针变量p中的内容相等 C)s数组长度和p所指向的字符串长度相等 D)﹡p与s[0]相等

12.若有语句:char s1[ ]= 〞string 〞, s2[8],﹡s3,﹡s4= 〞string2 〞;则对库函数strcpy的错误调用是 C 。(1级)

A)strcpy(s1, 〞string2 〞); B)strcpy(s4, 〞string1 〞); C)strcpy(s3, 〞string1 〞); D)strcpy(s1, s2);

13.若有定义:int a[5];则a数组中首元素的地址可以表示为 C 。(1级)

A)&a B)a+1 C)a D)&a[1] 14.以下与int ﹡q[5];等价的定义语句是 C 。(1级)

A)int q[5] B)int ﹡q C)int ﹡(q[5]); D)int (﹡q)[5];

15.若有以下定义,则﹡(p+5)表示 B 。(1级)

A)元素a[5]的地址 B)元素a[5]的值 C)元素a[6]的地址 D)元素a[6]的值

16.若有定义:int ﹡p[4];则标识符p B 。(0级)

A)是一个指向整型变量的指针 B)是一个指针数组名

C)是一个指针,它指向一个含有四个整型元素的一维数组 D)说明不合法

17.若有语句int *point,a=4;和point=&a;下面均代表地址的一组选项是 D 。(1级)

A)a,point,*&a B) &*a,&a,*point C)*&point,*point,&a D) &a,&*point,point 18.若有说明:int *p,m=5,n;以下正确的程序段是 D 。(1级)

A)p=&n; scanf(“%d”,&p); B) p=&n; scanf(“%d”,*p); C) scanf(“%d”,&n); *p=n; D) p=&n; *p=m; 19.下面程序段的运行结果是 B 。(1级)

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,下面不正确执行的赋值语句是: B 。(1级)

A) k=*ptr1+*ptr2 ; B) ptr2=k; C) ptr1=ptr2; D)k=*ptr1*(*ptr2); 21.有以下程序 main()

{ char a,b,c,*d; a='\\'; b='\\xbc';

c='\\0xab'; d=\

printf(\}

编译时出现错误,以下叙述中正确的是 D 。(1级) A)程序中只有a='\\';语句不正确。 B)b='\\xbc';语句不正确。

C)d=\语句不正确。

D)a='\\';和 c='\\0xab';语句都不正确。 22.若有一些定义和语句 #include int a=4,b=3,*p,*q,*w;

p=&a; q=&b; w=q; q=NULL;

则以下选项中错误的语句是 C 。(1级) A) *q=0; B) w=p; C) *p=&a; D) *p=*w; 23.有以下程序

int *f(int *x,int *y) { if(*x<*y) return x; else return y; }

main()

{ int a=7,b=8,*p,*q,*r; p=&a; q=&b; r=f(p,q);

printf(\}

执行后输出结果是 B 。(2级)

A) 7,8,8 B) 7,8,7 C) 8,7,7 D) 8,7,8 24.有以下程序 main()

{ char *s[]={\p=s[1];

printf(\}

执行后输出结果是 C 。(1级)

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(\}

执行后输出结果是 B 。(1级)

A) 随机值 B) 0 C) 5 D) 6 26.有以下程序 main()

{ char str[]=\while(*ps) ps++;

for(ps--;ps-str>=0;ps--) puts(ps);}

执行后输出结果是 C 。(1级)

A) yz<回车>xyz B) z<回车>yz

C) z<回车>yz<回车>xyz D) x<回车>xy<回车>xyz 27.有以下程序 main()

{int a[][3]={{1,2,3},{4,5,0}},(*pa)[3],i; pa=a;

for(i=0;i<3;i++)

if(i<2) pa[1][i]=pa[1][i]-1; else pa[1][i]=1;

printf(\}

执行后输出结果是 A 。(2级)

A) 7 B) 6 C) 8 D) 无确定值 28.有以下程序

void fun(int *a,int i,int j) { int t; if (i

{ t=a[i];a[i]=a[j];a[j]=t; fun(a,++i,--j); } }

main()

{ int a[]={1,2,3,4,5,6},i; fun(a,0,5);

for(i=0;i<6;i++) printf(\}

执行后输出结果是 A 。(2级)

A) 6 5 4 3 2 1 B) 4 3 2 1 5 6 C) 4 5 6 1 2 3 D) 1 2 3 4 5 6 29.有以下程序

main(int argc,char *argv[]) { int n,i=0;

while(argv[1][i]!='\\0') { n=fun(); i++;}

printf(\}

int fun()

{ static int s=0; s+=1; return s; }

假设程序编译、连接后生成可执行文件exam.exe,若键入以下命令

exam 123〈回车〉

则运行结果为 A 。(2级)

A) 6 B) 8 C) 3 D) 4 30.有如下程序段 int *p,a=10,b=1 p=&a; a=*p+b;

执行该程序段后,a的值为 B 。(1级)

A) 12 B) 11 C) 10 D) 编译出错

31.对于基类型相同的两个指针变量之间,不能进行的运算是 C 。(0级)

A)< B) = C) + D) –

32.以下函数返回a所指数组中最小的值所在的下标值。

fun(int *a, int n) { int i,j=0,p; p=j;

for(i=j;i在下划线处应填入的是 D 。(0级)

A) i=p B) a[p]=a[i] C) p=j 33.有如下说明

int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a; 则数值为9的表达式是 B 。(1级)

A) *p+9 B) *(p+8) C) *p+=9 34.有如下程序 main()

{ char s[]=”ABCD”, *P;

for(p=s+l;p;p++) printf(“%s\\n”,*p); } 该程序的输出结果是 D 。(2级)

A) ABCD B) A C) B D) BCD BCD B C CD CD C D D D D 35.有如下程序 main()

{ char ch[2][5]={“6937”,”8254”},*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?;j+=2) s=10*s+p[i][j]-?0?; printf(“%d\\n”,s); }

该程序的输出结果是 C 。(2级)

A) 69825 B) 63825 C) 6385 36.执行以下程序后,a的值为 C 。(1级)

D) p=i

D) p+8 D) 693825

int *p, a = 10, b=1; p = &a; a = *p*b;

A) 12 B) 编译出错 C) 10 D) 1

37.以下各语句或语句组中,正确的操作是 C 。(1级)

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]地址的表达式是 C 。(1级)

A) p+1 B) a+1 C) a++ D) ++p

39.下列语句行中,哪些语句能正确进行字符串赋值操作 B 。(1级)

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.以下程序的输出结果是 D 。(1级) #include void main(void)

{ char a[] = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0}, *p = a+5;

printf(“%d”, *--p);

}

A) 非法 B) a[4]的地址 C) 3 D) 5

41.以下程序的运行结果是 C 。(2级)

#include void main(void)

{int a[4][3]={ 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12}; int *p[4], j;

for (j=0; j<4; j++) p[j]=a[j];

printf(\

}

A) 4, 4, 9, 8 B) 程序出错 C) 4, 2,12,11 D) 1, 1, 7, 5

42.若有下列说明和语句:int a[4][5], (*p)[5]; p = a; 则对a数组元素的正确引用是 B 。(1级)

A) p+1 B) *(p+3) C) *(p+1)+3 D) *(*p+2)

43.若有以下定义和语句,则输出结果是 D 。(2级)

int **pp,*p,a=10,b=20;

pp=&p;p=&a;p=&b;printf(\

A)10,20 B)10,10 C)20,10 D)20,20 44.若有以下定义和语句,则输出结果为 A 。(1级)

char *sp=”\\t\\b\\\\\\0English\\n”; printf(“%d”,strlen(sp));

A)12 B)3 C)17 D)13

45.以下程序输出的结果是 C 。(2级)

void main()

{ int a=5,*p1,**p2; p1=&a,p2=&p1; (*p1)++;

printf(“%d\\n”,**p2); }

A) 5 B) 4 C) 6 D) 不确定

46.设void f1(int * m,long n);int a;long b;则以下调用合法的是 B 。(2级) A)f1(a,b); B)f1(&a,b); C)f1(a,&b); D)f1(&a,&b);

47.设int x;,则经过 B 后,语句*px=0;可将x值置为0。(1级) A) int * px; B)int * px=&x; C) float * px; D)float * px=&x;

48.若有说明:int i, j=2,*p=&i;,则能完成i=j赋值功能的语句是 B 。

(1级)

A) i=*p; B) *p=*&j; C) i=&j; D) i=**p;

49.以下定义语句中,错误的是 D 。(1级)

A) int a[]={1,2}; B) char *a[3]; C) char s[10]=\ D) int n=5,a[n]; 50.阅读以下函数 fun(char *sl,char *s2) { int i=0;

while(sl[i]==s2[i]&&s2[i]!='\\0') i++; return(sl[i]=='\\0'&&s2[i]=='\\0'); }

此函数的功能是 C 。(2级) A) 将s2所指字符串赋给s1

B) 比较s1和s2所指字符串的大小,若s1比s2的大,函数值为1,否则函数值为0

C) 比较s1和s2所指字符串是否相等,若相等,函数值为1,否则函数值为0 D) 比较s1和s2所指字符串的长度,若s1比s2的长,函数值为1,否则函数值为0

51. 若有以下定义:

int a[10],*p=a; 则*(p+3)表示的是 B 。(01~02第二学期试题)

A)元素a[3]的地址 B)元素a[3]的值 C)元素a[4]的地址 D)元素a[4]的值 52. 若有如下语句: int *p1,*p2;则其中int所指的是 D 。(01~02第二学期试题)

A)p1的类型 B)*p1和*p2的类型

C)p2的类型 D)p1和p2所能指向变量的类型 53. 有如下语句:

int a=5,b=8,*p1,*p2; p1=&a; p2=&b;

若有如下表达式: p1=p2; 则能正确表示该语句执行后变量在内存中的存储结构的图示为 D 。(01~02第二学期试题)

A) B) p1 5 a p1 5 a p2 8 b p2 8 b

C) D) p1 5 a p1 5 a

p2 8 b p2 8 b

54. 有如下语句 int a=10,b=20,*p1,*p2; p1=&a; p2=&b; 如图1所示;若实现如图2所示的存储结构,可选用的赋值语句是: B 。(往届试题)

p1 p2 p1 p2

a b a b 10 20 10 20 图1 图2

A)*p1=*p2 B)p1=p2 C)p1=*p2 D)*p1=p2

55. 若有说明:int i, j , *p=&i ;则下面语句中与i =j;等价的语句是: A 。(往届试题)

A)*p=*&j ; B)i = *p C)i=&j ; D)i=**p 56. 以下程序的输出结果是 。(2级) main()

{char *s=\int k=0,a=0,b=0; do {k++;

if (k%2==0) {a=a+s[k]-'0';continue;} b=b+s[k]-'0; a=a+s[k]-'0'; }while(s[k+1]);

printf(\}

A)k=3 a=2 b=3 B)k=3 a=3 b=2 C)k=2 a=3 b=2 D)k=2 a=2 b=3 57. 设有以下定义:

int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12}; int(*ptr)[3]=a,*p=a[0];

则下列能正确表示数组元素a[1][2]的表达式是 。(1级) A)*((*ptr+1)[2]) B)*(*(p+5))

C)(*ptr+1)+2 D)*(*(a+1)+2) 58. 执行以下程序后,y的值是 。(1级) main()

{ int a[]={2,4,6,8,10}; int y=1,x,*p; p=&a[1];

for(x=0;x<3;x++)

y+=*(p+x); printf(\ }

A) 17 B) 18 C) 19 D) 20

59. 阅读程序

#include main()

{ int a[10]={1,2,3,4,5,6,7,8,9,0},*p; p=a;

printf(\ printf(\ }

该程序有两个printf语句,假设第一个printf语句输出的是194,则第二个printf语句输出结果是 。(1级)

A)203 B) 204 C) 1a4 D) 1a6 60.下列程序的输出结果是 。(2级) main()

{static int num[5]={2,4,6,8,10};

int *n,**m; n=num; m=&n;

printf(\ printf(\ }

A) 4 4 B) 2 2 C) 2 4 D) 4 6 61.以下程序的输出结果是 。(2级) #include fut(int * *s,int p[2][3]) {* *s=p[1][1];} main()

{int a[2][3]={1,3,5,7,9,11},*p; p=(int *)malloc(sizeof(int)); fut(&p,a);

printf(\ }

A) 1 B) 7 C) 9 D) 11

62. int a[10],*p;下列表达式正确的是 。(1级)

A) p=a; B) p=a[0]; C) *p=&a[0]; D) p=&a;

63. 执行以下程序段后y的值为 。(1级) static int a[]={1,3,5,7,9}; int y,x,*ptr; y=1;

ptr=&a[1];

for(x=0;x<3;x++) y*=*(ptr+x);

A) 105 B) 15 C) 945 D) 无确定值 64.执行以下程序段后,m的值是 。(1级) static int a[]={7,4,6,3,10};

int m,k,*ptr; m=10; ptr=&a[0];

for(k=0;k<5;k++)

m=(*(ptr+k)

A) 10 B) 7 C) 4 D)3 65.执行以下程序段后,m的值为 。(1级) static int a[2][3]={1,2,3,4,5,6}; int m,*ptr; ptr=&a[0][0];

m=(*ptr)*(*(ptr+2))*(*(ptr+4));

A) 15 B)48 C) 24 D) 无定值

66.若有以下定义和语句 int w[2][3],(*pw)[3];pw=w; 则对w数组元素的非法引用是 。(1级)

A) *(w[0]+2) B) *(pw+1)[2] C) pw[0][0] D) *(pw[1]+2)

67.以下程序的输出结果是 。(1级) Static int a[2][3]={1,2,3,4,5,6},(*p)[2],I; p=a;

for (I=0;I<3;I++)

printf(\

A) 输出不确定 B) 3 4 5 C) 2 3 4 D) 4 5 6

68.若有以下定义

int a[]={1,2,3,4,5,6,7,8,9,10},*p=a; 则值为3的表达式是 。(1级)

A) p+=2,*(p++) B) p+=2,*++p C) p+=3,*p++ D)p+=2,++*p

69.若有以下定义和语句

int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;

则不能表示a数组元素的表达式是 。(1级)

A) *p B) a[10] C) *a D) a[p-a] 70.设char ﹡﹡s;以下正确的表达式是 。(2级)

A)s=〞computer 〞; B)﹡s=〞computer 〞; C)﹡﹡s=〞computer 〞; D)﹡s=?c?;

二、填空题

1.若有定义:int a[2][3]={2,4,6,8,10,12};则﹡(&a[0][0]+2﹡2+1)的值是 ,﹡(a[1] +2)的值是 。(1级) 2.完成以下有关数组描述的填空。(0级)

(1) C语言中,数组名是一个不可改变的 ,不能对它进行赋值运算。 (2) 数组在内存中占用一段连续的存储空间,它的首地址由 表示。 3.定义语句int ﹡f ( );和int (﹡f) ( );的含义分别为 和 。 4.在C程序中,指针变量能够赋 值或 值。(0级)

5.若定义char *p=“abcd”;则 printf(“%d”,*(p+4));的结果为 。(1级)6.以下函

数用来求出两整数之和,并通过形参将结果传回,请填空。 (1级) void func(int x,int y, ) { *z=x+y; }

7.若有以下定义,则通过指针p引用值为98的数组元素的表达式是 。(1级) int w[10]={23,54,10,33,47,98,72,80,61}, *p=w;

8.int a[10];则a[i]的地址可表示为 或 ,a[i]可表示为 。(0级) 9.在C语言中,对于二维数组a[i][j]的地址可表示为 或 。其中,对于a[i]来说,它代表 ,它是一个 。(0级) 10.一个指针变量P和数组变量a的说明如下: int a[10],*p;

则p=&a[1]+2的涵义是指针p指向数组a的第 个元素。(0级) 11.一个数组,其元素均为指针类型数据,这样得数组叫 。(0级) 12. 16.int *p[4]表示一个 ,int(*p)[4]表示 。(0级) 13.若有以下定义和语句

int w[10]={23,54,10,33,47,98,72,80,61},*p; p=w;

则通过指针p引用值为98的数组元素的表达式是 。(1级) 三、程序填空题

1.以下程序的功能是:通过指针操作,找出三个整数中的最小值并输出。请填空。 (1级)

# include main ( )

{ int ﹡a, ﹡b, ﹡c, mun, x, y, z;

a=&x; b=&y; c=&z;

printf (〞输入3个整数: 〞); scanf (〞%d%d%d 〞, a, b, c);

printf (〞%d, %d, %d\\n 〞, ﹡a, ﹡b, ﹡c); num=﹡a;

if(﹡a>﹡b) (1) ; if(num>﹡c) (2) ;

printf (〞输出最小整数:%d\\n 〞, num); }

2.下面程序是把从终端读入的一行字符作为字符串放在字符数组中,然后输出。请填空。

(1级)

int i; char s[80], ﹡p;

for ( i=0; i<79; i++ ) { s[i]=getchar( ); if ( s[i]= =ˊ\\nˊ) break; } s[i]= (1) ; p= (2) ; while ( ﹡p ) putchar ( ﹡p++); 3.下面程序是判断输入的字符串是否是“回文”,(顺读和倒读都一样的字符串称“回文”,如level)。请填空。(2级) # include # include main ( )

{ char s[81], ﹡p1, ﹡p2; int n;

gets ( s ); n=strlen ( s ); p1=s; p2= (1) ;

while ( (2) ) { if ( ﹡p1!= ﹡p2 ) break;

else { p1++; (3) ; } }

if (p1

4.以下函数把b字符串连接到a字符串的后面,并返回a中新字符串的长度。请填空。(2级)

Strcen(char a[], char b[]) { int num=0,n=0;

while(*(a+num)!= (1) ) num++;

while(b[n]){*(a+num)=b[n]; num++; (2) } ;} return(num); }

5.设函数findbig已定义为求3个数中的最大值。以下程序将利用函数指针调用findbig

函数。请填空。(1级) main()

{ int findbig(int,int,int); int (*f)(),x,y,z,big;

f= (1) ;

scanf(\big=(*f)(x,y,z);

printf(\}

6.以下函数的功能是,把两个整数指针所指的存储单元中的内容进行交换。(1级)

void exchange(int *x, int *y) { int t; t=*y;

*y = (1) ; *x = (2) ; }

7.定义compare(char *s1, char *s2)函数,以实现比较两个字符串大小的功能。 (2级)

#include

void compare(char *s1, char *s2)

{ while(*s1&&*s2&& (1) ) { s1++;

(2) ; }

return (3) ;

}

void main(void)

{printf(\}

8.以下程序求a数组中的所有素数的和,函数isprime用来判断自变量是否为素数。素数是只能被1和本身整除且大于1的自然数。(2级) #include int isprime(int); void main(void)

{int i,a[10],*p=a,sum=0; printf(\

for (i=0;i<10;i + + ) scanf(\for (i=0;i<10;i + + )

if (isprime(*(p+ (1) )) == 1) { printf(\ sum += *(a+i); }

printf(\ }

int isprime(int x) { int i;

for (i=2;i<=x/2;i + + ) if (x%i = = 0) return (0); (2) ; }

9.以下函数的功能是删除字符串s中的所有数字字符。请填空。(2级)

viod dele(char *s) { int n=0,i;

for(i=0;s[i];i++) if( (1) ) s[n++]=s[i];

s[n]= (2) ; }

10. 下面函数的功能是求出形式参数array所指的数组中的最大值和最小值,并把最

大值和最小值分别存入max和min所对应的实参中,请把下面的程序填写完整。(1级)

void find (array,n,max.min) int *array,n,*max.*min { int *p,*data_end; data_end=array+n; *max=*min=*array;

for(p=array+1;p

{if( (1) ) *max= (2) else if ( (3) ) *min= (4) } return;

} 四、读程序写结果题

1.以下程序的执行结果是 。(1级) # include main ( )

{ int i, j; int ﹡p,﹡q; i=2; j=10; p=&i; q=&j; ﹡p=10; ﹡q=2; printf(〞i=%d, j=%d\\n 〞, i, j); } 2.以下程序的执行结果是 。(2级) # include main ( )

{ int ﹡﹡p,﹡q; i=10; q=&i; p=&q; printf(〞%d\\n 〞, ﹡﹡p); } 3.以下程序的执行结果是 。(1级) # include main ( )

{ int ﹡p; p=&i; ﹡p=2; p++; ﹡p=5; printf(〞%d,〞, ﹡p); p﹣﹣; printf(〞%d\\n 〞, ﹡p); } }

4.以下程序的执行结果是 。(1级) # include main ( )

{ int ﹡p, i; i=5; p=&i; i=﹡p+10; printf(〞i=%d\\n〞, i); } 5.以下程序的执行结果是 。(1级) # include main ( )

{ char s[ ]=”abcdefg”; char ﹡p; p=s; printf(〞ch=%c\\n〞,

﹡(p+5)); }

6.以下程序的执行结果是 。(1级) # include

main ( )

{ int a[ ]={2,3,4}; int s, i,﹡p; s=1; p=a;

for (i=0; i<3; i++) s﹡=﹡(p+i); printf(〞s=%d\\n〞, s); } 7.以下程序的执行结果是 。 (1级) # include

main ( )

{ int a[ ]={1,2,3,4,5,6},﹡p; for (p=&a[5];p>=a;p﹣﹣)

printf(〞%d〞, ﹡p); printf(〞\\n〞); } 8.以下程序的执行结果是 。(2级) # include main ( )

{ char ch[2][5]={”6934”,”8254”},﹡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(〞%d\\n〞, s); }

9.以下程序的执行结果是 。(2级)

# include

main ( )

{ char ﹡p1,﹡p2, str[20]=”xyz”; p1=”abcd”; p2=”ABCD”; strcpy (str+1, strcat (p1+1,p2+1)); printf(〞%s〞, str); }

10.以下程序的执行结果是 。(2级)

#include

void main(void)

{char *s, *s1 = “here is”, *s2 = “key”;

s = s1;

while (*s1!=?\\0?) s1++; while (*s1++=*s2++); s2 = s;

while (*s2!=?\\0?) s2++; printf(“%d\\n”, s2-s);

}

11.以下程序的执行结果是 。(2级)

#include void main(void)

{static int a[] = {1, 3, 5, 7}; int *p[3] = {a+2, a+1, a}; int **q = p;

printf(“%d\\n”, *(p[0]+1) + **(q+2));

}

12.以下程序的执行结果是 。(2级) #include

fut(int **s, int p[2][3]) { **s=p[1][1]; }

void main(void)

{ int a[2][3] = {1,3,5,7,9,11}, *p; p = (int *) malloc(sizeof(int)); fut(&p,a);

printf(\}

13.以下程序的执行结果是 。(1级)

#include void main(void)

{ static char a[]=\char *p1,*p2; int k;

p1=a; p2=b;

for(k=0;k<=7;k++)

if (*(p1+k)==*(p2+k)) printf(\ printf(\

}

14.以下程序的执行结果是 。(2级)

#include

int fun(int x,int y,int *cp,int *dp) { *cp=x+y; *dp=x-y; }

void main(void) { int a, b, c, d; a=30; b=50; fun(a,b,&c,&d);

printf(\}

15.下列程序的输出结果 。(1级)

#include main()

{char b[]=\char *chp=&b[7]; while(--chp>&b[0]) putchar(*chp); putchar('\\n'); }

16. 阅读程序

main()

{char str1[]=\,str2[10]; char *p1=str1,*p2=str2; scanf(\printf(\printf(\}

运行上面的程序,输入字符串PEOPLE AND COMPUTER,程序的输出结果是 。(2级)

17. 下列程序的运行结果是 。(2级) main() { int i,*p;

static int a[4]={1,2,3,4}; p=a;

for(i=0;i<3;i++)

printf(\ }

18.以下程序的运行结果是 。(2级) main() { int i,*p;

static int a[4]={1,2,3,4}; p=a;

for(i=0;i<3;i++)

printf(\ }

19. 分析程序

#define FORMAT \ main()

{static int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12} printf(FORMAT,a,*a);

printf(FORMAT,a[0],*(a+0); printf(FORMAT,&a[0],&a[0][0]); printf(FORMAT,a[1],a+1);

printf(FORMAT,&a[1][0],*(a+1)+0); printf(FORMAT,a[2],*(a+2)); printf(FORMAT,&a[2],a+2);

printf(FORMAT,a[1][0],*(*(a+1)+0)); }

如果数组a的首地址为404,则程序的运行结果为 。(2级)

五、编程题

1.编写一个程序计算一个字符串的长度。(1级)

2.编写一个程序,用12个月份的英文名称初始化一个字符指针数组,当键盘输入整数为1到12时,显示相应的月份名,键入其它整数时显示错误信息。(1级) 3.编一程序,将字符串computer赋给一个字符数组,然后从第一个字母开始间隔地输出该串。请用指针完成。(2级)

4.编一程序,将字符串中的第m个字符开始的全部字符复制成另一个字符串。要求在主函数中输入字符串及m的值并输出复制结果,在被调函数中完成复制。 (2级)

5.设有一数列,包含10个数,已按升序排好。现要求编一程序,它能够把从指定位置开始的n个数按逆序重新排列并输出新的完整数列。进行逆序处理时要求使用指针方法。试编程。(例如:原数列为2,4,6,8,10,12,14,16,18,20,若要求把从第4个数开始的5个数按逆序重新排列,则得到新数列为2,4,6,16,14,12,10,8,18,20。)(2级)

6.通过指针数组p和一维数组a构成一个3×2 的二维数组,并为a数组赋初值2、4、6、8、?。要求先按行的顺序输出此“二维数组”,然后再按列的顺序输出它。试编程。(2级)

7.编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n(利用指针函数) (2级)

8.编写一程序,从键盘输入10个数存入数组data[10]中,同时设置一个指针变量 p指向数data,然后通过指针变量p对数组按照从小到大的顺序排序,最后输 出其排序结果。(2级)

9. 编一程序,从一个3行4列的二维数组中找出最大数所在的行和列,并将最大 值及所在行列值打印出来。要求将查找和打印的功能编一个函数,二维数组的 输入在主函数中进行,并将二维数组通过指针参数传递的方式由主函数传递到 子函数中。(2级)

10. 编一程序,首先将一个包含10个数的数组按照升序排列,然后将从一指定位 置m开始的n个数按照逆序重新排列,并将新生成的相互组输出。要求使用指

针控制方法实现上述功能。(2级)

11.遍一程序,在主函数中输入10个数并保存到数组,同时编写一被调用函数 funct,函数funct有两个形式参数(其中一个用于接收数组,另一个表示该数 组的元素个数),funct功能是找出该数组中的最大值的位置并将该最大值的地 址作为函数funct的返回值到主函数中。在主函数中打印出该数组的最大值。(2级) 12.编一程序,设置一个排序函数sort,该函数将数组按照从小到大的顺序进行排序,其中有两个形式参数,一个为指向数组的指针p,另一个为数组的元素个数n。在主函数main()中要求从键盘输入10个数存入数组data[10]中,同时要求调用函数sort对data进行排序,并在main()中输出最终的排序结果。(2级)

本文来源:https://www.bwwdw.com/article/u11w.html

Top