C程序设计(第五版)谭浩强第五章课后练习题答案

#include <stdio.h>
#include <math.h>
#include <string.h>
void x6(){
    
    
	double sum=0,n=1; //注意:sum和n的精度使用double类型,若使用int类型会因为精度问题结果出错 
	int i;
	for(i=1;i<=20;i++){
    
    
		n*=i;
		sum+=n;
	}
	printf("%e\n",sum);
}


void x8(){
    
    
	int q,w,e,r=100;
	while(r<1000){
    
    
		q=r%10;
		w=r/10%10;
		e=r/100%10;
		if(pow(q,3)+pow(w,3)+pow(e,3)==r)
		printf("%d  ",r);
		r++;
	}
	putchar('\n');
}
void x9(){
    
    
	int n,k,sum;
	int i=1;
	while(i<=1000){
    
    //i用来遍历 
		k=1;n=0;sum=0;//sum总和,ss乘机,k因子,n因子的个数 		
	while(i>k){
    
    
		if(i%k==0)
		sum+=k;
		k++;
	}
	if(i==sum)//若相加和与相乘和等于原数,则为完数 
	{
    
    
	printf("%d its factors are ",i);//输出完数 
	k=1;
	while(i>k){
    
    
		if(i%k==0)
		printf("%d  ",k);
		k++;
	}
	printf("\n");
	}
	i++;//完数加一 
	}
}

void x10(){
    
    
	double x=2,y=1,sum=0,t;
	int i=0;
	while(i<20){
    
    
		sum+=x/y;
		t=x;
		x+=y;
		y=t;
		i++;
	}
	printf("前20项之和为:%.12f\n",sum);
}

void x11(){
    
    
	double h=100;
	int k=1;
	while(k<=10){
    
    
		h/=2;
		k++;
	}
	printf("第十次还有%f米高!\n",h);
}

void x12(){
    
    
	int x=1,k=1,n;
	while(k<10)
	{
    
    
		x=(x+1)*2;
		k++;
	}
	printf("共摘了%d个桃子!\n",x);
}

void x13(){
    
    
	float x1,x2,a;
	printf("请输入要平方的值:\n");
	scanf("%f",&a);
	x1=sqrt(a);
	do{
    
    
		x2=(x1+a/x1)/2;
		x1=x2;
	}while(fabs(x2-x1)>=pow(10,-5));//这里面do..while后面的while后要加分号 
	printf("a=%f\nx2=%f\n",a,x2);
	
}
void x14(){
    
    
	double x0,x1,f1,f2;
	x1=1.5;
	do{
    
    
		x0=x1;
		f1=((2*x0-4)*x0+3)*x0-6;
		f2=(6*x0-8)*x0+3;
		x1=x0-f1/f2;
	}while(fabs(x1-x0)>pow(10,5));
	printf("根为:%f\n",x1);
}
void x15(){
    
    
	float x0,x1,x2,fx0,fx1,fx2;
	do{
    
    
		printf("enter x1 and x2:\n");
		scanf("%f%f",&x1,&x2);
		fx1=x1*((2*x1-4)*x1+3)-6;
		fx2=x2*((2*x2-4)*x2+3)-6;
	}while(fx1*fx2>0);
	do{
    
    
		x0=(x1+x2)/2;
		fx0=x0*((2*x0-4)*x0+3)-6;
		if((fx0*fx1)<0){
    
    
			x2=x0;
			fx2=fx0;
		}
		else{
    
    
			x1=x0;
			fx1=fx0;
		}
	}while(fabs(fx0)>=pow(10,-5));
	printf("x=%6.2f\n",x0);
}
void x16(){
    
    
	printf("请输入您要打印图案最多一行*的个数:\n");
	int i,j,k;
	for(i=0;i<=3;i++)
	{
    
    
		for(j=0;j<=2-i;j++)
		printf(" ");
		for(k=0;k<=2*i;k++)
		printf("*");
		printf("\n");
	}
	for(i=0;i<=2;i++)
	{
    
    
		for(j=0;j<=i;j++)
		printf(" ");
		for(k=0;k<=4-2*i;k++)
		printf("*");
		printf("\n");
	}
}
void x17(){
    
    
	char a,b,c;
	for(a='x';a<='z';a++)
	for(b='x';b<='z';b++)
	if(a!=b)
	for(c='x';c<='z';c++)
	if(a!=c&&b!=c)
	if(a!='x'&&c!='x'&&c!='z')
	printf("A的对手是:%c\nB的对手是:%c\nC的对手是:%c\n",a,b,c);
}

int main(){
    
    
	int ch;
	scanf("%d",&ch);
	switch(ch){
    
    
		case 6:x6();
		break;
		case 8:x8();
		break;
		 case 9:x9();
		 break;
		 case 10:x10(); 
		 break;
 		 case 11:x11();
		 break;
 		 case 12:x12();
		 break;
		 case 13:x13();
		 break;
		 case 14:x14();
		 break;
		 case 15:x15();
		 break;
		 case 16:x16();
		 break;
		 case 17:x17();
		 break;
		 default:printf("这道题没做哦,你可以试试其它的!\n");
	}
	return 0;
	}
//本章最主要的考点就是精度问题,包括%后面输出的值类型,都要设置相对应的值才能正确显示结果! 

还是老规矩,大家直接运行,输入相应的题号,就会执行相应的程序哦!

猜你喜欢

转载自blog.csdn.net/Songbook/article/details/123209850