c语言程序设计方案求两个数最大公约数

合集下载

c语言求最大公约数算法

c语言求最大公约数算法

c语言求最大公约数算法最大公约数(gcd,又称最大公因数、最大公因子、最大公测量、最大公公约)指的是两个或多个整数共有约数中最大的一个。

在数学里面,求最大公约数是很常见的问题。

在计算机科学中,求最大公约数也是一个经典的算法问题。

而C语言作为一门流行的编程语言,也提供了多种方法来求解最大公约数。

下面将介绍四种常见的求最大公约数的算法:欧几里德算法、辗转相除法、更相减损法和迭代法。

1.欧几里德算法欧几里德算法(Euclidean algorithm)是一种辗转相除法,用于求两个正整数的最大公约数。

它基于以下原理:两个整数的最大公约数等于其中较小的数和两数的差的最大公约数。

具体的算法如下:```cint gcd(int a, int b) {if (b == 0) {return a;} else {return gcd(b, a % b);}}```该算法使用递归的方式求解最大公约数,当b等于0时,a即为最大公约数;否则递归调用gcd函数,传入参数b和a mod b。

2.辗转相除法辗转相除法(也称作长除法)是一种用于求两个正整数的最大公约数的算法。

它的基本思想是:用较大的数除以较小的数,然后再用除数除以余数,依次循环,直到余数为0为止。

最后一个除数即为最大公约数。

具体的算法如下:```cint gcd(int a, int b) {while (b != 0) {int temp = b;b = a % b;a = temp;}return a;}```该算法使用循环的方式求解最大公约数,直到b等于0为止。

每次循环将b和a mod b的值赋给a和b,直到b等于0,此时a即为最大公约数。

3.更相减损法更相减损法是一种古老的求最大公约数的方法,其基本思想是:用两个数中较大的数减去较小的数,然后用得到的差与原较小的数继续相减,直到得到结果为止。

最后的结果就是最大公约数。

具体的算法如下:```cint gcd(int a, int b) {while (a != b) {if (a > b) {a -= b;} else {b -= a;}}return a;}该算法使用循环的方式求解最大公约数,直到a等于b为止。

c语言最大公约数和最小公倍数的求法

c语言最大公约数和最小公倍数的求法

c语言最大公约数和最小公倍数的求法以C语言最大公约数和最小公倍数的求法为标题,本文将介绍如何使用C语言来计算两个数的最大公约数和最小公倍数。

最大公约数(Greatest Common Divisor,简称GCD)是指两个或多个整数共有的约数中最大的一个。

最小公倍数(Least Common Multiple,简称LCM)是指两个或多个整数公有的倍数中最小的一个。

我们来讨论如何计算两个数的最大公约数。

常见的求解最大公约数的方法有辗转相除法、欧几里得算法和更相减损法。

其中,辗转相除法是最常用且最简单的方法。

辗转相除法的思想是用较大的数除以较小的数,然后用得到的余数再去除以较小的数,直到余数为0为止。

最后一次的除数即为最大公约数。

下面是使用C语言编写的辗转相除法求最大公约数的代码:```#include <stdio.h>int gcd(int a, int b) {if (b == 0) {return a;} else {return gcd(b, a % b);}}int main() {int num1, num2;printf("请输入两个整数:");scanf("%d %d", &num1, &num2);printf("最大公约数为:%d\n", gcd(num1, num2));return 0;}```代码中的`gcd`函数用于计算最大公约数,通过递归调用实现了辗转相除法。

`main`函数用于获取用户输入的两个整数,并调用`gcd`函数来计算最大公约数。

接下来,我们来讨论如何计算两个数的最小公倍数。

常见的求解最小公倍数的方法有通过最大公约数求解和直接计算两个数的乘积再除以最大公约数。

我们先介绍通过最大公约数求解最小公倍数的方法。

最小公倍数可以通过两个数之积除以最大公约数得到。

因此,我们只需要在上述的代码基础上进行一些修改即可:```#include <stdio.h>int gcd(int a, int b) {if (b == 0) {return a;} else {return gcd(b, a % b);}}int lcm(int a, int b) {int gcd_num = gcd(a, b);return (a * b) / gcd_num;}int main() {int num1, num2;printf("请输入两个整数:");scanf("%d %d", &num1, &num2);printf("最大公约数为:%d\n", gcd(num1, num2)); printf("最小公倍数为:%d\n", lcm(num1, num2));return 0;}```在上述代码中,我们新增了一个`lcm`函数用于计算最小公倍数,该函数先调用`gcd`函数获得最大公约数,然后通过两个数之积除以最大公约数来计算最小公倍数。

