皮德常c++全套答案(共80頁)_第1頁
皮德常c++全套答案(共80頁)_第2頁
皮德常c++全套答案(共80頁)_第3頁
皮德常c++全套答案(共80頁)_第4頁
皮德常c++全套答案(共80頁)_第5頁
已閱讀5頁,還剩75頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上第2章習(xí)題2-5、計(jì)算一個(gè)人一段時(shí)期的薪水,第1天1分錢,第2天2分錢,每天翻倍。要求用戶輸入天數(shù)(輸入檢驗(yàn)),列表顯示每天的薪水,及薪水總和(輸出人民幣的單位:“元”)。#includeusing namespace std;void main()int daynum;float daypay, paysum=0;docout1整數(shù)): ;cindaynum;while(daynum=1);/有效性檢驗(yàn)for(int i=1; i=daynum; i+)daypay=i/100.0;cout第i天薪水:daypay 元t;if(i%2=0)coutendl;pays

2、um+=daypay;/列表輸出每天薪水,計(jì)算總薪水 coutendl;cout薪水總和:paysum元; /輸出總薪水2-7、用for循環(huán)計(jì)算1/302/29+3/28+30/1。#includeusing namespace std;void main()int i;float sum=0;for(i=1;i=30;i+)sum+=i/float(31-i);coutsum=sum;2-8、用循環(huán)語句輸出如下圖形。AAAAAAA AAAAA AAA A AAA AAAAAAAAAAAA#includeusing namespace std;void main()int i,j,k;for(

3、i=0;i=3;i+)/控制行for(j=0;ji;j+)couti;k-)/控制每行輸出的A的數(shù)目coutA;coutendl;for(i=1;ii;j-)cout ;/控制每行輸出的 的數(shù)目for(k=0;k2*i+1;k+)/控制每行輸出的A的數(shù)目coutA;coutendl;2-9、采用循環(huán)結(jié)構(gòu)計(jì)算公式s的前30項(xiàng)和。s=2/1+3/2+5/3+#includeusing namespace std;#define N 30void main( )int i;float a1,a2,sum=0,temp; /a1分子,a2分母for(a1=2,a2=1,sum=0,i=1;i=N;i+

4、)sum+=a1/a2;temp=a1; a1=a1+a2; a2=temp; /為下一次求和做準(zhǔn)備coutnsum is : sum;2-10、求sum=a+aa+aaa,a和n由鍵盤輸入。#includeusing namespace std;void main()int i,a,n;long sum,temp;sum=temp=0;coutan;for(i=1;i=n;i+)temp=a+temp*10;sum+=temp;coutthe result is : sum;2-11、輸入一行字符,以回車結(jié)束,分別統(tǒng)計(jì)其中出現(xiàn)的大寫英文字母、小寫英文字母、數(shù)字字符、空格和其他字符出現(xiàn)的次數(shù)。

5、#includeusing namespace std;void main()char c; int lletters=0,uletters=0,spaces=0,digits=0,others=0;cout=a&c=A&c=0&c=9) digits+; else others+; coutthe number of lower case letters: llettersendl;coutthe number of upper case letters: ulettersendl;coutthe number of digits: digitsendl;coutthe number of

6、spaces: spacesendl;coutthe number of others: others;第3章習(xí)題:3-1、編寫求階乘及組合的函數(shù),在主函數(shù)調(diào)用求組合的函數(shù)。#includeusing namespace std;long fac(int n)long fac=1;for(int i=2;i=n;i+)fac*=i;return fac;long comb(int n, int k)return fac(n)/(fac(k)*fac(n-k);void main()int n,k;coutnk;coutthe combination number of n and k: com

