c语言程序设计-求两个数最大公约数
C语言程序设计实践实训报告三

实训报告
实训项目名称:
专业班级:
姓名与学号:
完成时间:年月日
基础项目三:求两个数的最大公约数和最小公倍数(函数知识的巩固)
一、实训目的和要求
1、掌握选择结构、循环结构程序设计方法;
2、掌握用函数进行模块化程序设计。
二、实训性质
实训性质: □验证■综合□设计
三、实训任务
从键盘输入两个int类型数据a、b,通过调用函数实现求a与b的两个数的最大公约数和最小公倍数,并定义函数int GCD(int a, int b),int LCM(int a, int b)。
技术要点:
(1)声明函数GCD,LCM:
int GCD(int a, int b);
int LCM(int a, int b)
(2)在主函数输入a、b 调用函数函数GCD,LCM求最大公约数和最小公倍数并输出。
四、实施步骤
(1)运行VC6.0或Visual studio 2010或以上集成环境
(2)建立源文件GCDab.c
(3)根据前述要点编写和输入程序
(4)调试和运行程序,保存结果截图
五、程序代码
六、程序截图。
欧几里得算法函数原型及功能说明

1. 欧几里得算法函数原型及功能说明欧几里得算法,又称辗转相除法,是用来计算两个非零整数的最大公约数的算法。
它的函数原型及功能说明如下:```cint gcd(int a, int b);```这个函数的功能是计算a和b的最大公约数,并返回结果。
在这个函数中,a和b是要计算的两个整数。
2. 基本原理欧几里得算法的基本原理是利用辗转相除的思想。
该算法的步骤如下:- 用b去除a,得到商q和余数r;- 若r等于0,则a就是所求的最大公约数;- 若r不等于0,则a赋值为b,b赋值为r,继续进行步骤1,直到r 为0为止。
3. 代码实现根据欧几里得算法的基本原理,可以很容易地实现这个函数。
下面是一个简单的C语言实现:```cint gcd(int a, int b) {while (b != 0) {int temp = a b;a = b;b = temp;}return a;}```这段代码首先使用while循环来不断进行辗转相除的过程,直到b为0为止,然后返回a的值,即最大公约数。
4. 应用举例欧几里得算法在数论中有着广泛的应用,可以用来解决很多实际问题。
我们可以利用欧几里得算法来求解两个数的最大公约数,从而简化分数的约分过程;也可以用来判断两个数是否互质,即它们的最大公约数是否为1;还可以用来解决一些与模运算相关的问题,如同余方程的解,线性同余方程的解等。
5. 个人观点欧几里得算法是一种非常简单而又实用的算法,它的应用场景非常广泛。
在实际的编程工作中,我们经常会用到这个算法来解决一些数论或模运算相关的问题。
熟练掌握欧几里得算法的原理和实现方法,对于提高程序的效率和准确性都是非常有帮助的。
欧几里得算法是一种非常重要的算法,它不仅在数论中有着重要的地位,而且在实际的编程中也有着广泛的应用。
掌握欧几里得算法对于提高编程能力和解决实际问题都是非常有益的。
希望大家能够在实际的学习和工作中多多运用这个算法,进一步加深对它的理解和掌握。
C语言求最小公倍数和最大公约数四种算法(经典)

C语⾔求最⼩公倍数和最⼤公约数四种算法(经典)求最⼩公倍数的算法:最⼩公倍数=两整数的乘积÷最⼤公约数。
所以该问题可以转化为求最⼤公约数的算法。
求最⼤公约数的四种算法:1. 辗转相除法 :1. a%b得余数c2. 如果c = 0,则b为最⼤公约数3. 如果c不等于0,则a = b,b = c继续执⾏步骤1。
#include<stdio.h>int main() /* 辗转相除法求最⼤公约数 */{int m, n, a, b, t, c;printf("Input two integer numbers:\n");scanf("%d%d", &a, &b);m=a; n=b;while(b!=0) /* 余数不为0,继续相除,直到余数为0 */{ c=a%b; a=b; b=c;}printf("The largest common divisor:%d\n", a);printf("The least common multiple:%d\n", m*n/a);}还有⼀种简写⽅式:int gcd(int a,int b){if (b==0)return a;return gcd(b, a%b);}2. 相减法:1. 若a>b,则a=a-b2. 若a < b,则b=b-a3. 若a=b,则a(或b)即为两数的最⼤公约数4. 若a≠b,则再回去执⾏1#include<stdio.h>int main ( ) /* 相减法求最⼤公约数 */{int m, n, a, b, c;printf("Input two integer numbers:\n");scanf ("%d,%d", &a, &b);m=a; n=b;/* a, b不相等,⼤数减⼩数,直到相等为⽌。
C语言经典代码考试自用

