1、(word完整版)50道C+编程练习题及解答50道C/C+编程练习题151、输入3个数,求最大值int main() int a,b,c,m; cinabc; m=a; if(bm) m=b; if(cm) m=c; coutincludeusing 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=bb-4*ac; if(fabs(d)=1e6) cout”x1=x2=b/(2*a)1e6) x1=(-b+sqrt(d)
2、)/(2a); x2=(-bsqrt(d))/(2a); coutx1=x1”,x2=x2 a; if(a=90) cout=80) cout”B; else if(a=70) cout=60) coutc; if(a+bc & b+ca & c+ab) cout”可以构成三角形; else cout不可以构成三角形;5、输入20个数,求其最大、最小和平均值 int main() int i; int a,max,min,s; cina; max=min=a; s=a; for(i=1;ia; if(amax) max=a; if(amin) min=a; s=s+a; coutmax,min
3、”,s/20.0n; cina; m=a; s=a; for(int i=1; in; i+) cina; s +=a; if(am) m=a; cout平均值:”(double)s/n”,最大值:mendl; 7、输入若干个数,输入-999表示结束,求平均值及最大值。#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 )
4、 max = n; count+; cin n; if( count != 0 ) ave=static_castdouble(sum) / count; coutsetiosflags(ios:fixed) setprecision(2); cout平均值为:”ave” 最大值为:maxendl; 8、求和 s=1*1 + 2*2 + 33 +。+ 100*100int main() int i,t; double s=0; for(i=1; i=100; i+) t=ii; s=s+t; 9、印度国王的奖励,求和 s=20 + 21 + 22 +。.。+ 263 int main() do
5、uble t=1,s=0; for(int i=0; i=63; i+) s=s+t; t=2t; couts/1。4e8endl; 10、求和 s=1! + 2! + 3! +.。+ 10! int main() int i; long t,s; t=1; s=0; for(i=1; i=10; i+) t=ti; s=s+t; 11、求 e=1 + 1/1! + 1/2! + 1/3! + .。int main() int i; double t,e; i=1; t=1; e=1; while(t=1e-7) t=t/i; e=e+t; i=i+1; coute; 12、求PI值,PI/4
6、 = 1 - 1/3 + 1/5 1/7 + .。. int main() int i,k; double pi,t; i=1; t=1; pi=0; k=1; while(fabs(t)1e-8) pi=pi+t; i=i+2; k=k; t=double(k)/i; cout4pi; 13、求PI值,PI/2 = 1 + 1/3 + 1/3*2/5 + 1/32/53/7 + 。. #includeiostream include1e18) pi=pi+t; i=i+1; j=j+2; t=t*i/j; coutsetprecision(17)2*pi; 14、输入20个数,统计其中正数、
7、负数和零的个数。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(a2 = 0) n += a; else m += a; cin a; coutn m;16、写一函数,计算x的y次方(假设x、y都为正整数)。int pow(int x, int y) int s=1; for(int i=1; i=y; i+) s = s x; return s;17、求水仙花数(一个三位数,其各位数字立方和等于该数字本身)int ma
8、in() int i,a,b,c; for(i=100;i=999;i+) a=i/100; b=i/1010; c=i%10; if(i=a*aa+bb*b+cc*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=a100+b*10+c; if(i=a*a*a+bbb+cc*c) coutiendl; 18、编写一个函数,确定一个整数是否为完全数(一个数,等于他的因子之和)。用这个函数确定和打印1到1000之间的所有完全数。int perfect(int n) int
9、 i,s=1; for(i=2;i=n/2;i+) if(ni=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) return 1; f1=1; f2=1; for(i=3; i=n; i+) f=f1+f2; f1=f2; f2=f; return f;20、写一个函数,取一个整数值并返回将此整数的各数字反序的数值
10、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) k *= 10; m /= 10; while(n) cout n / k =0; j-) coutaj” ;void show(int n) if( n 10 ) cout n; else sho
11、w( n / 10 ); cout n % 10; 23、求一个整数的各位数之和的函数int sum(int n) int s = 0; while(n) s += n % 10; n /= 10; ; return s;24、写一函数,判断某个数是否素数,以及求11000之内的素数#includeiostream #includecmath #includestdlib.h using namespace std; bool isprime(int n) float k=sqrt(float(n); for(int i=2; i=k; i+) if(n%i=0) return false;
12、return true; int main() for(int n=2; n=1000; n+) if(isprime(n)) coutsetw(5) include using namespace std; int main() int i,k,a1001; for(i=2; i=1000; i+) ai=1; float s=sqrt(float(1000)); for(i=2; i=s; i+) if(ai=1) k=2i; while(k=1000) ak=0; k=k+i; for(i=2; i=1000; i+) if(ai=1) coutsetw(5)i; 26、判断某一年是否闰
13、年的函数bool IsLeapYear(int y) return (y%4 = 0 & y%100 != 0)(y%400 = 0); 27、写一个函数,交换两个整型变量的值 void swap(int *p, int *q) int t; t=p; p=*q; q=t; void swap(int &a, int b) int t; t=a; a=b; b=t; 28、求两个数的最大公约数,欧几里德算法(辗转相除法)int gcd(int m, int n) int k; while(n!=0) k=m%n; m=n; n=k; return m; int gcd(int m, int n
14、) int k; while((k=mn)!=0) m=n; n=k; return n; int gcd(int m, int n) while(m!=n) if(mn) m=m-n; else n=nm; return m; 29、求两个数的最小公倍数int lcm(int m, int n) int t,s; if(mn) t=m; m=n; n=t; s=m; while(sn != 0) s=s+m; int lcm(int m, int n) return mn/gcd(m,n); 30、百钱买百鸡问题:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一,百钱买百鸡,问鸡翁、母、雏各几何?i
15、nt main() int cock,hen,chick; for(cock=0; cock=20; cock+) for(hen=0; hen=33; hen+) chick=100-cockhen; if(5cock+3*hen+chick/3。0=100) coutsetw(4)cocksetw(4)hen setw(4)chickendl; 31、编一程序,输入一行字符串,统计其中的小写英文字母的个数。int main() char s100; cin。getline(s,100); int i=0,count=0; while(si!=0) if(si=a si=z) count+;
16、 i+; coutcount=A si=Z) si=si+32; coutsendl;33、打印杨辉三角形(帕斯卡三角形),打印10行。includeiostream#includeiomanip 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 = ai1j-1 + ai1j; for(int i=0; i10; i+) for(int j=0; j=i; j+) coutsetw(4)ai
17、j; coutendl; 34、打印一个九九乘法表includeiostream#includeiomanip using namespace std;int main() for(int j=1; j=9; j+) for(int i=1; i=j; i+) couti*”j=setw(2)ij ; 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:
18、”ai x; s = s + x; if(xmin) min = x; if(xmax) max = x; s = s - min max; cout s/8; 38、写一函数,将一数组中的元素反转。void reverse(int a, int n) 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; in; i+) if(aiak) k = i; return k;40、找出一个二维数组中的鞍点,即该元素在该行上最大
19、,在该列上最小。41、写一个字符串拷贝函数 void strcpy(char p, const char *q) while(*p+=*q+); char strcpy(char str1, const char str2) char p=str1; while(*str1+=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, co
20、nst char str2) while(*str1=str2) if(*str1=0) return 0; str1+; str2+; return str1-str2; 43、写一个字符串连接函数char strcat(char *str1, 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、写一函数,在一数组里查找某个值
21、。int search(int a, int n, int key) for(int i=0; iyearmonthday; for(i=1; imonth; i+) s= s + ai; s = s + day; if(isLeapYear(year) & month2) s+; cout #includecstdlibusing namespace std;int main() int x,y,z; srand( time(0) ); x = rand() 1000; y = rand() 1000; cout x ” + y = ; cin z; while( z != 0 ) whil
22、e( z != x+y ) cout” 错误!请重做n” ; coutx + ”z; cout 正确!n” ; x = rand() 1000; y = rand() 1000; coutx + yz; 49、从52个数里选13个数int main() int i,k,a52,b13; for(i=0; i52; i+) ai=i+1; srand(time(0); for(i=0; i13; i+) k = rand() (52-i); bi = ak; swap(ak,a51i); for(i=0; i13; i+) coutbi” ;50、求100!include fstream#inc
23、lude cmath#includeiomanipusing 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=len; i+) unsigned long s = aik + carry; carry = s / MOD; ai = s % MOD; while(carry 0) len+; alen = carry % MOD; carry = carry / MOD; t=time(0); int w=(len1)*4 + int(log10(double(alen) + 1; ofstream fout(”factorial.txt”); foutn”! = nalen; foutsetfill(0); for(int i=len1; i=1; i-) foutsetw(4)ai; foutendl; fout”用时:tt0秒endl; fout数组元素个数:”len 阶乘值位数:”wendl; return 0;