收藏 分享(赏)

实验8 指针的应用.doc

上传人:精品资料 文档编号:10651198 上传时间:2019-12-15 格式:DOC 页数:11 大小:139KB
下载 相关 举报
实验8 指针的应用.doc_第1页
第1页 / 共11页
实验8 指针的应用.doc_第2页
第2页 / 共11页
实验8 指针的应用.doc_第3页
第3页 / 共11页
实验8 指针的应用.doc_第4页
第4页 / 共11页
实验8 指针的应用.doc_第5页
第5页 / 共11页
点击查看更多>>
资源描述

1、3f0798cd21f16516f5fc784e953bdfee.pdf (匡珍春制作)第 1 页 共 11 页实验八 指针的应用( 2 学时)实验前必须做的操作新建文件夹:首先在各自对应的计算机 ncre(k:)盘上对应座位号文件夹内新建一个文件夹,文件夹的名字为“班级+学号的后两位+姓名”,如座位号为 K02,航海 1111 班、学号后两位是 02 的、姓名为“张强”的同学,则其对应的文件夹名字是:航海 111102 张强。然后在刚才建好的文件夹里面再建立一个文件夹,文件夹为“实验 8”。【实验目的】1、 掌握指针的概念、指针变量定义格式;2、 掌握指针的运算;3、 学会用指针对变量进行操

2、作;4、 掌握指针与数组的关系;5、 了解通过指针操作字符串的方法;6、 了解指针与函数的关系;7、 了解指向指针变量的指针。【实验内容】实验任务一 :补充完整程序,掌握 C 语言中与指针有关的算法。程序填空实例8-1:使用指针把从键盘输入的 2个数按从大到小的顺序输出(不改变变量的值) ,请补充完整并上机调试。将填空后完整的程序以文件名为blank8_1.c保存在实验8文件夹里。 (需要存盘)3f0798cd21f16516f5fc784e953bdfee.pdf (匡珍春制作)第 2 页 共 11 页程序填空实例 8-2:输入 10 个整数存入一维数组,再按逆序重新调整该数组中元素的顺序然

3、后再输出。下面给出部分程序的内容,请将程序补充完整,然后上机调试。将填空后完整的程序以文件名为 nixu_1.c 保存在实验 8 文件夹里。(需要存盘)3f0798cd21f16516f5fc784e953bdfee.pdf (匡珍春制作)第 3 页 共 11 页将填空后完整的程序以文件名为 nixu_1.c 保存在实验 8 文件夹里。(需要存盘)程序填空实例 8-3:用指针访问简单变量。从键盘输入三个整数,要求设三个指针变量 p1,p2,p3,使 p1指向三个数的最大者,p2 指向次大者,p3 指向最小者,然后按由小到大的顺序输出这三个数。将填空后完整的程序以文件名为 blank8_3.c

4、保存在实验 8 文件夹里。 (需要存盘)程序填空实例 8-4:用指针来处理一维数组元素。从键盘上输入若干个字符,以符号“”结束。编一个3f0798cd21f16516f5fc784e953bdfee.pdf (匡珍春制作)第 4 页 共 11 页C 程序,统计这些符号的个数(不包括)存入数组元素 a0,将这些符号依次存入 a1、a2、a3、中。接着利用 a0中存放的字符个数,输出这些字符。将填空后完整的程序以文件名为 blank8_4.c 保存在实验 8 文件夹里。 (需要存盘)【待填充的源程序参考清单】#include void main( ) char a100=0, =a, c;scan

