最新C++程序文档.doc

上传人:1595****071 文档编号:33833419 上传时间:2022-08-12 格式:DOC 页数:18 大小:284.50KB
返回 下载 相关 举报
最新C++程序文档.doc_第1页
第1页 / 共18页
最新C++程序文档.doc_第2页
第2页 / 共18页
点击查看更多>>
资源描述

《最新C++程序文档.doc》由会员分享,可在线阅读,更多相关《最新C++程序文档.doc(18页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精品资料C+程序文档.实验8 指针和引用一、 实验目的 掌握指针定义和通过指针存取数据的方法; 正确使用字符串的指针和指向字符串的指针变量; 通过new和delete的使用理解动态内存分配; 掌握指针参数和引用参数的使用方法。 二、实验内容和实验要求 1练习题一(1) 用一维数组和指针变量作为函数参数,编程打印某班一门课成绩的最高分及其学号。 要求 假设每班人数最多不超过40人,具体人数由键盘输入。 编程用函数实现求成绩的最高分及对应的学号。 思路 用两个一维数组分别记录学生的分数和学号。 因为班级人数不定,所以需从键盘输入班级人数,并且将此人数传递给函数,确定数组的大小。 函数值只能返回最高

2、分到主函数,还需返回最高分学生的学号,因此通过指针作函数参数返回最高分学生的学号。 程序代码#includeusing namespace std;#define ARR_SIZE 40int FindMax(int sore,long num,int n,long *MaxNum);int main()int scoreARR_SIZE,maxScore,n,i;long numARR_SIZE,maxNum;coutPlease enter total number:n;coutPlease enter the number and scoreendl;for(i=0;inumiscore

3、i;maxScore=FindMax(score,num,n,&maxNum);coutmaxScore=maxScore,maxNum=maxNumendl;return 0;int FindMax(int score,long num,int n,long *MaxNum)int i;int maxScore;maxScore=score0;*MaxNum=num0;for(i=1;imaxScore)maxScore=scorei;*MaxNum=numi;return(maxScore); 运行结果 2练习题二 用二维数组和指针变量作为函数参数,编程打印个班学生的某门课程成绩的最高分,

4、并指出具有该最高分成绩的学生是第几个班的第几个学生。 要求 用二维数组记录3个班学生的成绩,一个班学生成绩对应于二维数组中的一行。 其他要求与练习题一类似 思路 用两个数组分别记录学生的分数和学号。 因为班级人数不定,所以需从键盘输入班级人数,并且将此人数传递给函数,确定数组的大小。 函数值只能返回最高分到主函数,还需返回最高分学生的学号,因此通过指针作函数参数返回最高分学生的学号。 程序代码#includeusing namespace std;#define CLASS 3#define STU 4int FindMax(int scoreCLASSSTU,int m,int *row,i

5、nt *Col);void main()int scoreCLASSSTU,i,j,maxScore,row,col;coutPlease enter score:endl;for(i=0;iCLASS;i+)for(j=0;jscoreij;maxScore=FindMax(score,CLASS,&row,&col);coutmaxScore=maxScore,class=row+1,number=col+1endl;int FindMax(int scoreSTU,int m,int *Row,int *Col)int i,j,maxScore;maxScore=score00;*Row

6、=0;*Col=0;for(i=0;im;i+)for(j=0;jmaxScore) maxScore=scoreij; *Row=i; *Col=j; return (maxScore); 运行结果 思考题及问题编写一个能计算任意m行n列二维数组中元素的最大值,并指出其所在的行列下标的函数,能否使用二维数组或者指向二维数组的行指针作为函数参数进行编程实现呢?为什么?答:可以;如一个数组a34的二维数组元素的首地址,可分别用啊【0】,a1,a2等表示,a0相当于a00等。#includeusing namespace std;void main()int m,n,i,j;cout定义一个m行n

7、列的数组:;coutmn;int score1010,maxScore,pRow,pCol; cout输入一组数:endl; for(i=0;im;i+)for(j=0;jscoreij;coutn;maxScore=score00; for(i=0;im;i+)for(j=0;jmaxScore)maxScore=scoreij;pRow=i; pCol=j;coutmaxScore = maxScore m= pRow+1 ,n= pCol+1endl;3练习题三 编写一个计算字符串长度的函数,模拟库函数strlen()。 要求: 函数功能与参数、返回值的设置均与库函数strlen()保持

8、一致。 思路 用一个字符指针s指向需求长度的字符串作为函数的入口参数。 利用字符指针的自增运算特性,依次访问字符串中的各个字符。 利用字符串结束标记0作为遍历字符串的结束条件。 程序代码#includeusing namespace std;int strlength(char *s);int main() int n1,n2;char *list1=See no evil,hear no evil,;char *list2=blind and deaf?;n1=strlength(list1);n2=strlength(list2);coutlist1endl;coutThe length

9、of list1=n1endl;coutlist2endl;coutThe length of list2=n2endl;return 0;int strlength(char *s)int n=0;while(*s!=0)n+;s+;return n; 运行结果截图 思考及问题 若在主函数中调用strlength函数时,传递的字符指针未赋初值,会发生什么情况?答: function does not take 0 parameters;编译时发生错误。 尝试编写字符串函数strcpy。代码:#includeusing namespace std;void stropy(char *s1,ch

10、ar *s2);int main()char *str1=I like learning C+ program.; cout复制前,字符str1为:str1n;char str230;stropy(str1,str2);cout复制后,字符str2为:str2n;return 0;void stropy(char *s1,char *s2)for(;*s1!=0;s1+,s2+)*s2=*s1;*s2=0;运行结果5练习题五 编写一个函数,将三个整数按大小排序。 要求 主函数如下:int main()int a = 3, b = 2, c = 1;int *s1 = &a, *s2 = &b,

11、 *s3 = &c;sort1(a, b, c);cout a b c endl;a =3; b = 2; c = 1;sort2(s1, s2, s3);cout a b c endl;return 0; 函数sort1的形参定义为引用,函数sort2的形参定义为指针,分别实现函数sort1和sort2。 思路 函数sort1的形参定义为引用,即可在函数sort1内部直接进行变量值的交换; 函数sort2的形参定义为指针,利用指针的指向在函数sort2内部进行变量值的交换。 程序代码#includeusing namespace std;void sort1(int &a,int &b,in

12、t &c)int t;if(ab)t=a;a=b;b=t;if(bc)t=b;b=c; c=t;if(ab)t=a;a=b;b=t;void sort2(int *a,int *b,int *c)int i,*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;int main()int a = 3, b = 2, c = 1;int *s1 = &a, *s2 = &b, *s3 = &c;sort1(a, b, c);cout a b c endl;a =3; b = 2; c