C语言经典代码考试自用C语言是一种通用的高级程序设计语言,经常被用于系统软件和应用软件的开发。
在学习C语言的过程中,熟练掌握经典的代码是非常重要的。
本文将介绍一些C语言经典代码,希望对于C语言的学习和考试有所帮助。
1. Hello World程序Hello World程序是C语言学习的第一步,也是非常经典的代码。
它的目的是输出一行字符串"Hello World!"到屏幕上。
以下是Hello World程序的代码:```c#include <stdio.h>int main() {printf("Hello World!");return 0;}```2. 求两个整数的最大公约数最大公约数是指能同时整除两个数的最大正整数。
以下是求两个整数的最大公约数的代码:```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", gcd(num1, num2));return 0;}```3. 判断一个数是否为素数素数是只能被1和自身整除的数,大于1的自然数中除了2以外都是奇数。
以下是判断一个数是否为素数的代码:```c#include <stdio.h>#include <stdbool.h>bool isPrime(int num) {if (num <= 1) {return false;}for (int i = 2; i * i <= num; i++) { if (num % i == 0) {return false;}}return true;}int main() {int num;printf("请输入一个整数:");scanf("%d", &num);if (isPrime(num)) {printf("%d是素数", num);} else {printf("%d不是素数", num);}return 0;}```4. 查找数组中的最大元素以下是查找数组中的最大元素的代码:```c#include <stdio.h>int findMax(int arr[], int n) {int max = arr[0];for (int i = 1; i < n; i++) {if (arr[i] > max) {max = arr[i];}}return max;int main() {int arr[] = {5, 2, 8, 10, 1};int n = sizeof(arr) / sizeof(arr[0]);printf("数组中的最大元素为:%d", findMax(arr, n));return 0;}```5. 根据用户输入的数字打印对应的星号图案以下是根据用户输入的数字打印对应的星号图案的代码:```c#include <stdio.h>void printPattern(int num) {for (int i = 1; i <= num; i++) {for (int j = 1; j <= i; j++) {printf("* ");}printf("\n");}int main() {int num;printf("请输入一个数字:");scanf("%d", &num);printPattern(num);return 0;}```以上是一些C语言经典代码的示例,涵盖了基本输入输出、循环、递归等常用语法和算法。
c语言18个经典程序

c语言18个经典程序1. Hello, World! - 这是经典的C语言第一个程序,用于输出"Hello, World!"。
2. 求两个整数的和 - 用户输入两个整数,程序将计算并输出它们的和。
3. 判断一个数是奇数还是偶数 - 用户输入一个整数,程序将判断并输出该数是奇数还是偶数。
4. 求一个数的平方 - 用户输入一个数,程序将计算并输出该数的平方。
5. 求两个数的最大公约数 - 用户输入两个整数,程序将计算并输出它们的最大公约数。
6. 判断一个数是否为质数 - 用户输入一个正整数,程序将判断并输出该数是否为质数。
7. 求一个数的阶乘 - 用户输入一个正整数,程序将计算并输出该数的阶乘。
8. 生成斐波那契数列 - 用户输入一个正整数n,程序将生成并输出前n个斐波那契数。
9. 判断一个数是否为完全数 - 用户输入一个正整数,程序将判断并输出该数是否为完全数。
10. 判断一个字符串是否为回文字符串 - 用户输入一个字符串,程序将判断并输出该字符串是否为回文字符串。
11. 求一个数的倒数 - 用户输入一个非零实数,程序将计算并输出该数的倒数。
12. 求两个数的最小公倍数 - 用户输入两个正整数,程序将计算并输出它们的最小公倍数。
13. 判断一个年份是否为闰年 - 用户输入一个年份,程序将判断并输出该年份是否为闰年。
14. 生成九九乘法表 - 程序将生成并输出九九乘法表。
15. 判断一个数是否为负数、零或正数 - 用户输入一个实数,程序将判断并输出该数是负数、零还是正数。
16. 判断一个数是否为偶数的平方 - 用户输入一个整数,程序将判断并输出该数是否为偶数的平方。
17. 判断一个数是否为回文数 - 用户输入一个正整数,程序将判断并输出该数是否为回文数。
18. 判断一个字符串是否为回文句子 - 用户输入一个句子,程序将判断并输出该句子是否为回文句子。
这些经典的C语言程序涵盖了基本的输入输出、数学运算、条件判断、循环、字符串处理等方面的知识点。
c语言输出最大公约数和最小公倍数

