C语言编程实验8

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

实验8指针(P148-P158)说明:完成以下实验内容后,将本文档改名为“实验8_班级_学号_姓名.doc”,并按规定提交。第一部分:练习题练习题1用一维数组和指针变量作为函数参数,编程打印某班一门课程的最高分数及其学号。程序代码#includestdio.h#defineARR_SIZE40intFindMax(intscore[],longnum[],intn,long*pMaxNum);voidmain(){intscore[ARR_SIZE],maxScore,n,i;longnum[ARR_SIZE],maxNum;printf(Pleaseentertotalnumber:);scanf(%d,&n);printf(Pleaseenterthenumberandscore:\n);for(i=0;in;i++){scanf(%ld%d,&num[i],&score[i]);}maxScore=FindMax(score,num,n,&maxNum);printf(maxScore=%d,maxNum=%ld\n,maxScore,maxNum);}intFindMax(intscore[],longnum[],intn,long*pMaxNum){inti;intmaxScore;maxScore=score[0];*pMaxNum=num[0];for(i=1;in;i++){if(score[i]maxScore){maxScore=score[i];*pMaxNum=num[i];}}return(maxScore);}程序运行截图练习题2用二维数组和指针变量作为函数参数,编程打印3个班学生的某门课程成绩的最高分,并指出具有该最高分成绩的学生是第几个班的第几个学生。程序代码#includestdio.h#defineCLASS3#defineSTU10#defineARR_SIZE40intFindMax(intscore[CLASS][ARR_SIZE],intm,intn,int*pRow,int*pCol);voidmain(){intscore[CLASS][ARR_SIZE],maxScore,n,i,j,row,col;printf(Pleaseenterstudentnumberinaclass:);scanf(%d,&n);printf(Pleaseenterscore:\n);for(i=0;iCLASS;i++){for(j=0;jn;j++){scanf(%d,&score[i][j]);}}maxScore=FindMax(score,n,CLASS,&row,&col);printf(maxScore=%d,class=%d,number=%d\n,maxScore,row+1,col+1);}intFindMax(intscore[][ARR_SIZE],intn,intm,int*pRow,int*pCol){inti,j,maxScore;maxScore=score[0][0];*pRow=0;*pCol=0;for(i=0;im;i++){for(j=0;jn;j++){if(score[i][j]maxScore){maxScore=score[i][j];*pRow=i;*pCol=j;}}}return(maxScore);}程序运行截图问题解答思考题1能否使用二维数组或者而为数组的行指针作为函数参数进行编程实现呢?可以,两者都可以作为指针指向函数,从而进行地址传递思考题2利用动态内存分配,编写计算任意m行n列二维数组中最大值的函数。程序代码#includestdio.h#includestdlib.hintm;intn;intmain(){int*p;int*q;printf(输入行数m列数n:);scanf(%d%d,&m,&n);p=(int*)calloc(m,n);q=p;printf(输入数组\n);for(inti=0;im;i++)for(intj=0;jn;j++)scanf(%d,p++);intmax=*q;for(intk=0;km*n;k++)if(*(q+k)max)max=*(q+k);printf(max=%d\n,max);return0;}程序运行截图练习题4编写返回字符指针函数搜寻一个字符串中第一个字符’d’,找到返回’d’的地址,在主函数内用’*’代替’d’,然后打印该字符串。程序代码#includestdio.h#defineEMPTY0char*findfirst(char*,char);intmain(){charstring[]=doyoustudymathtoday?;char*ptr;printf(%s\n,string);ptr=EMPTY;ptr=findfirst(string,'d');if(ptr!=EMPTY){*ptr='*';}printf(%s\n,string);return0;}char*findfirst(char*s,chard){while((*s!=d)&&(*s!='\0'))s++;if(*s==d)returns;elsereturnEMPTY;}程序运行截图问题解答思考题1若将函数findfirst中while语句改为:while((*s!=’d’)&&(*s!=0));可以吗?不可以思考题2修改主程序将字符串中的字符’d’全部替换为’*’,应如何编程实现。程序代码#includestdio.h#defineEMPTY0char*find(char*,char);intmain(){charstring[]=doyoustudymathtoday?;char*ptr;printf(%s\n,string);ptr=EMPTY;do{ptr=find(string,'d');if(ptr!=EMPTY){*ptr='*';}}while(ptr!=0);printf(%s\n,string);return0;}char*find(char*s,chard){while((*s!=d)&&(*s!='\0'))s++;if(*s==d)returns;elsereturnEMPTY;}程序运行截图练习题5编写函数求从1-n倒数的累加和,要求使用只想函数的指针。程序代码#includestdio.hdoublesur(double);doublesqrt(double);doublecube(double);doublesum(int,double(*p)(double));voidmain(){double(*ptr)(double);ints=0;ptr=sur;printf(sum=%.2lf\n,sum(4,ptr));}doublesum(intn,double(*p)(double)){doubles=0;intk;for(k=1;k=n;k++)s+=(*p)(k);returns;}doublesur(doublex){return(1.0/x);}程序运行截图问题解答思考题1根据用户需求选择求平方累加和、立方累加和或倒数累加和。程序代码#includestdio.hdoublex(double);doublepf(double);doublelf(double);doublesum(int,double(*p)(double));intmain(){double(*p)(double);intl;printf(倒数和输入1,平方和输入2,立方和输入3:);scanf(%d,&l);switch(l){case1:p=x;break;case2:p=pf;break;case3:p=lf;break;default:break;}intn;printf(输入n:);scanf(%d,&n);printf(sum=%.2lf\n,sum(n,p));return0;}doublex(doublei){return1/i;}doublepf(doublei){return(i*i);}doublelf(doublei){return(i*i*i);}doublesum(intn,double(*p)(double)){doubles=0;for(intk=1;k=n;k++)s+=(*p)((double)k);returns;}程序运行截图练习题6输入三个数利用指针存入临时动态分配的变量中,并按从小到大的顺序输出。要求不能交换无名变量中的数据,通过改变指针的指向完成排序。程序代码#includestdio.h#includestdlib.hintmain(){float*pa;float*pb;float*pc;float*pt;if(pa=(float*)malloc(sizeof(float)))scanf(%f,pa);elseprintf(mallocforpaisfailed!\n);if(pb=(float*)malloc(sizeof(float)))scanf(%f,pb);elseprintf(mallocforpbisfailed!\n);if(pc=(float*)malloc(sizeof(float)))scanf(%f,pc);elseprintf(mallocforpcisfailed!\n);if(*pa*pb){pt=pa;pa=pb;pb=pt;}if(*pa*pc){pt=pa;pa=pc;pc=pt;}if(*pb*pc){pt=pb;pb=pc;pc=pt;}printf(%.2f%.2f%.2f\n,*pa,*pb,*pc);return0;}程序运行截图第二部分:自测练习自测练习2输入一个3*4的数组,先找出每一行中的最大元素,在分别除改行中的所有元素,最后输出数组。要求定义函数形参时,如果把二维数组定义为指针,调用时要用一级指针的地址。程序代码#includestdio.h#includestring.hfloat*func(floats1[3][4],float*p1){intm,n;floatst;for(m=0;m3;m++){for(n=0;n4;n++){if(*p1s1[m][n]);elsep1=&s1[m][n];st=*p1;}p1=&s1[m+1][0];for(n=0;n4;n++)s1[m][n]=s1[m][n]/st;}return&s1[0][0];}intmain(void){floats[3][4],*p,*q;inti,j,k;for(i=0;i12;i++)scanf(%d,&s[i/4][i%4]);p=&s[0][0];q=func(s,p);for(j=0;j3;j++){for(k=0;k4;k++){printf(%0.2f,*q);q++;}printf(\n);}return0;}程序运行截图自测练习4编程把命令行中的字符串(由数字字符组成)转换成整数并累加输出。程序代码#includestdio.h#includestring.h#includemath.h#defineN100intmain(void){chars[N],*p=NULL;inti,j,k,len,sum,num[N];j=0,k=0,sum=0;for(i=0;iN;i++)num[i]=0;gets(s);len=strlen(s);p=&s[N-1];for(i=0;iN;i++){if((*p='0')&(*p='9')){num[j]+=(pow(10,k)*((*p)-'0'));k++;}if(*p==''){j++;k=0;}p--;}for(i=0;iN;i++)sum+=num[i];printf(%d\n,sum);return0;}程序运行截图自测

1 / 14
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功