c语言最大公约数和最小公倍数的求法

c语言最大公约数和最小公倍数的求法

c语言最大公约数和最小公倍数的求法C语言是一种广泛使用的编程语言,也是许多初学者入门的第一门编程语言。

在C语言中,求最大公约数和最小公倍数是常见的问题。

本文将介绍C语言中求解最大公约数和最小公倍数的方法。

1. 求最大公约数最大公约数(Greatest Common Divisor,简称GCD)是指两个或多个整数共有约数中最大的一个。

在C语言中,我们可以使用辗转相除法来求解两个整数的最大公约数。

辗转相除法的基本思想是:用较大的数除以较小的数,再用余数作被除数,继续进行相同的操作,直到余数为0为止。

此时,被除数即为这两个整数的最大公约数。

下面是使用辗转相除法求解两个整数a和b的最大公约数gcd(a,b)的C语言代码:```cint gcd(int a, int b) {if (b == 0) {return a;} else {return gcd(b, a % b);}}```上述代码中使用了递归调用来实现辗转相除法。

当b等于0时,a即为所求最大公约数;否则将b和a%b作为新的参数继续递归调用。

2. 求最小公倍数最小公倍数(Least Common Multiple,简称LCM)是指两个或多个整数公有的倍数中最小的一个。

在C语言中,我们可以使用最大公约数来求解两个整数的最小公倍数。

根据最大公约数和最小公倍数的关系,可得:lcm(a,b) = a * b / gcd(a,b)因此,我们可以先求出a和b的最大公约数,然后用a和b的乘积除以最大公约数即可得到它们的最小公倍数。

下面是求解两个整数a和b的最小公倍数lcm(a,b)的C语言代码:```cint lcm(int a, int b) {return a * b / gcd(a, b);}```上述代码中直接调用了上面介绍的gcd函数来求出a和b的最大公约数,并返回它们的乘积除以最大公约数。

总结本文介绍了C语言中求解两个整数的最大公约数和最小公倍数的方法。

c语言辗转相除法求最大公约数和最小公倍数