《C 语言输出最大公约数和最小公倍数》在 C 语言编程中,计算最大公约数和最小公倍数是非常常见的需求之一。
它们是数学中的基本概念,对于计算机科学以及实际问题中都具有重要的意义。
本文将深入探讨如何在 C 语言中输出最大公约数和最小公倍数,并结合实际问题进行分析和应用。
## 1. 最大公约数让我们明确最大公约数的定义。
最大公约数,英文为 Greatest Common Divisor,通常缩写为 GCD,是两个整数的共同约数中最大的一个。
在 C 语言中,我们可以使用欧几里得算法来高效地计算两个数的最大公约数。
欧几里得算法的基本思想是通过不断取余的方式,直到余数为 0,那么除数就是最大公约数。
以下是 C 语言中计算最大公约数的代码示例:```cint gcd(int a, int b) {if (b == 0) {return a;} else {return gcd(b, a % b);}}```在上述代码中,我们定义了一个名为 `gcd` 的函数,它接收两个整数参数 `a` 和 `b`,然后通过递归调用自身来计算最大公约数。
这种递归的实现思路非常巧妙,而且在实际的程序中也能够高效地运行。
## 2. 最小公倍数接下来,让我们来讨论最小公倍数。
最小公倍数,英文为 Least Common Multiple,通常缩写为 LCM,是两个整数的共同倍数中最小的一个。
在C 语言中,我们可以通过最大公约数来计算最小公倍数,因为有一个基本的性质:两个整数的最大公约数与它们的最小公倍数的乘积等于这两个整数的乘积。
以下是 C 语言中计算最小公倍数的代码示例:```cint lcm(int a, int b) {return a / gcd(a, b) * b;}```在上述代码中,我们定义了一个名为 `lcm` 的函数,用来计算两个整数的最小公倍数。
通过调用之前我们定义的 `gcd` 函数,可以非常方便地实现对最小公倍数的计算。
c语言常用算法.

