- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《数据结构与算法设计》 实验报告
姓名 实验日期 实验成绩 班级 学号 实验名称 实验一 指针 教师签字 一、实验目的
1、掌握指针的概念,会定义和使用指针变量。
2、学会正确使用数组的指针和指向数组的指针变量,进一步加强对指针概念的理解。
3、学会正确使用字符串的指针和指向字符串的指针变量。
4、学习使用指向函数的指针变量。
5、能够较熟练地运用指针来实现对字符、数组以及函数的综合性操作。
二、实验原理
指针是C语言的重要数据类型,也是C语言的精华所在。利用指针可以有效地表示复杂的数据结构,实现动态内存分配,更方便、灵活地使用数组、字符串及实现为函数间各类数据的传递提供简洁便利的方法。正确灵活地运用指针,可以编制出简练紧凑、功能强大而执行效率高的程序。
在C语言中,用指针来表示一个变量指向另一个变量的指向关系,所谓指针即地址。一个变量的指针即该变量的地址。专门存放地址的变量,称为指针变量。
1、指针变量的定义及初始化
[存储类型] 数据类型标识符 *指针变量名=初始地址值;
如:int *p1, *p2=i;
注意:指针变量名是p1,p2,不是*p1,*p2;指针变量只能指向定义时所规定类型的变量,如p1只能指向int型变量;指针变量定义后,变量值不确定,应用前必须先赋值,p2在定义时直接赋初始值,指向变量i。
2、指针与函数
指针作为函数参数,有两种情况:函数形参为指针变量,指针变量作实参;函数形参为指针变量,变量地址作为实参。
指针变量的值遵循单向传递的原则,如果在函数中进行对形参指针的交换将不能影响到实参的改变。
指针函数是指函数的返回值为指针的函数。指针函数的返回值一定要是地址,并且返回值的类型要与函数类型一致。指针函数的定义:
类型名 *函数名(参数表列)
例如: int *fun( int a, int b) { 函数体语句 }
指向函数的指针,即一个指针变量,其值等于某一个函数的入口地址,则称该指针指向这个函数,这样通过这个指针变量也可以调用这个函数。指向函数的指针变量的定义:
数据类型 (*指针变量名)( );
如: int (*p)( );
注意int (*p)( );与int *p( );的差别。定义指向函数的指针和指针函数时,格式不能写错。
3、指针与数组
数组名是一个常量指针,它的值为该数组的首地址。根据指针的概念,数组的指针是指数组的起始地址,而数组元素的指针,是各元素的地址。像指针变量可以指向各基本类型变量一样,可以定义指针变量指向数组与数组元素。指向数组的指针的定义方法与指向基本类型变量的指针的定义方法相同。
如:int a[5]={1,3,5,7,9}; int *p;
p=a[2]; (把数组元素a[2]的地址赋给指针变量p)
p=a; (把数组的首地址赋给指针变量p)
通过指针引用数组元素: *p=5; 表示对p当前所指的数组元素赋以一个值5。
C规定:p+1指向数组的下一元素(而不是将p值简单地加1)。p+1意味着使p的原值(地址)加d个字节(d为一个数组元素所占的字节数)。
如果p的初值为a[0],则:
p+i和a+i就是a[i]的地址,或者说它们指向a数组的第i个元素;
*(p+i)或*(a+i)是p+i或a+i所指向的数组元素,即a[i];
指向数组的指针变量也可以带下标,如p[i]与*(p+i)、a[i]等价。
4、指针与字符串
字符串保存在字符数组中。指向字符串的指针称字符指针,其定义形式为:
char *指针名;
对字符串的操作,还可以用数组元素的指针表示法或地址法来实现。
三、实验内容
1、下列给定程序中,函数fun的功能是:从n个学生的成绩中统计出低于平均分的学生人数,此人数由函数值返回,平均分存放在形参aver所指的存储单元中。例如,若输入8名学生的成绩:80.5,60,72,90.5,98,51.5,88,64,则低于平均分的学生人数为4(平均分为75.562500)。请编写程序实现。
实验代码:
#include conio.h
#include stdio.h
#define N 20
int fun(float *s, int n, float *aver)
{float ave, t = 0.0;
int count = 0, k, i;
for (k=0; kn;k++)
t += s[k];
ave = t/n;
for (i=0; in;i++)
if (s[i] ave)
count++;
*aver = ave; return count
}main()
{
float s[30], aver;
int m, i;
printf(\nPlease enter m
您可能关注的文档
- 地理同步练习题考试题试卷教案高一地理大气的热状况和大气运动练习题.doc
- 第四篇 电磁介质.doc
- 地震波速度 笔记.doc
- 热电厂凝汽器的腐蚀保护和结垢清洗.doc
- 第四篇导学案.doc
- 第1节 高频小信号调谐放大器.doc
- 热力学和统计物理学课后习题及解答.doc
- 第四章 交流电机绕组及其电动势与磁势.doc
- 第1篇 服饰图案.doc
- 如何恢复肌肤的弹性与张力.doc
- 林德115系列叉车维修手册 英文.pdf
- 林德E16C-03, E16P-03, E20P-03叉车维修手册 英文.pdf
- 林德H50T叉车维修手册 英文.pdf
- 6.1.2 化学反应与电能 课件高一下学期化学人教版(2019) 必修第二册.pptx
- 零碳项目初步设计(模板).docx
- 金融从业者必懂的宏观经济指标实战指南:2025年投资策略与市场分析.docx
- 第二章 第二节 氯及其化合物-第1课时 氯气的性质课件高一上学期化学人教版(2019)必修第一册.pptx
- 产品经理完全指南:Axure原型设计从入门到实战全解.docx
- 6.1.2 影响化学反应速率的因素 课件高一下学期化学苏教版(2020)必修第二册.pptx
- 零碳项目融资方案(模板).docx
文档评论(0)