c语言辗转相除法求最大公约数和最小公倍数
return 0;
}
}
int main() {
int a, b;
printf("请输入两个正整数:");
scanf("%d %d", &a, &b);
printf("%d和%d的最大公约数是:%d\n", a, b, gcd(a, b));
printf("%d和%d的最小公倍数是:%d\n", a, b, lcm(a, b));
辗转相除法(又称欧几里得算法)是一种求两个数的最大公约数的方法,它的基本思想是通过反复用较小的数去除较大的数,直到两个数相等为止,此时的这个数就是两个数的最大公约数。根据最大公约数和最小公倍数的关系,最小公倍数可以通过两个数的积除以它们的最大公约数得到。以下是使用C语言实现辗转相除法求最大公约数和最小公倍数的示例代码:
#include <stdio.h>// Nhomakorabea最大公约数
int gcd(int a, int b) {
int t;
while (b != 0) {
t = a % b;
a = b;
b = t;
}
return a;
}
//求最小公倍数
int lcm(int a, int b) {
return a * b / gcd(a, b);

c语言最大公约数和最小公倍数辗转相除for语句

c语言最大公约数和最小公倍数辗转相除for语句

C语言是一种广泛使用的编程语言,它有许多强大的特性,可以用来解决各种问题。

其中,求最大公约数和最小公倍数是一个常见的数学问题,而C语言中的辗转相除法和for语句可以很好地解决这个问题。

辗转相除法,又称欧几里德算法,是一种用于求解两个整数的最大公约数的方法。

我们用被除数除以除数,得到商和余数;将除数作为新的被除数,余数作为新的除数,重复这个过程,直到余数为0,这时除数就是最大公约数。

在C语言中,我们可以通过使用while循环来实现辗转相除法。

而for语句是C语言中的一种循环结构,用于重复执行一段代码若干次。

结合辗转相除法和for语句,我们可以很方便地求解最大公约数和最小公倍数。

接下来,我们将详细介绍如何在C语言中使用辗转相除法和for语句来求解最大公约数和最小公倍数。

1. 辗转相除法求最大公约数在C语言中,我们可以使用辗转相除法来求解两个整数的最大公约数。

下面是一个示例代码:```c#include <stdio.h>int gcd(int a, int b) {while (b != 0) {int temp = a b;a = b;b = temp;}return a;}int m本人n() {int x, y;printf("请输入两个整数:");scanf("d d", x, y);int result = gcd(x, y);printf("最大公约数是:d\n", result);return 0;}```在这段代码中,我们首先定义了一个名为gcd的函数,它接受两个整数参数a和b,返回它们的最大公约数。

在函数体内,我们使用while循环来不断执行辗转相除法的步骤,直到b为0,此时a就是最大公约数。

在m本人n函数中,我们首先从用户输入中获取两个整数,然后调用gcd函数求解它们的最大公约数,并输出结果。

2. 辗转相除法求最小公倍数除了最大公约数,辗转相除法也可以求解两个整数的最小公倍数。

c语言循环结构求最大公约数和最小公倍数

c语言循环结构求最大公约数和最小公倍数

c语言循环结构求最大公约数和最小公倍数下载提示:该文档是本店铺精心编制而成的,希望大家下载后,能够帮助大家解决实际问题。

文档下载后可定制修改,请根据实际需要进行调整和使用,谢谢!本店铺为大家提供各种类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by this editor. I hope that after you download it, it can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you! In addition, this shop provides you with various types of practical materials, such as educational essays, diary appreciation, sentence excerpts, ancient poems, classic articles, topic composition, work summary, word parsing, copy excerpts, other materials and so on, want to know different data formats and writing methods, please pay attention!C语言循环结构求最大公约数和最小公倍数在日常生活和数学计算中,经常会涉及到最大公约数和最小公倍数的计算。

相减法求最大公约数c语言

相减法求最大公约数c语言

相减法求最大公约数c语言引言在计算机科学中,最大公约数(Greatest Common Divisor,简称GCD)是一种常见的数学问题。

最大公约数是指两个或多个整数共有的最大因子。

而相减法是一种求解最大公约数的方法之一。

本文将详细介绍相减法在C语言中的实现。

相减法原理相减法是一种基于辗转相减的方法来计算两个整数的最大公约数。

具体步骤如下:1. 如果两个数相等,则它们的值就是最大公约数。

2. 如果两个数不相等,用较大的数减去较小的数,然后再用差值与较小的数比较,直到两个数相等。

这个相等的数就是最大公约数。

C语言实现在C语言中,可以使用循环语句和条件语句来实现相减法求最大公约数。

函数原型首先,我们需要定义一个函数原型来声明相减法求最大公约数的函数。

函数原型如下:int gcd(int a, int b);函数实现接下来,我们用C语言实现相减法求最大公约数的函数。

函数实现如下:int gcd(int a, int b){while (a != b){if (a > b)a -= b;elseb -= a;}return a;}函数调用最后,我们在main函数中调用gcd函数来测试相减法求最大公约数的功能。

函数调用示例如下:int main(){int a = 24;int b = 36;int result = gcd(a, b);printf("最大公约数是:%d\n", result);return 0;}应用举例在实际应用中,相减法求最大公约数可以用于解决一些数学问题。

以下是一些应用举例:分数化简有时候我们需要将一个分数进行化简,即将分子和分母的最大公约数约去。

例如,化简3/9,我们可以先求出最大公约数,然后将分子和分母同时除以最大公约数得到化简后的分数。

钢琴音程计算在音乐理论中,钢琴音程计算要用到最大公约数。

当需要计算两个音的音程时,可以用较高的音的频率除以较低的音的频率,然后将结果约至最简即可得到音程。

求两个正整数的最大公约数c语言程序

求两个正整数的最大公约数c语言程序

求两个正整数的最大公约数c语言程序下载提示:该文档是本店铺精心编制而成的,希望大家下载后,能够帮助大家解决实际问题。

文档下载后可定制修改,请根据实际需要进行调整和使用,谢谢!本店铺为大家提供各种类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by this editor. I hope that after you download it, it can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you! In addition, this shop provides you with various types of practical materials, such as educational essays, diary appreciation, sentence excerpts, ancient poems, classic articles, topic composition, work summary, word parsing, copy excerpts, other materials and so on, want to know different data formats and writing methods, please pay attention!寻找两个正整数的最大公约数:一个简单的 C 语言程序在数学中,最大公约数(Greatest Common Divisor,简称 GCD)是两个或多个整数的最大共同因子。

C语言输入两个正整数m和n求其最大公约数和最小公倍数

C语言输入两个正整数m和n求其最大公约数和最小公倍数

C语言输入两个正整数m和n求其最大公约数和最小公倍数输入两个正整数m和n, 求其最大公约数和最小公倍数. <1> 用辗转相除法求最大公约数算法描述: m对n求余为a, 若a 不等于0 则m <- n, n <- a, 继续求余否则n 为最大公约数<2> 最小公倍数= 两个数的积/ 最大公约数#include int main(){int m, n; int m_cup, n_cup, res; /*被除数, 除数, 余数*/printf("Enter two integer:\n");scanf("%d %d", &m, &n);if (m > 0 && n >0){m_cup = m;n_cup = n;res = m_cup % n_cup;while (res != 0){m_cup = n_cup;n_cup = res;res = m_cup % n_cup;}printf("Greatest common divisor: %d\n", n_cup);printf("Lease common multiple : %d\n", m * n / n_cup);}else printf("Error!\n");return 0;}★关于辗转相除法, 搜了一下, 在我国古代的《九章算术》中就有记载,现摘录如下: 约分术曰:“可半者半之,不可半者,副置分母、子之数,以少减多,更相减损,求其等也。

以等数约之。

” 其中所说的“等数”,就是最大公约数。

求“等数”的办法是“更相减损”法,实际上就是辗转相除法。

辗转相除法求最大公约数,是一种比较好的方法,比较快。

对于52317和75569两个数,你能迅速地求出它们的最大公约数吗?一般来说你会找一找公共的使因子,这题可麻烦了,不好找,质因子大。

最大公倍数c语言

最大公倍数c语言

最大公倍数c语言
在C语言中,可以使用欧几里得算法(辗转相除法)来计算两个数的最大公约数(GCD),然后使用公式 `两数乘积 / GCD(两数)` 来计算它们的最大公倍数(LCM)。

以下是一个简单的C语言程序,用于计算两个整数的最大公倍数:
```c
include <>
// 计算最大公约数
int gcd(int a, int b) {
if (b == 0) {
return a;
} else {
return gcd(b, a % b);
}
}
// 计算最大公倍数
int lcm(int a, int b) {
return (a b) / gcd(a, b);
}
int main() {
int num1, num2;
printf("请输入两个整数:");
scanf("%d %d", &num1, &num2);
printf("%d 和 %d 的最大公倍数是 %d\n", num1, num2, lcm(num1, num2));
return 0;
}
```
在这个程序中,我们首先定义了一个 `gcd` 函数,用于计算两个整数的最大公约数。

然后,我们定义了一个 `lcm` 函数,用于计算两个整数的最大公倍数。

最后,在 `main` 函数中,我们使用 `scanf` 函数从用户输入中读取两个整数,并使用 `lcm` 函数计算它们的最大公倍数,然后输出结果。

C语言课程设计 编写函数,求取两个整数m,n的最大公约数和最小公倍数

C语言课程设计 编写函数,求取两个整数m,n的最大公约数和最小公倍数

C语言课程设计专业:电气工程及其自动化班级:电气11姓名:学号:指导教师:兰州交通大学自动化与电气工程学院2012 年7月6日C程序设计课程设计报告1 基本题目1.1题目编写函数,求取两个整数m,n的最大公约数和最小公倍数。

1.2 题目分析图1 程序流程图1.3 程序# include<stdio.h>int max(int a,int b);int main(){printf("请输入两个整数");int m,n,p;scanf("%d%d",&m,&n);p=m*n;printf("最大公约数为:%d最小公倍数为:%d\n",max(m,n),p/max(m,n));return 0;}int max(int a,int b){int c;while (a!=b){if(a<b){c=a;a=b;b=c;}a=a-b;}return b;}1.4 程序的运行结果图2 基本题目运行结果2 改错题目2.1 改正后程序#include <stdio.h>#include <conio.h>main(){int i=0,j;char ch;while((ch=getch())!='\r'){i++;C程序设计课程设计报告printf("%c",ch);}printf("you type %d characters\n",i);}2.2 程序运行结果图3 正确程序运行结果3 综合题目3.1 题目综合题目为:《班级通讯录》。

3.2 数据结构对上述题目进行分析,定义结构体数据结构如下:struct Person{char name[10]; //姓名char num[15]; //号码char age[8]; //年龄char adds[20]; //住址struct Person *next;};3.3 程序的主要功能通过该系统实现对通讯录信息进行录入、显示、修改、删除、排序、保存等操作的管理。

使用欧几里得算法计算两个正整数的最大公约数c语言

使用欧几里得算法计算两个正整数的最大公约数c语言

使用欧几里得算法计算两个正整数的最大公约数c语言使用欧几里得算法计算两个正整数的最大公约数是计算机领域中的经典问题之一,尤其在c语言中,这一算法广泛应用。

本文将探讨欧几里得算法的原理和实现方法,并深入介绍在c语言中如何编写代码来实现这一计算过程。

一、欧几里得算法原理欧几里得算法,又称辗转相除法,是一种用于计算两个正整数的最大公约数的算法。

其原理非常简单,即通过反复用较大数除以较小数,然后用除数去除余数,直至余数为0时,除数即为这两个正整数的最大公约数。

二、欧几里得算法实现在c语言中,可以通过递归或迭代的方式来实现欧几里得算法。

下面分别介绍这两种实现方法。

1. 递归实现递归是一种简洁而优雅的解决问题的方式,对于欧几里得算法也同样适用。

以下是c语言中使用递归实现欧几里得算法的代码示例:```cint gcd(int a, int b) {if (b == 0) {return a;} else {return gcd(b, a % b);}}```在这段代码中,函数gcd接受两个正整数参数a和b,返回它们的最大公约数。

当b等于0时,即找到了最大公约数,返回a的值;否则,递归调用gcd函数,传入参数为b和a除以b的余数。

2. 迭代实现除了递归,欧几里得算法还可以通过迭代的方式进行实现。

以下是c语言中使用迭代实现欧几里得算法的代码示例:```cint gcd(int a, int b) {while (b != 0) {int temp = a % b;a = b;b = temp;}return a;}```在这段代码中,使用while循环来不断更新a和b的值,直至b等于0,最终a的值就是这两个正整数的最大公约数。

三、个人观点欧几里得算法作为计算最大公约数的经典算法,不仅在c语言中得到了广泛的应用,也为其他编程语言提供了宝贵的思路。

其简洁、高效的特点使之成为解决相关问题的首选算法之一。

在实际开发中,对欧几里得算法的理解和掌握能够帮助我们更好地应对相关计算问题,提高代码的执行效率和性能。

C语言程序设计100例之(10):最大公约数

C语言程序设计100例之(10):最大公约数
Output
For each test case in the input print "The CEO must bring X pounds.", where X is as described above or "Too much money to pay!" if X is 1000000 or more.
If STEP = 15 and MOD = 20, the function generates the series 0, 15, 10, 5 (or any other repeating series if the initial seed is other than 0). This is a poor selection of STEP and MOD because no initial seed will generate all of the numbers from 0 and MOD-1.
{
int t,a,b,c;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&a,&b);
c=2*b;
while(gcd(a,c)!=b)
c+=b;
printf("%d\n",c);
}
return 0;
}
习题
10-1
本题选自杭州电子科技大学OJ题库(/showproblem.php?pid=1014)
Description
The CEO of ACM (Association of Cryptographic Mavericks) organization has invited all of his teams to the annual all-hands meeting, being a very disciplined person, the CEO decided to give a money award to the first team that shows up to the meeting.

【C语言】写一个函数,并调用该函数求两个整数的最大公约数和最小公倍数

【C语言】写一个函数,并调用该函数求两个整数的最大公约数和最小公倍数

【C语⾔】写⼀个函数,并调⽤该函数求两个整数的最⼤公约数和最⼩公倍数程序分析:
在数学中,两个数的最⼩公倍数=两个数的乘积/两数的最⼤公约数。

求两个数的最⼤公约数,运⽤辗转相除法:已知两个整数M和N,假定M>N,则求M%N。

如果余数为0,则N即为所求;如果余数不为0,⽤N除,再求其余数。

直到余数为0,则除数就是M和N的最⼤公约数代码:
#include<stdio.h>
int gcd(int a, int b)/*求最⼤公约数*/
{
int r, t;
if(a<b)
{
t = a;
a = b;
b = t;
}
r = a % b;
while(r != 0)/*辗转相除法*/
{
a = b;
b = r;
r = a % b;
}
return b;
}
int lcm(int a, int b)/*求最⼩公倍数*/
{
int r;
r = gcd(a, b);
return(a * b / r);
}
int main()
{
int x, y;
printf("请输⼊两个整数:\n");
scanf_s("%d %d", &x, &y);
printf("两个整数最⼤公约数为:%d\n", gcd(x, y));
printf("两个数最⼩公倍数为:%d\n", lcm(x, y));
return 0;
}。

for循环求最大公约数c语言

for循环求最大公约数c语言

题目:for循环求最大公约数C语言内容:1.概述C语言作为一门广泛使用的编程语言,在实际开发中经常需要求解最大公约数。

本文将介绍如何使用C语言中的for循环来求解最大公约数的方法。

2.最大公约数的定义最大公约数是指两个或多个整数共有约数中最大的那个。

整数12和18的最大公约数是6。

3.最大公约数的求解方法求解最大公约数有多种方法,如辗转相除法、更相减损法、辗转相减法等。

本文将使用for循环来实现求解最大公约数的功能。

4.for循环求最大公约数的具体实现```c#include <stdio.h>int m本人n() {int a, b, temp, i, gcd;printf("输入两个整数:");scanf("d d", a, b);for (i = 1; i <= a i <= b; i++) {if (a i == 0 b i == 0) {gcd = i;}}printf("d和d的最大公约数是:d", a, b, gcd);return 0;}```5.代码解析- 声明了变量a、b、temp、i和gcd,分别表示输入的两个整数、临时变量、for循环的计数变量和最大公约数变量。

- 通过scanf函数输入两个整数a和b。

- 使用for循环从1到a和b中较小的那个数进行遍历。

- 在循环中,使用if语句判断当前循环变量是否同时是a和b的约数,如果是,就将这个数赋值给gcd。

- 输出两个整数的最大公约数gcd。

6.代码运行示例输入:12 18输出:12和18的最大公约数是:67.总结通过本文的介绍,读者可以了解到使用for循环求解最大公约数的方法。

这种方法简单直观,适用于求解小范围的整数最大公约数,但在大范围的整数求解中效率较低。

读者可以根据实际需求选择适合的方法来求解最大公约数。

为了更深入地了解for循环求最大公约数的方法,我们需要深入探讨代码中涉及的部分,并对其进行进一步的扩展和讨论。

最大公约数c语言编程while if

最大公约数c语言编程while if

最大公约数c语言编程while if最大公约数是指两个或多个整数共有约数中最大的一个。

在C语言中,我们可以使用while和if语句来编写求最大公约数的程序。

首先,我们需要输入两个整数a和b,然后判断它们的大小关系,将较小的数赋值给变量min,较大的数赋值给变量max。

接下来,我们可以使用while循环来进行求最大公约数的操作。

在循环中,我们先判断min是否等于0,如果是,则最大公约数为max,直接输出即可。

如果min不等于0,则使用if语句判断max是否能够整除min,如果是,则最大公约数为min,直接输出即可。

如果max 不能整除min,则将max赋值为min,将min赋值为max%min,继续进行循环操作,直到min等于0为止。

下面是完整的C语言代码实现:```#include <stdio.h>int main(){int a, b, max, min, temp;printf("请输入两个整数:\n");scanf("%d%d", &a, &b);if (a > b) {max = a;min = b;} else {max = b;min = a;}while (min != 0) {if (max % min == 0) {printf("最大公约数为:%d\n", min); break;} else {temp = max;max = min;min = temp % min;}}return 0;}```在上面的代码中,我们使用了scanf函数来输入两个整数,使用if语句来判断它们的大小关系,使用while循环来进行求最大公约数的操作,使用printf函数来输出结果。

总之,使用while和if语句来编写求最大公约数的程序是比较简单的,只需要注意变量的赋值和循环条件的判断即可。

c语言中用递归法求两个数的最大公约数

c语言中用递归法求两个数的最大公约数

c语言中用递归法求两个数的最大公约数
在C语言中,可以使用递归方法来求两个数的最大公约数(Greatest Common Divisor, GCD)。

这里给出一个基于欧几里得算法(Euclidean Algorithm)的递归实现:
```c
#include <stdio.h>
int gcd(int a, int b) {
// 基本情况:如果b为0,则a是最大公约数
if (b == 0)
return a;
// 递归情况:应用性质1或性质2
else
return gcd(b, a % b);
}
int main() {
int x, y;
printf("请输入两个整数: ");
scanf("%d %d", &x, &y);
printf("所输入两数的最大公约数为: %d\n", gcd(x, y));
return 0;
}
```
在这个程序中,`gcd()`函数接收两个参数 `a` 和 `b`。

它首先检查基本情况,即当 `b` 为0时返回 `a` 作为最大公约数。

否则,它会递归地调用自身,将 `b` 和 `a` 对 `b` 取模的结果作为新的参数。

这个过程会一直持续下去,直到达到基本情况为止。

这种递归实现利用了欧几里得算法的基本原理:对于任何两个正整数 `a` 和 `b`,它们的最大公约数与 `b` 和`a` 除以 `b` 的余数的最大公约数相同。

c语言求两个数的最大公因数(穷举法,欧几里得算法,递归)

c语言求两个数的最大公因数(穷举法,欧几里得算法,递归)

c语⾔求两个数的最⼤公因数(穷举法,欧⼏⾥得算法,递归)/*主函数Gcd为求公因数的函数输⼊为负时返回-1*/int main(){ int a, b; printf("Input a,b:"); scanf("%d,%d",&a,&b); if (a < 0 || b < 0) printf("Input number should be positive!\n"); else printf("Greatest Common Divisor of %d and %d is %d\n",a,b,Gcd(a,b)); return 0;}/*穷举法⼀(欧⼏⾥得)*/int Gcd(int a,int b){ int i,t; if(a<=0 || b<=0) return -1; t=a<b ? a : b; for(i=t;i>0;i--) { if(a%i==0 && b%i==0)return i; } return 1;}/*穷举法⼆*/int Gcd(int a,int b){ int r; if(a<=0 || b<=0) return -1; do { r=a%b; a=b; b=r; }while(r!=0); return a;}/*递归⼀*/int Gcd(int a,int b){ if(a<=0 || b<=0) return -1; if(a%b==0) return b; else return Gcd(b,a%b);}/*递归⼆是根据公因数的如下性质:根据最⼤公约数的如下3条性质,采⽤递归法编写计算最⼤公约数的函数Gcd(),在主函数中调⽤该函数计算并输出从键盘任意输⼊的两正整数的最⼤公约数。

性质1 如果a>b,则a和b与a-b和b的最⼤公约数相同,即Gcd(a, b) = Gcd(a-b, b)性质2 如果b>a,则a和b与a和b-a的最⼤公约数相同,即Gcd(a, b) = Gcd(a, b-a)性质3 如果a=b,则a和b的最⼤公约数与a值和b值相同,即Gcd(a, b) = a = b*//*⾮递归*/int Gcd(int a, int b){ if (a <= 0 || b <= 0) return -1; while (a != b) { if (a > b) a = a - b; else if (b > a) b = b - a; }return a;}/*递归*/int Gcd(int a,int b){ if(a<=0 || b<=0) return 0; if(a==b) return a; else if(a>b) return Gcd(a-b,b); else return Gcd(a,b-a);}。

c语言辗转相除法求最大公约数

c语言辗转相除法求最大公约数

c语言辗转相除法求最大公约数
C语言中辗转相除法是一种求取两个正整数最大公约数(Greatest Common Divisor,GCD)的方法。

它是最简便有效的求解GCD算法之一,也是大多数编程语言求解两个正整数最大公约数的首选方法。


采用的原理是迭代辗转相除法,比较两个正整数m和n(m>n)的大小,如果m>n,则进行m除以n的整除运算,将所得的商作为下一步的被
除数,余数作为下一步的除数,如此迭代下去,直到余数为0,此时所得的商即为最大公约数。

举个例子,求144和12的最大公约数,可以按照以下步骤:先将144
除以12,得到商12,余数是0,说明最大公约数就是12。

如果进行更
多次迭代,就会发现迭代几次后求出的余数都是0,而最后一次的商就是最大公约数。

辗转相除法之所以比较有效,是因为它只需要循环计算的次数少,所
花费的时间短。

因此,它是很多高级应用中用于求取GCD的最常见的
算法之一。

它也可以用来解决任意多个数字的GCD,只需要把第一个
和第二个数字进行辗转相除,然后把得到的余数作为第三个数字,继
续对这三个数字求GCD,不断重复这种方法,就可以求出最终的结果。

C语言中辗转相除法虽然高效,但实践中也遭遇一些问题:由于算法
计算结果的准确性会受到除数的准确性的影响,有时如果除数较大,
计算结果就会出现偏差。

如果要得到更准确的结果,可以采用牛顿迭代法,牛顿迭代法可以获得更加准确的计算结果。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1,写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。

这两个数由键盘输入。

程序设计:
#include<stdio.h>
int hcf(int x,int y)
{int t;
if(x<y)
{t=x;
x=y;
y=t;}
while((t=x%y)!=0)
{x=y;
y=t;}
return y;}
int lcf(int x,int y,int m)
{
return x*y/m;
}
int main()
{int hcf(int,int);
int lcf(int,int,int);
int x,y,h,l;
printf("请输入两个数:");
scanf("%d%d",&x,&y);
h=hcf(x,y);
l=lcf(x,y,h);
printf("最大公约数为:h=%d\n最小公倍数为:l=%d\n",h,l);
return 0;
}
运行结果:
2求方程ax^2+bx+c=0的根,用3个函数分别求当:b^2-4ac大于0、等于0和小于0时的根并输出结果。

从主函数输入a,b,c的值。

程序设计:
#include<stdio.h>
#include<math.h>
void g_two(double a,double b,double c)
{double x1,x2;
x1=(-b+sqrt(b*b-4*a*c))/(2*a);
x2=(-b-sqrt(b*b-4*a*c))/(2*a);
printf("方程的两个根为:x1=%f\nx2=%f\n",x1,x2); }
void g_one(double a,double b,double c)
{double x;
x=(-b)/(2*a);
printf("方程的两个根为:x1=x2=%f\n",x);
}
void g_zone(double a,double b,double c)
{
printf("无解\n");
}
void main()
{void g_two(double,double,double);
void g_one(double,double,double);
void g_zone(double,double,double);
double a,b,c,t;
printf("请输入a、b、c的值:");
scanf("%lf%lf%lf",&a,&b,&c);
t=b*b-4*a*c;
if(t>0)
g_two(a,b,c);
else if(t==0)
g_one(a,b,c);
else
g_zone(a,b,c);
}
运行结果:
3.写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的信息。

程序设计:
#include<stdio.h>
#include<math.h>
int pri(int a)
{int i,m=1;
for(i=2;i<=sqrt((double)a)&&m==1;i++)
{if(a%i==0)
m=0;
}
return m;
}
int main()
{ int pri(int);
int a;
printf("请输入一个整数:");
scanf("%d",&a);
if(pri(a))
printf("该数是素数\n");
else
printf("该数不是素数\n");
return 0;
}
运行结果:
4.写一个函数,使给定的一个(3×3)二维整形数组转置,即行列互换。

程序设计:
#include<stdio.h>
int main()
{void ex(int a[][3],int y);
int i,j,a[3][3];
printf("请输入一个3*3二维整形数组:\n");
for(i=0;i<=2;i++)
{for(j=0;j<=2;j++)
scanf("%d",&a[i][j]);}
ex(a,3);
printf("行列互换后的数组为:\n");
for(i=0;i<3;i++)
{for(j=0;j<3;j++)
printf("%d ",a[i][j]);
printf("\n");}
return 0;
}
void ex(int a[][3],int y)
{int i,j,t;
for(i=0;i<3;i++)
for(j=i;j<3;j++)
{t=a[i][j];
a[i][j]=a[j][i];
a[j][i]=t;}
}
运行结果:
5.写一函数,使输入的一个字符串按反序存放,在主函数中输入输出字符串。

程序设计:
#include<stdio.h>
#include <string.h>
int main()
{void inv(char str[]);
char str[100];
printf("请输入字符串:\n");
scanf("%s",str);
inv(str);
printf("请输出反序后的字符串:\n"); printf("%s\n",str);
return 0;
}
void inv(char str[])
{char t;
int i,j;
for(i=0,j=strlen(str);i<(strlen(str))/2;i++,j--) {t=str[i];
str[i]=str[j-1];
str[j-1]=t;}
}
运行结果:。

相关文档
最新文档