《50道C++编程练习提高题及其解答.doc》由会员分享,可在线阅读,更多相关《50道C++编程练习提高题及其解答.doc(8页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、/50道C/C+编程练习题1、输入3个数,求最大值int main() int a,b,c,m; cinabc; m=a; if(bm) m=b; if(cm) m=c; coutm; 2、编程序,求方程ax2+bx+c=0的根#include#includeusing namespace std;int main() double a,b,c,d,x1,x2; cinabc; if(a=0) if(b=0) couterrorn; else cout x=-c/bendl; else d=b*b-4*a*c; if(fabs(d)=1e-6) coutx1=x2=-b/(2*a)1e-6)
2、x1=(-b+sqrt(d)/(2*a); x2=(-b-sqrt(d)/(2*a); coutx1=x1,x2=x2endl; else cout a; if(a=90) cout=80) cout=70) cout=60) coutD; else coutabc; if(a+bc & b+ca & c+ab) cout可以构成三角形; else couta; max=min=a; s=a; for(i=1;ia; if(amax) max=a; if(amin) min=a; s=s+a; coutmax,min,s/20.0n; cina; m=a; s=a; for(int i=1;
3、ia; s +=a; if(am) m=a; cout平均值:(double)s/n,最大值:mendl; 7、输入若干个数,输入-999表示结束,求平均值及最大值。#include #include#include using namespace std; int main() int n, count, sum, max; double ave; count = 0; cin n; sum = 0; max = n; while( n != -999 ) sum = sum + n; if( n max ) max = n; count+; cin n; if( count != 0 )
4、ave=static_cast(sum) / count; coutsetiosflags(ios:fixed) setprecision(2); cout平均值为:ave 最大值为:maxendl; 8、求和 s=1*1 + 2*2 + 3*3 +.+ 100*100int main() int i,t; double s=0; for(i=1; i=100; i+) t=i*i; s=s+t; 9、印度国王的奖励,求和 s=20 + 21 + 22 +.+ 263 int main() double t=1,s=0; for(int i=0; i=63; i+) s=s+t; t=2*t;
5、 couts/1.4e8endl; 10、求和 s=1! + 2! + 3! +.+ 10! int main() int i; long t,s; t=1; s=0; for(i=1; i=1e-7) t=t/i; e=e+t; i=i+1; cout1e-8) pi=pi+t; i=i+2; k=-k; t=double(k)/i; cout4*pi; 13、求PI值,PI/2 = 1 + 1/3 + 1/3*2/5 + 1/3*2/5*3/7 + . #include #include int main() int i,j; double pi,t; i=0; j=1; t=1; pi=
6、0; while(t1e-18) pi=pi+t; i=i+1; j=j+2; t=t*i/j; coutsetprecision(17)2*pi; 14、输入20个数,统计其中正数、负数和零的个数。int main() int a,n=0,m=0,s=0; for(int i=1; i a; if(a0) n+; else if(a0) m+; else s+; coutn m a; while(a!=0) if(a%2 = 0) n += a; else m += a; cin a; coutn m;16、写一函数,计算x的y次方(假设x、y都为正整数)。int pow(int x, in
7、t y) int s=1; for(int i=1; i=y; i+) s = s * x; return s;17、求水仙花数(一个三位数,其各位数字立方和等于该数字本身)int main() int i,a,b,c; for(i=100;i=999;i+) a=i/100; b=i/10%10; c=i%10; if(i=a*a*a+b*b*b+c*c*c) coutiendl; int main() int i,a,b,c; for(a=1;a=9;a+) for(b=0;b=9;b+) for(c=0;c=9;c+) i=a*100+b*10+c; if(i=a*a*a+b*b*b+c
8、*c*c) coutiendl; 18、编写一个函数,确定一个整数是否为完全数(一个数,等于他的因子之和)。用这个函数确定和打印1到1000之间的所有完全数。int perfect(int n) int i,s=1; for(i=2;i=n/2;i+) if(n%i=0) s=s+i; if(s=n) return 1; else return 0;int main() int n; for(n=2;n=1000;n+) if perfect(n) coutnendl; 19、写一函数,求斐波那契数列的第n项。int fib(int n) int i,f1,f2,f; if(n=1|n=2)
9、return 1; f1=1; f2=1; for(i=3; i=n; i+) f=f1+f2; f1=f2; f2=f; return f;20、写一个函数,取一个整数值并返回将此整数的各数字反序的数值int reverse(int n) int s=0; while(n) s = s * 10 + n % 10; n /= 10; ; return s;21、写一个函数,将一个整数的各位数字的反序打印void show(int n) while(n) cout n % 10 ; n /= 10; ;void show(int n) if(n 10) cout n; else cout n
10、% 10 10) k *= 10; m /= 10; while(n) cout n / k =0; j-) coutaj ;void show(int n) if( n 10 ) cout n; else show( n / 10 ); cout n % 10; 23、求一个整数的各位数之和的函数int sum(int n) int s = 0; while(n) s += n % 10; n /= 10; ; return s;24、写一函数,判断某个数是否素数,以及求11000之内的素数#include #include #include using namespace std; boo
11、l isprime(int n) float k=sqrt(float(n); for(int i=2; i=k; i+) if(n%i=0) return false; return true; int main() for(int n=2; n=1000; n+) if(isprime(n) coutsetw(5)n; 25、用筛法求11000之内的素数 #include #include #include #include using namespace std; int main() int i,k,a1001; for(i=2; i=1000; i+) ai=1; float s=s
12、qrt(float(1000); for(i=2; i=s; i+) if(ai=1) k=2*i; while(k=1000) ak=0; k=k+i; for(i=2; i=1000; i+) if(ai=1) coutsetw(5)n) m=m-n; else n=n-m; return m; 29、求两个数的最小公倍数int lcm(int m, int n) int t,s; if(mn) t=m; m=n; n=t; s=m; while(s%n != 0) s=s+m; int lcm(int m, int n) return m*n/gcd(m,n); 30、百钱买百鸡问题:鸡
13、翁一值钱五,鸡母一值钱三,鸡雏三值钱一,百钱买百鸡,问鸡翁、母、雏各几何?int main() int cock,hen,chick; for(cock=0; cock=20; cock+) for(hen=0; hen=33; hen+) chick=100-cock-hen; if(5*cock+3*hen+chick/3.0=100) coutsetw(4)cocksetw(4)hen setw(4)chick=a & si=z) count+; i+; coutcount=A & si=Z) si=si+32; coutsendl;33、打印杨辉三角形(帕斯卡三角形),打印10行。#i
14、nclude#include using namespace std;int main() int a1010=0; for(int i=0; i10; i+) ai0=1; aii=1; for(int i=1; i10; i+) for(int j=1; ji; j+) aij = ai-1j-1 + ai-1j; for(int i=0; i10; i+) for(int j=0; j=i; j+) coutsetw(4)aij; coutendl; 34、打印一个九九乘法表#include#include using namespace std;int main() for(int j
15、=1; j=9; j+) for(int i=1; i=j; i+) couti*j=setw(2)i*j ; coutendl; 35、掷骰子10000次,统计得到各点数的次数。int main() int a7=0; srand(time(0); for(int i=1; i = 10000 ; +i) +a 1 + rand()%6 ; for(int i=1; i = 6 ; +i) couti: aiendl; 36、编写函数distance,计算两点(x1,y1)和(x2,y2)之间的距离。 double distance(double x1, double y1, double
16、x2, double y2) return sqrt( (x1-x2)*(x1-x2) + (y1-y2)*(y1-y2) );37、写一个程序,进行体操评分,依次输入10名评委所评分数,去除一个最高分和一个最低分,再算出平均分作为选手的得分。int main() int i; float max,min,s,x; max = 0; min = 10; s=0; for(i=1;i x; s = s + x; if(xmax) max = x; s = s - min - max; cout s/8; 38、写一函数,将一数组中的元素反转。void reverse(int a, int n)
17、for(int i=0; in/2; i+) swap(ai,an-i-1);39、写一函数,在一个数组中找出最大元素的位置int SearchMax(int a, int n) int k = 0; for(int i=1; iak) k = i; return k;40、找出一个二维数组中的鞍点,即该元素在该行上最大,在该列上最小。41、写一个字符串拷贝函数 void strcpy(char *p, const char *q) while(*p+=*q+); char *strcpy(char *str1, const char *str2) char *p=str1; while(*s
18、tr1+=*str2+); return p; 42、写一个字符串比较函数int strcmp(char *str1, const char *str2) while(*str1 & * str2 & *str1=*str2) str1+; str2+; return *str1-*str2; int strcmp(char *str1, const char *str2) while(*str1=*str2) if(*str1=0) return 0; str1+; str2+; return *str1-*str2; 43、写一个字符串连接函数char *strcat(char *str1
19、, char *str2) char *p=str1; while(*str1!=0) str1+; while(*str1+=*str2+); return p; 44、写一个求字符串长度函数int strlen(char *str) int n=0; while(*str!=0) n+; str+; return n; 45、写一函数,在一数组里查找某个值。int search(int a, int n, int key) for(int i=0; iyearmonthday; for(i=1; i2) s+; cout s; 48、编写一个帮助小学生学习加法的程序,随机产生2个数,让学生
20、输入答案。 #include#includeusing namespace std;int main() int x,y,z; srand( time(0) ); x = rand() % 1000; y = rand() % 1000; cout x + y z; while( z != 0 ) while( z != x+y ) cout 错误!请重做n ; coutx + yz; cout 正确!n ; x = rand() % 1000; y = rand() % 1000; coutx + yz; 49、从52个数里选13个数int main() int i,k,a52,b13; f
21、or(i=0; i52; i+) ai=i+1; srand(time(0); for(i=0; i13; i+) k = rand() % (52-i); bi = ak; swap(ak,a51-i); for(i=0; i13; i+) coutbi ;50、求100!#include #include #includeusing namespace std;const long MOD = 10000;int main() int t,t0=time(0); int len,n=100000; unsigned long a200000; a1=1; len=1; for(int k=2; k=n; k+) long carry=0; for(int i=1; i 0) len+; alen = carry % MOD; carry = carry / MOD; t=time(0); int w=(len-1)*4 + int(log10(double(alen) + 1; ofstream fout(factorial.txt); foutn! = nalen; fout=1; i-) foutsetw(4)ai; foutendl; fout用时:t-t0秒endl; fout数组元素个数:len 阶乘值位数:wendl; return 0;
限制150内