实验10指针2 (修复的)_第1页
实验10指针2 (修复的)_第2页
实验10指针2 (修复的)_第3页
实验10指针2 (修复的)_第4页
实验10指针2 (修复的)_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

C语言程序设计 实验报告实验时间: 6月7号 实验班级: 计算机双学位1501 实验报告总份(片)数: 1 份(片)实验教师: 饶东宁 计算机 学院 工一 实验室广东工业大学 C语言程序设计 实验报告实验题目: 实验10 实验时间: 6月7号 实验班级: 双学位1501 实验人学号: 3213010359 实验人姓名: 梁雪卿 实验教师: 饶东宁 计算机 学院 工一 实验室广东工业大学实验10 指针21 实验目的(1) 进一步掌握指针的应用(2) 能正确使用数组的指针和指向数组的指针变量(3) 能正确使用字符串的指针和指向字符串的指针变量(4) 了解指向指针的指针的用法2 实验内容根据题目要求,编写程序(要求用指针处理),运行程序,分析结果,并进行必要的讨论分析。(1) 有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的人。输入人数n算法说明:指针指向数组开头for i=0 to i=n-1当mn-1输出结果*(p+i)=i+1i=0 k=0 m=0真 *(p+1)0 假k+真 k=3 假*(p+i)=0k=0m+i+真 i=n 假i=0 当*p=0 p+程序清单:#include int main()int i,k,m,n,num50,*p;scanf(n=%d,&n);p=num;for(i=0;in;i+)*(p+i)=i+1;i=0;k=0;m=0;while(mn-1)if(*(p+1)!=0) k+;if(k=3)*(p+i)=0;k=0;m+;i+;if(i=n) i=0;while(*p=0) p+;printf(The last one is NO.%dn,*p);return 0;运行结果:分析与思考:以1到n为序给每个人编号,i为每次循环时计数变量,k为按1,2,3报数时的计数变量,m为退出人数,当退出人数比n-1少时执行循环体,对推村恩编号为0,报数到尾i恢复为0,循环继续。(2) 将一个5*5的矩阵(二维数组)中最大元素放在中心,4个角分别放4个最小的元素(顺序为从左到右,从上到下依次从小到大存放),写一函数实现之。用main函数调用。算法说明:定义a55,*p,I,jfor i=0 to i=4for j=0 to j=4 输入aijp=&a00调用函数change(p)for j=0 to j=4for i=0 to i=4输出aijchange(int *p)定义 i,j,temp,*pmax,*pminpmax=p pmin=pfor i=0 to i=4 for j=i to j=4temp=*(p+12) *(p+12)=*pmax *pmax=temptemp=*p *p=*pmin *pmin=temp pmin=p+1for i=0 to i=4/真 *pmax*(p+5*i+j) 假pmin=p+5*i+jfor j=0 to j=4continue真 i=0&j=0 假真 *pmin*(p+5*i+j) 假pmin=p+5*i+jtemp=*pmin *pmin=*(p+4) *(p+4)=temp pmin=p+1for i=0 to i=4for j=0 to j=4真 (i=0&j=0)|(i=0&j=4) 假temp=*pmin *pmin=*(p+20) *(p+20)=temp pmin=p+1pmin=p+5*i+j真 *pmin*(p+5*i+j) 假continuefor i=0 to i=4for j=0 to j=4continue真 (i=0&j=0)|(i=0&j=4)|(i=4&j=0) 假真 *pmin*(p+5*i+j) 假temp=*pmin*pmin=*(p+24)*(p+24)=temppmin=p+5*i+j程序清单:#include int main()void change(int *p);int a55,i,j,*q;for(i=0;i5;i+)for(j=0;j5;j+)scanf(%d,&aij);q=&a00;change(q);for(i=0;i5;i+)for(j=0;j5;j+)printf(%d ,aij);printf(n);return 0;void change(int *p)int i,j,temp; int *pmax,*pmin;pmax=p;pmin=p;for(i=0;i5;i+)for(j=0;j5;j+)if(*pmax*(p+5*i+j) pmin=p+i*5+j;temp=*(p+12);*(p+12)=*pmax;*pmax=temp;temp=*p;*p=*pmin;*pmin=temp;pmin=p+1;for(i=0;i5;i+)for(j=0;j*(p+5*i+j) pmin=p+5*i+j;temp=*pmin;*pmin=*(p+4);*(p+4)=temp;pmin=p+1;for(i=0;i5;i+)for(j=0;j*(p+5*i+j) pmin=p+5*i+j;temp=*pmin;*pmin=*(p+20);*(p+20)=temp;pmin=p+1;for(i=0;i5;i+)for(j=0;j*(p+5*i+j) pmin=p+5*i+j;temp=*pmin;*pmin=*(p+24);*(p+24)=temp;运行结果:分析与思考:change函数实现元素值交换。找出最大最小之,最大值与中心元素呼唤,最小值与左上角的元素互换。找出全部元素中的次小值,第三小值,第四小值,分别与剩下的三个角互换。元素地址均以元素做单位的地址。(3) 有一个班4个学生,5门课程。1, 求第一门课程的平均分。2, 找出有两门以上课程不及格的学生,输出他们的学号和全部课程成绩及平军成绩。3, 找出平均成绩在90分以上或全部课程成绩在85分以上的学生。分别编3个函数实现以上3个要求。定义score45,aver4,*pscore,*paver,course510,(*pcourse)10pcourse=coursefor i=0 to i=4算法说明:输入courseifor i=0 to i=4输出courseipscore=&score00pnum=&numfor i=0 to i=3输入pnum+ifor j=0 to j=4输出pscore+5*i+jpaver &aver0调用avsco(pscore,paver)调用avcour1(pcourse,pscore)调用fali2(pcourse,pnum,pscore,paver)调用good(pcourse,pnum,pscore,paver)avscosum=0.0for j=0 to j=4定义I,j,sum,averagefor i=0 to i=3average=sum/5*(paver+i)=averagesum=sum+(*(pscore+5*i+j)avcour1定义I,sum,average1sum=0.0for i=0 to i=3 sum=sum+(*(pscore+5*i)average1= sum/4输出*pcourse,average1fali2定义I,j,k,labelfor i=0 to i=4输出courseifor i=0 to i=3label=0for j=0 to j=4 真 *(pscore+5*i+j)=2 假输出numifor k=0 to k=4输出*(pscore+5*i+k)输出averigood定义I,j,k,nfor i=0 to i=4 输出courseifor i=0 to i=3 n=o for j=0 to j=4真 *(pscore+5*i+j)85.0 假n+真 n=5|(averi=90) 假输出numifor k=0 to k=4 输出*(pscore+5*i+k)输出averi程序清单:#include int main()void avsco(float *,float *);void avcour1(char (*)10,float *);void fali2(char course510,int num,float *pscore,float aver4);void good(char course510,int num4,float *pscore,float aver4);int i,j,*pnum,num4;float score45,aver4,*pscore,*paver;char course510,(*pcourse)10;printf(input course:n);pcourse=course;for(i=0;i5;i+)scanf(%s,coursei);printf(input NO. and scores:n);printf(NO.);for(i=0;i5;i+)printf(,%s,coursei);printf(n);pscore=&score00;pnum=&num0;for(i=0;i4;i+)scanf(%d,pnum+i);for(j=0;j5;j+)scanf(%f,pscore+5*i+j);paver=&aver0;printf(nn);avsco(pscore,paver);avcour1(pcourse,pscore);printf(nn);fali2(pcourse,pnum,pscore,paver);printf(nn);good(pcourse,pnum,pscore,paver);return 0;void avsco(float *pscore,float *paver)int i,j;float sum,average;for(i=0;i4;i+)sum=0.0;for(j=0;j5;j+)sum=sum+(*(pscore+5*i+j);average=sum/5;*(paver+i)=average;void avcour1(char (*pcourse)10,float *pscore)int i;float sum,average1;sum=0.0;for(i=0;i4;i+)sum=sum+(*(pscore+5*i);average1=sum/4;printf(course 1:%s average score:%7.2fn,*pcourse,average1);void fali2(char course510,int num,float *pscore,float aver4)int i,j,k,label;printf( =Student who is fail in two course= n);printf(NO. );for(i=0;i5;i+)printf(%11s,coursei);printf( averagen);for(i=0;i4;i+)label=0;for(j=0;j5;j+)if(*(pscore+5*i+j)=2)printf(%d,numi);for(k=0;k5;k+)printf(%11.2f,*(pscore+5*i+k);printf(%11.2fn,averi);void good(char course510,int num4,float *pscore,float aver4)int i,j,k,n;printf( =Students whose score is good= n);printf(NO. );for(i=0;i5;i+)printf(%11s,coursei);printf( averagen);for(i=0;i4;i+)n=0;for(j=0;j85.0) n+;if(n=5)|(averi=90)printf(%d,numi);for(k=0;k0) 假temp=*(p+i)*(p+i)=*(p+j)*(p+j)=temp程序清单:#include #include #define LINEMAX 20#define N 5int main()void sort(char *p,int x);int i;char *p;char *pstrN;char strNLINEMAX;printf(输入5个字符串: );for(i=0;iN;i+)pstri=stri;for(i=0;

温馨提示

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

评论

0/150

提交评论