《2022年第八章习题及答案 .pdf》由会员分享,可在线阅读,更多相关《2022年第八章习题及答案 .pdf(9页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、名师整理优秀资源第八章 习题一、选择题1、若 x 为整型变量, p 是指向整型数据的指针变量,则正确的赋值表达式是( )。A)p=&x B)p=x C)*p=&x D)*p=*x 2、已知: int a10=1,2,3,4,5,6,7,8,9,10,*p=a;则不能表示数组 a 中元素的表达式是()。A)*p B)a10 C)*a D)ap-a 3、已知 :int a34,*p=a;则 p 表示 ()。A) 数组 a 的 0 行 0 列元素 B) 数组 a 的 0 行 0 的地址C) 数组 a 的 0 行首地址 D) 以上均不对4、设有说明 int (*ptr)M;其中的标识符 ptr 是()
2、。A) M 个指向整型变量的指针B) 指向 M个整型变量的函数指针C) 一个指向 M个整型元素的一维数组的指针D) 具有 M个指针元素的一维指针数组, 每个元素都只能指向整型变量5、已知 :char str=OK!;对指针变量 ps 的说明和初始化是()。A) char ps=str; B) char *ps=str; C) char ps=&str; D) char *ps=&str; 6、 若有以下调用语句 , 则不正确的 fun 函数的首部是 ( )。A) void fun(int m, int x) B) void fun(int s, int h41) C) void fun(int
3、 p, int *s) D) void fun(int n, int a) main() int a50,n; fun(n, &a9); 7、 有以下程序void fun(char *a, char *b) a=b; (*a)+; main () char c1=A, c2=a, *p1, *p2; p1=&c1; p2=&c2; fun(p1,p2); printf(“&c&c n”,c1,c2);精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 1 页,共 9 页名师整理优秀资源 程序运行后的输出结果是 ( ) 。A) Ab B) aa C) A
4、a D) Bb 8、 下列程序段的输出结果是 ( ) 。A) 2 1 4 3 B) 1 2 1 2 C) 1 2 3 4 D) 2 1 1 2 void fun(int *x, int *y) printf(“%d ,%d ”, *x, *y); *x=3; *y=4;main() int x=1,y=2; fun(&x,&y); printf(“%d %d ”,x, y);9、 有如下说明int a10=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 10、有以下程序main() in
5、t x8=8,7,6,5,0,0,*s; s=x+3 printf(%dn,s2); 执行后输出结果是 ( ) 。A) 随机值B) 0 C) 5 D) 6 11、 有如下程序main() char s=”ABCD ”, *P;for(p=s+l; ps+4; p+) printf (“%sn”,p);该程序的输出结果是 ( ) 。A) ABCD B) A C) B D) BCD BCD B C CD CD C D D D D 12、 已定义以下函数fun(char *p2, char *p1) while(*p2=*p1)!=0)p1+;p2+; 函数的功能是 ( )。精选学习资料 - - -
6、 - - - - - - 名师归纳总结 - - - - - - -第 2 页,共 9 页名师整理优秀资源A) 将 p1 所指字符串复制到p2 所指内存空间B) 将 p1 所指字符串的地址赋给指针 p2 C) 对 p1 和 p2 两个指针所指字符串进行比较D) 检查 p1 和 p2 两个指针所指字符串中是否有0 13、有以下程序main() char *s=one,two,three,*p; p=s1; printf(%c,%sn,*(p+1),s0); 执行后输出结果是 ( )。A) n,two B) t,one C)w,one D) o,two 14、 若有以下定义和语句 : int s45
7、,(*ps)5; ps=s; 则对 s 数组元素的正确引用形式是( )。A) ps+1 B) *(ps+3) C) ps02 D) *(ps+1)+3 15、有以下程序段main() int a=5, *b, *c; c=&b; b=&a; 程序在执行了 c=&b:b=&a;语句后,表达式: *c 的值是 ( )。A) 变量 a 的地址 B) 变量 b 中的值 C) 变量 a 中的值 D) 变量 b 的地址二、填空题1、要使指针变量与变量之间建立联系,可以用运算符 (1) 来定义一个指针变量,用运算符 (2) 来建立指针变量与变量之间的联系。2、已知 :int a23=1,2,3,4,5,6,
8、*p=&a00;则表示元素 a00的方法有指针法 : (1) ,数组名法 : (2) 。*(p+1) 的值为 (3) 。3、以下程序的输出结果是。main() int arr =30,25,20,15,10,5, *p=arr; p+; printf(“%d n”,*(p+3); 4、 以下程序调用 findmax 函数返回数组中的最大值。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 3 页,共 9 页名师整理优秀资源findmax(int *a,int n) int *p,*s; for(p=a,s=a;p-an;p+) if ( ) s=p;
9、 return(*s); main() int x5=12,21,13,6,18; printf(%dn,findmax(x,5); 5、 以下程序的功能是 : 将无符号八进制数字构成的字符串转换为十进制整数。例如 , 输入的字符串为 :556, 则输出十进制整数 366。请填空。 #include main() char *p, s6; int n; p=s; gets(p); n=*p-0; while(_!=0) n=n*8+*p-0; printf(%d n,n); 三、编程题1. 编程实现从键盘输入一个字符串,将其字符顺序颠倒后重新存放,并输出这个字符串。2. 从键盘任意输入10 个
10、整数,用函数编程实现计算最大值和最小值,并返回它们所在数组中的位置。3. 将 5 个字符串从小到大排序后输出。4. 编写一个能对任意m n 阶矩阵进行转置运算的函数Transpose() 。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 4 页,共 9 页名师整理优秀资源第八章习题答案一、选择题1-5 A B C C B 6-10 D A C B B 11-15 D A C C C 二、填空题1. (1)* (2) & 2. (1)*p (2) *a (3) 2 3. 10 4. *p*s 5. *(+p) 三、编程题1. 编程实现从键盘输入一个字
11、符串,将其字符顺序颠倒后重新存放,并输出这个字符串。#include #include void Inverse(char *pStr); main() char str80; printf(Input a string:n); gets(str); /* 输入字符串 */ Inverse(str); /* 将存于 str数组中的字符串逆序存放*/ printf(The inversed string is:n); puts(str); /* 输出字符串 */ /* 函数功能:实现字符串逆序存放函数参数:字符指针变量, 所指向的存储单元存放源字符串,逆序后的字符串也存放于此返回值:无*/ vo
12、id Inverse(char *pStr) int len; char temp; char *pStart; /* 指针变量 pStart指向字符串的第一个字符*/ char *pEnd; /* 指针变量 pEnd指向字符串的最后一个字符*/ len = strlen(pStr); /* 求出字符串长度*/ for (pStart=pStr,pEnd=pStr+len-1; pStartpEnd; pStart+,pEnd-) 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 5 页,共 9 页名师整理优秀资源 temp = *pStart; *
13、pStart = *pEnd; *pEnd = temp; 2. 从键盘任意输入 10 个整数,用函数编程实现计算最大值和最小值,并返回它们所在数组中的位置。#include int FindMax(int num, int n, int *pMaxPos); int FindMin(int num, int n, int *pMinPos); main() int num10, maxValue, maxPos, minValue, minPos, i; printf(Input 10 numbers:n ); for (i=0; i10; i+) scanf(%d, &numi); /*
14、输入 10 个数 */ maxValue = FindMax(num, 10, &maxPos); /* 找最大值及其所在下标位置 */ minValue = FindMin(num, 10, &minPos); /* 找最小值及其所在下标位置 */ printf(Max=%d, Position=%d, Min=%d, Position=%dn, maxValue, maxPos, minValue, minPos); /* 函数功能:求n 个数中的最大值及其所在下标位置函数入口参数:整型数组num ,存储 n 个整数,整型变量n,表示数组元素个数函数出口参数:整型指针变量pMaxPos ,
15、指向的地址单元存储最大值在数组中的下标位置函数返回值:最大值 */ int FindMax(int num, int n, int *pMaxPos) int i, max; max = num0; /* 假设 num0 为最大 */ *pMaxPos = 0; /* 假设最大值在数组中的下标位置为0 */ for (i = 1; i max) max = numi; 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 6 页,共 9 页名师整理优秀资源*pMaxPos = i; return max ; /* 函数功能:求 n 个数中的最小值及其所在
16、下标位置函数入口参数:整型数组num ,存储 n 个整数,整型变量n,表示数组元素个数函数出口参数:整型指针变量pMinPos,指向的地址单元存储最小值在数组中的下标位置函数返回值:最小值 */ int FindMin(int num, int n, int *pMinPos) int i, min; min = num0; /*假设 num0 为最小 */ *pMinPos = 0; /*假设最小值在数组中的下标位置为0 */ for (i = 1;i 10;i+) if (numi min) min = numi; *pMinPos = i; return min ; 3. 将 5 个字符
17、串从小到大排序后输出。#include void main(void) int i; char *pcolor5= red, blue, yellow, green, purple ; void fsort(char *color , int n); fsort( pcolor, 5 ); for(i = 0; i 5; i+) printf(%s , pcolori); void fsort(char *color , int n) int k, j; char *temp; for(k = 1; k n; k+) for(j = 0; j 0) 精选学习资料 - - - - - - - -
18、 - 名师归纳总结 - - - - - - -第 7 页,共 9 页名师整理优秀资源 temp = colorj; colorj = colorj+1; colorj+1 = temp; 4. 编写一个能对任意m n 阶矩阵进行转置运算的函数Transpose() 。#include #define ROW 3 #define COL 4 void Transpose(int (*a)COL, int (*at)ROW, int row, int col); void InputMatrix(int (*s)COL, int row, int col); void PrintMatrix(in
19、t (*s)ROW, int row, int col); main() int sROWCOL; /*s 代表原矩阵 */ int stCOLROW; /*st代表转置后的矩阵*/ printf(Please enter matrix:n); InputMatrix(s, ROW, COL); /* 输入原矩阵 ,s 指向矩阵s 的第 0 行, 是行指针 */ Transpose(s, st, ROW, COL); /*对矩阵 s 进行转置 , 结果存放于st 中*/ printf(The transposed matrix is:n); PrintMatrix(st, COL, ROW);
20、 /*输出转置矩阵,*st指向 st 的第 0 行, 是行指针 */ /* 函数功能:对任意row 行 col 列的矩阵转置函数入口参数:指向一维整型数组的指针变量a,指向单元存放转置前的矩阵元素整型变量row,矩阵的行数即二维整型数组的行数整型变量col ,矩阵的列数即二维整型数组的列数函数出口参数:指向一维整型数组的指针变量at ,指向单元存放转置后的矩阵元素函数返回值:无*/ void Transpose(int (*a)COL, int (*at)ROW, int row, int col) int i, j; for (i=0; irow; i+) for (j=0; jcol; j
21、+) *(*(at+j)+i) = *(*(a+i)+j); void InputMatrix(int (*s)COL, int row, int col) /*输入矩阵元素 */ 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 8 页,共 9 页名师整理优秀资源 int i, j; for (i=0; irow; i+) for (j=0; jcol; j+) scanf(%d, *(s+i)+j); /* 这里 *(s+i)+j等价于 &sij*/ void PrintMatrix(int (*s)ROW, int row, int col) /*输入矩阵元素 */ int i, j; for (i=0; irow; i+) for (j=0; jcol; j+) printf(%dt, *(*(s+i)+j); /*这里 *(*(s+i)+j)等价于 sij*/ printf( n); 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 9 页,共 9 页