13、 = 1;sort2(s1, s2, s3);cout a b c endl;return 0; 运行结果:贴图: 三、自测练习 1自测练习一编写程序,求二维数组中的全部元素之和。程序代码:#includeusing namespace std;int main()int arr_add(int arr,int n); int a35,i,j;int *p,total2;int (*pt)(int *,int); cout定义一个3行5列的二维数组:n;cout输入该数组的元素:;for(i=0;i3;i+)for(j=0;jaij;pt=arr_add;p=a0;total2=(*pt)(p

14、,12); cout这组数之和为:total2endl;return 0;arr_add(int arr,int n)int i,sum=0;for(i=0;in;i+)sum=sum+arri;return sum;运行结果:2. 自测练习二定义一个字符数组,并初始化为“hello world!”,编写程序逆序输出此字符数组。程序代码:#includeusing namespace std;int main()char s20=hello world!;char *p,*q,t;int i;cout原始字符为:;for(i=0;si!=0;i+)coutsi;coutn;for(p=s,q=

15、s+strlen(s)-1;pq;p+,q-)t=*p;*p=*q;*q=t;cout逆序出此字符数组为:;for(i=0;si!=0;i+)coutsi;coutn;return 0;运行结果:3自测练习三 从键盘上输入一个方阵(行数与列数相等),求方阵的主对角线之和,方阵大小由键盘输入。要求用函数实现。程序代码:#include#includeusing namespace std;int sum(int a100100,int n)int i,s=0;for(i=0;in;i+)s=s+aii;return s;int main()int n,i,j,a100100;coutn;cout

