皮德常c++全套答案_第1页
皮德常c++全套答案_第2页
皮德常c++全套答案_第3页
皮德常c++全套答案_第4页
皮德常c++全套答案_第5页
已阅读5页,还剩73页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第2章习题2-5、计算一个人一段时期的薪水,第1天1分钱,第2天2分钱,每天翻倍。要求用户输入天数(输入检验),列表显示每天的薪水,及薪水总和(输出人民币的单位:“元”)。#include<iostream>using namespace std;void main()int daynum;float daypay, paysum=0;docout<<"请输入天数(>1整数): "cin>>daynum;while(daynum<=1);/有效性检验for(int i=1; i<=daynum; i+)daypay=i/

2、100.0;cout<<"第"<<i<<"天薪水:"<<daypay <<"元t"if(i%2=0)cout<<endl;paysum+=daypay;/列表输出每天薪水,计算总薪水 cout<<endl;cout<<"薪水总和:"<<paysum<<"元" /输出总薪水2-7、用for循环计算1/302/29+3/28+30/1。#include<iostream>

3、;using namespace std;void main()int i;float sum=0;for(i=1;i<=30;i+)sum+=i/float(31-i);cout<<"sum="<<sum;2-8、用循环语句输出如下图形。AAAAAAA AAAAA AAA A AAA AAAAAAAAAAAA#include<iostream>using namespace std;void main()int i,j,k;for(i=0;i<=3;i+)/控制行for(j=0;j<i;j+)cout<<&

4、#39; '/控制每行输出的' '的数目for(k=7-i;k>i;k-)/控制每行输出的'A'的数目cout<<'A'cout<<endl;for(i=1;i<=3;i+)for(j=3;j>i;j-)cout<<' '/控制每行输出的' '的数目for(k=0;k<2*i+1;k+)/控制每行输出的'A'的数目cout<<'A'cout<<endl;2-9、采用循环结构计算公式s的前30项

5、和。s=2/1+3/2+5/3+#include<iostream>using 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+)sum+=a1/a2;temp=a1; a1=a1+a2; a2=temp; /为下一次求和做准备cout<<"nsum is : "<<sum;2-10、求sum=a+aa+aaa,a和n由键盘输入。#include<iostre

6、am>using namespace std;void main()int i,a,n;long sum,temp;sum=temp=0;cout<<"nEnter a and n: "cin>>a>>n;for(i=1;i<=n;i+)temp=a+temp*10;sum+=temp;cout<<"the result is : "<<sum;2-11、输入一行字符,以回车结束,分别统计其中出现的大写英文字母、小写英文字母、数字字符、空格和其他字符出现的次数。#include<

7、;iostream>using namespace std;void main()char c; int lletters=0,uletters=0,spaces=0,digits=0,others=0;cout<<"Please enter the characters:n"while(c=cin.get()!='n')if(c>='a'&&c<='z')lletters+;else if(c>='A'&&c<='Z')

8、 uletters+; else if(c=' ') spaces+; else if(c>='0'&&c<='9') digits+; else others+; cout<<"the number of lower case letters: "<<lletters<<endl;cout<<"the number of upper case letters: "<<uletters<<endl;cout&

9、lt;<"the number of digits: "<<digits<<endl;cout<<"the number of spaces: "<<spaces<<endl;cout<<"the number of others: "<<others;第3章习题:3-1、编写求阶乘及组合的函数,在主函数调用求组合的函数。#include<iostream>using namespace std;long fac(int n)long

10、 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;cout<<"Please input the n and the k: "cin>>n>>k;cout<<"the combination number of n and k: "<<comb(n,k);3-2、编写函数计算ex的近似值,在主函数中输入x及

11、精度10-9(要求最后一项小于10-9)。#include<iostream>#include<cmath>using 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;cout<<"Please inout x and eps:n" cin>>x>>eps; cout<<

12、;"e*x:n"<<ex(x,eps);3-3、编写被调函数,求出1000以内 素数,在主函数中调用函数并输出素数,每行输出5个素数。#include<iostream>#include<iomanip>#include<cmath>using namespace std;void PrimeNum(int n=1000) int i, j, k, flg=1, num=0;for(i=2;i<n;i+) k=sqrt(i); for(j=2;j<=k;j+) if(i%j=0) flg=0; if(flg=1)c

