华中科技大学标准C语言程序设计上机试题、答案及报告格式 下载本文

4. 深入理解内存管理专题中的堆区内存使用和释放规则,在此基础上,找出下面代码错误的原因,并给出1-2个解决方案(至少有一个方案使用malloc/free或new/delete[])。

#include char *GetString(void) { char p[ ] = \ return p; // p指针指向哪一类内存空间? }

void main(void) { char *str = NULL; str = GetString(); cout<< str << endl; }

错误原因及你的理解:

修正方案1:

修正方案2:

5. 编程求一个3×3矩阵转置(即行列互换)并输出矩阵中最大值及位置。(要求用二维数组double num[3][3]存储矩阵,用行指针变量dopuble (*p)[3]访问二维数组)

#include void main() { double num[3][3],(*p)[3]; int i,j,a,b; printf(\请输入矩阵元素:\\n\ for(i=0;i<3;i++) { for(j=0;j<3;j++)

scanf(\ }

p=num; for(i=0,a=0,b=0;i<3;i++) { for(j=0;j<3;j++) { if(p[i][j]>p[a][b]) { a=i; b=j; } } } printf(\最大值为%lf\\n所在的位置为第%d行第%d列\ printf(\转置矩阵为:\\n\ for(i=0;i<3;i++) { for(j=0;j<3;j++) printf(\ printf(\ } }

运行结果

6. 输入2整数a和b,设计一个函数void calculate(int *psum,int *psub)计算a和b的平方和与平方差,main函数调用calculate函数并输出2个计算结果。(拔高:设计函数void calculate2(int &refsum,int &refsub)计算a和b的平方和与平方差)

#include

void calculate(int *psum,int *psub); void main() { int a,b,*p1,*p2; printf(\请输入两个数:\\n\ scanf(\ p1=&a; p2=&b; calculate(p1,p2); printf(\两数的平方和为%d\\n两数的平方差为%d\\n\}

void calculate(int *psum,int *psub) {

int m,n; m=*psum; n=*psub; *psum=m*m+n*n; *psub=m*m-n*n; }

运行结果:

三、 上机中的感受、困惑及教学建议

对malloc free的用法还是不是很熟练,对多级指针的掌握有待加强。