16、输入n阶方阵各数:;for(i=0;in;i+)for(j=0;jaij;cout该矩阵为:n;for(i=0;in;i+)for(j=0;jn;j+)coutsetw(5)aij;coutendl;cout对角线元素之和为:sum(a,n)endl;return 0;运行结果:4自测练习四编写程序,输入10至20个城市名,按字母顺序输出城市名清单。提示: 利用字符串比较函数和数组排序算法实现。#include#include#include#define M 10 void input(char *city,int n);void sort(char *city,int n);int mai

17、n(int argc, char *agrv) char *cityM; int i= 0;input(city,M);sort(city,M); printf(城市按拼音排列输出如下:n);for(i=0;iM;i+) printf(%st,cityi);printf(n);return 0;void input(char *city,int n) char str20;int i; printf(请输入 %d 个城市的名字(请用拼音) :n,M); for(i=0; i n; i+) scanf(%s,str); cityi = (char *)malloc(sizeof(char)*(s

18、trlen(str); strcpy(cityi,str); void sort(char *city,int n)char *tmp; int i,j;for(i=0;in;i+) for(j=1;jn-i;j+) if(strcmp(cityj,cityj-1)0) tmp=cityj-1; cityj-1=city j; cityj=tmp; 定义函数形参时,如果把二维数组定义为指针,调用时要用一级指针的地址。5. 自测练习五编写函数实现字符串函数strcpy的功能。程序代码:#includeusing namespace std;void stropy(char *s1,char *s

19、2);int main()char *str1=I like learning C+ program.; cout复制前,字符str1为:str1n;char str230;stropy(str1,str2);cout复制后,字符str2为:str2n;return 0;void stropy(char *s1,char *s2)for(;*s1!=0;s1+,s2+)*s2=*s1;*s2=0;运行结果:6. 自测练习六-选作题编写程序,以(999)99999-999的形式输入电话号码字符串。利用strtok()函数获取区号,电话号码的前五位是主机号,后三位是分机号,需将电话号码的八位数连接

20、成一个字符串。程序将区号转化为整型,将电话号码字符串转化为长整型,并打印转化后的区号和电话号码。提示: strtok()函数:strtok()函数将字符串按照某分隔字符分解为若干个子字符串。例如,在一行文本中,每个单词可以作为子字符串,空格是分隔字符。需多次调用strtok才能将字符串分解为若干个子字符串。第一次调用strtok包含两个参数,即要分隔的字符串和分隔字符。例如语句sPtr = strtok( string, “ “);中strtok的第一个参数为需要进行分割的字符串,第二个参数为分隔字符空格。函数strtok搜索string中不是分隔字符(空格)的第一个字符,这是第一个子字符串的

21、开头,然后函数寻找字符串中的下一个分隔字符,将其换成null(0)字符,即第一个子字符串的结尾。函数strtok保存string中的第一个子字符串的指针,并返回此指针。 atoi()函数可将字符串转化成整型,atol()函数可将字符串转化成长整型。程序代码:#includeusing namespace std;int main()char m40;cout请输入电话号码(输入时第一数据必须是空格)=endl;gets(m);char *p,*q,*e,*f,*g,*h;int a;long int b;g=strtok(m,();h=strtok(NULL,();p=strtok(h,); q=strtok(NULL,);e=strtok(q,-);f=strtok(NULL,-);a=atoi(p);strcat(e,f);b=atol(e);cout转化后的区号和电话号码:endl;cout(a)bendl;return 0;运行结果:

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 小学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