13、out<<setw(5)<<i;num+;if(num%5=0)cout<<endl;flg=1;void main( ) PrimeNum();3-4、输出1000以内的所有完数。#include<iostream>#include<iomanip>using namespace std;void print(int n)/输出因子int i;for(i=1;i<=n/2;i+)if(n%i=0) cout<<setw(5)<<i;cout<<endl;void wanshu(int n)i

14、nt i;int a,s=0;a=n/2;for(i=1;i<=a;i+)if(n%i=0) s+=i;if(s=n)cout<<n<<" its factors are: "print(n); void main( )int i;for(i=1;i<=1000;i+)wanshu(i);3-5、编写函数(递归和非递归)求两个整数的最大公约数和最小公倍数。#include<iostream>using namespace std;int gcd(int x,int y)int r;r=x%y;while (r!=0)x=y;

15、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;cout<<"Enter two number: n "cin>>x>>y;g=gcd(x,y);bs=gbs(x,y);cout<<"the gcd: "

16、;<<g<<endl;cout<<"the gbs: "<<bs;3-6、递归函数反序输出数位。#include<iostream>using namespace std;void rev(int x) /*反向输出*/if(x>0)cout<<x%10; rev(x/10); void main( )int x;cout<<"Please input an integer:n"cin>>x;cout<<"reverse:"

17、;if(x<0) cout<<"-"x=-x;rev(x); 3-8、递归函数实现十进制到二进制转换。#include<iostream>using namespace std;void fun(int i) if(i > 1) fun(i/2);cout<<i%2; void main() int n; cout<<"Please input the decimal number: "cin>>n; cout<<"the binary number: &quo

18、t;fun(n); 3-9、编写函数输出图形。(略)3-10、编写min函数模板和max函数模板。#include <iostream>using namespace std;template<class T> T min(T &var1,T &var2)if(var1<var2) return(var1);else return(var2);template<class T> T max(T &var1,T &var2)if(var1<var2) return(var2);else return(var1);vo

19、id main(void)int userInt1,userInt2;float userFloat1,userFloat2;char userChar1,userChar2;cout<<"Please input two integar numbers: "cin>>userInt1>>userInt2;cout<<"the min is: "<<min(userInt1,userInt2)<<endl;cout<<"the max is: "<

20、;<max(userInt1,userInt2)<<endl;cout<<"Please input two float numbers: "cin>>userFloat1>>userFloat2;cout<<"the min is: "<<min(userFloat1,userFloat2)<<endl;cout<<"the max is: "<<max(userFloat1,userFloat2)<<end

21、l;cout<<"Please input two char numbers: "cin>>userChar1>>userChar2;cout<<"the min is: "<<min(userChar1,userChar2)<<endl;cout<<"the max is: "<<max(userChar1,userChar2)<<endl;3-11、绝对值函数模板。#include <iostream>using

22、 namespace std;template<class T> T Abs(const T var)if(var<0) return(-var);else return(var);void main(void)/测试整型量求绝对值int test1=12,test2=-34;cout<<"测试整型量:"<<endl;cout<<"test1="<<test1<<"ttest1的绝对值为:"<<Abs(test1)<<endl;cou

23、t<<"test2="<<test2<<"ttest2的绝对值为:"<<Abs(test2)<<endl;/测试浮点型量求绝对值float test3=12.67f,test4=-34.43f;cout<<"测试浮点型量:"<<endl;cout<<"test3="<<test3<<"ttest3的绝对值为:"<<Abs(test3)<<endl;cou

24、t<<"test4="<<test4<<"ttest4的绝对值为:"<<Abs(test4)<<endl;第4章习题:4-1、编程实现由用户输入10个数据到数组,输出数组中的最大值和最小值及其相应的下标。#include <iostream>using namespace std;#define N 10void main()int i,arrayN,max,maxid,min,minid;for(i=0;i<N;i+)cin>>arrayi;max=min=arr

25、ay0;maxid=minid=0;for(i=1;i<N;i+)if(arrayi>max)max=arrayi;maxid=i;if(arrayi<min)min=arrayi;minid=i;cout<<"the max of the array is "<<max<<endl;cout<<"the index of the max is "<<maxid<<endl;cout<<"the min of the array is &quo

