您好,欢迎访问三七文档
C++程序设计lab8学号:41130091班级:材料1104姓名:丁振文实验8指针和引用一、实验目的⑴掌握指针定义和通过指针存取数据的方法;⑵正确使用字符串的指针和指向字符串的指针变量;⑶通过new和delete的使用理解动态内存分配;⑷掌握指针参数和引用参数的使用方法。二、实验内容和实验要求1.练习题一(1)用一维数组和指针变量作为函数参数,编程打印某班一门课成绩的最高分及其学号。⑵要求①假设每班人数最多不超过40人,具体人数由键盘输入。②编程用函数实现求成绩的最高分及对应的学号。⑶思路①用两个一维数组分别记录学生的分数和学号。②因为班级人数不定,所以需从键盘输入班级人数,并且将此人数传递给函数,确定数组的大小。③函数值只能返回最高分到主函数,还需返回最高分学生的学号,因此通过指针作函数参数返回最高分学生的学号。⑷程序代码#includeiostreamusingnamespacestd;#defineARR_SIZE40intFindMax(intsore[],longnum[],intn,long*MaxNum);intmain(){intscore[ARR_SIZE],maxScore,n,i;longnum[ARR_SIZE],maxNum;coutPleaseentertotalnumber:endl;cinn;coutPleaseenterthenumberandscoreendl;for(i=0;in;i++){cinnum[i]score[i];}C++程序设计lab8学号:41130091班级:材料1104姓名:丁振文maxScore=FindMax(score,num,n,&maxNum);coutmaxScore=maxScore,maxNum=maxNumendl;return0;}intFindMax(intscore[],longnum[],intn,long*MaxNum){inti;intmaxScore;maxScore=score[0];*MaxNum=num[0];for(i=1;in;i++){if(score[i]maxScore){maxScore=score[i];*MaxNum=num[i];}}return(maxScore);}⑸运行结果2.练习题二⑴用二维数组和指针变量作为函数参数,编程打印3个班学生的某门课程成绩的最高分,并指出具有该最高分成绩的学生是第几个班的第几个学生。⑵要求①用二维数组记录3个班学生的成绩,一个班学生成绩对应于二维数组中的一行。②其他要求与练习题一类似⑶思路①用两个数组分别记录学生的分数和学号。②因为班级人数不定,所以需从键盘输入班级人数,并且将此人数传递给函数,确定C++程序设计lab8学号:41130091班级:材料1104姓名:丁振文数组的大小。③函数值只能返回最高分到主函数,还需返回最高分学生的学号,因此通过指针作函数参数返回最高分学生的学号。⑷程序代码#includeiostreamusingnamespacestd;#defineCLASS3#defineSTU4intFindMax(intscore[CLASS][STU],intm,int*row,int*Col);voidmain(){intscore[CLASS][STU],i,j,maxScore,row,col;coutPleaseenterscore:endl;for(i=0;iCLASS;i++){for(j=0;jSTU;j++){cinscore[i][j];}}maxScore=FindMax(score,CLASS,&row,&col);coutmaxScore=maxScore,class=row+1,number=col+1endl;}intFindMax(intscore[][STU],intm,int*Row,int*Col){inti,j,maxScore;maxScore=score[0][0];*Row=0;*Col=0;for(i=0;im;i++){for(j=0;jSTU;j++){if(score[i][j]maxScore){maxScore=score[i][j];*Row=i;*Col=j;}}}return(maxScore);}⑸运行结果C++程序设计lab8学号:41130091班级:材料1104姓名:丁振文⑹思考题及问题编写一个能计算任意m行n列二维数组中元素的最大值,并指出其所在的行列下标的函数,能否使用二维数组或者指向二维数组的行指针作为函数参数进行编程实现呢?为什么?答:可以;如一个数组a[3][4]的二维数组元素的首地址,可分别用啊【0】,a[1],a[2]等表示,a[0]相当于a[0][0]等。#includeiostreamusingnamespacestd;voidmain(){intm,n,i,j;cout定义一个m行n列的数组:;cout输入m,n:;cinmn;intscore[10][10],maxScore,pRow,pCol;cout输入一组数:endl;for(i=0;im;i++){for(j=0;jn;j++){cinscore[i][j];}}cout'\n';maxScore=score[0][0];for(i=0;im;i++){for(j=0;jn;j++)if(score[i][j]maxScore){maxScore=score[i][j];pRow=i;pCol=j;}C++程序设计lab8学号:41130091班级:材料1104姓名:丁振文}coutmaxScore=maxScorem=pRow+1,n=pCol+1endl;}3.练习题三⑴编写一个计算字符串长度的函数,模拟库函数strlen()。⑵要求:函数功能与参数、返回值的设置均与库函数strlen()保持一致。⑶思路①用一个字符指针s指向需求长度的字符串作为函数的入口参数。②利用字符指针的自增运算特性,依次访问字符串中的各个字符。③利用字符串结束标记’\0’作为遍历字符串的结束条件。⑷程序代码#includeiostreamusingnamespacestd;intstrlength(char*s);intmain(){intn1,n2;char*list1=Seenoevil,hearnoevil,;char*list2=blindanddeaf?;n1=strlength(list1);n2=strlength(list2);coutlist1endl;coutThelengthoflist1=n1endl;coutlist2endl;coutThelengthoflist2=n2endl;return0;}intstrlength(char*s){intn=0;while(*s!='\0')C++程序设计lab8学号:41130091班级:材料1104姓名:丁振文{n++;s++;}returnn;}⑸运行结果截图⑹思考及问题①若在主函数中调用strlength函数时,传递的字符指针未赋初值,会发生什么情况?答:functiondoesnottake0parameters;编译时发生错误。②尝试编写字符串函数strcpy。代码:#includeiostreamusingnamespacestd;voidstropy(char*s1,char*s2);intmain(){char*str1=IlikelearningC++program.;cout复制前,字符str1为:str1'\n';charstr2[30];stropy(str1,str2);cout复制后,字符str2为:str2'\n';return0;}voidstropy(char*s1,char*s2){for(;*s1!='\0';s1++,s2++)*s2=*s1;*s2='\0';}运行结果C++程序设计lab8学号:41130091班级:材料1104姓名:丁振文5.练习题五⑴编写一个函数,将三个整数按大小排序。⑵要求①主函数如下:intmain(){inta=3,b=2,c=1;int*s1=&a,*s2=&b,*s3=&c;sort1(a,b,c);couta''b''cendl;a=3;b=2;c=1;sort2(s1,s2,s3);couta''b''cendl;return0;}②函数sort1的形参定义为引用,函数sort2的形参定义为指针,分别实现函数sort1和sort2。⑶思路①函数sort1的形参定义为引用,即可在函数sort1内部直接进行变量值的交换;②函数sort2的形参定义为指针,利用指针的指向在函数sort2内部进行变量值的交换。⑷程序代码#includeiostreamusingnamespacestd;voidsort1(int&a,int&b,int&c){intt;if(ab){t=a;a=b;b=t;}if(bc){t=b;b=c;C++程序设计lab8学号:41130091班级:材料1104姓名:丁振文c=t;}if(ab){t=a;a=b;b=t;}}voidsort2(int*a,int*b,int*c){inti,*t=&i;if(*a*b){*t=*a;*a=*b;*b=*t;}if(*b*c){*t=*b;*b=*c;*c=*t;}if(*a*b){*t=*a;*a=*b;*b=*t;}}intmain(){inta=3,b=2,c=1;int*s1=&a,*s2=&b,*s3=&c;sort1(a,b,c);couta''b''cendl;a=3;b=2;c=1;sort2(s1,s2,s3);couta''b''cendl;return0;}⑸运行结果:贴图:C++程序设计lab8学号:41130091班级:材料1104姓名:丁振文三、自测练习1.自测练习一编写程序,求二维数组中的全部元素之和。程序代码:#includeiostreamusingnamespacestd;intmain(){intarr_add(intarr[],intn);inta[3][5],i,j;int*p,total2;int(*pt)(int*,int);cout定义一个3行5列的二维数组:'\n';cout输入该数组的元素:;for(i=0;i3;i++){for(j=0;j5;j++)cina[i][j];}pt=arr_add;p=a[0];total2=(*pt)(p,12);cout这组数之和为:total2endl;return0;}arr_add(intarr[],intn){inti,sum=0;for(i=0;in;i++)sum=sum+arr[i];returnsum;}运行结果:C++程序设计lab8学号:41130091班级:材料1104姓名:丁振文2.自测练习二定义一个字符数组,,并初始化为“helloworld!”,编写程序逆序输出此字符数组。程序代码:#includeiostreamusingnamespacestd;intmain(){chars[20]=helloworld!;char*p,*q,t;inti;cout原始字符为:;for(i=0;s[i]!='\0';i++)couts[i];cout'\n';for(p=s,q=s+strlen(s)-1;pq;p++,q--){t=*p;*p=*q;*q=t;}cout逆序出此字符数组为
本文标题:C++程序文档
链接地址:https://www.777doc.com/doc-4613733 .html