for(j=1;j<=i;j++)t*=j; t=1/t; e+=t; }
printf(\ getch(); }
24.用二分法求方程2x3-4x2+3x=0在(-10,10)附近的根(二分法:先找到a、b,使f(a)、f(b)异号,说明在区间(a,b)内一定有零点,然后求f[(a+b)/2],现在假设f(a)<0,f(b>0,a
{
double x,fx,fa,fb,a=-10,b=10,z=0.0001; fa=2*a*a*a-4*a*a+3*a; fb=2*b*b*b-4*b*b+3*b; if(fa*fb<0) {
do
{
x=(a+b)/2;
fx=2*x*x*x-4*x*x+3*x; if(fx<0) {
a=x;
fa=2*a*a*a-4*a*a+3*a; } else {
b=x;
fb=2*b*b*b-4*b*b+3*b; }
}while(fabs(fa-fb)>z);
printf(\ } getch(); }
第六章
1.编写计算x的n次乘方的程序。 #include
int n;
float power(float x,int n); scanf(“%f,%d”,&x,&n); y=power(x,n);
printf(“%8.2f”,y); }
float power(float x,int n) {int i;
float t=1; for(i=1;i<=n;i++) t=t*x; return t;
}
2.编程求组合C的m取n long fac(int k) {long f=1;
int i;
for(i=1;i<=k;i++) f=f*i; return f; }
long comb(int n,int m) {long c;
c=fac(m)/(fac(n)*fac(m-n)); return c; }
main()
{int n,m; long c;
scanf(“%d,%d”,&n,&m); c=comb(n,m);
printf(“%ld”,c);
}
3.输入两个数,输出较大的数。 #include
int max(int,int);
scanf(“%d,%d”,&a,&b); m=max(a,b);
printf(“max=%d”,m); }
int max(int x,int y) {int t;
if(x>y)t=x;
else t=y; rerurn t; }
4.设求最大公约数的程序。 #include
int divisor(int a,int b) {int r; do {r=a%b; a=b; b=r;
}while(r!=0); return a; }
void main()
{int a,b,d;
scanf(“%d,%d”,&a,&b); if(a>b)
d=divisor(a,b); else
d=divisor(b,a);
printf(“a=%d,b=%d\\n”,a,b); printf(“d=%d”,d); }
5.用递归计算n!。 long fac(int n) {long f; if(n==0) f=1;
else
f=n*fac(n-1); return f; }
void main() {long y; int n;
scanf(“%d”,&n); y=fac(n);
printf(“%d!=%ld”,n,y); }
6.用递归算法求m与n的最大公约数。 int gcd(int m,int n) {int g;
if(n==0) g=m; else
g=gcd(n,m%n) return(g); }
void main()
{int m,n;
scanf(“%d,%d”,&m,&n); printf(“gcd=%d”,gcd(m,n)); }
7.汉诺塔游戏。
void hanoi(int n,int a,int b,int c) {
if(n==1)
printf(“%d->%d”,a,c); else
{hanoi(n-1,a,c,b);
printf(“%d->%d”,a,c); hanoi(n-1,b,a,c); }
}
main() {int n;
printf(“input n:”); scanf(“%d”,&n); hanoi(n,1,2,3);
}
8.计算s=1^k+2^k+3^k+···+n^k(0= for(j=1;j long f(int n,int k) {long sum=0;int i; for(i=1;i void main() {int n,k; printf(“input n k:”); scanf(“%d %d”,&n,&k); printf(“%ld\\n”,f(n,k)); } 9.对于一个自然数n(n<=50),统计具有下列性质的数的个数:自然数n,在n的左边加上一个自然数,但该自然数不能超过原数的一半;机选此规则进行处理,直到不能再上自然数为止,例如6,16,26,126,36,136,一共6个。 int s=0; void left(int n) {int n1; if(n>0) {s++; for(n1=1;n1<=n/2;n1++) left(n1); } } void main() {int n; scanf(“%d”,&n); left(n); printf(“s=%d”,s); } 10.写一个函数完成下列任务:输入一个表示正整数的字符串,将字符串转换成为对应的数字。例如,输入三个字符组成的字符串“123”,将它转换为整型数123。 int cton() { char ch; int n=0,f=0,n1=0; while((ch=getchar())<=’0’||ch>=’9’) {n1++; if(n1>=10) {printf(“data is wrong !”);return 0;} } do {n=n*10+ch-‘0’;} while((ch=getchar())>=’0’&&ch<=’9’); return n; } 11.写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。两个整数由键盘输入。 main() { unsigned int m,n,p,q; for(;;) { printf(\ if(m<0||n<0){printf(\ p=funp(m,n);