7、b(n,k);3-2、編寫函數(shù)計(jì)算ex的近似值,在主函數(shù)中輸入x及精度10-9(要求最后一項(xiàng)小于10-9)。#include#includeusing namespace std;double ex(double x,double eps) int i=1;double e=1,t=1;while(fabs(t)eps) t=t*x/i;e=e+t;i+; return(e); void main()double x,eps;coutxeps; coute*x:nex(x,eps);3-3、編寫被調(diào)函數(shù),求出1000以內(nèi) 素?cái)?shù),在主函數(shù)中調(diào)用函數(shù)并輸出素?cái)?shù),每行輸出5個(gè)素?cái)?shù)。#include#

8、include#includeusing namespace std;void PrimeNum(int n=1000) int i, j, k, flg=1, num=0;for(i=2;in;i+) k=sqrt(i); for(j=2;j=k;j+) if(i%j=0) flg=0; if(flg=1)coutsetw(5)i;num+;if(num%5=0)coutendl;flg=1;void main( ) PrimeNum();3-4、輸出1000以內(nèi)的所有完數(shù)。#include#includeusing namespace std;void print(int n)/輸出因子i

9、nt i;for(i=1;i=n/2;i+)if(n%i=0) coutsetw(5)i;coutendl;void wanshu(int n)int i;int a,s=0;a=n/2;for(i=1;i=a;i+)if(n%i=0) s+=i;if(s=n)coutn its factors are: ;print(n); void main( )int i;for(i=1;i=1000;i+)wanshu(i);3-5、編寫函數(shù)(遞歸和非遞歸)求兩個(gè)整數(shù)的最大公約數(shù)和最小公倍數(shù)。#includeusing namespace std;int gcd(int x,int y)int r;r

10、=x%y;while (r!=0)x=y; y=r; r=x%y;return(y);/int gcd(int a, int b)/if(a%b=0) / return b;/else / return gcd(b, a%b);/int gbs(int x,int y)int bs,ys;ys=gcd(x,y);bs=x*y/ys;return bs;void main()int x,y,g,bs;coutxy;g=gcd(x,y);bs=gbs(x,y);coutthe gcd: gendl;coutthe gbs: bs;3-6、遞歸函數(shù)反序輸出數(shù)位。#includeusing names

11、pace std;void rev(int x) /*反向輸出*/if(x0)coutx%10; rev(x/10); void main( )int x;coutx;coutreverse:;if(x0) cout-;x=-x;rev(x); 3-8、遞歸函數(shù)實(shí)現(xiàn)十進(jìn)制到二進(jìn)制轉(zhuǎn)換。#includeusing namespace std;void fun(int i) if(i 1) fun(i/2);couti%2; void main() int n; coutn; coutthe binary number: ;fun(n); 3-9、編寫函數(shù)輸出圖形。(略)3-10、編寫min函數(shù)模

12、板和max函數(shù)模板。#include using namespace std;template T min(T &var1,T &var2)if(var1var2) return(var1);else return(var2);template T max(T &var1,T &var2)if(var1var2) return(var2);else return(var1);void main(void)int userInt1,userInt2;float userFloat1,userFloat2;char userChar1,userChar2;coutuserInt1userInt2;

13、coutthe min is: min(userInt1,userInt2)endl;coutthe max is: max(userInt1,userInt2)endl;coutuserFloat1userFloat2;coutthe min is: min(userFloat1,userFloat2)endl;coutthe max is: max(userFloat1,userFloat2)endl;coutuserChar1userChar2;coutthe min is: min(userChar1,userChar2)endl;coutthe max is: max(userCha

14、r1,userChar2)endl;3-11、絕對值函數(shù)模板。#include using namespace std;template T Abs(const T var)if(var0) return(-var);else return(var);void main(void)/測試整型量求絕對值int test1=12,test2=-34;cout測試整型量:endl;couttest1=test1ttest1的絕對值為:Abs(test1)endl;couttest2=test2ttest2的絕對值為:Abs(test2)endl;/測試浮點(diǎn)型量求絕對值float test3=12.6