5、f (“%c“, while( ) ; *pa=c;scanf(“%c“, printf(“nnumber of string: %dnstring:n“, a0);for(pa=a+1; pa#include #define M 81int fun(char *ss) /*答题开始 */ /*答题开始 */void main( ) char *a;printf(“nPlease enter a string:“);gets(a);fun(a);3f0798cd21f16516f5fc784e953bdfee.pdf (匡珍春制作)第 5 页 共 11 页printf(“nThe new st

6、ring is:%sn“, a);将编写好的程序以文件名 daoxu.c 最终保存在实验 8 文件夹里。(需要存盘)编程实例 8-2:下面程序用来实现 a,b 两个数的交换。#include void main( ) int a, b, *pa, *pb;printf(“please input two integer numbers: n”);scanf(“%d%d”, printf(“the values of a and b before exchanging are: n”);printf(“a=%d b=%dn”, a, b);pa= pb=swap(pa, pb);printf(“

7、the values of a and b after exchanging are: n”);printf(“a=%d b=%dn”, a, b);swap(int *p1, int *p2) int *p;*p=*p1; *p1=*p2; *p2=*p;【问题】: 上述程序能否完成两个数互换的目地,为什么?如何改正? 若把 swap 函数改写成如下形式:能否达到此目的,为什么?如何改正。将改正好的程序以文件名 swap.c 保存在实验 8 文件夹里。(需要存盘)实验任务三 :通过设计一个实际例子掌握数组、指针和函数的综合编程方法。设计程序实例 8-1:打印最高分和学号假设每班人数最多不超过

8、 40 人,具体人数由键盘输入,试编程打印最高分及其学号。程 序 1 用 一 维 数 组 和 指 针 变 量 作 为 函 数 参 数 , 编 程 打 印 某 班 一 门 课 成 绩 的 最 高 分 及 其 学 号 。程序 2 用二维数组和指针变量作为函数参数,编程打印 3 个班学生(假设每班 4 个学生)的某门课成绩的最高分,并指出具有该最高分成绩的学生是第几个班的第几个学生。程序 3 用指向二维数组第 0 行第 0 列元素的指针作为函数参数,编写一个能计算任意 m 行 n 列二维数组中元素的最大值,并指出其所在的行列下标值的函数,利用该函数计算 3 个班学生(假设每班 43f0798cd21

9、f16516f5fc784e953bdfee.pdf (匡珍春制作)第 6 页 共 11 页个学生)的某门课成绩的最高分,并指出具有该最高分成绩的学生是第几个班的第几个学生。程序 4 编写一个计算任意 m 行 n 列二维数组中元素的最大值,并指出其所在的行列下标值的函数,利用该函数和动态内存分配方法,计算任意 m 个班、每班 n 个学生的某门课成绩的最高分,并指出具有该最高分成绩的学生是第几个班的第几个学生。 【思考题】 请读者思考: 编写一个能计算任意 m 行 n 列的二维数组中的最大值,并指出其所在的行列下标值的函数,能否使用二维数组或者指向二维数组的行指针作为函数参数进行编程实现呢?为什

10、么? 请读者自己分析动态内存分配方法(题目要求中的程序 4)和二维数组(题目要求中的程序 3)两种编程方法有什么不同?使用动态内存分配方法存储学生成绩与用二维数组存储学生成绩相比,其优点是什么?【说明】:初学者通常都会对指针望而生畏,其实只要从原理上掌握了指针的概念,它就会变得如此简单而易用。首先,指针不过是 C 语言提供的一种比较特殊的数据类型而已,定义为指针类型的变量与其它类型的变量相比,主要差别在于指针变量的值是一个内存地址。其次,在 C 语言中,指针和数组之间有着密不可分的关系,不带下标的数组名就是一个指针,它代表数组元素的首地址,只要让声明为相同基类型的指针变量指向数组元素的首地址,

11、那么对数组元素的引用,既可以用下标法,也可以用指针法,用指针法存取数组比用数组下标存取数组速度快一些。反之,任何指针变量也可以取下标,可以像对待数组一样来使用。虽然多维数组的地址概念稍微麻烦些,但只要知道它的元素在内存中是如何存放的,使用也就不难了,由于 C 语言中的多维数组都是按列存放的,因此,用指针法引用时,必须知道数组的一行有多长(即列的维数) 。在某种意义上,二维数组类似于一个由指向行数组的指针构成的一维指针数组。多于二维的数组可以通过类似方法进行降维处理。指针的一个重要应用是用指针作函数参数,为函数提供修改调用变元的手段。当指针作函数参数使用时,需要将函数外的某个变量的地址传给函数相

12、应的指针变元,这时,函数内的代码可以通过指针变元改变函数外的这个变量的值。指针的另一个重要应用是同动态内存分配函数联用,使得定义动态数组成为可能。本题程序 1 中,用到了一维数组作为函数参数,程序 2 用到了指向二维数组的行指针作函数参数,程序 3 用到了指向二维数组的列指针作函数参数,程序 4 用到了动态内存分配实现动态数组。【设计程序实例 8-1 的参考答案】:程序 1 参考答案:#include #define ARR_SIZE 40int FindMax(int score, long num, int n, long *pMaxNum); void main() int scoreA

13、RR_SIZE, maxScore, n, i;long numARR_SIZE, maxNum;printf(“Please enter total number:“);scanf(“%d“, /*从键盘输入学生人数n*/printf(“Please enter the number and score:n“);for(i=0; i maxScore) maxScore = scorei; /*记录最高分*/*pMaxNum = numi; /*记录最高分学生的学号numi*/return (maxScore); /*返回最高分 maxScore*/程序运行结果如下:Please enter

14、 total number:5Please enter the number and score:99011 8499012 8399013 8899014 8799015 61maxScore = 88, maxNum = 99013程序 2 参考答案:#include #define CLASS 3#define STU 4int FindMax(int scoreCLASSSTU, int m, int *pRow, int *pCol); void main() int scoreCLASSSTU, i, j, maxScore, row, col;printf(“Please ent

15、er score:n“);for (i=0; i maxScore) maxScore = scoreij; /*记录当前最大值*/*pRow = i; /*记录行下标*/*pCol = j; /*记录列下标*/ /*if结束*/ /*内层for结束*/ /*外层for结束*/return (maxScore); /*返回最大值 */程序 3 参考答案:#include #define CLASS 3#define STU 4int FindMax(int *p, int m, int n, int *pRow, int *pCol); main() int scoreCLASSSTU, i,

16、 j, maxScore, row, col; printf(“Please enter score:n“);for (i=0; i maxScore) maxScore = pi*n+j; /*记录当前最大值*/*pRow = i; /*记录行下标*/*pCol = j; /*记录列下标*/ /*if结束*/ /*内层for结束*/ /*外层 for结束*/return (maxScore); /*返回最大值*/程序运行结果如下:Please enter score:81 72 73 6465 86 77 8891 90 85 92max = 92, class = 3, number =

17、4程序 4 参考答案:#include #include int FindMax(int *p, int m, int n, int *pRow, int *pCol); main() 3f0798cd21f16516f5fc784e953bdfee.pdf (匡珍春制作)第 10 页 共 11 页int *pScore, i, j, m, n, maxScore, row, col;printf(“Please enter array size m,n:“);scanf(“%d,%d“, /*输入班级数m 和学生数n*/*申 请 m*n个 sizeof(int)字 节 的 存 储 空 间 *

18、/pScore = (int *) calloc(m*n, sizeof (int); if (pScore = NULL) printf(“No enough memory!n“);exit(0); printf(“Please enter the score:n“);for (i = 0; i max) max = pi*n+j; /*记录当前最大值*/*pRow = i; /*记录行下标*/*pCol = j; /*记录列下标*/ /*if结束*/3f0798cd21f16516f5fc784e953bdfee.pdf (匡珍春制作)第 11 页 共 11 页 /*内层for结束*/ /

19、*外层for结束*/return (max); /*返回最大值 */程序运行结果如下:Please enter array size m,n:3,4Please enter the score:81 72 73 6465 86 77 8891 90 85 92maxScore = 92, class = 3, number = 4作业上交(千万不要忘记):C 程序编译、连接、运行成功后,请务必将源程序(扩展名为.C、存于 E:盘以本人姓名为名称的文件夹下,如 E:匡珍春c01.c)复制到 K:盘对应的文件夹中,如 K(01): 陆上110105 匡珍春实验 8,才算上交作业。注:为了方便自己使用,不妨将源程序备份到可移动存储器上(如 U 盘、手机卡等)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报