《C語言的科學與藝術》課後習題答案第六章(部分)
阿新 • • 發佈:2018-12-22
6.2//素數分解,並顯示各因子,列60,2*2*3*5
#include <stdio.h>
#include <genlib.h>
#include <simpio.h>
#include <math.h>
bool IsPrime(int n);
void PrintPrime(int num);
void main()
{
int num;
printf("請輸入要分解的數:");
num=GetInteger();
if (num<=1)
{
printf("輸入有誤!請輸入要分解的數:");
num=GetInteger();
}
else
{
if (IsPrime(num))
{
printf("%d=1*%d",num,num);
}
else
{
PrintPrime(num);
}
}
printf("\n");
}
bool IsPrime(int n)
{
int i,limit;
if (n<=1)
{
return (FALSE);
}
if (n==2)
{
return (TRUE);
}
if (n%2==0)
{
return (FALSE);
}
limit=sqrt(n)+1;
for(i=3;i<=limit;i+=2)
{
if (n%i==0)
{
return (FALSE);
}
}
return (TRUE);
}
void PrintPrime(int num)
{
int i=2;
if (IsPrime(num))
{
printf("%d",num);
}
else
{
while(i<num)
{
if (num%i==0)
{
printf("%d*",i);
PrintPrime(num/i);
break;
}
else
{
i++;
}
}
}
}
6.3//列印1~9999之間的完全數,完全數是指其真約數(除其本身以外的約數)之和等於其本身的數。
#include <stdio.h>
#include <genlib.h>
#include <math.h>
bool IsPerfect(int n); //判斷完全數的函式
void main()
{
int i,j=0; //i是迴圈變數,j控制格式換行用
printf("本程式的目的是列印1~9999之間的完全數!\n");
for (i=1;i<10000;i++)
{
if (IsPerfect(i))
{
printf("]",i);
j++;
if (j!=0 && j%2==0)
{
printf("\n");
}
}
}
}
//方法一
//方法二
bool IsPerfect(int n)
{
int sum=1,i,limit;
limit=sqrt(n)+1;
for(i=2;i<limit;i++)
{
if (n%i==0)
{
sum+=i+n/i;
}
}
if (sum==n&&sum!=1)
{
return (TRUE);
}
else
{
return (FALSE);
}
}
6.5//求立方根,由sqrt的牛頓演算法演化二來
#include <stdio.h>
#include <simpio.h>
#include <genlib.h>
#include <math.h>
#define Epsilon 0.000001
bool ApproximatelyEqual(double x,double y);
double CubeRoot(double x);
double Min(double a,double b);
void main()
{
double n;
printf("本程式從使用者那裡讀取一個數字,然後輸出該數字的立方根!\n");
printf("請輸入要計算的數字:");
n=GetReal();
printf("%f的立方根是:%.4f\n",n,CubeRoot(n));
}
double CubeRoot(double x)
{
double g;
if (x==0)
{
return (0);
}
g=x;
while(!ApproximatelyEqual(x,g*g*g))
{
g=(2*g+x/g/g)/3; //立方根牛頓演算法
}
return (g);
}
bool ApproximatelyEqual(double x,double y)
{
if (fabs(x-y)/Min(fabs(x),fabs(y))<Epsilon)
{
return TRUE;
}
else
{
return FALSE;
}
}
double Min(double a,double b)
{
if (a>=b)
{
return (b);
}
else
{
return (a);
}
}