15、7f,test4=-34.43f;cout測試浮點(diǎn)型量:endl;couttest3=test3ttest3的絕對值為:Abs(test3)endl;couttest4=test4ttest4的絕對值為:Abs(test4)endl;第4章習(xí)題:4-1、編程實(shí)現(xiàn)由用戶輸入10個(gè)數(shù)據(jù)到數(shù)組,輸出數(shù)組中的最大值和最小值及其相應(yīng)的下標(biāo)。#include using namespace std;#define N 10void main()int i,arrayN,max,maxid,min,minid;for(i=0;iarrayi;max=min=array0;maxid=minid=0;for(

16、i=1;imax)max=arrayi;maxid=i;if(arrayimin)min=arrayi;minid=i;coutthe max of the array is maxendl;coutthe index of the max is maxidendl;coutthe min of the array is minendl;coutthe index of the min is minidendl;4-2、編寫函數(shù)實(shí)現(xiàn)將字符串中每個(gè)單詞的首字母大寫。#include using namespace std;void Words( char str )int i;char ch=

17、; / 存放前一字符for (i=0; stri!=0; i+ )if ( ch = & stri != ) / 單詞數(shù)首字母if(stri=a&stri=z)stri-=32; ch = stri;void main()char str100;coutPlease input a string:;cin.getline(str,100);Words(str);coutstr;4-4、編程實(shí)現(xiàn)線性查找賬號,賬號由用戶輸入,若找到,則輸出合法信息,否則輸出非法信息。#includeusing namespace std;#define arrSize 5int searchList(int li

18、st , int numElems, int value)for(int i=0; i numElems; i+ )if( value = listi ) return i;return -1;void main ( )int testsarrSize = , , , , ;int result, x;coutx;result = searchList(tests, arrSize, x);if ( result = -1 )cout x 為非法賬號。 endl;elsecout x 為合法賬號。;4-5、采用二分查找實(shí)現(xiàn)上述程序。#include #include using namespa

19、ce std;#define arrSize 5void selectionSort(int a , int n)/ 選擇排序int i, j, t, minIndex;for(i=0; in-1; i+)minIndex=i;for(j=i+1; jn; j+)if(ajaminIndex) minIndex=j;if( minIndex != i )t=aminIndex; aminIndex=ai; ai=t;/二分查找函數(shù),在a數(shù)組中查找valueint binarySearch(int a , int numElems, int value)int low=0, mid, hight

20、=numElems-1;while (low=hight)mid=(low+hight)/2;if( value = amid ) / 查找成功return mid; else if( value amid ) /位于數(shù)組的前一半hight=mid-1;else low=mid+1; /位于數(shù)組的后一半return -1;void main ( )int testsarrSize = , , , , ;int result, x;coutx;selectionSort(tests,arrSize);result=binarySearch(tests,arrSize, x);if ( resul

21、t = -1 )cout x 為非法賬號。 endl;elsecout x 為合法賬號。;4-6、 尋找二維數(shù)組中的鞍點(diǎn)(該位置的元素是該行上的最大元素,同時(shí)是該列上的最小元素)。#include #include using namespace std;#define M 3#define N 4 int q1=0, q2=0; /鞍點(diǎn)位置下標(biāo)int andian(int aMN, int p1, int p2)int i, j, k, m, f, w, max;w=0;for(i=0; ip1; i+)k=0;max=ai0;for(j=0; jmax)k=j;max=aij;/第i行第k

22、列為第i行的最大元素for(m=0, f=1; mp1&f; m+)if(amkmax) f=0;/第i行第k列不是鞍點(diǎn)if(f) w=1;q1=i;q2=k;return w; void main( )int aMN=1, 2, 3, 4, 4, 5, 3, 6, 3, 5, 6, 7; /*2,4,10,6,3,4,5,8,9,1,2,3;*/int w;w=andian(a,M,N);if(w) cout該二維數(shù)組存在鞍點(diǎn):aq1q2endl;cout其行標(biāo)為:q1t列標(biāo)為:q2;else cout該二維數(shù)組沒有鞍點(diǎn)。;4-7、編寫函數(shù)求一個(gè)44二維數(shù)組中周邊元素的和。#include