26、t;<<min<<endl;cout<<"the index of the min is "<<minid<<endl;4-2、编写函数实现将字符串中每个单词的首字母大写。#include <iostream>using namespace std;void Words( char str )int i;char ch=' ' / 存放前一字符for (i=0; stri!='0' i+ )if ( ch = ' ' && stri !=

27、' ') / 单词数首字母if(stri>='a'&&stri<='z')stri-=32; ch = stri;void main()char str100;cout<<"Please input a string:"cin.getline(str,100);Words(str);cout<<str;4-4、编程实现线性查找账号,账号由用户输入,若找到,则输出合法信息,否则输出非法信息。#include<iostream>using namespace std;

28、#define arrSize 5int searchList(int list , int numElems, int value)for(int i=0; i < numElems; i+ )if( value = listi ) return i;return -1;void main ( )int testsarrSize = 5658845, 4562555, 3852085, 4520125, 5552012;int result, x;cout<<"请输入账号:"cin>>x;result = searchList(tests,

29、arrSize, x);if ( result = -1 )cout << x<< "为非法账号。"<< endl;elsecout << x<< "为合法账号。"4-5、采用二分查找实现上述程序。#include <iostream>#include <iomanip>using namespace std;#define arrSize 5void selectionSort(int a , int n)/ 选择排序int i, j, t, minIndex;for(

30、i=0; i<n-1; i+)minIndex=i;for(j=i+1; j<n; j+)if(aj<aminIndex) minIndex=j;if( minIndex != i )t=aminIndex; aminIndex=ai; ai=t;/二分查找函数,在a数组中查找valueint binarySearch(int a , int numElems, int value)int low=0, mid, hight=numElems-1;while (low<=hight)mid=(low+hight)/2;if( value = amid ) / 查找成功r

31、eturn mid; else if( value < amid ) /位于数组的前一半hight=mid-1;else low=mid+1; /位于数组的后一半return -1;void main ( )int testsarrSize = 5658845, 4562555, 3852085, 4520125, 5552012;int result, x;cout<<"请输入账号:"cin>>x;selectionSort(tests,arrSize);result=binarySearch(tests,arrSize, x);if ( r

32、esult = -1 )cout << x<< "为非法账号。"<< endl;elsecout << x<< "为合法账号。"4-6、 寻找二维数组中的鞍点(该位置的元素是该行上的最大元素,同时是该列上的最小元素)。#include <iostream>#include <iomanip>using namespace std;#define M 3#define N 4 int q1=0, q2=0; /鞍点位置下标int andian(int aMN, int p1

33、, int p2)int i, j, k, m, f, w, max;w=0;for(i=0; i<p1; i+)k=0;max=ai0;for(j=0; j<p2; j+)if(aij>max)k=j;max=aij;/第i行第k列为第i行的最大元素for(m=0, f=1; m<p1&&f; m+)if(amk<max) f=0;/第i行第k列不是鞍点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

34、,4,5,8,9,1,2,3;*/int w;w=andian(a,M,N);if(w) cout<<"该二维数组存在鞍点:"<<aq1q2<<endl;cout<<"其行标为:"<<q1<<"t列标为:"<<q2;else cout<<"该二维数组没有鞍点。"4-7、编写函数求一个4×4二维数组中周边元素的和。#include <iostream>using namespace std;int a

35、rrSum(int arr4)int i,j,sum=0;for(i=0;i<4;i+)sum+=arri0;sum+=arri3;for(j=0;j<4;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<<"该二维数组的周边元素之和为:"<<arrSum(a);4-8、编写函数求二维数组两条对角线元素之和。#include <i

36、ostream>using namespace std;#define N 4int sum(int aN)int i,s=0;for(i=0;i<N;i+)s=s+aii+aiN-i-1;return(s);void main( )int i,j,aNN;cout<<"输入二维数组元素:n"for (i=0;i<N;i+)for(j=0;j<N;j+)cout<<"第"<<i<<"行第"<<j<<"列元素:"cin&g

37、t;>aij;cout<<"两条对角线元素之和:"<<sum(a);4-9、见例题。4-10、合并数组,合并前后的数组元素均按升序排列。#include<iostream>#include<iomanip>using namespace std;int merge(int a,int b,int c,int m,int n)int i=0, j=0, k=0;while(i<m&&j<n)if(ai<=bj)ck+=ai+;else ck+=bj+;while(i<m)ck+=ai

38、+;while(j<n) 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);cout<<"array a:n"for(i=0;i<4;i+)cout<<setw(8)<<ai;cout<<"narray b:n"for(i=0;i<5;i+)cout<<setw(8)<<bi;cout<<"nmerged array c:n&q

