收藏 分享(赏)

C++编程例题.ppt

上传人:eukav 文档编号:6573159 上传时间:2019-04-17 格式:PPT 页数:51 大小:295KB
下载 相关 举报
C++编程例题.ppt_第1页
第1页 / 共51页
C++编程例题.ppt_第2页
第2页 / 共51页
C++编程例题.ppt_第3页
第3页 / 共51页
C++编程例题.ppt_第4页
第4页 / 共51页
C++编程例题.ppt_第5页
第5页 / 共51页
点击查看更多>>
资源描述

1、例 题,例1:创建一个employee类,该类中有字符数组,表示姓名、街道地址、市、省和邮政编码。把构造函数、changname()、display()的函数的原型放在类定义中,构造函数初始化每个成员,display()函数把完整的对象数据打印出来。其中的数据成员是保护的,函数是公共的。,解: #include #include class employee protected: char name10; / 姓名 char street20; / 街道地址 char city10; / 市 char prov10; / 省 char post7; / 邮政编码 int no; / 记录序号,

2、public: employee(char ,char ,char ,char ,char ,int); void changename(char str); void display(); ; employee:employee(char n,char s,char c,char p1,char p2,int num) strcpy(name,n); strcpy(street,s); strcpy(city,c); strcpy(prov,p1); strcpy(post,p2); no=num; ,void employee:changename(char n) strcpy(name,

3、n); void employee:display() cout“输出记录 “noendl; cout“ 姓名:“nameendl; cout“街道地址:“streetendl; cout“ 市:“cityendl; cout“ 省:“provendl; cout“邮政编码“postendl; ,void main() employee obj1(“王华“,“中华路15号“,“武汉市“,“湖北省“,“430070“,1); employee obj2(“杨丽“,“天津路30号“,“南京市“,“江苏市“,“210020“,2); obj1.display(); obj2.display(); ,

4、本程序的执行结果如下:输出记录1 姓名:王华 街道地址:中华路15号 市:武汉市 省:湖北省 邮政编码:430070 输出记录2 姓名:杨丽 街道地址:天津路30号 市:南京市 省:江苏省 邮政编码:210020,例2:分数相加,两个分数分别是1/5和7/20,它们相加后得11/20。要求最后的结果为最简分数形式。试建立一个分数类Fract,完成两个分数相加的功能。具体要求如下: (1)私有数据成员int num,den; /num为分子,den为分母 (2)公有成员函数Fract(int a=0,int b=1):构造函数,用a和b分别初始化分子num、分母den;int ged(int m

5、,int n):求m、n的最大公约数。此函数供成员函数add()调用;Fract add(Fract f):将参数分数f与对象自身相加,返回约简后的分数对象;void show():按照num/den的形式在屏幕上显示分数。 (3)在主程序中定义两个分数对象f1和f2,其初值分别是1/5和7/20,通过f1调用成员函数add完成f1和f2的相加,将得到的分数赋给对象f3,显示分数对象f3。,解: #include class Fractint num,den; public:Fract(int a=0,int b=1);int ged(int,int);Fract add(Fract);voi