23、using namespace std;int arrSum(int arr4)int i,j,sum=0;for(i=0;i4;i+)sum+=arri0;sum+=arri3;for(j=0;j4;j+)sum+=arr0j;sum+=arr3j;sum-=arr00+arr30+arr03+arr33;return sum;void main()int a44=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16;cout該二維數(shù)組的周邊元素之和為:arrSum(a);4-8、編寫函數(shù)求二維數(shù)組兩條對角線元素之和。#include using namespace

24、std;#define N 4int sum(int aN)int i,s=0;for(i=0;iN;i+)s=s+aii+aiN-i-1;return(s);void main( )int i,j,aNN;cout輸入二維數(shù)組元素:n;for (i=0;iN;i+)for(j=0;jN;j+)cout第i行第jaij;cout兩條對角線元素之和:sum(a);4-9、見例題。4-10、合并數(shù)組,合并前后的數(shù)組元素均按升序排列。#include#includeusing namespace std;int merge(int a,int b,int c,int m,int n)int i=0,

25、 j=0, k=0;while(im&jn)if(ai=bj)ck+=ai+;else ck+=bj+;while(im)ck+=ai+;while(jn) ck+=bj+;return k;void main( )int a=1,4,7,9, b=3,5,7,8,12,c20,i,k;k=merge(a,b,c,4,5);coutarray a:n;for(i=0;i4;i+)coutsetw(8)ai;coutnarray b:n;for(i=0;i5;i+)coutsetw(8)bi;coutnmerged array c:n;for(i=0;ik;i+)coutsetw(8)ci;第5

26、章習(xí)題:5-1、同4-2,形參換成指針即可。5-3、求一組整數(shù)的中值。#include#includeusing namespace std;void selectionSort(int *a, int n)/ 選擇排序int i, j, t, minIndex;for(i=0; in-1; i+)minIndex=i;for(j=i+1; jn; j+)if(ajaminIndex) minIndex=j;if( minIndex != i )t=aminIndex; aminIndex=ai; ai=t;int mean(int *a,int n)int mean,tmp;selectio

27、nSort(a,n);tmp=n/2;if(n%2=0)mean=atmp+atmp-1;else mean=atmp;return mean;void main()int a100,num,i;cout輸入整數(shù)個(gè)數(shù)(num;cout輸入num個(gè)整數(shù):n;for(i=0;iai;cout這組整數(shù)的中值是:mean(a,num);5-4、編寫一個(gè)程序求一組正整數(shù)的模。在統(tǒng)計(jì)學(xué)中,模代表一組值中出現(xiàn)最頻繁的數(shù),編寫一個(gè)函數(shù)接受如下兩個(gè)參數(shù)。1)整型數(shù)組。2)代表該數(shù)組元素個(gè)數(shù)的一個(gè)整數(shù)。該函數(shù)應(yīng)當(dāng)返回這組數(shù)的模,即返回該數(shù)組中出現(xiàn)最頻繁的那個(gè)數(shù)。如果數(shù)組中沒有模,即沒有最頻繁的數(shù),那么就返回-1。

28、 #include#include#include#includeusing namespace std;const int value=10;int Mol(int a,int value);int main() int avalue;srand(time(0);for(int i=0;i10;i+)ai=rand()%10;coutaisetw(5);coutn;int f=Mol(a,value);if(f=-1)cout沒有模!endl;elsecout該數(shù)組的模為:fendl;return 0;int Mol(int a,int n)int *p=a,c=0;int bvalue;i

