C++程序代码.doc
1-1#include <stdio.h>#define MUL(X) X*Xvoid main()int iValue;iValue = MUL(4+4)/(2+2);printf("%d",iValue);1-2#include <stdio.h>void main()int x = 'A',y = 66;printf("%d,",x>y ? y+ :x+);printf("%d,",x<=y?+y:+x);printf("%d,%d",x,y);4-7/个人银行账户管理程序#include <iostream>#include <cmath>using namespace std;class SavingAccount /储蓄账户类private:int id;/帐号double balance;/余额double rate;/存款的年利率int lastDate;/上次变更余额的时期double accumulation;/余额按日累加之和/记录一笔帐,date为日期,amount为金额,desc为说明void record(int date,double amount);/获得到指定日期为止的存款金额按日累计值double accumulate(int date) constreturn accumulation + balance *(date - lastDate);public:/构造函数SavingAccount(int date,int id,double rate);int getId() return id;double getBalance() return balance;double getRate() return rate;void deposit(int date,double amount);/存入现金void withdraw(int date,double amount);/取出现金/结算利息,每年1月1日调用一次该函数void settle(int date);/显示账户信息void show();/SavingAcount类相关成员函数的实现SavingAccount:SavingAccount(int date, int id, double rate):id(id),balance(0),rate(rate),lastDate(date),accumulation(0)cout << date << "t#" << id << "is created" << endl;void SavingAccount:record(int date, double amount)accumulation = accumulate(date);lastDate = date;amount = floor(amount * 100 + 0.5) / 100;balance += amount;cout << date << "t#" << id << "t" << amount << "t" << balance << endl;void SavingAccount:deposit(int date, double amount)record(date,amount);void SavingAccount:withdraw(int date, double amount)if(amount > getBalance()cout << "error:not enough money" << endl;elserecord(date,-amount);void SavingAccount:settle(int date)double interest = accumulate(date)*rate/365;/计算年息if(interest != 0)record(date,interest);accumulation = 0;void SavingAccount:show()cout << "#" << id << "tBalance:" << balance;int main()/建立几个账户SavingAccount sa0(1,21325302,0.015);SavingAccount sa1(1,58320212,0.015);/几笔账目sa0.deposit(5,5000);sa1.deposit(25,10000);sa0.deposit(45,5500);sa1.withdraw(60,4000);/开户后第90天到了银行的计息日,结算所有账户的年息sa0.settle(90);sa1.settle(90);/输出各个账户信息sa0.show(); cout << endl;sa1.show(); cout << endl;return 0;5-1/作用域的实例:函数原型,局部,类,命名空间#include <iostream>using namespace std;int i;namespace Nsint j;int main()i = 5;Ns:j = 6;using namespace Ns;int i;i = 7;cout << "i = " << i << endl;cout << "j = " << j << endl;cout << "i = " << i << endl;return 0;5-2/变量的生存期和可见性#include <iostream>using namespace std;int i = 1;void other()static int a = 2;static int b;int c = 10;a += 2;i += 32;c += 5;cout << "-OTHER-" << endl;cout << "i:" << i << "a:" << a << "b:" << b << "c:" << c << endl;b = a;int main()static int a;int b = -10;int c = 0;cout << "-main-" << endl;cout << "i:" << i << "a:" << "b:" << b << "c" << c << endl;c += 8;other();cout << "-main-" << endl;cout << "i:" << i << "a:" << a << "b:" << b << "c:" << endl;i += 10;other();return 0;5-3/具有静态和动态生存期对象的时钟程序#include <iostream>using namespace std;class Clock/时钟类的定义public :/外部接口Clock();void setTime(int newH,int newM,int newS);void showTime();int hour,minute,second;/时钟类成员函数实现Clock:Clock():hour(0),minute(0),second(0) /构造函数void Clock:setTime(int newH, int newM, int newS)hour = newH;minute = newM;second = newS;void Clock:showTime()cout << hour << ":" << minute << ":" << second << endl;Clock globClock;int main()cout << "first time output:" << endl;globClock.showTime();globClock.setTime(8,30,30);Clock myClock(globClock);/复制构造函数cout << "second time output" << endl;myClock.showTime();return 0;5-4/具有静态数据成员的Point类/引入金泰数据成员count用于统计Point类的对象的个数.#include <iostream>using namespace std;class Pointpublic:Point(int x = 0,int y = 0):x(x),y(y)/在构造函数中对count累加,所有对象共同维护一个countcount+;Point(Point &p)/复制构造函数x = p.x;y = p.y;count +;Point() /析构函数 count-; int getX()return x;int getY()return y;void showCount()/输出静态数据成员cout << " object count= " << count << endl;private:int x,y;static int count;/静态数据成员声明,用于记录点的个数;int Point:count = 0;/静态数据成员定义和初始化,使用类名限定int main()Point a(4,5);/定义对象a,其构造函数会使count增加1cout << "Point A" << a.getX() << "," << a.getY();a.showCount();Point b(a);cout << "Point B" << b.getX() << "," << b.getY();b.showCount();return 0;5-5/具有静态数据和函数成员的Point类#include <iostream>using namespace std;class Point public:Point(int x = 0,int y = 0) : x(x),y(y)count +;Point(Point &p)x = p.x;y = p.y;count +;Point()count-;int getX()return x;int getY()return y;static void showCount()cout << "object count" << count << endl;private:int x,y;static int count;int Point:count = 0;int main()Point a(4,5);cout << "Point A :" << a.getX() << "," << a.getY();Point :showCount();Point b(a);cout << "Point B :" << b.getX() << "," << b.getY();Point :showCount();return 0;5-6/使用友元函数计算两点之间的距离#include <iostream>#include <cmath>using namespace std;class Pointpublic :Point(int x = 0,int y = 0) : x(x),y(y)int getX()return x;int getY()return y;friend float dist(Point &p1,Point &p2);/友元函数声明private :int x,y;/友元函数的实现float dist(Point &p1,Point &p2)double x = p1.x - p2.x;double y = p1.y - p2.y;return static_cast<float> (sqrt(x*x+y*y);int main()Point myp1(1,1),myp2(4,5);cout << "the distance is:" ;cout << dist(myp1,myp2) << endl;return 0;5-7/常成员函数#include <iostream>using namespace std;class Rpublic:R(int r1,int r2):r1(r1),r2(r2)void print();void print() const;/常成员函数 类型说明符 函数名(参数表)const;private:int r1,r2;/成员函数print()的实现void R:print()cout << r1 << "" << r2 << endl;void R:print() constcout << r1 << ":" << r2 << endl;int main()R a(5,4);a.print();const R b(20,52);b.print();return 0;5-8/常数据成员#include <iostream>using namespace std;class Apublic:A(int i);void print();private:const int a;static const int b;/静态常数据成员;const int A:b = 10;/静态常数据成员在类外的说明和初始化/常数据成员只能通过初始化列表来获得初值A:A(int i):a(i) void A:print()cout << a << ":" << b << endl;int main()/*建立对象a,b并且以100,10作为初值,分别调用构造函数,通过构造函数的初始化列表给对象的常数据成员赋初值*/A a1(100),a2(0);a1.print();a2.print();return 0;5-9/常引用所引用的对象不能被更新/常引用的声明格式如下: const 类型说明符 &引用名#include <iostream>#include <cmath>using namespace std;class Pointpublic:Point(int x = 0,int y = 0):x(x),y(y) int getX() return x;int getY() return y;friend float dist(const Point &p1,const Point &p2);private:int x,y;/常引用做参数float dist(const Point &p1,const Point &p2)double x = p1.x - p2.x;double y = p1.y - p2.y;return static_cast<float>(sqrt(x*x+y*y);int main()const Point myp1(1,1),myp2(4,5);/定义Point类的对象cout << "the distance is:"cout << dist(myp1,myp2) << endl;return 0;5-10/类的实现#include "Point.h"#include <iostream>using namespace std;int Point:count = 0;/使用类名初始化静态数据成员Point:Point(const Point &p):x(p.x),y(p.y) /复制构造函数体count+;void Point:showCount()cout << "Object count = " << count << endl;class Point/类的定义public:Point(int x=0,int y=0):x(x),y(y) /外部接口Point(const Point &p);Point() count-;int getX() const return x;int getY() const return y;static void showCount();/静态函数成员int x,y;static int count;/静态数据成员;/具有静态数据,函数成员的Point类,多文件组织/主函数#include "Point.h"#include <iostream>using namespace std;int main()Point a(4,5);/定义对象a,其构造函数会使count增加1cout << "Point A" << a.getX() << "," << a.getY();Point:showCount();/输出对象个数Point b(a);/定义对象b,其构造函数会使count增加1cout << "Point B:" << b.getX << "," << b.getY();Point:showCount();/输出对象个数return 0;5-11#ifndef _ACCOUNT_H_#define _ACCOUNT_H_class SavingsAccount/储蓄账户类private:int id;/帐号double balance;/余额double rate;/存款的年利率int lastDate;/上次变更余额日期double accumulation;/余额按日累加之和static double total;/所有账户的总金额/记录一笔帐,date为日期,amount为金额,desc为说明void record(int date,double amount);/获得指定日期为止的存款金额按日累计值double accumulate(int date) constreturn accumulation + balance * (date - lastDate);public:/构造函数SavingsAccount(int date,int id,double rate);int getId() const return id;double getBalance() const return balance; double getRate() const return rate; static double getTotal() return total; void deposit(int date,double amount);/存入现金void withdraw(int date,double amount);/取出现金/结算利息,每年1月1日调用一次该函数void settle(int date);/显示账户信息void show() const;#endif/_ACCOUNT_H_#include "account.h"#include <cmath>#include <iostream>using namespace std;double SavingsAccount:total = 0;/SavingsAccount函数实现SavingsAccount:SavingsAccount(int date, int id, double rate):id(id),balance(0),rate(rate),lastDate(date),accumulation(0)cout << date << "t#" << id << "is created" << endl;void SavingsAccount:record(int date, double amount)accumulation = accumulate(date);lastDate = date;amount = floor(amount * 100 + 0.5)/100;/保留小数点后两位balance += amount;total += amount;cout << date << "t#" << id << "t" << amount << "t" << balance << endl;/只要有现金的存入,就调用record函数做记录void SavingsAccount :deposit(int date, double amount)record(date,amount);void SavingsAccount:withdraw(int date, double amount)if(amount > getBalance()/如果所取得钱大于储户的总金额cout << "Error:there is not enough money!" << endl;elserecord(date,-amount);void SavingsAccount:settle(int date)double interest = accumulate(date) * rate / 365;/计算年息if(interest != 0)record(date,interest);accumulation = 0;void SavingsAccount:show() constcout << "#" << id << "tbalance:" << balance;#include "account.h"#include <iostream>using namespace std;int main()/建立账户SavingsAccount sa0(1,21325302,0.015);SavingsAccount sa1(1,58320212,0.015);/几笔账目sa0.deposit(5,5000);sa1.deposit(25,10000);osit(45,5500);sa1.withdraw(60,4000);/开户第90天到了银行的计息日,结算所有账户的年息sa0.settle(90);sa1.settle(90);/输出各个账户的信息sa0.show();cout << endl;sa1.show(); cout << endl;cout << "Total:" << SavingsAccount:getTotal() << endl;return 0;6-1/数组的声明与使用#include <iostream>using namespace std;int main()int a10,b10;for(int i=0;i<10;i+)ai = i * 2 - 1;b10 - i - 1 = ai;for(int i=0;i<10;i+)cout << "a" << i << "" << ai << ""cout << "b" << i << "" << bi <<endl;return 0;6-2/使用数组名做函数参数#include <iostream>using namespace std;void rowSum(int a4,int nRow)/计算二维数组a每行元素的值的和,nRow是行数for(int i=0;i<nRow;i+)for(int j=1;j<4;j+)ai0 += aij;int main()int table34 = 1,2,3,4,2,3,4,5,3,4,5,6;/声明并初始化for(int i=0;i<3;i+)for(int j=0;j<4;j+)cout << tableij << " "cout <<endl;rowSum(table,3);/调用函数,计算各行的和for(int i=0;i<3;i+)/输出结果cout << "sum of row " << i << " is " << tablei0 << endl;return 0;6-3#ifndef _POINT_H#define _POINT_Hclass Pointpublic:Point();Point(int x,int y);Point();void move(int newX,int newY);int getX() const return x; int getY() const return y; static void showCount();private:int x,y;#endif#include "Point.h"#include <iostream>using namespace std;Point:Point()x = y = 0;cout << "default constructor called" << endl;Point:Point(int x, int y):x(x),y(y)cout << "constructor called." << endl;Point:Point()cout << "destructor called." << endl;void Point:move(int newX, int newY)cout << "moving the point to (" << newX << "," << newY << ")" << endl;x = newX;y = newY;/对象数组应用举例#include "Point.h"#include <iostream>using namespace std;int main()cout << "entering main." << endl;Point a2;for(int i=0;i<2;i+)ai.move(i+10,i+20);cout << "exiting main." << endl;return 0;6-4#ifndef _ POINT_H#define _POINT_Hclass Pointpublic:Point(float x = 0,float y = 0):x(x),y(y) float getX() const return x; float getY() const return y; private:float x,y;#endif/利用Point类进行点的线性拟合#include "Point.h"#include <iostream>#include <cmath>using namespace std;/直线线性拟合,points为各点,nPoint为点数float lineFit(const Point points,int nPoint)float avgX = 0,avgY = 0;float lxx = 0, lyy = 0,lxy = 0;/计算x,y的平均值for(int i=0;i<nPoint;i+)avgX += pointsi.getX() / nPoint;avgY += pointsi.getY() / nPoint;/计算lxx,lyy,lxy的平均值for(int i=0;i<nPoint;i+)lxx += (pointsi.getX() - avgX) * (pointsi.getX() - avgX);lyy += (pointsi.getY() - avgY) * (pointsi.getY() - avgY);lxy += (pointsi.getX() - avgX) * (pointsi.getY() - avgY);cout << "this line can be fitted by y = ax +b" << endl;cout << "a = " << lxy / lxx << ""/输出回归系数acout << "b = " << avgY - lxy *avgX / lxx << endl;/输出回归系数breturn static_cast<float>(lxy / sqrt(lxx * lyy);/返回相关系数xint main()Point p10 = Point(6,10),Point(14,20),Point(26,30),Point(33,40),Point(46,50),Point(54,60),Point(67,70),Point(75,80),Point(84,90),Point(100,100);float r = lineFit(p,10);cout << "line coefficient r = " << r << endl;return 0;6-5/指针的定义 赋值 使用#include <iostream>using namespace std;int main()int i;int *ptr = &i;i =10;cout << "i = " << i << endl;/输出int型数的值cout << " *ptr= " << *ptr << endl;/输出指针地址的内容return 0;6-6/void类型指针的作用#include <iostream>using namespace std;int main()void *pv;int i = 5;pv = &i;/void类型指针指向整形变量int *point = static_cast<int *> (pv);/void类型指针赋值给int类型指针cout << "*point= " << *point << endl;return 0;6-7/使用数组名和下标输出各个元素#include <iostream>using namespace std;int main()int a10 = 1,2,3,4,5,6,7,8,9,0;for(int i=0;i<10;i+)cout << ai << ""cout << endl;return 0;