C程序设计的常用算法一、求两个整数的最大公约数、最小公倍数分析:求最大公约数的算法思想:(最小公倍数=两个整数之积/最大公约数)(1) 对于已知两数m,n,使得m>n;(2) m除以n得余数r;(3) 若r=0,则n为求得的最大公约数,算法结束;否则执行(4);(4) m←n,n←r,再重复执行(2)。
例如: 求m=14 ,n=6 的最大公约数. m n r14 6 26 2 0void main(){int a,r,n,m,t;printf("please input two numbers:\n");scanf("%d,%d",&m,&n);a=n*m;if (m<n){t=n;n=m;m=t;}r=m%n;while (r!=0){m=n;n=r;r=m%n;}printf("最大公约数:%d\n",n);printf("最小公倍数:%d\n",a/n);}二、判断素数只能被1或本身整除的数称为素数基本思想:把m作为被除数,将2到(int)sqrt(m)之间所有的整数作为除数,如果都除不尽,m就是素数,否则就不是。
(可用以下程序段实现)void main(){int m,i,k;printf("please input a number:\n");scanf("%d",&m);k=sqrt(m);for(i=2;i<k;i++){if(m%i==0) break;}if(i>=k)printf("该数是素数");elseprintf("该数不是素数");}三、排序算法1.冒泡法:冒泡法原理详见教材例7.3,教材134页#include <stdio.h>void BubbleSort(int* pData,int Count) {int iTemp;for(int i=1;i<Count;i++){for(int j=Count-1;j>=i;j--){if(pData[j]<pData[j-1]){iTemp = pData[j-1];pData[j-1] = pData[j];pData[j] = iTemp;}}}}void main(){int data[] = {10,9,8,7,6,5,4}; BubbleSort(data,7);for (int i=0;i<7;i++){printf(“%d\n”, data[i]);}}2.比较交换法比较交换法的程序最清晰简单,每次用当前的元素一一的同其后的元素比较并交换#include <stdio.h>void ExchangeSort(int* pData,int Count){int iTemp;for(int i=0;i<Count-1;i++){for(int j=i+1;j<Count;j++){if(pData[j]<pData[i]){iTemp = pData[i];pData[i] = pData[j];pData[j] = iTemp;}}}}void main(){int data[] = {10,9,8,7,6,5,4};ExchangeSort(data,7);for (int i=0;i<7;i++){printf(“%d\n”, data[i]);}}3.选择法:选择法原理详见教材例10.9,教材241页此处为另一种写法,原理相同#include <stdio.h>void SelectSort(int* pData,int Count){int iTemp;int iPos;for(int i=0;i<Count-1;i++){iTemp = pData[i];iPos = i;for(int j=i+1;j<Count;j++){if(pData[j]<iTemp){iTemp = pData[j];iPos = j;}}pData[iPos] = pData[i];pData[i] = iTemp;}}void main(){int data[] = {10,9,8,7,6,5,4};SelectSort(data,7);for (int i=0;i<7;i++){printf(“%d\n”, data[i]);}}4. 插入法插入法较为复杂,它的基本工作原理是抽出牌,在前面的牌中寻找相应的位置插入,然后继续下一张#include <stdio.h>void InsertSort(int* pData,int Count){int iTemp;int iPos;for(int i=1;i<Count;i++){iTemp = pData[i];iPos = i-1;while((iPos>=0) && (iTemp<pData[iPos])){pData[iPos+1] = pData[iPos];iPos--;}pData[iPos+1] = iTemp;}}void main(){int data[] = {10,9,8,7,6,5,4};InsertSort(data,7);for (int i=0;i<7;i++){printf(“%d\n”, data[i]);}}四、查找法1.顺序查找法(在一列数中查找某数x)基本思想:一列数放在数组a[1]---a[n]中,待查找的数放在x 中,把x与a数组中的元素从头到尾一一进行比较查找。
C语言求最大公约数和最小公倍数算法总结

main()
{
int m,n,t2;
printf("please input two integer number:"); scanf("%d%d",&m,&n); t2=multiple(m,n); printf("The least common multiple is %d\n",t2); getch(); } 启示:根据数学定义求任意两个正整数的最大公约数和最小 公倍数,相对辗转相除法来说,易懂,容易被学习者接受,但也 请读者注意强制退出循环过程的条件、变量的特点及控制语句的 使用。 结束语 C 语言编程关键在于确定好算法及算法过程,同时要合理定义 变量和函数及控制语句操作,只有这样才能保证编程的正确性、、 可读性、实用性。
int divisor (int a,int b) 数*/
/*自定义函数求两数的最大公约
{
int temp;
/*定义整型变量*/
if(a<b)
/*通过比较求出两个数中的最大值
和最小值*/
{ temp=a;a=b;b=temp;} /*设置中间变量进行两数交换
*/ while(b!=0)
余数为 0*/
temp=p;
/*最大值赋给 p 为变量自增作准备*/
while(1) /*利用循环语句来求满足条件的数值*/
{
if(p%q==0)
break; /*只要找到变量的和数能被 a 或 b 所整除,
则中止循环*/
p+=temp; /*如果条件不满足则变量自身相加*/
}
return (p);
}
#include "stdio.h"
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;}
}
运行结果:。