第八章 习题及答案.doc_第1页
第八章 习题及答案.doc_第2页
第八章 习题及答案.doc_第3页
第八章 习题及答案.doc_第4页
第八章 习题及答案.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第八章 习题一、选择题1、若x为整型变量,p是指向整型数据的指针变量,则正确的赋值表达式是( )。A)p=&x B)p=x C)*p=&x D)*p=*x2、已知:int a10=1,2,3,4,5,6,7,8,9,10,*p=a;则不能表示数组a中元素的表达式是 ( )。A)*p B)a10 C)*a D)ap-a3、已知:int a34,*p=a;则p表示 ( )。 A) 数组a的0行0列元素 B) 数组a的0行0的地址C) 数组a的0行首地址 D) 以上均不对4、设有说明int (*ptr)M;其中的标识符ptr是 ( )。 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 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&cn”,c1,c2);程序运行后的输出结果是( ) 。 A) Ab B) aa C) Aa D) Bb8、 下列程序段的输出结果是( ) 。 A) 2 1 4 3 B) 1 2 1 2 C) 1 2 3 4 D) 2 1 1 2void 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+810、有以下程序main()intx8=8,7,6,5,0,0,*s;s=x+3printf(%dn,s2);执行后输出结果是( ) 。 A) 随机值B) 0C) 5D) 611、 有如下程序main() char s=”ABCD”, *P;for(p=s+l; ps+4; p+) printf (“%sn”,p);该程序的输出结果是( ) 。 A) ABCD B) A C) B D) BCDBCD B C CDCD C D DD D12、 已定义以下函数fun(char *p2, char *p1) while(*p2=*p1)!=0)p1+;p2+; 函数的功能是( )。A) 将p1所指字符串复制到p2所指内存空间B) 将p1 所指字符串的地址赋给指针 p2C) 对p1和p2两个指针所指字符串进行比较D) 检查p1和p2两个指针所指字符串中是否有013、有以下程序main()char *s=one,two,three,*p;p=s1;printf(%c,%sn,*(p+1),s0);执行后输出结果是( )。 A) n,twoB) t,oneC)w,oneD) o,two14、 若有以下定义和语句:int s45,(*ps)5;ps=s;则对s数组元素的正确引用形式是( )。 A) ps+1 B) *(ps+3) C) ps02 D) *(ps+1)+315、有以下程序段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,*p=&a00;则表示元素a00的方法有指针法: (1) ,数组名法: (2) 。*(p+1)的值为 (3) 。3、以下程序的输出结果是 。main() int arr =30,25,20,15,10,5, *p=arr; p+; printf(“%dn”,*(p+3); 4、 以下程序调用findmax函数返回数组中的最大值。 findmax(int *a,int n) int *p,*s;for(p=a,s=a;p-an;p+)if ( ) s=p;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个整数,用函数编程实现计算最大值和最小值,并返回它们所在数组中的位置。3.将5个字符串从小到大排序后输出。4.编写一个能对任意mn阶矩阵进行转置运算的函数Transpose()。第八章 习题答案一、选择题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) 23. 104. *p*s5. *(+p)三、编程题1. 编程实现从键盘输入一个字符串,将其字符顺序颠倒后重新存放,并输出这个字符串。#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);/*输出字符串*/*函数功能: 实现字符串逆序存放 函数参数: 字符指针变量,所指向的存储单元存放源字符串,逆序后的字符串也存放于此 返回值: 无*/void 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-)temp = *pStart;*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); /* 输入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,指向的地址单元存储最大值在数组中的下标位置 函数返回值: 最大值*/int FindMax(int num, int n, int *pMaxPos)int i, max;max = num0;/*假设num0为最大*/*pMaxPos = 0;/*假设最大值在数组中的下标位置为0 */for (i = 1; i max)max = numi;*pMaxPos = i;return max ;/*函数功能: 求n个数中的最小值及其所在下标位置函数入口参数: 整型数组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个字符串从小到大排序后输出。#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) temp = colorj; colorj = colorj+1; colorj+1 = temp; 4. 编写一个能对任意mn阶矩阵进行转置运算的函数Transpose()。#include #define ROW 3#define COL 4void Transpose(int (*a)COL, int (*at)ROW, int row, int col);void InputMatrix(int (*s)COL, int row, int col);void PrintMatrix(int (*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); /*输出转置矩阵,*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+)*(*(at+j)+i) = *(*(a+i)+j);void InputMatrix(int (*s)COL, i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论