求两个整数的最大公约数,算法原理辗转相除法 原理: GCD (x,y) = GCD(y,x%y)

若求:最小公陪数= X*Y / GCD(X,Y)
#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
//递归
int gcd1( int m, int n)
{
	int r;
	if(0==(r=m%n)) return n;
	return gcd1(n,r);
}
//非递归
int gcd2(int m,int n)
{
	while(m!=0 && n!=0)
	{
		if(m>n) m%=n;
		else n%=m;
	}
	return m==0 ? n : m;
}
int main(void) {
	int m=128;
	int n=68;
	printf("%d\n",gcd2(m,n));
	printf("%d\n",gcd1(m,n));
	return 0;
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第十章 函数 10.1 理解函数 C语言函数是程序中对分解与抽象思想的实现。C语言把大段的程序代码按照功能分解开,体现出对重复使用的程序段的抽象。 例:任意两个整数最大公约数GCD)和最小公倍数(LCM)。 /*最大公约数辗转相除法*/ #include<stdio.h> int main() { int i1,i2,i3,i4,gcd,lcm,temp; printf("Input i1 and i2:"); scanf("%d%d",&i1;,&i2;); i3=i1; i4=i2; temp=i2; while(temp!=0) { temp=i1%i2; i1=i2; i2=temp; } gcd=i1; lcm=i3*i4/gcd; printf("最大公约数:%d\n最小公倍数:%d\n",gcd,lcm); return 0; } 例:利用函数分解任意两个整数最大公约数GCD)和最小公倍数(LCM)。 /*利用函数分解任意两个整数最大公约数GCD)和最小公倍数(LCM)*/ #include<stdio.h> int gcd(int i1,int i2); int lcm(int i1,int i2); int gcd(int i1,int i2) { int temp; temp=i2; while(temp!=0) { temp=i1%i2; i1=i2; i2=temp; } return i1; } int lcm(int i1,int i2) { return i1*i2/gcd(i1,i2); } int main() { int i1,i2; printf("Input i1 and i2:"); scanf("%d%d",&i1;,&i2;); printf("最大公约数:%d\n最小公倍数:%d\n",gcd(i1,i2),lcm(i1,i2)); return 0; } C程序结构: (1)一个C程序可以由多个模块构成,每个模块可由若干个小模块构成,继续分解,直到分解成不可分割的最小模块单元为止,最小模块单元即为一个函数。C程序由多个函数构成。每个函数可以单独放在一个文件中,也可以将若干个功能相关的函数放在一个文件中,C语言程序可以由多个文件组成,文件负责组织存放若干函数。 (2)源程序文件是C程序的编译单位,每个文件单独编译,便于调试,方便团队开发。 (3)main函数是程序执行的入口,main函数可以调用其他函数,其他函数调用结束后要返回main函数,main函数执行完毕,整个程序就结束了。 (4)main函数可以出现在任何位置,其他函数的位置也不是强制的,每个函数有且仅有一个main函数。 (5)C程序的所有函数都是平行定义的,在一个函数内部不允许定义另外的函数,函数可以互相调用,也可以调用自己,但是不能调用main函数。 10.2 函数定义和分类 10.2.1 函数定义 函数定义的一般形式: 1.无参函数的一般形式: 类型说明符 函数名() { 声明部分; 执行语句部分; } 例:输出当前时间。 #include<stdio.h> #include<time.h> /*showTime函数返回1979年1月1日0时0分0秒到当前的秒数*/ long showTime() { long lct; lct=time(0); /*time(0)返回1979年1月1日0时0分0秒到当前的秒数*/ return lct; } int main() { long lCurTime=showTime(); printf("%ld",lCurTime); return 0; } 函数由函数首部和函数体两部分构成。 (1)函数首部 函数首部包括类型说明符、函数名、形式参数。类型说明符指明了函数的类型,函数的类型实际上是函数返回值的类型。函数名是由用户自定义的标识符,函数名后有一个括号,无参函数的函数名括号中没有参数,但括号不可少。 (2)函数体 {}中的内容称为函数体。函数体包括声明部分和执行语句部分。声明部分对函数体内部用到的变量和函数的类型进行声明,执行语句部分是函数对数据进行加工完成函数功能的部分。 2.有参函数的一般形式: 类型说明符 函数名(形式参数表) { 声明部分; 执行语句部分; } 有参函数比无参函数多了形式参数表,形式参数表的格式为: 类型1 形参变量1,类型2 形参变量2,类型3 形参变量3,···,类型n 形参变量n 形参表中的变量称为形式参数,各参数之间用逗号间隔。在进行函数调用时,主调函数赋予形参实际的值。形参是变量,必须给以类型说明。 10.2.2 函数分类 从函数定义的角度看,函数可分为库函数和用户自定义函数。 (1)库函数:由C系统提供,用户无需定义,也不必在程序中作类型说明,只需在程序前包含该函数原型的头文件即可在程序中直接调用。如printf、scanf、sqrt等。 (2)用户定义函数:由用户按需要写的函数。对于用户自定义函数,不仅要在程序中定义函数本身,通常在主调函数模块中还必须对该被调函数进行类型说明,然后才能使用。被调函数与主调函数在同一文件中且被调函数在主调函数之前定义,可以不进行类型声明。 C语言的函数兼有其他语言中的函数和过程两种功能,可把函数分为有返回值函数和无返回值函数两种。 (1)有返回值函数:有返回值函数被调用执行完后向调用者返回一个执行结果,称为函数返回值。用户定义的需要返回函数值的函数,必须在函数定义和函数说明中明确返回值类型。 (2)无返回值函数:无返回值函数用于完成特定的处理任务,执行完成后不向调用者返回函数值。这类函数类似于其他语言的过程。用户定义无返回值函数时可指定函数的返回为“空类型”,空类型说明符为void。 例:输出当前时间。 #include<stdio.h> #include<time.h> /*showTime函数返回1979年1月1日0时0分0秒到当前的秒数*/ void showTime() { long lct; lct=time(0); /*time(0)返回1979年1月1日0时0分0秒到当前的秒数*/ printf("%ld",lct); } int main() { showTime(); return 0; }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值