数组指针和函数综合编程二Word格式文档下载.docx

上传人:b****6 文档编号:19128101 上传时间:2023-01-04 格式:DOCX 页数:9 大小:16.62KB
下载 相关 举报
数组指针和函数综合编程二Word格式文档下载.docx_第1页
第1页 / 共9页
数组指针和函数综合编程二Word格式文档下载.docx_第2页
第2页 / 共9页
数组指针和函数综合编程二Word格式文档下载.docx_第3页
第3页 / 共9页
数组指针和函数综合编程二Word格式文档下载.docx_第4页
第4页 / 共9页
数组指针和函数综合编程二Word格式文档下载.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

数组指针和函数综合编程二Word格式文档下载.docx

《数组指针和函数综合编程二Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数组指针和函数综合编程二Word格式文档下载.docx(9页珍藏版)》请在冰豆网上搜索。

数组指针和函数综合编程二Word格式文档下载.docx

【思考题】请读者思考:

①编写一个能计算任意m行n列的二维数组中的最大值,并指出其所在的行列下标值的函数,能否使用二维数组或者指向二维数组的行指针作为函数参数进行编程实现呢?

为什么?

②请读者自己分析动态内存分配方法(题目要求中的程序4)和二维数组(题目要求中的程序3)两种编程方法有什么不同?

使用动态内存分配方法存储学生成绩与用二维数组存储学生成绩相比,其优点是什么?

三:

程序源代码:

程序1:

#include

#defineSTU40

voidFindmax(floatscore[],longnum[],intn,float*pMaxscore,long*pMaxnum;

main(

{

floatscore[STU],Maxscore;

longnum[STU],Maxnum;

inti,n;

printf("

Pleaseenterthetotalnumber:

"

;

scanf("

%d"

&

n;

Pleaseenterthenumberandscore:

\n"

for(i=0;

i

%ld%f"

num[i],&

score[i];

}

Findmax(score,num,n,&

Maxscore,&

Maxnum;

Maxnum=%ld,Maxscore=%.0f\n"

Maxnum,Maxscore;

voidFindmax(floatscore[],longnum[],intn,float*pMaxscore,long*pMaxnum

inti;

*pMaxnum=num[0];

*pMaxscore=score[0];

for(i=1;

if(score[i]>

*pMaxscore

*pMaxscore=score[i];

*pMaxnum=num[i];

题目2:

#defineCLASS3

#defineSTU4

intFindmax(intscore[][STU],intMaxscore,int*prow,int*pcol;

intscore[CLASS][STU],Maxscore;

inti,j,row,col;

Pleaseenterthescoreoftheclass:

%d\n"

i+1;

for(j=0;

j

score[i][j];

Maxscore=Findmax(score,Maxscore,&

row,&

col;

Maxscore=%d,class=%d,number=%d\n"

Maxscore,row+1,col+1;

intFindmax(intscore[][STU],intMaxscore,int*prow,int*pcol

inti,j;

Maxscore=score[0][0];

*prow=0;

*pcol=0;

if(score[i][j]>

Maxscore

Maxscore=score[i][j];

*prow=i;

*pcol=j;

return(Maxscore;

程序3:

intFindmax(int*p,intm,intn,int*prow,int*pcol;

intscore[CLASS][STU],maxscore,i,j,row,col;

maxscore=Findmax(*score,CLASS,STU,&

maxscore,row+1,col+1;

intFindmax(int*p,intm,intn,int*prow,int*pcol

inti,j,max;

max=p[0];

if(*(p+i*n+j>

max

max=*(p+i*n+j;

return(max;

题目4:

intFindMax(int*p,intm,intn,int*pRow,int*pCol;

intmaxScore,row,col,i,j,m,n,*pScore=NULL;

Pleaseenterthearraysizem,n:

%d,%d"

m,&

pScore=(int*calloc(m*n,sizeof(int;

if(pScore==NULL

Noenoughmemory!

exit(0;

pScore+i*n+j;

maxScore=FindMax(pScore,m,n,&

maxScore,row+1,col+1;

intFindMax(int*p,intm,intn,int*pRow,int*pCol

*pRow=0;

*pCol=0;

*pRow=i;

*pCol=j;

}

四:

运行结果、分析与讨论:

5

100056

200086

300078

400065

500089

Maxnum=5000,Maxscore=89

Pressanykeytocontinue...

1

67877687

2

56788798

3

56764599

程序4中我首先编辑如下

intmaxScore,row,col,i,j,m,n;

int*pScore=NULL;

程序不能正常运行,而当我把程序改成main(

}就可以正常运行,这个原因我还没有琢磨清楚。

希望和老师探讨一下

Maxscore=99,class=3,number=4

请按任意键继续...

67786798

67568767

100786776

Maxscore=100,class=3,number=1

3,4

78675687

56877899

677856100

Maxscore=100,class=3,number=4

思考题1:

如果使用二维数组,则无法直接通过return语句返回三个变量的值,只能返回一个变量(即最大值的数值)的值,故无法实现其实验目的。

而如果使用指向二维数组的行指针作为函数参数进行编程,由于未能返回具体列指针变量的值,导致最多只能输出最大值和相应行的数,故无法实现其实验目的。

思考题2:

程序4与程序3间对于内存的分配存在一定差异。

程序4采用动态内存分配的方法,可以根据需要,动态地对内存进行分配与回收。

而程序3只能预先定义内存分配,显得比较局限。

动态内存分配,在程序执行的过程中动态地分配或者回收存储空间的分配内存,它不像数组等静态内存分配方法那样需要预先分配存储空间,而是由系统根据程序的需要即时分配,且分配的大小就是程序要求的大小。

可以知道使用动态内存分配方法存储学生你成绩与用二维数组存储学生成绩相比:

1、不需要预先分配存储空间;

2、分配的空间可以根据程序的需要扩大或缩小。

五:

实验心得与体会:

这次实验内容上比较多,而且对指针变量的要求也有可更高一步的提升。

但是在编程过程中,我们也应该特别注意到二维数组的地址和指针的关系,这很重要。

特别是对二维数组的行地址与列地址的定义上要注意具体的要求。

此外,动态数组的优越性自己也要清楚,特别是它与静态数组的区别,这对提高程序优越性有很大帮助。

在以后的编程中,尽量优化程序。

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

当前位置:首页 > 高等教育 > 军事

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1