问题描述

现输入一个真分数,请将该分数分解为埃及分数。

问题分析

真分数:分子比分母小的分数,叫做真分数。真分数的分数值小于1。如1/2,3/5,8/9等。

分子是1的分数,叫单位分数。古代埃及人在进行分数运算时,只使用分子是1的分数。因此这种分数也叫做埃及分数,或者叫单分子分数。如:8/11=1/2+1/5+1/55+1/110。

我们约定分子分母都是自然数,分数的分子用a表示,分母用b表示。

若真分数的分子b能整除分母a,则真分数经过化简就可以得到埃及分数;若真分数的分子不能整除分母,则可以从原来的分数中分解出一个分母为(b/a) +1的埃及分数。用这种方法将剩余部分反复分解,最后可得到结果。

算法设计

真分数分解为埃及分数的思路可归纳如下:

(1) 分数的分子用a表示、分母用b表示,变量c用来存储各个埃及分数的分母。

(2) 如果分母是分子的倍数,直接约简成埃及分数。

此时,埃及分数的分母c=b/a;分子为1,即直接将变量a赋值为1。

(3) 否则分数中一定包含一个分母为(b/a)+1的埃及分数。

若分母不是分子倍数,则可以分解出一个分母为(b/a)+1的埃及分数,即变量c的值 为(b/a)+1。

(4) 如果分子是1,表明已经是埃及分数,不用再分解,结束。

因为若分数的分子a为1,说明此时的分数己经是埃及分数无须再分解,可结束循环。对于这种不受循环条件限制,当某一条件满足时便可结束循环的情况,可用break语句实现。

if (a==1)

{

printf("1/%ld\n", c);

break; /*a为1标志结束*/

}

(5) 如果分子是3而且分母是偶数,直接分解成两个埃及分数1/(b/2)和1/b,结束。因分母为偶数,所以变量b—定是2的倍数,对于分解出的分数1/(b/2)经过约分之后肯定能得到一个埃及分数。原分数分解为两个埃及分数之后便可利用break语句结束循环。

if(a==3 && b%2==0) /*若余数分子为3,分母为偶数,输出最后两个埃及分数*/

{

printf ("1/%ld + 1/%ld\n", b/2, b);

break;

}

(6) 从分数中减去这个分母为(b/a)+1的埃及分数,回到步骤(2)重复上述过程。

分解出此埃及分数之后用原分数a/b减去此埃及分数,得到新的分数。此新分数的分子a=a*c-b,分母 b=b*c。

整个程序没有明确的循环条件,所以为了能使循环继续,将循环条件用一个非0的常量表示条件为真。从上述过程可以看出,虽然利用循环条件不能结束循环,当满足某一条件时利用break语句,仍然可以避免程序进入死循环。

对于某一真分数分解为一个以上的埃及分数时最后输出时要求以各分数相加的形式输出,所以在输出语句中“+”作为普通字符输出。

printf ("1/%ld + ", c);

程序流程图:

下面是完整的代码:

#include

int main()

{

long int a, b, c;

printf("Please enter a optional fraction(a/b):");

scanf("%ld/%ld", &a, &b); /*输入分子a和分母b*/

printf("It can be decomposed to:");

while(1)

{

if(b%a) /*若分子不能整除分母,则分解出一个分母为b/a+1的埃及分数*/

c = b/a + 1;

else /*否则,输出化简后的真分数(埃及分数)*/

{

c = b / a;

a = 1;

}

if(a==1)

{

printf("1/%ld\n", c);

break; /*a为1标志结束*/

}

else

printf("1/%ld + ", c);

a = a * c - b; /*求出余数的分子*/

b = b * c; /*求出余数的分母*/

if(a==3 && b%2==0) /*若余数分子为3,分母为偶数,输出最后两个埃及分数*/

{

printf("1/%ld + 1/%ld\n", b/2, b);

break;

}

}

return 0;

}

运行结果:

Please enter a optional fraction(a/b):8/11

It can be decomposed to:1/2 + 1/5 + 1/55 + 1/110