29、nt *q=b; for(int i=0;in;i+) for(int j=i+1,m=0;jn;j+) if(*(p+i)=*(p+j) m+; *(b+i)=m; for(int l=0;l*(q+c) c=l; for(int m=0;mn;m+) if(*(q+m)=*(q+c)&m!=c) return -1; return *(p+c);5-5、在主函數(shù)中首先輸入一個(gè)整數(shù)到變量n中,然后輸入n個(gè)整數(shù)到數(shù)組中,調(diào)用函數(shù)exchange(),完成將數(shù)組中的最小值與第0個(gè)元素對調(diào),將數(shù)組中的最大值與最后一個(gè)元素對調(diào),在主函數(shù)中調(diào)用函數(shù)print()輸出調(diào)換前和調(diào)換后的數(shù)組。要求被調(diào)函數(shù)e

30、xchange和print的參數(shù)均為1)數(shù)組名2)數(shù)組元素的個(gè)數(shù)。#include#includeusing namespace std;void exchange(int a,int value);void print(int a,int value);int main()int n;cinn; int a100;for(int i=0;iai;cout調(diào)換前為:; print(a,n);exchange(a,n);cout調(diào)換后為:; print(a,n);return 0;void print(int a,int value)int *p=a,i;for(i=0;ivalue;i+,p+

31、)coutsetw(4)*p;coutendl;void exchange(int a,int value) int i,m,*p=a,t,*j=a; for(i=1,m=0;ivalue;i+) (amai)?m=m:m=i; t=*(p+m);*(p+m)=*p;*p=t; for(i=0,m=0;iai)?m=m:m=i; t=*(j+m);*(j+m)=*(j+value-1);*(j+value-1)=t;5-6、在主函數(shù)中輸入十個(gè)整數(shù)到數(shù)組中,調(diào)用函數(shù)move()完成將數(shù)組元素循環(huán)移動(dòng)k位(要求函數(shù)參數(shù)為1、數(shù)組名2、數(shù)組元素個(gè)數(shù)3、循環(huán)移動(dòng)的位數(shù)k)。當(dāng)k0時(shí),實(shí)現(xiàn)循環(huán)右移;當(dāng)k

32、0時(shí),實(shí)現(xiàn)循環(huán)左移。循環(huán)右移一位的意義是:將數(shù)組全體元素向右移動(dòng)一個(gè)元素的位置,原數(shù)組最后一個(gè)元素移動(dòng)到數(shù)組的最前面,即第0個(gè)元素位置。提示:當(dāng)k0時(shí),轉(zhuǎn)換成等價(jià)的循環(huán)右移。調(diào)用函數(shù)print()輸出移動(dòng)前和移動(dòng)后的全體數(shù)組元素。#include#includeusing namespace std;void move(int x,int value,int k);void print(int x,int value);int main()int x10,i;for(i=0;ixi;cout移動(dòng)前數(shù)組為:; print(x,10);move(x,10,3);cout移動(dòng)后數(shù)組為:; print

33、(x,10);return 0;void print(int x,int value)for(int i=0;ivalue;i+)coutsetw(5)xi;coutendl;5-7、在主函數(shù)中輸入一個(gè)字符串到字符數(shù)組str1中,調(diào)用函數(shù)將str1中的下標(biāo)為奇數(shù)的字符取出,構(gòu)成一個(gè)新的字符串放入字符數(shù)組str2中(要求被調(diào)函數(shù)參數(shù)為str1和str2),在主函數(shù)中輸出結(jié)果字符串str2.#includeusing namespace std;void newstr(char str1,char str2);static int m=0;void main()char str1100;char

34、str2100;cout請輸入一個(gè)字符串:endl; cin.getline(str1,100);newstr(str1,str2);cout新字符串為:endl;coutstr2endl;void newstr(char str1,char str2) char *p,*q; q=str1; p=str2; int i=0; for(i=0;i100;i+) if(*(q+i)=0) *(p+i/2)+1)=0; break; else if(i%2!=0) *(p+i/2)=*(q+i); 5-8、編寫一個(gè)函數(shù)palin()用來檢查一個(gè)字符串是否是正向拼寫與反向拼寫都一樣的“迴文”(pal

35、indromia).如“MADAM”是一個(gè)迴文。若放寬要求,即忽略大小寫字母的區(qū)別、忽略空格及標(biāo)點(diǎn)符號等,則像“Madam,Im Adam”之類的短語也可視為迴文。編程要求:1)在主函數(shù)中輸入字符串。2)將字符串首指針作為函數(shù)參數(shù)傳遞到函數(shù)palin()中。當(dāng)字符串是迴文時(shí),要求函數(shù)palin()返回true,否則返回false。3)若是迴文,在主函數(shù)中輸出yes。若不是迴文,在主函數(shù)中輸出no.#include using namespace std;bool palin(char a);int main()char a100;cout請輸入一個(gè)字符串:a;if(palin(a)coutye

