1.实验目的和要求
目的:快速掌握C++语言编程的方法,了解C++的增强功能,主要内容有:(1)输入流、输出流的使用;(2)重载、默认参数;(3)引用;(4)new和delete运算符分配内存。
2.实验内容:
(1) 编写一个用输入和输出流运算符进行的输入和输出的程序。从键盘输入两个数,分别对两个数进行加,减,乘和除的运算。并输出计算结果,如: 23+123=146。
#include<iostream> using namespace std; int main() { double a,b; cout<<"输入两个数"<<endl; cin>>a>>b; cout<<"a+b="<<(a+b)<<endl; cout<<"a-b="<<(a-b)<<endl; cout<<"a*b="<<(a*b)<<endl; if(b==0) cout<<"ERROR,除数不能为0"<<endl; else cout<<"a/b="<<(a/b)<<endl; return 0; }
(2) 用new和delete运算符动态分配内存空间的方法编写程序。从键盘输入3´3整型数组的数据,并计算出所有元素之和,打印出最大值和最小值。输入输出要用流运算符实现。
#include<iostream> using namespace std; int main() { int **a=(int**)new int*[3];//申请空间 for(int i=0;i<3;i++) a[i]=new int[3];//申请行空间 cout<<"输入9(3*3)个整数"<<endl; for(int i=0;i<3;i++) for(int j=0;j<3;j++) cin>>a[i][j]; int max=a[0][0],min=a[0][0],sum=0; for(int i=0;i<3;i++) for(int j=0;j<3;j++) { sum+=a[i][j]; if(max<a[i][j]) max=a[i][j]; if(min>a[i][j]) min=a[i][j]; } cout<<"sum="<<sum<<endl; cout<<"max="<<max<<endl; cout<<"min="<<min<<endl; delete []a; }
(3) 编写C++风格的程序,解决百钱问题:将1元人民币兑换成1,2,5分的人民币,有多少种换法?
#include<iostream> using namespace std; int main() { int i,j,k; int count=0; for(i=0; i*5<=100; i++) for(j=0; j*2<=100; j++) for(k=0; k<=100; k++) { if(i*5+j*2+k==100) { cout<<"5 fen:"<<i<<" 2 fen:"<<j<<" 1 fen:"<<k<<endl; count++; } } cout<<"共有阅换方法 "<<count<<" 种"<<endl; return 0; }
(4) 在主函数中定义2个整型元素a,b,用引用作函数参数的方法,在函数void swap(int & x, int & y)中实现将数据交换存放,并在主函数中打印出来。
#include<iostream> using namespace std; void swap(int &x,int &y)//函数形参为引用 { int temp; temp=x; x=y; y=temp; } int main() { int a=5,b=10; int &x=a,&y=b;//引用声明是必须进行初始化 cout<<"a="<<a<<" b="<<b<<endl; cout<<"After swap"<<endl; swap(x,y); cout<<"a="<<a<<" b="<<b<<endl; return 0; }
(5) 假设我们班有50名同学,每个同学都报出自己的生日, 每个同学的生日都不相重的概率只有0.0296,如果有100个同学,不相重的概率为3.0725´10-7。相重复的概率如此之大与我们主观想象不同。写一个程序,输入同学的人数n计算出其生日不重复的概率。然后在用彷真的方法, 利用随机数产生每个同学的生日,计算出生日不重复的概率并与前面的结果进行比较。
[学生的生日可以用随机数产生,rand()产生0—32767之间的伪随机数,因为此需要一个种子,种子不同产生的随机数列不同,rand()产生的随机数也不同,可以调用srand(longint *)函数设置种子,比如我们可以获得计算机中的时间获得随机数种子, 以上函数需要包含头文件 stdlib.h]
#include<iostream> #include<stdlib.h>//使用rand()所需头文件 using namespace std; int Judge(int *a,int n)//判断生日是否有重复的 { for(int i=0;i<n;i++) for(int j=i+1;j<n;j++) { if(a[i]==a[j]) return 1; } return 0; } int main() { int n; cout<<"输入同学人数"<<endl; cin>>n; int *birthday=new int[n]; long times=1000000; double count=0; for(int k=0;k<times;k++) { for(int i=0; i<n; i++) { birthday[i]=rand()%365+1;//随机产生生日 } count+=Judge(birthday,n); } cout<<"生日不重复的概率为:"<<1-(count/times)<<endl; }