C++ 函数部分(1)
1.編寫一個求X的n次方的函數
#include <iostream> using namespace std; double power(double x, int n); void main(void) { double x; int n; cout<<"input x and n to calc the value of the x to the power n"<<endl; cout<<"x = "; cin>>x; cout<<"n = "; cin>>n; cout<<x<<" to the power "<<n<<" is " <<power(x,n)<<endl; fflush(stdin);//清空輸入緩沖區中的數據 getchar(); //暫停 } double power(double x , int n) { double val = 1.0; while (n--) val *= x; return (val); }注意:如果第16行的fflush(stdin)不加,而保留17行的getchar()語句達不到暫停效果,因為:在用cin(或scanf)輸入完后回輸入回車鍵[Enter],表明輸入結束,此時[Enter]會留在輸入緩沖區中,當程序運行到getchar();語句時就會讀入[Enter],從而使控制臺閃過,沒有達到要控制臺停留的效果,所以,在getchar();語句之前要用fflush(stdin);清空輸入緩沖區的內容。
?
2.輸入一個8位的二進制數,將其轉換為十進制數輸出
分析:將二進制轉換為10進制,只要講二進制數的每一位乘以該位的權然后相加即可。
如:000011012 = 0(27)+0(26)+0(25)+0(24)+1(23)+1(22)+0(21)+1(20) = 1310 。
#include <iostream> using namespace std; double power(double x, int n); void main(void) { int i, value = 0; char ch; cout<<"Enter an 8 bit binary number: "; for(i = 7; i >=0; i--) { //sizeof(char) = 1 //sizeof是C/C++中的一個操作符(operator),簡單的說其作用就是返回一個對象或者類型所占的內存字節數。 cin >> ch; // 注意鍵盤輸入的數字是字符形式,并且采用一個個單獨接收,因為char 類型一次只能接收1個字節的長度 if('1' == ch) // 只需要處理字符為'1'的情況 value += int(power(2,i)); } cout<<"Decimal value is "<<value<<endl; fflush(stdin); getchar(); } double power(double x , int n) { double val = 1.0; while(n--) val *= x; return (val); }3.編寫程序求的π值,公式如下:
其中arctan用如下形式的級數計算:
直到級數的某一項絕對值不大于10-15為止;π和x均為double型。
#include <iostream> ? using namespace std; ? void main() { double a,b; double arctan(double x); //注意因為整數相除結果取整,如果參數寫1/5,1/239,那么結果都是0 a = 16.0*arctan(1/5.0); b = 4.0*arctan(1/239.0); ? cout<<"PI = "<<a-b<<endl; getchar(); } ? double arctan(double x) { int i; double r,e,f,sqr; sqr = x*x; r = 0; e = x; i = 1; while(e/i >1e-15) { f = e/i; r = (i%4 == 1)?r+f : r-f; e = e*sqr; i += 2; } ? return r; }4.尋找并輸出11~999之間的數m,它滿足m,m2和m3均為回文數。
所謂回文數是指其各位數字左右對稱的整數,如121,676,95259等。滿足上述條件的數如m = 11,m2 =121,m3 = 1331.
分析:判斷一個數是否為回文,可以用除以10取余的方法,從最低位開始,依次取出該數的各位數字,然后用最低位充當最高位,按反序重新構成新的數,比較與原數是否相等,若相等,則原數為回文。
#include <iostream> #include <iomanip> // 使用setw()控制寬度函數 ? using namespace std; ? void main() { bool symm(long n); long m; cout.flags(ios::left); //輸出左對齊 for(m = 11; m< 1000; m++) { if(symm(m)&&symm(m*m)&&symm(m*m*m)) cout<<"m = "<<setw(5)<<m<<" m*m = "<<setw(7)<<m*m<<" m*m*m = "<<setw(12)<<m*m*m<<endl; } ? getchar(); } ? bool symm(long n) { long i,m; i = n; m = 0; while(i) { m = m*10 + i%10; // m值上升一位 加上i的最低位 i = i/10; // 去掉i的最低位 } return (m == n); }運行結果:
m = 11 m*m = 121 m*m*m = 1331 m = 101 m*m = 10201 m*m*m = 1030301 m = 111 m*m = 12321 m*m*m = 1367631在C++中
控制輸出寬度用iosamp函數庫的setw
C++中默認是右對齊
cout.flags(ios::left); //左對齊 5.判斷輸入的字符串是否為回文 #include <iostream> ? using namespace std; #define STACK_INIT_SIZE 100 ? struct Stack{ char *base; char *top; }sq; ? void initstack(Stack &s) { s.base = new char[STACK_INIT_SIZE*sizeof(char)]; s.top = s.base; } ? void push(Stack &s , char e) { *s.top = e; ++s.top; } ? char pop(Stack &s) { s.top--; return *s.top; } ? void main() { Stack s; initstack(s); int a, j = 0; char p[100]; char c = 0, d = 0; ? cout<<"這是回文判斷程序"<<endl; cout<<"請輸入測試字符串"<<endl; cin.getline(p,100); //接收一個字符串, 最長長度為100個字符 a = strlen(p); //獲取字符串長度 for(int i = 0; i<a;++i) push(s,p[i]); ? do{ c = pop(s); d = p[j]; if(c != d ) break; j++; }while(j<=a/2-1); if( j == a/2) cout<<"你輸入的測試字符串為回文"<<endl; else cout<<"測試字符串不是回文"<<endl; fflush(stdin); getchar(); }6.計算如下公式,并輸出結果:
其中r,s的值由鍵盤輸入,sinx的近似值按如下公式計算:
計算精度為10-6.當某項的絕對值小于計算精度時,停止累加,累加和即為該精度下的sinx的近似值。
#include <iostream> #include <cmath> ? using namespace std; ? void main() { double k,r,s; double tsin(double x); cout<<"r = "; cin>>r; cout<<"s = "; cin>>s; ? if(r*r <= s*s) k = sqrt(tsin(r)*tsin(r)+tsin(s)*tsin(s)); else k = tsin(r*s)/2; cout<<k<<endl; fflush(stdin); getchar(); } ? double tsin(double x) { double p = 0.000001, g = 0, t = x; int n = 1; do{ g = g + t; n++; t = -t*x*x/(2*n-1)/(2*n-2); //自左至右運算相當于 -t*x*x/[(2*n-1)*(2*n-2)] }while(fabs(t) >= p); ? return g; }7.投骰子的隨機游戲
游戲規則是:每個骰子有6面,點數分別為1,2,3,4,5,6.游戲者在程序設計開始時輸入一個無符號整數,作為產生隨機數的種子。每輪投兩次骰子,第一輪如果和數為7或11則為勝,游戲結束;和數為2,3或12則為負,游戲結束;和數為其它值則將此值作為自己的點數,繼續第二輪,第三輪,……直到某輪的和數等于點數則取勝,若在此前出現和數為7則為負。
#include <iostream> #include <cstdlib> ? using namespace std; int rolldice(void); ? void main() { int gamestatus,sum,mypoint; unsigned seed; ? cout<<"Please enter an unsigned integer:"; cin>>seed; // 輸入隨機數種子 srand(seed); //將種子傳遞給rand() sum = rolldice(); //第一輪投骰子,計算和數 switch(sum) { case 7: // 如果和數為7或11則為勝,狀態為1 case 11: gamestatus = 1; break; case 2: // 和數為2,3或12則為負,狀態為2 case 3: case 12: gamestatus = 2; break; default: // 其它情況,游戲尚無結果,狀態為0,記下點數,為下一輪做準備 gamestatus = 0; mypoint = sum; cout<<"point is "<<mypoint<<endl; break; } ? while(gamestatus == 0) // 只有狀態仍為0,就繼續進行下一輪 { sum = rolldice(); if(sum == mypoint) //某輪的和數等于點數則取勝,狀態置1 gamestatus = 1; else if(sum == 7) //出現和數為7則為負,狀態置2 gamestatus = 2; } //當狀態不為0時上面的循環結束,以下程序段輸出游戲結果 if(gamestatus == 1) cout<<"Player wins\n"; else cout<<"Player loses\n"; fflush(stdin); getchar(); } ? int rolldice(void) { //投骰子,計算和數,輸出和數 int die1, die2, worksum; ? die1 = 1+rand()%6; die2 = 1+rand()%6; worksum = die1+die2; cout<<"player rolled "<<die1<<'+'<<die2<<'='<<worksum<<endl; return worksum; }結果:
Please enter an unsigned integer:9 player rolled 3+2=5 point is 5 player rolled 2+1=3 player rolled 5+6=11 player rolled 4+1=5 Player wins系統函數int rand(void)的功能是產生一個偽隨機數,調用rand(void)函數產生隨機數需要一個"種子"值,如果設置的種子值相同,則產生相同的隨機數,所以叫做偽隨機數。如果調用rand()之前不設置"種子"值,則rand總是默認種子為1."種子"值的設置,是在調用rand()之前,通過調用void srand(unsigned int seed)為其設置的。
轉載于:https://www.cnblogs.com/AI-Algorithms/p/3355768.html
總結
以上是生活随笔為你收集整理的C++ 函数部分(1)的全部內容,希望文章能夠幫你解決所遇到的問題。