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;}