代码:
/*
C语言第十六例
题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
程序分析:
(1)最小公倍数=输入的两个数之积除于它们的最大公约数,关键是求出最大公约数;
(2)求最大公约数用辗转相除法(又名欧几里德算法)
1)证明:设c是a和b的最大公约数,记为c=gcd(a,b),a>=b,
令r=a mod b
设a=kc,b=jc,则k,j互素,否则c不是最大公约数
据上,r=a-mb=kc-mjc=(k-mj)c
可知r也是c的倍数,且k-mj与j互素,否则与前述k,j互素矛盾,
由此可知,b与r的最大公约数也是c,即gcd(a,b)=gcd(b,a mod b),得证。
2)算法描述:
第一步:a ÷ b,令r为所得余数(0≤r 第二步:互换:置 a←b,b←r,并返回第一步。
*/
#include
void main(void)
{
int a,b,c,d;
printf("请输入两个整数:");
scanf("%d%d",&a,&b);
if(a>b) //判断哪个数更大
{
c=a%b;
d=a*b;
}
if(a {
c=b%a;
d=a*b;
}
while(c!=0) //计算
{
a=b;
b=c;
(a>b)?(c=a%b):(c=b%a); //用条件表达式去决定选择哪个
}
printf("这两个数的最大公约数是%d,最小公倍数是%dn",b,d/b);
}
运行结果:
关键字:C语言 表达式
引用地址:
C语言一百例第十六例
推荐阅读最新更新时间:2024-11-08 17:45
关于C语言的static 又涨姿势了
最近学习一段代码,关于求平均值过滤的,过去使用时,一般是这样算,先一下子读出10个值来,求和再除以10,然后返回平均值。 今天学到了一种新的求平均值法,不用一下子读出10个来,而是正常读,只不过是以前读的都会记录保存下来,然后通过移位来更新这10个数据, 简单来说 如果 采集的数据为(2.0,2.1,2.5,2.3,2.5,2.2,2.5,2.6,5.9,2.7),那么下次采集为 2.5,那么就会将2.0丢掉,2.1为第一位,依次移位实现数据的更新。感觉巧妙之级。 这种方法的代码实现如下 /*********************************************************************
[单片机]
单片机中C语言指针与变量
注:keil中单片机C编程 若指针没有指向提前声明的变量,会产生混乱 eg: 情景一: 情景二: Type *p,*q; Type *p,*q,pp,qq; 给指针p赋值; p= 给指针q赋值; q= p或q的值会出问题 正常,没问题(Type为一结构体) 结论:情景二中,是指针使用的规范过程,先分配了变量,然后指针指向变量。 情景一中则没有定义变量,直接用指针操作,出现错误,猜测:因为指针只是用来存储变量的地址,现在即没有定义变量,那么给指针所赋的值在内存中可能是随机存储,然后指针指向他们时会出现混乱。 关于指针自身地址和指针所指地址 keil中单片机C编程
[单片机]
矩阵键盘C语言程序设计
下面是c语言源程序: #include reg52.h #define uint unsigned int #define uchar unsigned char uintled ={0xc0,0xf9,0xa4, 0xb0,0x99,0x92,0x82,0xf8,0x80,0x90, 0x88,0x83,0xc6,0xa1,0x86,0x8e}; uchar a,b,c,temp; void delay7ms(void) //误差 -0.217013888891us { unsigned char a,b; for(b=208;b 0;b--) for(a=14;a 0;a--); } ucharkey() {
[单片机]
单片机C语言编程心得
写这个8*8按键程序的过程中,不管是在自己写还是参考别人程序的过程中,发现自己对C语言有些基本知识点和编程规范有很多不懂的地方,有些是自己以前的编程习惯不好,有些就是基础知识不扎实的表现,所以总结出来。 一、.H文件与.C文件的关系: 迄今为止,写过的程序都是一些很简单的程序,从来没有想到要自己写.H文件,也不知道.H文件到底什么用,与.C文件什么关系。只是最近写键盘程序,参考别人的程序时,发现别人写的严格的程序都带有一个“KEY.H”,里面定义了.C文件里用到的自己写的函数,如Keyhit()、Keyscan()等。 经过查找资料得知,.H文件就是头文件,估计就是Head的意思吧,这是规范程序结构化设计的需要,既可以实现大
[单片机]
51单片机的程序设计中的C语言
在实际工程应用中,51单片机的程序设计一般都是采用C语言编写,通过相应的编译器,得到可执行代码,以提高程序开发效率。但由于单片机的内部资源有限,并结合单片机的特点(如位操作),与标准C语言相比,有所不同,称为C51程序。 C语言的特点 语言简洁、紧凑,使用方便、灵活。 运算符丰富。 数据结构丰富。具有现代化语言的各种数据结构。 可进行结构化程序设计。 可以直接对计算机硬件进行操作。 生成的目标代码质量高,程序执行效率高。 可移植性好。 C语言程序采用函数结构,每个C语言程序由一个或多个函数组成,在这些函数中至少应包含一个主函数main(),也可以包含一个main()函数和若干个其它的功能函数。不管main()函数放于
[单片机]
C语言中使用 #pragma pack 和 __attribute(aligned(n)) 【非常有用的字节对齐用法说明】
更改c编译器的缺省字节对齐方式: 在缺省情况下,c编译器为每一个变量或数据单元按其自然对界条件分配空间;一般地可以通过下面的两种方法来改变缺省的对界条件: 方法一(体积对齐): 使用#pragma pack(n),指定c编译器按照n个字节对齐; 使用#pragma pack(),取消自定义字节对齐方式。 #pragma pack(4) /*指定按4字节对齐,等价于#pragma pack(push,4)*/ uint8_t rf_freq_table = {0x20, 0x21, 0x22, 0x23, 0x24}; uint8_t rf_mac_addr = {0x55, 0x56, 0x57, 0x58, 0x59};
[单片机]
51单片机C语言程序(二)定时/计数器 中断
程序一 利用定时/计数器T0从P1.0输出周期为1s的方波, 让发光二极管以1HZ闪烁, #include reg52.h //52单片机头文件 #include intrins.h //包含有左右循环移位子函数的库 #define uint unsigned int //宏定义 #define uchar unsigned char //宏定义 sbit P1_0=P1^0; uchar tt; void main() //主函数 { TMOD=0x01;//设置定时器0为工作方式1 TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1;//开总中断 E
[单片机]
PLC Ladder logic语言的基础知识
文章概述 PLC作为工业自动化中不可或缺的重要组成部分,在生产过程中发挥着关键的作用。特别是Ladder Logic语言作为PLC编程的重要工具,为工业系统的控制提供了精准而可靠的支持。 本文详细阐述了PLC编程的基本原理和功能,深入介绍了Ladder Logic语言的定义、特点、基本语法及其在实际工业系统中的应用。此外,还探讨了PLC特殊块功能和用户定义功能块的概念及其作用。 在当今自动化产业中,可编程逻辑控制器(PLC)扮演着至关重要的角色。而Ladder logic(梯形逻辑)语言可以被视为基于规则而非过程的语言,被广泛用于编程PLC中,特别是需要顺序控制过程或复杂的自动化系统。 本文讲述关于PLC -Ladder l
[嵌入式]