36、sendl;elsecoutnoendl;return 0;bool palin(char a)char *p1=a,*p2; int n,i; for(i=0,n=0;i=a&ai=Z) *(p1+n)=ai;n+;for(p2=p1+n;p1p2;)if(*p1=*p2)p1+; p2-; if(p2-p1=1|p2-p1=0) return true; else return false;5-10、有n個(gè)人圍成一圈,順序排號,順序號是1、2、3、.、n。從第1個(gè)人開始報(bào)號,凡報(bào)到m的人退出圈子,問最后留下的人是第幾號。要求在主函數(shù)輸入n和m,將數(shù)組a以及n、m作為參數(shù)傳遞給函數(shù)count

37、(),在該函數(shù)中依次輸出退出圈子的人的序號,最后輸出的就是留下者的序號。#includeusing namespace std;void count(int n,int m,int a);int main()int n,m;cout輸入n:n;cout輸入m:m;int a100;for(int i=0;in;i+)ai=i+1;count(n,m,a);return 0;void count(int n,int m,int a)int i,k=0,t=0,*p=a;for(i=0;in;i+)pi=i+1;while (tn-1)for(p=a;pa+n;p+)if(*p!=0)k+;if(

38、k=m)k=0;cout*p ;*p=0;t+;p=a;while(*p=0)p+;cout*pendl;6-1、假設(shè)每個(gè)學(xué)生信息包括學(xué)號、姓名和3門課程的考試分?jǐn)?shù)。從鍵盤輸入10個(gè)學(xué)生的數(shù)據(jù),采用結(jié)構(gòu)體數(shù)組數(shù)據(jù)的存儲,程序?qū)崿F(xiàn)如下功能:1)輸出三門課的平均成績。2)輸出三門功課分?jǐn)?shù)分別最高的學(xué)生的信息。3)按總分對這10個(gè)學(xué)生從高到低排序,并輸出排序結(jié)果。4)輸出平均分高于80分那些學(xué)生的信息。#include #include #include using namespace std;struct studentint ID;char name20;double score3;void i

39、nput(student*,int n);double average(student*,int n);void print(student*,int n);void sort(student*,int n);const int studentNumber=10;int main() student stud10; input(stud,studentNumber);print(stud,studentNumber);/sort(stud,studentNumber);return 0;/*void input(student *ps,int n) for(int i=0;ips-ID;cin

40、ps-name;cinps-score0ps-score1ps-score2;ps+;void average(student *ps,int n) int aver1=0,aver2=0,aver3=0; for(int i=0;iscore0; aver2+=ps-score1; aver3+=ps-score2;ps+;aver1/=num;aver2/=num;aver3/=num;cout第一門課平均成績?yōu)椋篴ver1endl;cout第二門課平均成績?yōu)椋篴ver2endl;cout第三門課平均成績?yōu)椋篴ver3endl;void max(student *ps,int n) int a=0,b=0,c=0;for(int i=1;iscore0(ps+a)-score0) a=i; if(ps+i)-score1(ps+b)-score1) b=i;if(ps+i)-score2(ps+c)-score2) c=i;cout第一門課最高分的信息:;print(ps+a),1);cout第二門課最高分的信息:;print(ps+b),1);cout第三門課最高分的信息:;print(ps+c),1);6-4、編寫程序reverse()逆轉(zhuǎn)鏈表,即整理鏈表各結(jié)點(diǎn)的指向,將原鏈表

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論