当前位置:文档之家› 二级C语言程序设计习题及解答CH9数组

二级C语言程序设计习题及解答CH9数组

[9.12] 若有定义和语句: int c[4][5],(*cp)[5]; cp=c; 则对 C 数组元素的引用正确的是 A) cp+1 B) *(cp+3) C) *(cp+1)+3 D) *(*cp+2) 【解析】cp 是行指针,只表示行,若要表示元素,则需要配合列 A:表示第二行 B:表示第四行的内容,但是为指出那一列 C:*(cp+1)+3 只是地址不是元素 值,需改为 *( *(cp+1)+3)
for(i=0;i<2;i++) {
if(i==0) aa[i][i+1]=*p+1; else ++p; printf("%d",*p); } printf("\n"); } 【解析】p 指向第一个元素 2,if(i==0) aa[i][i+1]=*p+1;给 aa[0][1]赋值 2+1=3 打印出 p 的 内容为 2,第二次 for 循环++p,使 p 指向下一个元素即 aa[0][1]=3,输出其内容为 3
[9.6] 以下程序的输出结果是 A) 6 B) 8 C) 4 D) 2 main() { int a[]={2,4,6,8},*p=a,i;
for(i=0;i<4;i++) a[i]=*p++; printf("%d\n",a[2]); } 【解析】p=a,相当于重新把 a 中的内容赋给 a 本身,所以 a[2]=6
[9.16] 以下程序的输出结果是 A) 60 B) 68 C) 99 D) 108 main() { int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23}; int (*p)[4]=a,i,j,k=0; for(i=0;i<3;i++) for(j=0;j<2;j++)
i++; j--; } } main()
{ int a[10]={1,2,3,4,5,6,7,8,9,0},i,*p=a; fun(p,0,3); fun(p,4,9); fun(p,0,9); for(i=0;i<10;i++) printf("%d",*(a+i)); } 【解析】为了使大家清晰地看出 fun(int *s,int n1,int n2)的作用,我自己完善了程序如下: #include <stdio.h> #include <stdlib.h> fun(int *s,int n1,int n2) { int i,j,t;
ห้องสมุดไป่ตู้
[9.22] 以下程序的输出结果是 3 .
#define N 5
fun(char *s,char a,int n)
[9.13] 若已定义: int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12},(*prt)[3]=a,*p=a[0]; 则能够正确表示数组元素 a[1][2]的表达式是 A) *((*prt+1)[2]) B) *(*(p+5)) C) (*prt+1)+2 D) *(*(a+1)+2) 【解析】A:多了外层的*(),B:p 是行地址,加 5 越界。C:少了外层的*() [9.14] 若有定义和语句: int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12},(*prt)[3]=a,*p[4],i; for(i=0;i<4;i++) p[i]=a[i]; 则下能够正确表示 a 数组元素的表达式是 A) a[4][3] B) p[0][0] C) prt[2][2] D)(*(p+1))[1] [9.15] 以下程序的输出结果是 A) 23 B) 26 C) 33 D) 36 main() { int aa[3][3]={{2},{4},{6}},i,*p=&aa[0][0];
[9.8] 以下程序中若第一个 printf 语句输出的是 194,则第二个 printf 语句的输出结果是 A) 212 B) 204 C) 1a4 D) 1a6 12 main() { int a[]={1,2,3,4,5,6,7,8,9,0},*p; p=a; printf("%x\n",p); printf("%x\n",p+9); } 【解析】因为开始 p 的地址为 194,p+9 是指指针向后移动 9 个元素,而不是 9 个字节,每 个 int 占 2 个字节,所以共移动 18 个字节,1 个字节占一个存储单位,%x\n"是 16 进制,将 18 转化成 16 进制是 12,所以 194+12=2a6
[9.11] 当运行以下程序时输入三行,每行都是在第一列上开始,<CR>代表 Enter 键; a<CR>
b<CR> cdef<CR> 则程序的输出结果是 A)abcdef B)a C)a D)a
bbb c cd cdef d f #include "stdio.h" #define N 6 main() { char c[N]; int i=0; for(i=0;i<N;i++) c[i]=getchar(); for(i=0;i<N;i++) putchar(c[i]); } 【解析】回车键也是字符,所以 a<CR> b<CR> cd 这六个字符输出
第九章 数组 一、选择题 [9.1] 若已定义: int a[]={0,1,2,3,4,5,6,7,8,9},*p=a,i; 其中 0<=i<=9,则对 a 数组元素的引用不正确的是 A) a[p-a] B) *(&a[i]) C) p[i] D) *(*(a+i))
【解析】A:p 开始是数组 a 首地址,只要 p++则再减去 a 的首地址 a[p-a]就能取到所有 元素,B:&a[i]循环取其地址,*(&a[i]) 是该地址中所存储的元素 C:p 就是指针变量, 相当于 a[i],D: *(a+i) 则正确
i=n1; j=n2; while(i<j) { t=*(s+i); *(s+i)=*(s+j); *(s+j)=t;
i++; j--; } } main() { int a[10]={1,2,3,4,5,6,7,8,9,0},i,*p=a; fun(p,0,3); for(i=0;i<10;i++) printf("%d",*(a+i)); printf("\n"); fun(p,4,9); for(i=0;i<10;i++) printf("%d",*(a+i));printf("\n"); fun(p,0,9); for(i=0;i<10;i++) printf("%d",*(a+i));printf("\n"); } 结果如下:
[9.18] 若有定义语句 int (*p)[M]; 其中的标识符是
A)M 个指向整型变量的指针
B)指向 M 个整型变量的函数指针
C)一个指向具有 M 个整型元素的一维数组指针
D)具有 M 个指针元素的一维指针数组,每个元素都只能指向整型量
二、填空题
[9.19] 若有以下定义:
double w[10];
[9.2] 以下程序段数组所有元素输入数据,应在下划线填入的是 A) a+(i++) B) &a[i+1] C) a+i D) &a[++i] main() { int a[10],i=0; while(i<10) scanf("%d",_); }
【解析】因为要遍历,所以排除 B.C,因为 D 先加 1 再取值,丢了 a[0]
[9.21] 以下程序的输出结果是 12 。 main() { int arr[10],i,k=0;
for(i=0;i<10;i++) arr[i]=i; for(i=0;i<4;i++) k+=arr[i]+i; printf("%d\n",k); } 【 解 析 】 首 先 arr[i]=i; 使 得 arr[] 中 赋 值 0-9 十 个 数 , for 循 环 4 次 , k+=arr[i]+i; 得 k=0+0+1+1+2+2+3+3=12
其实,fun(p,0,3);就是将 a 中的前 4 个元素倒序,fun(p,4,9); 就是将 a 中的第 5 个到第 10 个 倒序,最后 fun(p,0,9);全部元素倒序。
[9.10] 以下程序的输出结果是 A) 4 4 B) 2 2 C) 2 4 D) 4 6 main() { int a[5]={2,4,6,8,10},*p,**k; p=a; k=&p; printf("%d",*(p++)); printf("%d\n",**k); } 【解析】p 指向 a 的第一个元素,printf("%d",*(p++));先输出第一个元素为 2,然后 p++,所 以 p 的地址就为指向 4,k=&p; k 是存放 p 的地址的,*k=p,**k 就是 p 所指的元素为 4,所 以结果为 24
相关主题