1、【思考题】 请读者思考: 编写一个能计算任意m行n列的二维数组中的最大值,并指出其所在的行列下标值的函数,能否使用二维数组或者指向二维数组的行指针作为函数参数进行编程实现呢?为什么? 请读者自己分析动态内存分配方法(题目要求中的程序4)和二维数组(题目要求中的程序3)两种编程方法有什么不同?使用动态内存分配方法存储学生成绩与用二维数组存储学生成绩相比,其优点是什么?三:程序源代码:程序1:#include #define STU 40void Findmax(float score,long num,int n,float *pMaxscore,long *pMaxnum;main(float
2、 scoreSTU,Maxscore;long numSTU,Maxnum;int i,n;printf(Please enter the total number:;scanf(%d,&n;Please enter the number and score:nfor(i=0;i %ld%fnumi,&scorei;Findmax(score,num,n,&Maxscore,&Maxnum;Maxnum=%ld,Maxscore=%.0fn,Maxnum,Maxscore;void Findmax(float score,long num,int n,float *pMaxscore,long
3、 *pMaxnumint i;*pMaxnum=num0;*pMaxscore=score0;for(i=1;if(scorei*pMaxscore*pMaxscore=scorei;*pMaxnum=numi;题目2:#define CLASS 3#define STU 4int Findmax(int scoreSTU,int Maxscore,int *prow,int *pcol;int scoreCLASSSTU,Maxscore;int i,j,row,col;Please enter the score of the class:%dn,i+1;for(j=0;j scoreij
4、;Maxscore=Findmax(score,Maxscore,&row,&col;Maxscore=%d,class=%d,number=%dn,Maxscore,row+1,col+1;int Findmax(int scoreSTU,int Maxscore,int *prow,int *pcolint i,j;Maxscore=score00;*prow=0;*pcol=0;if(scoreijMaxscoreMaxscore=scoreij;*prow=i;*pcol=j;return(Maxscore;程序3:int Findmax(int *p,int m,int n,int
5、*prow,int *pcol;int scoreCLASSSTU,maxscore,i,j,row,col;maxscore=Findmax(*score,CLASS,STU,&,maxscore,row+1,col+1;int Findmax(int *p,int m,int n,int *prow,int *pcolint i,j,max;max=p0;if(*(p+i*n+jmaxmax=*(p+i*n+j;return(max;题目4:int FindMax(int *p,int m,int n,int *pRow,int *pCol;int maxScore,row,col,i,j
6、,m,n,*pScore=NULL;Please enter the array size m,n:%d,%dm,&pScore=(int*calloc(m*n,sizeof(int;if(pScore=NULLNo enough memory!exit(0;,pScore+i*n+j;maxScore=FindMax(pScore,m,n,&,maxScore,row+1,col+1;int FindMax(int *p,int m,int n,int *pRow,int *pCol*pRow=0;*pCol=0;*pRow=i;*pCol=j; 四:运行结果、分析与讨论:51000 562
7、000 863000 784000 655000 89Maxnum=5000,Maxscore=89Press any key to continue.167 87 76 87256 78 87 98356 76 45 99程序4中我首先编辑如下int maxScore,row,col,i,j,m,n;int *pScore=NULL;程序不能正常运行,而当我把程序改成main(就可以正常运行,这个原因我还没有琢磨清楚。希望和老师探讨一下Maxscore=99,class=3,number=4 请按任意键继续. . .67 78 67 9867 56 87 67100 78 67 76Maxs
8、core=100,class=3,number=13,478 67 56 8756 87 78 9967 78 56 100Maxscore=100,class=3,number=4思考题1:如果使用二维数组,则无法直接通过return语句返回三个变量的值,只能返回一个变量(即最大值的数值)的值,故无法实现其实验目的。而如果使用指向二维数组的行指针作为函数参数进行编程,由于未能返回具体列指针变量的值,导致最多只能输出最大值和相应行的数,故无法实现其实验目的。思考题2:程序4与程序3间对于内存的分配存在一定差异。程序4采用动态内存分配的方法,可以根据需要,动态地对内存进行分配与回收。而程序3只能
9、预先定义内存分配,显得比较局限。动态内存分配,在程序执行的过程中动态地分配或者回收存储空间的分配内存,它不像数组等静态内存分配方法那样需要预先分配存储空间,而是由系统根据程序的需要即时分配,且分配的大小就是程序要求的大小。可以知道使用动态内存分配方法存储学生你成绩与用二维数组存储学生成绩相比:1、不需要预先分配存储空间;2、分配的空间可以根据程序的需要扩大或缩小。五:实验心得与体会:这次实验内容上比较多,而且对指针变量的要求也有可更高一步的提升。但是在编程过程中,我们也应该特别注意到二维数组的地址和指针的关系,这很重要。特别是对二维数组的行地址与列地址的定义上要注意具体的要求。此外,动态数组的优越性自己也要清楚,特别是它与静态数组的区别,这对提高程序优越性有很大帮助。在以后的编程中,尽量优化程序。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1