1、#include <stdio.h>
int gcd(int a,int b)
{
if(!(a%b))
return b;
else return gcd(b,a%b);
}
int main(void)
{
int x,y,z;
printf("please input two positive integer number:\n");
scanf("%d %d",&x,&y);
if(!(x>0&&y>0))
{
printf("Only for positive integer number\n");
scanf("%d %d",&x,&y);
}
z=gcd(x,y);
printf("The greatest common divisor of %d and %d is %d\n",x,y,z);
return 0;
}
2、#include <stdio.h>
int fib(int n)
{
if(n==0||n==1)
return 1;
else return fib(n-1)+fib(n-2);
}
int main(void)
{
int n,z;
printf("Please input the number of fib(n>=0):\n");
scanf("%d",&n);
if(n<0)
{
printf("only for >=0 integer number\n");
scanf("%d",&n);
}
z=fib(n);
printf("The fib(%d) is %d.\n",n,z);
return 0;
}Euclid 描述是gcd(a,b)表示非负整数a,b的最大公因数,那么:gcd(a,b)=gcd(b,a%b)或者gcd(a,0)=gcd(0,a)=a
呵呵,也可以的,我提的是正整数,你提的是非负整数,对于初学者来说还是正整数好理解一些
#include<stdio.h>
#include<math.h>
int Euclid(int a,int b){
if (a%b==0)
return b;
else
return Euclid(b,a%b);
}
int main(void){
int result0=Euclid(8,4);
int result1=Euclid(10,4);
printf("The factorial is %d\n",result0);
printf("The factorial is %d\n",result1);
return 0;
}#include<stdio.h>
#include<math.h>
int fib(int n){
if ( n==0 || n==1)
return 1;
else
{int lame1=fib(n-1);
int lame2=fib(n-2);
int result=lame1+lame2;
return result;
}
}
int main(void){
int result=fib(4);
printf("The Fibonacci is %d\n",result);
return 0;
}#include <stdio.h>
int function(int a,int b)
{int gdc;
if (a%b==0)
gdc=b;
else
gdc=function(b,a%b);
return gdc;
}
int main(void)
{int m,n;
printf("please input two integer number:\n");
scanf("%d,%d",&m,&n);
if(m>0&&n>0)
m=function(m,n);
else
{printf("please input two integer number:\n");
scanf("%d,%d",&m,&n);
}
printf("m=%d\n",m);
return 0;
}
证明: 假如a除以b能整除,则最大公约数是b,证明完成 否则 不妨假设a > b a = k*b + a%b (1) 1.b和a%b大公约数是c 则c可以整除a,根据式(1) 2.没有比c更大的数是a和b大约数了 假如有,为d,d > c,那么d可以整除a,可以整除b,那么根据式(1),d可以整除a%b,那么d是b和a%b的约数,所以d <= c,矛盾,因此没有比c更大的
#include <stdio.h>
int Euclid(int a, int b);
int main(void)
{
int a, b;
scanf("%d", &a);
scanf("%d", &b);
printf("a = %d , b = %d , GCD = %d \n", a, b, Euclid(a,b));
return 0;
}
int Euclid(int a, int b)
{
if( a % b == 0)
return b;
else
return Euclid(b, a % b);
}
修改了一下,是精简过了的。
#include <stdio.h>
int Euclid(int a, int b);
int fib(int n);
int main(void)
{
int a, b;
scanf("%d", &a);
scanf("%d", &b);
printf("a = %d , b = %d , GCD = %d \nFibonacci number is %d\n", a, b, Euclid(a,b),fib(Euclid(a,b)));
return 0;
}
int Euclid(int a, int b)
{
if( a % b == 0)
return b;
else
return Euclid(b, a % b);
}
int fib(int n)
{
if( n == 0 || n == 1 )
return 1;
else
return fib(n-1)+fib(n-2);
}
老师让用递归的思路写 而且要规范 标准化
//1
#include <stdio.h>
int gcd(int a, int b)
{
int x = a % b;
if(x == 0)
return b;
else
return gcd(b, x);
}
int main(void)
{
int a, b, num;
scanf("%d %d", &a, &b);
num = gcd(a, b);
printf("The greatest common divisor is %d.\n", num);
return 0;
}
~
//2
#include <stdio.h>
int fib(int num)
{
if(num == 0)
return 1;
else if (num == 1)
return 1;
else
return ( fib(num - 1) + fib(num - 2) );
}
int main()
{
int x, y;
scanf("%d", &x);
y = fib(x);
printf("The Fibonacci array's %d value is %d.\n", x, y);
~ return 0;
} 虫子 xusulong@gmail.com 2009-11-28 21:58:50 证明: 假如a除以b能整除,则最大公约数是b,证明完成 否则 不妨假设a > b a = k*b + a%b (1) 1.b和a%b大公约数是c 则c可以整除a,根据式(1) 2.没有比c更大的数是a和b大约数了 假如有,为d,d > c,那么d可以整除a,可以整除b,那么根据式(1),d可以整除a%b,那么d是b和a%b的约数,所以d <= c,矛盾,因此没有比c更大的 虫子哥们,你没有写出来怎么证明 1.b和a%b大公约数是则c可以整除a,根据式(1)
# include "stdio.h"
int GCD(int a, int b) {
if(0 == a % b) {
return b;
}
else {
return GCD(b, a % b);
}
}
int main(void) {
int x = 0, y = 0, result = 0;
scanf("%d %d", &x, &y);
result = GCD(x, y);
printf("The greatest common divisor is %d\n", result);
}
int fib(int n) {
if(0 == n) {
return 1;
}
if(1 == n) {
return 1;
}
else {
return fib(n - 1) + fib(n - 2);
}
}
int main(void) {
int num = 0, result = 0;
scanf("%d", &num);
result = fib(num);
printf("The Fibonacci of n is %d\n", result);
}
宋老师,您好: 很高兴有贵教材可以参照学习C语言,在这里向您致谢! 同时,也指出一处错误:Fibonacci数列中首项值应该是 f(0)=0. 再次向您致谢!
奇谭,是你错了,宋的书,没错,建议你google一下f(0)=1.
这些代码你们都验证过了吗? 我怎么运行的时候总是出现 devide error
如果您有建设性意见,哪怕只是纠正一个错别字,也请不吝赐教,您留下的姓名和email将会出现在本书前言的致谢中。再次感谢您的宝贵意见!