(完整版)C语言程序设计教程第六章课后习题参考答案

  • 格式:pdf
  • 大小:75.02 KB
  • 文档页数:8

P158

1

求三个实数最大值

#include

float max(float,float,float);

int main()

{

float a,b,c,m;

printf("

请输入三个实数

:");

scanf("%f %f %f",&a,&b,&c);

printf("

最大数为

%f\n",max(a,b,c));

return 0;

}

float max(float a,float b,float c)

{

float t;

if(a>b&&a>c)

t=a;

else if(b>a&&b>c)

t=b;

else

t=c;

return t;

}

P158

2

求最大公约数

最小公倍数

#include

int fun1(int a,int b);

int fun2(int a,int b);

int main()

{

int a,b;

printf("

请输入两个整数

:");

scanf("%d %d",&a,&b);

printf("

最大公约数为

:%d\n",fun1(a,b));

printf("

最小公倍数为

:%d\n",fun2(a,b));

}

int fun1(int a,int b)

{

int t,r;

if(a

{

t=a;

a=b;

b=t;}

while((r=(a%b))!=0)

{

a=b;

b=r;

}

return b;

}

int fun2(int a,int b)

{

int n;

n=(a*b)/fun1(a,b);

return n;

}

P158

3

求完全数

#include

void wan(int n);

void main()

{

int n;

for(n=1;n<1000;n++)

wan(n);

printf("\n");

}

void wan(int n)

{

int i,s=0;

for(i=1;i<=n/2;i++)

{

if(n%i==0)

s=s+i;

}

if(n==s)

printf("%d\t",n);

}

P158

4

无暇素数

#include

#includeint nixvshu(int n);

int isPrime(int n);

int main()

{

int n,t;

printf("

无暇素数

:\n");

for(n=100;n<=999;n++)

{

t=nixvshu(n);

if(isPrime(n)&&isPrime(t))

printf("%d\t",n);

}

printf("\n");

return 0;

}

int nixvshu(int n)

{

int x=0;

while(n)

{

x=x*10+n%10;

n=n/10;

}

return x;

}

int isPrime(int n)

{

int i;

for(i=2;i<=sqrt(n);i++)

if(n%i==0) return 0;

return n;

}

P158

7

递归函数

#include

int Y(int n)

{

if(n==0)

return 0;

if(n==1)

return 1;if(n==2)

return 2;

else

return (Y(n-1)+Y(n-2)+Y(n-3));

}

int main()

{

int n,k=0;

for(n=0;n<=19;n++)

{

printf("%d\t",Y(n));

k++;

if(k%5==0)

printf("\n");

}

return 0;

}

P124

6

分解质因数

#include

#include

int isPrime(int n);

int zhi(int m);

void fenjie(int );

int main()

{

int n;

printf("

请输入一个正整数

:");

scanf("%d",&n);

if(isPrime(n))

{

printf("%d=1*%d\n",n,n);

}

else

{

fenjie(n);

printf("\n");

}

return 0;

}

int isPrime(int n)

{int i;

for(i=2;i<=sqrt(n);i++)

{

if(n%i==0) return 0;

}

return 1;

}

int zhi(int n)

{

int m;

for(m=2;m<=n;m++)

{

if(isPrime(m)&&(n%m==0))

break;

}

return m;

}

void fenjie(int n)

{

int m;

printf("%d=%d",n,zhi(n));

while(n>zhi(n))

{

m=zhi(n);

n=n/m;

printf("*%d",zhi(n));

}

}

P47

1

输出闰年

#include

int f(int year);

int main()

{

int year,k=0;

for(year=1900;year<=2000;year++)

{

if(f(year))

{

printf("%d\t",year);

k++;if(k%5==0)

printf("\n");

}

}

return 0;

}

int f(int year)

{

if((year%4==0&&year%100!=0)||(year%400==0))

return year;

else

return 0;

}

P47

2

输出回文数

#include

int fun(int n);

int main()

{

int n,k=0;

for(n=10;n<=2000;n++)

{

if(n == fun(n))

{

printf("%d\t",n);

k++;

if(k%5==0)

printf("\n");

}

}

return 0;

}

int fun(int n)

{

int i=0;

while(n>0)

{

i=i*10+n%10;

n=n/10;

}return i;

}

P47

3

进制转换

#include

void trans(int n,int base);

int main()

{

int n,base;

printf("

请输入要转换的十进制数:

");

scanf("%d",&n);

printf("

请输入转换的进制:

");

scanf("%d",&base);

trans(n,base);

printf("\n");

return 0;

}

(方法一)

void trans(int n,int base)

{

if(n)

{

trans(n/base,base);

if(n%base>=10)

switch(n%base)

{

case 10:printf("A");break;

case 11:printf("B");break;

case 12:printf("C");break;

case 13:printf("D");break;

case 14:printf("E");break;

case 15:printf("F");break;

}

else

printf("%d",n%base);

}

}

(方法二)

void trans(int n,int base)

{

int r;