当前位置:文档之家› 实验10 指针2 (修复的)

实验10 指针2 (修复的)

《C语言程序设计》实验报告实验时间: 6月7号实验班级:计算机双学位1501实验报告总份(片)数: 1 份(片) 实验教师:饶东宁计算机学院工一实验室广东工业大学《C语言程序设计》实验报告实验题目: 实验10实验时间: 6月7号实验班级:双学位1501实验人学号: 3213010359实验人姓名:梁雪卿实验教师:饶东宁计算机学院工一实验室广东工业大学实验10 指针21 实验目得(1)进一步掌握指针得应用(2)能正确使用数组得指针与指向数组得指针变量(3)能正确使用字符串得指针与指向字符串得指针变量(4)了解指向指针得指针得用法2 实验内容根据题目要求,编写程序(要求用指针处理),运行程序,分析结果,并进行必要得讨论分析。

(1)有n个人围成一圈,顺序排号。

从第一个人开始报数(从1到3报数),凡报到3得人退出圈子,问最后留下得就是原来得第几号得人。

算法说明:#include <stdio、h>int main{int i,k,m,n,num[50],*p; scanf("n=%d",&n);p=num;for(i=0;i<n;i++)*(p+i)=i+1;i=0;k=0;m=0;while(m<n1){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、%d\n",*p);return 0;}运行结果:分析与思考:以1到n为序给每个人编号,i为每次循环时计数变量,k为按1,2,3报数时得计数变量,m为退出人数,当退出人数比n1少时执行循环体,对推村恩编号为0,报数到尾i恢复为0,循环继续。

(2)将一个5*5得矩阵(二维数组)中最大元素放在中心,4个角分别放4个最小得元素(顺序为从左到右,从上到下依次从小到大存放),写一函数实现之。

用main函数调用。

算法说明:change(int *p)程序清单:#include <stdio、h>int main{void change(int *p);int a[5][5],i,j,*q;for(i=0;i<5;i++)for(j=0;j<5;j++)scanf("%d",&a[i][j]);q=&a[0][0];change(q);for(i=0;i<5;i++){for(j=0;j<5;j++)printf("%d ",a[i][j]);printf("\n");}return 0;}void change(int *p){int i,j,temp;int *pmax,*pmin;pmax=p;pmin=p;for(i=0;i<5;i++){for(j=0;j<5;j++){if(*pmax<*(p+i*5+j)) pmax=p+i*5+j;if(*pmin>*(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;i<5;i++){for(j=0;j<5;j++){if(i==0&&j==0) continue;if(*pmin>*(p+5*i+j)) pmin=p+5*i+j;}}temp=*pmin;*pmin=*(p+4);*(p+4)=temp;pmin=p+1;for(i=0;i<5;i++){for(j=0;j<5;j++){if((i==0&&j==0)||(i==0&&j==4)) continue; if(*pmin>*(p+5*i+j)) pmin=p+5*i+j;}}temp=*pmin;*pmin=*(p+20);*(p+20)=temp;pmin=p+1;for(i=0;i<5;i++){for(j=0;j<5;j++){if((i==0&&j==0)||(i==0&&j==4)||(i==4&&j==0)) continue;if(*pmin>*(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个要求。

算法说明:avsco程序清单:#include <stdio、h>int main{void avsco(float *,float *);void avcour1(char (*)[10],float *);void fali2(char course[5][10],int num[],float *pscore,float aver[4]);void good(char course[5][10],int num[4],float *pscore,float aver[4]);int i,j,*pnum,num[4];float score[4][5],aver[4],*pscore,*paver; char course[5][10],(*pcourse)[10];printf("input course:\n");pcourse=course;for(i=0;i<5;i++)scanf("%s",course[i]);printf("input NO、 and scores:\n");printf("NO、");for(i=0;i<5;i++)printf(",%s",course[i]);printf("\n");pscore=&score[0][0];pnum=&num[0];for(i=0;i<4;i++){scanf("%d",pnum+i);for(j=0;j<5;j++)scanf("%f",pscore+5*i+j);}paver=&aver[0];printf("\n\n");avsco(pscore,paver);avcour1(pcourse,pscore);printf("\n\n");fali2(pcourse,pnum,pscore,paver);printf("\n\n");good(pcourse,pnum,pscore,paver);return 0;}void avsco(float *pscore,float *paver){int i,j;float sum,average;for(i=0;i<4;i++){sum=0、0;for(j=0;j<5;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;i<4;i++)sum=sum+(*(pscore+5*i));average1=sum/4;printf("course 1:%s average score:%7、2f\n",*pcourse,average1);}void fali2(char course[5][10],int num[],float *pscore,float aver[4]){int i,j,k,label;printf(" ==============Student who is fail in two course========== \n");printf("NO、 ");for(i=0;i<5;i++)printf("%11s",course[i]);printf(" average\n");for(i=0;i<4;i++){label=0;for(j=0;j<5;j++)if(*(pscore+5*i+j)<60、0) label++;if(label>=2){printf("%d",num[i]);printf("%11、2f",*(pscore+5*i+k));printf("%11、2f\n",aver[i]);}}}void good(char course[5][10],int num[4],float *pscore,float aver[4]){int i,j,k,n;printf(" ==========Students whose score is good====== \n");printf("NO、 ");for(i=0;i<5;i++)printf("%11s",course[i]);printf(" average\n");for(i=0;i<4;i++){n=0;for(j=0;j<5;j++)if(*(pscore+5*i+j)>85、0) n++;if((n==5)||(aver[i]>=90)){printf("%d",num[i]);printf("%11、2f",*(pscore+5*i+k));printf("%11、2f\n",aver[i]);}}}运行结果:分析与思考:num就是存放4个学生学号得一维数组,course就是存放5门课名字得二维字符数组,score就是存放4 个学生5门课成绩得二维数组,aver就是存放每个学生平时成绩得数组。

相关主题