7.5
#include<stdio.h>
void fact()
{
int n,i,j,sum=1;
printf ("请输入一个正整数n:");
scanf ("%d",&n);
for (i=1;i<=n;i++)
{
sum=sum*i;
printf ("%d阶乘为%d",i,sum);
printf ("\n");
}
}
int main()
{
int n;
fact (n);
return 0;
}
7.6
#include<stdio.h>
void fact()
{
int n,i,j;
int term=0,sum=1;
printf ("请输入一个正整数n:");
scanf ("%d",&n);
for (i=1;i<=n;i++)
{
sum=sum*i;
term=term+sum;
}
printf ("%d的阶乘之和为%d",n,term);
}
int main()
{
int n;
fact (n);
return 0;
}
小结:第五题和第六题差别不大,将第五题的阶乘之和加起来就我第六题的程序。
7.7
(1).穷举法
#include<stdio.h>
void gcd(int a,int b)
{
int t;
printf ("请输入两个正整数a,b:");
scanf ("%d %d",&a,&b);
if (a>b)
{
t=b;
while(a%t!=0 || b%t!=0)
{
t--;
}
printf ("最大公约数为%d",t);
}
if (b>a)
{
t=a;
while(b%t!=0 || a%t!=0)
{
t--;
}
printf ("最大公约数为%d",t);
}
}
int main()
{
int a,b;
gcd (a,b);
return 0;
}
(2)欧几里得算法
#include<stdio.h>
void gcd(int a,int b)
{
int r,c;
printf ("请输入两个正整数a,b:");
scanf ("%d %d",&a,&b);
if (b>a)
{
c=a;
a=b;
b=c;
}
while (r!=0)
{
r=a%b;
if (r==0)
printf ("最大公约数为%d",b);
if (r!=0)
{
a=b;
b=r;
}
}
}
int main()
{
int a,b;
gcd (a,b);
return 0;
}
(3)递归方法
小结:方法1“穷举法”原理比较简单,让人很容易的知道求最大公约数的原理,但是计算较为繁琐,需要运行很多步才能得到结果。
方法2“欧几里得算法”通过辗转相除的方法使得运算步骤大大减小,但也对算法的理解有了一定的要求。
方法3 暂时不能理解其运算原理,所以不能写出。