39、uot;for(i=0;i<k;i+)cout<<setw(8)<<ci;第5章习题:5-1、同4-2,形参换成指针即可。5-3、求一组整数的中值。#include<iostream>#include<iomanip>using namespace std;void selectionSort(int *a, int n)/ 选择排序int i, j, t, minIndex;for(i=0; i<n-1; i+)minIndex=i;for(j=i+1; j<n; j+)if(aj<aminIndex) minIndex

40、=j;if( minIndex != i )t=aminIndex; aminIndex=ai; ai=t;int mean(int *a,int n)int mean,tmp;selectionSort(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<<"输入整数个数(<100):"cin>>num;cout<<"输入"<<num<<"

41、;个整数:n"for(i=0;i<num;i+)cin>>ai;cout<<"这组整数的中值是:"<<mean(a,num);5-4、编写一个程序求一组正整数的模。在统计学中,模代表一组值中出现最频繁的数,编写一个函数接受如下两个参数。1)整型数组。2)代表该数组元素个数的一个整数。该函数应当返回这组数的模,即返回该数组中出现最频繁的那个数。如果数组中没有模,即没有最频繁的数,那么就返回-1。 #include<iostream>#include<cmath>#include<iomanip&

42、gt;#include<ctime>using namespace std;const int value=10;int Mol(int a,int value);int main() int avalue;srand(time(0);for(int i=0;i<10;i+)ai=rand()%10;cout<<ai<<setw(5);cout<<'n'int f=Mol(a,value);if(f=-1)cout<<"没有模!"<<endl;elsecout<<&qu

43、ot;该数组的模为:"<<f<<endl;return 0;int Mol(int a,int n)int *p=a,c=0;int bvalue;int *q=b; for(int i=0;i<n;i+) for(int j=i+1,m=0;j<n;j+) if(*(p+i)=*(p+j) m+; *(b+i)=m; for(int l=0;l<n;l+) if(*(q+l)>*(q+c) c=l; for(int m=0;m<n;m+) if(*(q+m)=*(q+c)&&m!=c) return -1; re

44、turn *(p+c);5-5、在主函数中首先输入一个整数到变量n中,然后输入n个整数到数组中,调用函数exchange(),完成将数组中的最小值与第0个元素对调,将数组中的最大值与最后一个元素对调,在主函数中调用函数print()输出调换前和调换后的数组。要求被调函数exchange和print的参数均为1)数组名2)数组元素的个数。#include<iostream>#include<iomanip>using namespace std;void exchange(int a,int value);void print(int a,int value);int m

45、ain()int n;cin>>n; int a100;for(int i=0;i<n;i+)cin>>ai;cout<<"调换前为:" print(a,n);exchange(a,n);cout<<"调换后为:" print(a,n);return 0;void print(int a,int value)int *p=a,i;for(i=0;i<value;i+,p+)cout<<setw(4)<<*p;cout<<endl;void exchange(i

46、nt a,int value) int i,m,*p=a,t,*j=a; for(i=1,m=0;i<value;i+) (am<ai)?m=m:m=i; t=*(p+m);*(p+m)=*p;*p=t; for(i=0,m=0;i<value;i+)(am>ai)?m=m:m=i; t=*(j+m);*(j+m)=*(j+value-1);*(j+value-1)=t;5-6、在主函数中输入十个整数到数组中,调用函数move()完成将数组元素循环移动k位(要求函数参数为1、数组名2、数组元素个数3、循环移动的位数k)。当k>0时,实现循环右移;当k<0时,

47、实现循环左移。循环右移一位的意义是:将数组全体元素向右移动一个元素的位置,原数组最后一个元素移动到数组的最前面,即第0个元素位置。提示:当k<0时,转换成等价的循环右移。调用函数print()输出移动前和移动后的全体数组元素。#include<iostream>#include<iomanip>using namespace std;void move(int x,int value,int k);void print(int x,int value);int main()int x10,i;for(i=0;i<10;i+)cin>>xi;cou

