1、皮德常c+全套答案第2章习题2-5、计算一个人一段时期的薪水,第1天1分钱,第2天2分钱,每天翻倍。要求用户输入天数(输入检验),列表显示每天的薪水,及薪水总和(输出人民币的单位:“元”)。#includeusing namespace std;void main() int daynum; float daypay, paysum=0; do cout1整数): ; cindaynum; while(daynum=1); /有效性检验 for(int i=1; i=daynum; i+) daypay=i/100.0; cout第i天薪水:daypay 元t; if(i%2=0) coute
2、ndl; paysum+=daypay; /列表输出每天薪水,计算总薪水 coutendl; cout薪水总和:paysum元; /输出总薪水2-7、用for循环计算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、用循环语句输出如下图形。AAAAAAA AAAAA AAA A AAA AAAAAAAAAAAA#includeusing namespace std;void main
3、() int i,j,k; for(i=0;i=3;i+) /控制行 for(j=0;ji;j+) couti;k-) /控制每行输出的A的数目 coutA; coutendl; for(i=1;ii;j-) cout ; /控制每行输出的 的数目 for(k=0;k2*i+1;k+) /控制每行输出的A的数目 coutA; coutendl; 2-9、采用循环结构计算公式s的前30项和。s=2/1+3/2+5/3+#includeusing namespace std;#define N 30void main( ) int i; float a1,a2,sum=0,temp; /a1分子,
4、a2分母 for(a1=2,a2=1,sum=0,i=1;i=N;i+) sum+=a1/a2; temp=a1; a1=a1+a2; a2=temp; /为下一次求和做准备 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、输入一行字符,以
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; coutt
6、he number of digits: digitsendl; coutthe number of spaces: spacesendl; coutthe number of others: others;第3章习题:3-1、编写求阶乘及组合的函数,在主函数调用求组合的函数。#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()
7、 int n,k; coutnk; coutthe combination number of n and k: comb(n,k);3-2、编写函数计算ex的近似值,在主函数中输入x及精度10-9(要求最后一项小于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:n
8、ex(x,eps);3-3、编写被调函数,求出1000以内 素数,在主函数中调用函数并输出素数,每行输出5个素数。#include#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、
9、输出1000以内的所有完数。#include#includeusing namespace std;void print(int n) /输出因子 int 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);
10、3-5、编写函数(递归和非递归)求两个整数的最大公约数和最小公倍数。#includeusing namespace std;int gcd(int x,int y) int r; r=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,b
11、s; coutxy; g=gcd(x,y); bs=gbs(x,y); coutthe gcd: gendl; coutthe gbs: bs;3-6、递归函数反序输出数位。#includeusing namespace 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、递归函数实现十进制到二进制转换。#includeusing namespace std;void fun(int i)
12、 if(i 1) fun(i/2); couti%2; void main() int n; coutn; coutthe binary number: ; fun(n); 3-9、编写函数输出图形。(略)3-10、编写min函数模板和max函数模板。#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 retu
13、rn(var1);void main(void) int userInt1,userInt2; float userFloat1,userFloat2; char userChar1,userChar2; coutuserInt1userInt2; coutthe min is: min(userInt1,userInt2)endl; coutthe max is: max(userInt1,userInt2)endl; coutuserFloat1userFloat2; coutthe min is: min(userFloat1,userFloat2)endl; coutthe max i
14、s: max(userFloat1,userFloat2)endl; coutuserChar1userChar2; coutthe min is: min(userChar1,userChar2)endl; coutthe max is: max(userChar1,userChar2)endl;3-11、绝对值函数模板。#include using namespace std;template T Abs(const T var) if(var0) return(-var); else return(var);void main(void) /测试整型量求绝对值 int test1=12,
15、test2=-34; cout测试整型量:endl; couttest1=test1ttest1的绝对值为:Abs(test1)endl; couttest2=test2ttest2的绝对值为:Abs(test2)endl; /测试浮点型量求绝对值 float test3=12.67f,test4=-34.43f; cout测试浮点型量:endl; couttest3=test3ttest3的绝对值为:Abs(test3)endl; couttest4=test4ttest4的绝对值为:Abs(test4)endl;第4章习题:4-1、编程实现由用户输入10个数据到数组,输出数组中的最大值和最
16、小值及其相应的下标。#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(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 m
17、in of the array is minendl; coutthe index of the min is minidendl;4-2、编写函数实现将字符串中每个单词的首字母大写。#include using namespace std;void Words( char str ) int i; char ch= ; / 存放前一字符 for (i=0; stri!=0; i+ ) if ( ch = & stri != ) / 单词数首字母 if(stri=a&stri=z) stri-=32; ch = stri; void main() char str100; coutPlease
18、 input a string:; cin.getline(str,100); Words(str); coutstr;4-4、编程实现线性查找账号,账号由用户输入,若找到,则输出合法信息,否则输出非法信息。#includeusing namespace std;#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
19、 = 5658845, 4562555, 3852085, 4520125, 5552012; int result, x; coutx; result = searchList(tests, arrSize, x); if ( result = -1 ) cout x 为非法账号。 endl; else cout x 为合法账号。;4-5、采用二分查找实现上述程序。#include #include using namespace std;#define arrSize 5void selectionSort(int a , int n) / 选择排序 int i, j, t, minInd
20、ex; 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; /二分查找函数,在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 ) / 查找成
21、功 return 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; coutx; selectionSort(tests,arrSize); result=binarySearch(tests,arrSize, x); if ( result = -1 ) cout x 为非法账号。 end
22、l; else cout x 为合法账号。;4-6、 寻找二维数组中的鞍点(该位置的元素是该行上的最大元素,同时是该列上的最小元素)。#include #include using namespace std;#define M 3#define N 4 int q1=0, q2=0; /鞍点位置下标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列为第i行的最大元素 for
23、(m=0, f=1; mp1&f; m+) if(amkmax) 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,4,5,8,9,1,2,3;*/ int w; w=andian(a,M,N); if(w) cout该二维数组存在鞍点:aq1q2endl; cout其行标为:q1t列标为:q2; else cout该二维数组没有鞍点。;4-7、编写函数求一个44二维数组中周边元素的和。#include 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
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1