6、d show();,Fract: Fract(int a,int b)num=a;den=b; int Fract:ged(int m,int n) int k;if(mn)k=n;else k=m;for(;k0;k-)if(m%k= =0,v=ged(den,f.den);v=den*f.den/v;num=v/den*num;f.num=v/f.den*f.num;ff.num=num+f.num;ff.den=v;v=ged(ff.num,ff.den);ff.num/=v;ff.den/=v;return ff; void Fract: show()coutnum/denendl;,

7、void main()Fract f1(1,5),f2(7,20),f3; f3=f1.add(f2);f3.show(); ,例3:由一个已知一维数组派生出另一个一维数组的派生规则如下:新数组的每一元素等于原始数组的对应元素及其相邻两元素的平均值。其中第0个元素的左邻元素约定为最后一个元素,最后一个元素的右邻元素约定为第0个元素。假设原始数组为a10,则b0=(a9+a0+a1)/3,b1=(a0+a1+a2)/3,b2=(a1+a2+a3)/3,b9=(a8+a9+a0)/3。试建立一个实现此功能的类ARRAY。具体要求如下: (1)私有数据成员float a10,b10;a存放原始数组,

8、b存放派生数组。 (2)公有成员函数ARRAY(float t10):构造函数,初始化成员数组a;void process():由数组a根据上述派生规则,用循环语句计算数组b的各元素;void print():屏幕显示数组a和b。 (3)在主程序中对该类进行测试。使用测试数据 0,3,6,9,12,15,18,21,24,27。,#include class ARRAYfloat a10,b10; public:ARRAY(float t10);void process();void print(); ;ARRAY:ARRAY(float t10)for(int i=0;i10;i+)ai=t

9、i;,void ARRAY:process()int i,j,k;for(i=0;i9)k=10-k;bi=(aj+ai+ak)/3; ,void ARRAY: print()for(int i=0;i10;i+)if(i%10= =5)coutn;coutait;coutendl;for(i=0;i10;i+)if(i%10=5)coutn;coutbit;coutendl; ,void main()float aa10;for(int k=0;k10;k+)aak=(float)k*3;ARRAY arr(aa);arr.process();arr.print(); ,例4:建立一个类SU

10、M,求二维数组外围各元素的和,并输出数组中各元素及所求之和。具体要求如下: (1)私有数据成员int array55; /二维整型数组int s; /数组array各外围元素的和 (2)公有成员函数SUM(int d55):构造函数,初始化成员数据;void process():求二维数组外围各元素的和s;void print():输出二维数组(每行输出5个元素)及其外围元素之和。 (3)在主程序中对该类进行测试。 使用如下测试数据(外围元素是指 阴影部分的元素。,#include class SUMint array55;int s; public:SUM(int d55);void pro

11、cess();void print(); ;,SUM: SUM(int d55)for(int i=0;i5;i+)for(int j=0;j5;j+)arrayij=dij;void SUM: print()for(int i=0;i5;i+)for(int j=0;j5;j+)coutarrayijt;coutn; cout”SUM=”sendl;,void SUM:process()int t=0,t1=0;for(int i=0;i5;i+)for(int j=0;j5;j+)t+=arrayij;for(i=1;i4;i+)for(int j=1;j4;j+)t1+=arrayij;

12、s=t-t1; ,void main()int aa55;int a=1;for(int i=0;i5;i+)for(int j=0;j5;j+)aaij=a+;SUM ss(aa);ss.process(); ss.print(); ,例5:定义一个字符串类String,具体要求如下: (1)私有成员数据char * str1,* str2;char *str; /str为str1与str2之和,如str1为“db a”,str2为“4 1”,则str为“db a4 1” (2)公有成员函数构造函数:根据给定的两个字符串初始化成员数据str1和str2,由str1和str2得到str;voi

13、d dele():删除str中的空格字符;void sort():对str中的字符按升序进行排列;void show():输出所有成员数据;析构函数。 (3)设计一个完整的程序对该类进行测试。以字符串“db a”和“4 1”初始化str1和str2(b与a间一个空格,4与1间2个空格);输出删除空格和排序前的字符串str1、str2和str;输出删除空格和排序后的字符串str1、str2和str。,#include #include class Stringchar * str1,* str2;char *str; public:String(char*ptr1,char*ptr2);void

14、 dele( );void sort( ); void show( );String()deletestr1;deletestr2;deletestr; ;,String:String(char*ptr1,char*ptr2) str1=new charstrlen(ptr1)+1; strcpy(str1,ptr1); /对内存空间赋值str2=new charstrlen(ptr2)+1;strcpy(str2,ptr2);str=new charstrlen(ptr1)+strlen(ptr2)+1;strcpy(str,ptr1);strcat(str,ptr2); ,void Str

15、ing:dele( )char*ptr1=str,*ptr2=str;while(*ptr1)if(*ptr1!= )*ptr2+=*ptr1;ptr1+;*ptr2=0; ,void String:sort( )char*ptr1=str,*ptr2,temp; /ptr1 和ptr2保证成员指针不移动while(*ptr1)for(ptr2=ptr1;*ptr2;ptr2+)if(*ptr1*ptr2)temp=*ptr1;*ptr1=*ptr2;*ptr2=temp;ptr1+; ,void String:show( )cout”str1=”str1endl; cout”str2=”st

16、r2endl; cout”str=”strendl; void main( )String str(“da b”,”4 1”);str.show(); str.dele(); str.sort(); str.show(); ,例6:定义一个数组类Array,求整型一维组中值为素数的元素的平均值。具体要求如下: (1)私有成员数据int * p,k; / p表示维组,k为数组大小float *s; /一维组中素数元素的平均值 (2)公有成员函数Array(int*ptr,int n):根据参数初始化p和k,并为s赋初值;int fun(int n):判断n是否为素数,若是返回1,否则返回0;vo

17、id sum():求素数元素的平均值;void show():输出所有成员数据,数组每行5个元素,其他成员每行一个;析构函数。 (3)设计一个完整的程序对该类进行测试。 以数组5,2,7,4,8,23,65,1,40说明Array类型对象arr,并对其测试。,#include class Arrayint * p,k;float *s; public:Array(int*ptr,int n) ;int fun(int n);void sum( ); void show( );Array(); ;,Array: Array(int*ptr,int n) k=n;p=new intk; /分配空间

18、for(int i=0;ik;i+) pi=ptri; /初始化s=new float(0); int Array:fun(int n)if(n=0|n=1)return 0;for(int i=2;in;i+)if(n%i=0)return 0;return 1; ,void Array:sum( )for(int i=0,j=0;ik;i+)if(fun(pi)*s+=pi;j+;*s/=j; ,void Array:show( )cout”数组个数为:”kendl;cout”数组为:”endl;for(int i=0,j=1;ik;i+,j+)coutpit;if(j%5=0)coute

19、ndl; coutendl;cout”和为:”*sendl; ,Array()deletep;deletes; void main( )int a20=5,2,7,4,8,23,65,1,40;Array arr(a,9);arr.sum();arr.show(); ,例7:假定有如下“孪生质数对”的定义:如果两个质数(即素数),相差为2,则这两个质数称为“孪生质数对”。如(3,5)、(11,13)、(827,829)等。试建立一个类Prime,求出指定范围内孪生质数对数,具体要求如下: (1)私有数据成员int b502;存放求出的孪生质数对。int m,n,count;m、n存放孪生质数对

20、的取值范围,count存放求出的孪生质数对的对数。 (2)公有成员函数构造函数Prime(int,int):初始化成员数据m,n。int isprime(int x):判断x是否是素数。 void process():根据给定的m,n的值,求出介于m,n之间(包括m,n本身)的所有孪生质数对及其对数,并输出。 (3)在主程序中对该类进行测试。使用测试数据m=3,n=1000。,#include #include #include class Primepublic:int b502;int m,n,count;public:Prime(int s,int t);int isprime(int

21、x); void process(); ;,Prime:Prime(int s,int t)m=s;n=t; int Prime: isprime(int x) int k,i;k=(int)sqrt(x);for(i=2;i=k;i+)if(x%i=0)return(0);return(1); ,void Prime: process()int a500,k=0;for(int i=m;in;i+=2)if(isprime(i)ak+=i;count=0;for(i=0;ik-1;i+)if(ai+1-ai=2)bcount0=ai;bcount+1=ai+1; for(i=0;icount

22、;i+)if(i%5=0)coutendl; cout(setw(3)bi0,setw(3)bi1)t;coutendl“count=“countendl; ;,void main()Prime test(3,1000);couttest.mttest.nn;test.process(); ,例8:设计一个日期类Date,包括年、月、日等私有数据成员。要求实现日期的基本运算,如一日期加上天数、一日期减去天数、两日期相差的天数等。,分析: 在Date类中设计如下重载运算符函数: Date operator+(int days); /返回一日期加一天数得到的日期 Date operator-(in

23、t days); /返回一日期减去天数得到的日期 int operator-(Date /将指定的0年0月0日起的天数转换为对应的日期,#include int day_tab212=31,28,31,30,31,30,31,31,30, 31,30,31,31,29,31,30,31,31,30,31,30,31; / day_tab 二维数组存放各月天数, /第一行对应非闰年,第二行对应闰年 class Date int year,month,day; int leap(int); int dton(Date ,void setmonth(int m); void setyear(int

24、y); int getday(); int getmonth(); int getyear(); Date operator+(int days); Date operator-(int days); int operator-(Date ,void Date: setday(int d)day=d; void Date: setmonth(int m)month=m; void Date: setyear(int y)year=y; int Date: getday()return day; int Date: getmonth()return month; int Date: getyea

25、r()return year; Date Date: operator+(int days) static Date date; int number=dton(*this)+days; date=ntod(number); return date; ,Date Date: operator-(int days) static Date date; int number=dton(*this); number-=days; date=ntod(number); return date; int Date: operator-(Date ,void Date: disp() coutyear“.

26、”month“.”dayendl; int Date:leap(int year) if(year%4=0 ,int Date:dton(Date ,Date Date:ntod(int n) int y=1,m=1,d,rest=n,lp; while(1) if(leap(y) if(rest=366) break; else rest-=366; else if(rest=365) break; else rest-=365; ,y+; y-; lp=leap(y); while(1) if(lp) if(restday_tab1m-1) rest-=day_tab1m-1; else

27、break; ,else if(restday_tab0m-1) rest-=day_tab0m-1; else break; m+; d=rest; return Date(y,m,d); ,void main() Date now(2008,12,15),then(2010,2,114); cout“now:“; now.disp(); cout“then:“; then.disp(); cout“相差天数:“(then-now)endl; Date d1=now+100,d2=now-100; cout“now+100:“; d1.disp(); cout“now-100:“; d2.disp(); ,本程序的执行结果如下:now:2008.12.15 then:2010.2.14 相差天数:454 now+100:2009.2.24 now-100:2008.8.7,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报