48、t<<"移动前数组为:" print(x,10);move(x,10,3);cout<<"移动后数组为:" print(x,10);return 0;void print(int x,int value)for(int i=0;i<value;i+)cout<<setw(5)<<xi;cout<<endl;5-7、在主函数中输入一个字符串到字符数组str1中,调用函数将str1中的下标为奇数的字符取出,构成一个新的字符串放入字符数组str2中(要求被调函数参数为str1和str2),在主函

49、数中输出结果字符串str2.#include<iostream>using namespace std;void newstr(char str1,char str2);static int m=0;void main()char str1100;char str2100;cout<<"请输入一个字符串:"<<endl; cin.getline(str1,100);newstr(str1,str2);cout<<"新字符串为:"<<endl;cout<<str2<<end

50、l;void newstr(char str1,char str2) char *p,*q; q=str1; p=str2; int i=0; for(i=0;i<100;i+) if(*(q+i)='0') *(p+i/2)+1)='0' break; else if(i%2!=0) *(p+i/2)=*(q+i); 5-8、编写一个函数palin()用来检查一个字符串是否是正向拼写与反向拼写都一样的“迴文”(palindromia).如“MADAM”是一个迴文。若放宽要求,即忽略大小写字母的区别、忽略空格及标点符号等,则像“Madam,I'm

51、Adam”之类的短语也可视为迴文。编程要求:1)在主函数中输入字符串。2)将字符串首指针作为函数参数传递到函数palin()中。当字符串是迴文时,要求函数palin()返回true,否则返回false。3)若是迴文,在主函数中输出yes。若不是迴文,在主函数中输出no.#include <iostream>using namespace std;bool palin(char a);int main()char a100;cout<<"请输入一个字符串:"<<endl;cin>>a;if(palin(a)cout<<

52、;"yes"<<endl;elsecout<<"no"<<endl;return 0;bool palin(char a)char *p1=a,*p2; int n,i; for(i=0,n=0;i<100;i+)if(ai>='a'&&ai<='Z') *(p1+n)=ai;n+;for(p2=p1+n;p1<p2;)if(*p1=*p2)p1+; p2-; if(p2-p1=1|p2-p1=0) return true; else return

53、 false;5-10、有n个人围成一圈,顺序排号,顺序号是1、2、3、.、n。从第1个人开始报号,凡报到m的人退出圈子,问最后留下的人是第几号。要求在主函数输入n和m,将数组a以及n、m作为参数传递给函数count(),在该函数中依次输出退出圈子的人的序号,最后输出的就是留下者的序号。#include<iostream>using namespace std;void count(int n,int m,int a);int main()int n,m;cout<<"输入n:"<<endl;cin>>n;cout<&l

54、t;"输入m:"<<endl;cin>>m;int a100;for(int i=0;i<n;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;i<n;i+)pi=i+1;while (t<n-1)for(p=a;p<a+n;p+)if(*p!=0)k+;if(k=m)k=0;cout<<*p<<" "*p=0;t+;p=a;while(*p=0)p+;cou

55、t<<*p<<endl;6-1、假设每个学生信息包括学号、姓名和3门课程的考试分数。从键盘输入10个学生的数据,采用结构体数组数据的存储,程序实现如下功能:1)输出三门课的平均成绩。2)输出三门功课分数分别最高的学生的信息。3)按总分对这10个学生从高到低排序,并输出排序结果。4)输出平均分高于80分那些学生的信息。#include <iostream>#include <iomanip>#include <cstdlib>using namespace std;struct studentint ID;char name20;dou

56、ble score3;void input(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(i

57、nt i=0;i<n;i+) cin>>ps->ID;cin>>ps->name;cin>>ps->score0>>ps->score1>>ps->score2;ps+;void average(student *ps,int n) int aver1=0,aver2=0,aver3=0; for(int i=0;i<n;i+) aver1+=ps->score0; aver2+=ps->score1; aver3+=ps->score2;ps+;aver1/=num;ave

58、r2/=num;aver3/=num;cout<<"第一门课平均成绩为:"<<aver1<<endl;cout<<"第二门课平均成绩为:"<<aver2<<endl;cout<<"第三门课平均成绩为:"<<aver3<<endl;void max(student *ps,int n) int a=0,b=0,c=0;for(int i=1;i<n;i+) if(ps+i)->score0>(ps+a)->score0) a=i; if(p

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论