《北邮C++实验四作业.pdf》由会员分享,可在线阅读,更多相关《北邮C++实验四作业.pdf(13页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、5.35.3 实验题实验题一、基础题一、基础题1修改下列程序中的错误,输出结果,输出示例如图5-1 所示。并对有注释标记的语句进行功能注释。#includeusingnamespacestd;void f1(int x ) void main() int a10;for(int i=0;iai;/输入并赋值给数组a f1(a);/执行函数f1()system(pause); for(int i=0;i10;i+)xi=2*xi+1;coutxiendl;if(i=5)/第六个元素后换行elsecoutxi ;coutendl;2.修改下列程序的错误,完成求最大数的功能。#includeusin
2、gnamespacestd;inlineint f1(intx,int y)return xy?x:y;void main() int a=120,b=300,c=40;intd,e,f; d=f1(a,b);e=f1(d,c);couta=aendl;coutb=bendl;coutc=cendl;cout三y个?数y中D的?最?大数y为a:eendl;system(pause); 3分析程序出错的原因,并更正、输出正确的结果。要求对有注释标记的语句进行功能注释。#includeusingnamespacestd;int sum(inta,int b)型 double sum(doublex
3、,doubley,double z)/定义?了?一?个?重?载?函数ysum中D的?double型 float sum(floatx,float y) void main() cout调用?函数ysum(int,int)的?结果?为a:osum(int)13,(int)14)endl;/由于int型和float型重载函数参数变量个数相同,所以需要在实际变量前加上(int)cout调用函数sum(double,double,double)的结果为:sum(1.32,1.14,1.018)endl; /由于double型和其他两型重载函数参数变量个数不同,所以?不?需要在实际变量前加上(doubl
4、e)returnx+y;returnx+y+z;returna+b;/定义?了?一?个?重?载?函数ysum中D的?intcout调用函数sum(float,float)的结果为:sum(float)12.7,(float)34.78)endl;/由于int型和“float型重载函数参数变量个数相同?,所以需要在实际变量前加上(float) system(pause);4分析下列程序所完成的功能,并标出程序中各个变量的存储类型。#includeusingnamespacestd;int f1(int);void main() staticint x=12;int f1(int a) stati
5、cint y=300; y=y+a; 首先staticint x=12是一个全局变量,在全局中起作用,其中包括f1,而main函数中的int x=5coutx=x y=yendl;return y;int x=5;staticint y; y=y+f1(x);coutx=x y=yendlendl; y=y+f1(x);system(pause);coutx=x y=yendlendl;则是一个局部变量,只在main函数中起作用。当程序执行时,main函数中x=5,静态局部变量y(作用域为main函数)默认=0,执行y=y+f1(x)时, 需要将x=5作为实际参数赋给形式参数a, 执行f1,
6、静态局部变量y (作用域为f1) =300, 执行y=y+a,y=305, 输出全局变量x=12, 静态局部变量y=305, 返回y=305。 再一次回到main函数, 执行y=y+f1(x),此时的y为main中的y=0,于是得到y=305;此时的x为main中的局部变量x=5。程序继续执行, y=y+f1(x), 此时的y=上一次的305, 局部变量x仍然为5, 执行f1(x), 将5赋给a,staticint y=300不用再管了,y在f1中仍然为上一次的执行结果305,305+5=310,于是输出全局变量x=12,y=310.回到主函数,执行y=y+f1(x)得y=615,输出局部变量
7、x=5,输出y=615.综上所述,x为静态全局变量,其值为12,当在main函数中时,x为局部变量,其值为5;y在main函数中时为静态局部变量,其值默认为0,在f1中时,为静态局部变量,其值为300.5分析下列程序所完成的功能,并输出正确的结果。该程序的功能是将一个正整数按位逆转, 即最低位的数转为最高位, 最高位的数转为最低位,依此类推。二、编程题二、编程题1设计一个函数求 100 以内能被 13 整除的最大数。#includeusingnamespacestd;int f() int n=100,m=9;while(m!=0) n-; m=n%13;return n; void main
8、() cout100以内能被整除的最大数为:f()endl;system(pause);2设计一个可以计算阶乘的函数,由用户输入n 值,计算出1!+2!+3!+4+n 的值,并打印出来。#includeusingnamespacestd;int f(int m) void main() int n;coutn;coutf(n)endl;inti,a=1;for(i=1;i=m;i+) a=a*i;return 0;returna+f(m-1);if(m=0)elsesystem(pause); 3设计一个函数,完成将一个十进制数转换成2、8、16 进制数。#includeusingnamesp
9、acestd;void f(int m) void main() int n;coutn;f(n);cout其八进制是:octnendl;cout其十六进制是:hexnendl;int n=m,i,a20;for(i=0;n!=0;i+) ai=n%2; n=n/2;cout=0;i-)coutendl;cout其二进制是:;system(pause);4设计一个递归函数,求满足以下条件的最大的n:12+22+32+n21000#includeusingnamespacestd;int f(int a=1) void main() coutf(1)endl;system(pause);int
10、b=1000; b=b-a*a;if(b=0)return a;return f(a+1);else5设计一个重载函数 area,用于求出长方形和圆形的面积,其中长方形的长和宽、圆的半径由用户从键盘输入。#includeusingnamespacestd;float area(int r) int area(inta,int b) void main() intx,y;coutxy;if(x=y)coutarea(x)endl;coutarea(x,y)endl;elsesystem(pause);return a*b;constfloat pi=3.14;return pi*r*r;6编写一
11、个程序,将一个文件中所有大写字母转换成小写字母,并存储到另一个文件中。#include#includeusingnamespacestd;void main()ifstreamifile(idata.txt);ofstreamofile(odata.txt);char data;while(ifiledata);system(pause);if(int)data=65&(int)data=90)data=(int)data+32;data=(char)data;ofiledata;7编写一个程序,实现将存放在文件中的学号、姓名、电话等信息读出并显示出来。#include#include#includeusingnamespacestd;void main()ifstreamifile(my_information.txt);string data;while(ifiledata);coutendl;system(pause);coutdata;
限制150内