埃及分数c 语言程序,C语言将真分数分解为埃及分数相关推荐

  1. python埃及分数_C语言将真分数分解为埃及分数代码解析

    问题描述 现输入一个真分数,请将该分数分解为埃及分数. 问题分析 真分数:分子比分母小的分数,叫做真分数.真分数的分数值小于1.如1/2,3/5,8/9等. 分子是1的分数,叫单位分数.古代埃及人在进 ...

  2. 将真分数分解为埃及分数(斐波那契算法步骤)Java

    package com.patience.interview.huawei;import java.util.Scanner;/*** 将真分数分解为埃及分数* @author Green.Gee* ...

  3. 棱形旋转c语言程序_C 语言时隔 5 年重回巅峰,这 20 个热门项目拿去练手!

    在上个月的 TIOBE 编程语言排名中,C 语言和 Java 的差距只有 0.01%.在近日 TIOBE 公布的 2020 年 5 月编程语言排行榜中,C 语言成功超越了 Java,重返第一的王者宝座 ...

  4. 蜂鸣器发出7种音阶c语言程序_C语言编程新思路

    第一章 单元测试 1.单选题: 关于一个C语言程序执行的起点和终点,以下选项正确的是 ( ). 选项: A: main 任意 B: main 最后一个 C: main main D: 第一个 最后一个 ...

  5. 文件的记录c语言程序,c语言程序学生籍贯信息记录簿设计.docx

    c 语言程序学生籍贯信息记录簿设计 学生籍贯信息记录簿 课程设计报告书 班 级: 方 0909-1 学 号:姓 名: 苑 小 叶 指导教师 : 康 亚 男 石家庄铁道大学四方学院 2010年 07月 ...

  6. 学生实验平台搭建c语言程序,c语言程序设计实验学生用.doc

    c语言程序设计实验学生用 C语言程序设计 实验指导 (学生用) 计算机基础教研室 <C语言程序设计>课程组 2012年9月 前 言 <C语言程序设计>是计算机科学技术系面向全校 ...

  7. 插入法排序c语言程序,C语言之插入排序算法

    一.什么是直接插入算法? 直接插入排序是一种简单的插入排序法,其基本思想是:把待排序的纪录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的纪录插入完为止,得到一个新的有序序列. 选择 ...

  8. 青花瓷音乐的单片机c语言程序,c语言曲谱_单片机c语言音乐简谱代码

    51单片机曲谱编写音乐程序,我看不懂曲谱,谁能教下我! //<世上只有妈妈好>51单片机C语言程序和音乐采灯程序 //此程序在硬件上调试通过 //本程序的单片机晶振采用11.0592MHZ ...

  9. 框图c语言程序,C语言程序设计框图

    <C语言程序设计框图>由会员分享,可在线阅读,更多相关<C语言程序设计框图(86页珍藏版)>请在人人文库网上搜索. 1.第三章控制结构,返回总目录,目录,3.1节目结构框,3. ...

  10. 简单谱子C语言程序,c语言曲谱_单片机c语言音乐简谱代码

    51单片机曲谱编写音乐程序,我看不懂曲谱,谁能教下我! //<世上只有妈妈好>51单片机C语言程序和音乐采灯程序 //此程序在硬件上调试通过 //本程序的单片机晶振采用11.0592MHZ ...

最新文章

  1. 在CMD窗口中使用javac和java命令进行编译和执行带有包名的具有继承关系的类
  2. 服务端第八次上课:mongodb,redis
  3. Java基础笔记 – 枚举类型的使用介绍和静态导入
  4. 英语口语-文章朗读Week8 Friday
  5. 状态栏背景颜色(转载)
  6. 浏览器打不开python的页面_robotframework,selenium启动不了打不开浏览器的问题访问不了网页...
  7. c++incline函数
  8. python json dumps 自定义_Python json.dumps()用法及代码示例
  9. pythontransform详解_Python自定义聚合函数merge与transform区别详解
  10. SpringBoot打war包详解
  11. linux终端执行二进制文件命令,Linux下查看二进制文件命令
  12. 谷粒商城--分布式基础篇1
  13. 几款流行的电路仿真软件简介与学习资源分享
  14. LTE无线网络优化岗位及工作任务分析
  15. [leetcode] 935 Knight Dialer 骑士拨号器
  16. 手机模型真机图片的制作——UI出图
  17. 台式计算机usb接口无反应6,如何解决电脑的USB接口没反应,教您如何解决
  18. Win10电脑桌面壁纸自动变成黑色无法更换怎么解决
  19. MySQL常见错误码
  20. 车窗内观春运 镜头记录旅客百态心情

热门文章

  1. [内附完整源码和文档] 基于Java的航空售票管理系统
  2. 银行卡号编码规则及其应用
  3. O3-开源框架使用之Butterknife 8.8.1及源码浅析
  4. LIO-SAM学习与运行测试数据集
  5. 宝塔面板本地调试网站提示域名解析错误的问题
  6. 超鸿蒙 混希夷 寂寥,下列句子与“故凡为愚者.莫我若也 的句式不同的一项是 A.超鸿蒙.混希夷.寂寥而莫我知也 B.而良人未之知也 C.及长.不省所怙.惟兄嫂是依 D.王语暴以好乐...
  7. 显示本q不用了 加新q服务器,魔兽TBC设计师访谈:前夕版本开放新种族 持续关注玩家反馈...
  8. 护照阅读器助力旅行社快捷录入
  9. 如何提高Python编程能力?
  10. Windows 10快速截图快捷键 (Windows徽标键+shift+S)