华中科技大学标准C语言程序设计上机试题、答案及报告格式.doc_第1页
华中科技大学标准C语言程序设计上机试题、答案及报告格式.doc_第2页
华中科技大学标准C语言程序设计上机试题、答案及报告格式.doc_第3页
华中科技大学标准C语言程序设计上机试题、答案及报告格式.doc_第4页
华中科技大学标准C语言程序设计上机试题、答案及报告格式.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

标准C语言程序设计上机报告实验七 指针及函数结构体初步程序设计专业: 班级: 学号: 姓名: 完成日期: 1一、 实验目的1. 进一步理解指针的概念,掌握指针变量间接地址访问的本质;2. 掌握利用指向数组的指针变量表示一维数组元素及元素地址的方法;3. 掌握利用指向二维数组的行指针变量表示二维数组元素及其地址的方法;4. 掌握字符串的指针和指向字符串的指针变量;5. 掌握指针数组和二级指针;6. 熟悉通过动态内存分配实现动态数组,并体会指针在其中的作用。7. 理解函数定义、原型和调用,掌握函数参数的传递(传值、传指针和传引用)二、 实验内容及要求(鼓励一题多解)1. 深入理解上机实践训练教程2.6实验六案例示范和有关概念 文字描述中的知识点,给出你的理解。定义指针时一定要给指针分配好应有的类型和内存空间,防止出现野指针,造成程序不能运行甚至系统崩溃。数组名不能作为左值,它实际上是一个常量指针,不能通过str=“comrade”给字符数组str赋值。2. 输入每个学生的姓名和线性代数、通信原理和C语言课程成绩,统计每人的平均值,并按平均值降序排列,输出排列后的名次、姓名、课程名(成绩)和平均值。(注:平均值相同者按姓名的字母表顺序排列)(要求用结构体数据类型实现) #include #include #include #define N 3struct studentint rank;char name20; double score3;double aver;void input(struct student *p,int n);void sort(struct student *p,int n);double average (struct student *p,int n);void output(struct student *p,int n,double aver);void main()struct student stuN;double aver;input(stu,N);sort(stu,N); aver=average(stu,N);output(stu,N,aver);void input(struct student *p,int n)int i,j;double a;char str20;for(i=0;iname);printf(请依次输入学生线性代数、通信原理、c语言分数:n);for(a=0,j=0;jscorej=atof(str); a+=p-scorej;p-aver=a/3;return;void sort(struct student *p,int n)struct student temp;int i,j;for(i=0;in-1;i+)for(j=0;jn-1-i;j+)if(pj.averpj+1.aver)temp=pj; pj=pj+1;pj+1=temp;double average(struct student *p,int n)int i;double temp;for(i=0,temp=0;in;i+)temp=temp+pi.aver;return temp/n;void output(struct student *p,int n,double aver)int i;printf(姓名 线性代数 通信原理 c语言 平均分n);printf(-n);for(i=0;in;i+)printf(%-10s%8.2lf%8.2lf%8.2lf%8.2lfn,,pi.score0,pi.score1,pi.score2,pi.aver);运行结果:3. 利用指向指针的指针方法对N个整数排序并输出。(N个整数保存在数组num中,定义指针数组pnum分别指向num数组的N个元素,定义二级指针pp指向pnum入口元素,排序代码只运行使用pp指针)指向指针的指针就是二级指针int *pp;#include #define N 5void main()int numN,*pnumN,*pp,i,j,temp;printf(请输入数组中的元素:n);for(i=0;iN;i+)scanf(%d,&numi);for(i=0;iN;i+)pnumi=&numi;pp=pnum;for(i=0;iN-1;i+)for(j=0;j*(pp+j+1)temp=*(pp+j);*(pp+j)=*(pp+j+1);*(pp+j+1)=temp;printf(按照从小到大的顺序排列为:n);for(i=0;iN;i+)printf(%dn,*(pp+i); 运行结果4. 深入理解内存管理专题中的堆区内存使用和释放规则,在此基础上,找出下面代码错误的原因,并给出1-2个解决方案(至少有一个方案使用malloc/free或new/delete)。#include char *GetString(void)char p = hello world;return p; / p指针指向哪一类内存空间?void main(void)char *str = NULL;str = GetString(); cout str endl; 错误原因及你的理解:修正方案1:修正方案2:5. 编程求一个33矩阵转置(即行列互换)并输出矩阵中最大值及位置。(要求用二维数组double num33存储矩阵,用行指针变量dopuble (*p)3访问二维数组)#include void main()double num33,(*p)3;int i,j,a,b;printf(请输入矩阵元素:n);for(i=0;i3;i+)for(j=0;j3;j+)scanf(%lf,&numij); p=num;for(i=0,a=0,b=0;i3;i+)for(j=0;jpab)a=i;b=j;printf(最大值为%lfn所在的位置为第%d行第%d列,pab,a+1,b+1);printf(转置矩阵为:n);for(i=0;i3;i+)for(j=0;j3;j+)printf(%lft,pji);printf(n);运行结果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(%d%d,&a,&b);p1=&a;p2=&b;calculate(p1,p2);printf(两数的平方和为%dn两数的平方差为%dn,*p1,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论