- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验7指针
【实验目的】
① 掌握指针的概念,会定义及使用指针变量、指针数组、行指针;
② 掌握指针的运算,会采用指针方法访问一维、二维数组;理解指针和数组的关系;
③ 掌握指针作为函数参数, 设计通用的函数;实现对一维数组的排序、查找, 矩阵运
算;及常用的字符串处理函数;熟悉动态分配内存方法;
【实验 7.1】在 10 个元素的数组中找出与平均值最接近的元素,
数组指针访问一维数组) 。
【指导】
算法分析:
本题要解决两个问题:
(1)计算 10 个元素的平均值;
(2)找出与平均值最接近的数组元素。
并输出该元素的值 (要求用
对于第( 2)个问题,可以将第一个元素与平均值的差为基准,然后依次计算其余各个
元素与平均值的差,并与基准进行比较(注意要按绝对值进行比较) ,从而找出最小值,它所对应的元素就是与平均值最接近的元素。
参考程序:
#include math.h
#include stdio.h
void main()
{ int i,k;
float a[10],aver=0,b,diff,*p=a;
for(i=0;i10;i++)
scanf(%f,p+i); //
for(i=0;i10;i++)
aver+=p[i]; //
aver/=10; //
k=0;
diff=fabs(p[0]-aver); //
for(i=1;i10;i++)
{ b=fabs(p[i]-aver);
if(bdiff) //
输入原始数据存入数组
计算累加和
计算平均值
计算第一个元素与平均值的差的绝对值
寻找最接近于平均值的元素及其位置
{ diff=b; k=i; }
}
printf(%f %f\n,diff,p[k]);
}
答案:
#include math.h
#include stdio.h
void main()
{
int pi,k;
float a[10],aver=0,b,diff,*p=a;
for (pi=0;pi10;pi++)
scanf(%f,p[pi]);
for(pi=0;pi10;pi++)
aver+=p[pi];
aver/=10;
printf( 平均 :%f\n,aver);
k=0;
diff=fabs(p[0]-aver);
for(pi=1;pi10;pi++)
{b=fabs(p[pi]-aver);
if(bdiff)
{diff=b;k=pi;}
}
printf( 最小差 :%f 最接近的元素 :%f\n,diff,a[k]);
}
【 7.2 】 制程序,利用行指 ,找出二 数
a[M][N]
每一行中的最大 ,然后从
中找出最小 min 。
【指 】
算法分析:
( 1)先定 数 a[M][N] ,s[M] 及指向数 a 的行指 (*p)[N] ,将每一行的最大 存
放在数 s 中,然后在数 s 中找出最小 。
( 2) 了求出数 a 第 i 行的最大 s[i] ,先令 s[i]=a[i][0] ,然后将 s[i] 依次与
a[i][1] , a[i][2] ,?? , a[i][N-1] 比 ,凡是比 s[i] 大的 a[i][j] 就 s[i] , N-1
比 后, s[i] 中存放的就是 行的最大 。
( 3)根据 目要求用行指 操作,数 元素 a[i][j] 的地址可用 p[i]+j 、*(p+i)+j 或
p[i][j] 表示,数 元素 a[i][j] 的 可用 p[i][j] 、 *(p[i]+j) 或 *(*(p+i)+j) 表示。
参考程序:
#define M 5
#define N 5
#include stdio.h
void main()
{ int s[M],i,j,min;
static int a[M][N],(*p)[N]=a; for (i=0;iM;i++)
for (j=0;jN;j++)
scanf(%d,p[i]+j); //
for (i=0;iM;i++)
{ s[i]=p[i][0];
for (j=1;jN;j++) //
if (s[i]p[i][j])
入原始数据存入二 数 求每行最大 分 保存在数
s 中
s[i]=p[i][j];
}
min=s[0];
for (i=1;iM;i++) // 求 s 中的最小值
if (mins[i])
min=s[i];
printf(Min=%d\n,min);
}
【实验 7.3 】请编制函数 calc ,其功能是对传送过来的两个实数求出和值与差值,并通过两个指针形参分别将这两个值传送回调用函数。该函数原型为:
void calc(float x,float y,float *a
文档评论(0)