习题六参考答案.pdf_第1页
习题六参考答案.pdf_第2页
习题六参考答案.pdf_第3页
习题六参考答案.pdf_第4页
习题六参考答案.pdf_第5页
已阅读5页,还剩5页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

习题六 1 举例说明什么是指针?如何让指针指向一个变量? 答: 在 C 语言中,一个程序对象的开始存储地址也是一种数据,这种数据也能存于变量中,这种 数据的类型是一种指针类型。专用于存储指针类型值的变量称为指针变量,简称指针。 设有一个 int 类型的变量 k,一个能存储 int 类型变量指针值的指针变量 intPt,则只要将变 量 i 的地址赋给 intPt,就能让 intPt 指向变量 i,如以下代码所示: Int I, *intPt; /定义整型变量 i 和整型指针变量 intPt intPt = /把变量 i 的地址赋给变量 intPt,使 intPt 指向 i 2 举例说明指针的定义和引用指针及引用指针所指变量的方法? 答: 以下代码定义两个整型变量 i 和 j,两个整型指针变量 iPt 和 jPt,并让这两个指针变量 iPt 和 jPt 分别指向两个整型变量 i 和 j,然后通过指针变量 iPt 和 jPt 间接引用整型变量 i 和 j。 Int I = 2, j=3, *iPt, jPt; /定义整型变量 i 和 j,整型指针变量 iPt 和 jPt iPt = jPt = /指针变量 iPt 和 jPt 分别指向整型变量 i 和 j *iPt = *jPt+*iPt+5; /使变量 i 的值为 10 iPt = jPt; /让指针变量 iPt 也指向变量 j 3 举例说明指针与数组名之间的联系与区别。 答: 当指针指向数组的元素时,指针能如同数组哪样使用,由于指针是变量,其值能改变,能使 它指向数组的别的元素。但数组名只能表示数组首元素的指针,并且不能改变。以下代码用 指针求数组元素的和: int a = 1, 2, 3, 4, 5, *pt , s; for(s=0, pt = a; pt void main() char * appt; char *a=“ABCD“, “UVW“, “XYZ“; appt=a; cout void main() float score4=60, 70, 80, 90, 50, 60, 70, 80, 90, 88, 35, 77, 77, 90, 100, 60; float *search(float(*pt)4); float *p; int k, j; for(k=0; k typedef int (*sTbl)5;/单个学生成绩单类型 int scoreTbl5 = /全体学生成绩表 1, 50, 60, 70, 80, 2, 60, 70, 80, 90, 3, 70, 80, 90, 100 ; /* 已知成绩表和学号,返回该生成绩表的函数。 */ int* searchSTbl(int allSTbl5, int n, int no) for(sTbl i = (sTbl)allSTbl0; i char str = “ABCDEFGHABCDEIJKLMNOPQRSTSTUVWXYZUVWCDEFGHIJKGHIJKLMNOPQRST“; char *clearStr(char *s) char *ch, *p, *q; for(p = q = s; *p; p+) for(ch = s; ch double add(double x, double y) return x+y; double sub(double x, double y) return x-y; double mul(double x, double y) return x*y; double div(double x, double y) if(y = 0)return 1.0E+30; return x/y; int main() double(*fpt)(double , double)= add, sub, mul, div; char *menuName=“和“, “差“, “积“, “商“, “; int ans, k; double a, b; while (1) printf(“请选择以下菜单命令。n“); for(k=0; menuNamek0 !=0 ; k+) printf(“t%d:求%sn“, k+1, menuNamek); printf(“t 其他选择结束程序运行。n“); scanf(“%d“, if (ansk) break; printf(“输入两个运算数: n“); scanf(“%lf%lf“, printf(“nt%s=%fn“, menuNameans-1, (*fptans-1)(a, b); return 0; 15写出以下函数的功能 char *strpos(char *s, char *t) char *j, *k; for(; *s; s+) for(j = s, k = t; *k j+, k+) ; if (k != t return NULL; 答: 函数在参数 1 字符串中寻找字符串 2 的第一次出现。找到时,返回找到处的首字符指针。如 果没有找到,返回空指针。 16写出以下程序的输出结果 #include int a = 2, c = 4; f(int a, int *x) int b = 10; static int c = 20; b += a+; c += a + b; *x = c+2; void main() f(a, printf(“In main(1): a = %d, c = %dn“, a, c); f(3+c, printf(“In main(2): a = %d, c = %dn“, a, c); 答: In main(1): a = 2, c = 37 In main(2): a = 128, c = 37 17编写输入,输出和排序 3 个函数。3 个函数都以指针数组和数组元素个数为形参,分别 实现将一组离散的变量顺序输入,输出和从小到大排序。 答: #include int a, b, c, d, e, f; void input(int *pt, int n) printf(“为%d 个离散整型变量输入值n“, n); for(int *k=pt; k *(j+1) /* 交换变量的指针 */ int t=*j; *j=*(j+1); *(j+1)=t; int main() int *ap= input(ap, 6); printf(“排序前变量的值n“); output(ap, 6); sort(ap, 6); printf(“排序后变量的值n“); output(ap, 6); return 0; 18用指针描述以下计算: (1)将方阵的右上三角元素与左下三角对应元素交换,使方阵沿着主对角线转 180。 (2)字符串中的字符个数。 (3)将字符串 s2 中的前 n 个字符复制到字符数组 s1。 (4) 将字符串s2 中的字符复制连接在字符数组s1 中字符串之后, 使它存有更长的字符串。 (5)将字符串 s 中的小写英文字母改写成大写英文字母。 (6)整理字符串,将字符串中前导和后随的空白符删去,字符串中间连续的多个空白 符只保留一个,去掉多余的空白符。 答: (1) 设方阵为 n 行 n 列,且方阵名为 a。 int *u, *p, *q, k, j, t; for(u = k 0; k-, u += n+1) for(p = u, q = p+n-1, j = k; j 0; j-, q+=n, p+) t = *p; *p = *q; *q = t; (2)字符串中的字符个数。 设字符串首字符指针为 str,字符个数统计于变量 c。 for(char *p = str; *p; p+) ; c = p-str; (3)将字符串 s2 中的前 n 个字符复制到字符数组 s1。 char *p = s1, *q = s2; int k = 0; while(k+ = a char *s2=“Beijing“; void swapStr(char* t= s1; s1 = s2; s2 = t; void main() cout #include char str=“ABC“; pp(char *s, int k) int i;

温馨提示

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

评论

0/150

提交评论