当前位置:首页 » 编程语言 » c语言分数约分

c语言分数约分

发布时间: 2022-12-29 12:20:13

‘壹’ 编写c语言程序,实现分数的约分

以下一段程序是循环运行的,即, 得出结果后继续下一轮接受用户输入.
任何一个数为0 则退出.

程序运行过程:
接受用户输入两个数, 第一个是分子, 第二个是分母.
输出结果,并等待下一轮.
两个数中任意一个为0, 则程序立即退出.

#include<stdio.h>
#include<conio.h>
main()
{
int iNum,iDeno,iMod,iMin;
iNum=iDeno=1;
while(iNum!=0 && iDeno!=0)
{
printf("Please input the numerator and the denominator:\n");
scanf("%i%i",&iNum,&iDeno);

if (iNum==0 || iDeno==0)
continue;
if (iNum<iDeno)
iMin=iNum;
else
iMin=iDeno;

for (int i=2;i<=iMin;i++)
{
if (i>iNum || i>iDeno)
break;

if (iNum%i==0 && iDeno%i==0)
{
iNum/=i;
iDeno/=i;
i=1;
}
}

printf("\n%i\n----\n%i\n",iNum,iDeno);
getch();
}

}

‘贰’ 简单的c语言题目求最简分数

#include<stdio.h>
intmain(){
inti,j,n;
scanf("%d",&n);
for(i=1;i<n;i++){
for(j=2;j<=i;j++)
if(i%j==0&&n%j==0)break;
if(j>i)printf("%d/%d,",i,n);
}
return0;
}

//运行示例:

‘叁’ 如何用C语言编程输入两个分数求和并以最简分式的方式输出

输入可以用如下格式:
unsigned int a,b,c,d;

scanf("%d/%d",&a,&b);/*a/b*/
scanf("%d/%d",&c,&d);/*c/d*/
求最大公因数,可以用辗转相除法;公分母=b、d的最小公倍数=b*d/b、d的最大公约数,
通分后,分子相加,结果的分子、分母用辗转相除法求最大公约数,进行约分。
约分后的结果输出。

‘肆’ c语言,怎么实现对分数<就是几分之几>的加减乘除等等的运算

  1. 定义一个数据结构,可以是一个长度2的数组,也可以是一个struct,下面以数组为例

  2. 定义两个长度2的数组 a[2],b[2],分子分别保存在a[0],b[0],分母分别保存在a[1],b[1](负数的话,符号同分子一起)

  3. 乘:分母,分子分别相乘;除:乘以倒数(调换乘数的分子分母);然后约分(涉及最大公约数算法,可网络)

  4. 加减:分母需要相同,涉及最小公倍数算法(可网络)


以上思路和人工计算的方式相同,只是用c语言“翻译”一下

另外提供一个思路,直接计算结果,然后从无限循环小数转化成分数形式

‘伍’ C语言 约分最简分式

此即为求两个数的最大公约数
最大公约数用欧几里得算法
int gcd(int a, int b)
{
if(0 == a%b)
return b;
return gcd(b, a%b);
}
int main()
{
int a,b,c;
scanf("%d %d", &a, &b);
c = gcd(MAX(a,b), MIN(a,b));
printf("%d %d\n", a/c, b/c);
return 0;
}

‘陆’ 编写c语言程序,实现分数的约分

以下一段程序是循环运行的,即,
得出结果后继续下一轮接受用户输入.
任何一个数为0
则退出.
程序运行过程:
接受用户输入两个数,
第一个是分子,
第二个是分母.
输出结果,并等待下一轮.
两个数中任意一个为0,
则程序立即退出.
#include
#include
main()
{
int
iNum,iDeno,iMod,iMin;
iNum=iDeno=1;
while(iNum!=0
&&
iDeno!=0)
{
printf("Please
input
the
numerator
and
the
denominator:\n");
scanf("%i%i",&iNum,&iDeno);
if
(iNum==0
||
iDeno==0)
continue;
if
(iNum
iNum
||
i>iDeno)
break;
if
(iNum%i==0
&&
iDeno%i==0)
{
iNum/=i;
iDeno/=i;
i=1;
}
}
printf("\n%i\n----\n%i\n",iNum,iDeno);
getch();
}
}

‘柒’ 编写C语言程序,计算由用户输入的两个分数,求它们的加,减,乘,除.

这题,问过答过。
int Gcd(int a, int b){} 是求最大公约数函数。用于加,减,乘,除结果的约分。
输入格式 是 4/3,9/8 用逗号分隔 2 个分数。

#include<stdio.h>
#include<math.h>
int Gcd(int a, int b)
{
if(b == 0)
return a;
return Gcd(b, a % b);
}
main(){
int a,b,c,d;
int e,f,g;
printf("input: 4/3,9/8\n");
scanf("%d/%d,%d/%d",&a,&b,&c,&d);
// printf("%d %d %d %d\n",a,b,c,d);
e = a*d+c*b;
f = b*d;
g = Gcd(f,e);
f = f/g; e = e/g;
printf("sum: %d/%d\n",e,f);
e = a*d-c*b;
f = b*d;
g = Gcd(f,e);
f = f/g; e = e/g;
printf("dif: %d/%d\n",e,f);
e = a*c;
f = b*d;
g = Gcd(f,e);
f = f/g; e = e/g;
printf("mul: %d/%d\n",e,f);
e = a*d;f=b*c;
g = Gcd(f,e);
f = f/g; e = e/g;
printf("quo: %d/%d\n",e,f);
return 0;
}
运行结果:
4/3,9/8
sum: 59/24
dif: 5/24
mul: 3/2
quo: 32/27

‘捌’ C语言约分问题

#include"stdio.h"
intmain(intargc,char*argv[]){
intx,y,r,a,b;
printf("Pleaseenterx&y(int0<=x,y)... ");
scanf("%d%d",&x,&y);
if((a=x)&&(b=y)){
while(r=a%b){
a=b;
b=r;
}
printf("%d",x/b);
if((y/=b)!=1)
printf("/%d",y);
printf(" ");
}
elseif(x==0)
printf("0 ");
elseif(y==0)
printf("Nosolution... ");
return0;
}

运行样例:

‘玖’ 怎样用c语言写一个将小数转化成最简分数的算法

算法很简单,程序中已经说明。重要的是系统对浮点数是有修正的,导致结果出现问题。
如何解决,详见程序。

//#include "stdafx.h" //VS 默认使用
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#pragma warning(disable: 4996)
//为了最大限度支持(目前)小数,整数定义成:__int64
//支持32位:以下分别为 int(__int32) 1E8
#define ZHENGSHU __int64
#define XIAOSHUDIANZUOYI 1E15 //double 最多只能确精确到15位有效数字
#define XIUZHENG 1E-16 //用于修正浮点数计算误差
int _tmain(int argc, _TCHAR* argv[])
{
//怎样用c语言写一个将小数转化成最简分数的算法
//开始
double xs = 0.000625; //为了简便,直接指定。也可以让用户输入
//scanf("%lf", &xs);
ZHENGSHU fz, fm, zs, k, fh;
//数学算法是:如 0.123456 = 123456/1000000 ,然后约分
//实现第一步转换
if (xs < 0)
{
fh = -1;
xs = -xs;
}
else
{
fh = 1;
}
zs = (ZHENGSHU)xs; //支持假分数
//计算整数部分的有效数位数
k = 1;
while (zs / k > 0)
k *= 10;
xs -= (double)zs;
fm = XIAOSHUDIANZUOYI / k; //分母
xs = (double)((ZHENGSHU)((xs + XIUZHENG * k) * fm)) / fm; //修正浮点数计算误差
xs += XIUZHENG; //修正浮点数计算误差
fz = (ZHENGSHU)(xs * fm); //分子

for (;;) //这样循环,是因为 C/C++ 中,for 循环效率最高
{ //约去多乘的 10 的倍数
if ((fz % 10 == 0) && (fm % 10 == 0))
{
fz /= 10;
fm /= 10;
}
else
{
break;
}
}
//实现第二步:约分。以下看起来有点麻烦,目的是为了减少算法的时间复杂的
while ((fz % 2 == 0) && (fm % 2 == 0))
{ //将公约数 2 约尽
fz /= 2;
fm /= 2;
}
k = 3;
for (;;)
{
while ((fz % k == 0) && (fm % k == 0))
{
fz /= k;
fm /= k;
}
k += 2;
if (k > (ZHENGSHU)sqrt(fz))
break;
}

//将整数部分加上,形成假分数。如果原数为不为0整数,则化成分母为 1 的假分数
//如果原数为 0,则化成分子为 0,分母为 1。
if (fz == 0)
{
fz = fh * zs;
fm = 1;
}
else
{
fz = fh * (fz + fm * zs);
}
//结束

//显示一下结果
printf("%lf = %lld/%lld\n", fh * (zs + xs), fz, fm);
//printf("%lf = %ld/%ld\n", fh * (zs + xs), fz, fm); //32位
system("pause"); //防止窗口一闪而退
return 0;
}

‘拾’ C语言中怎样约分

main()
{
intden,num,temp,x=0;
printf("请输入分子!");
scanf("%d",&num);
printf("请输入分母!");
scanf("%d",&den);
if(num!=den)
{temp=den>num?den:num;
while(temp>1)
{
if(den%temp==0&&num%temp==0)
{
printf("有公约数%d,约分后=%d/%d",temp,num/temp,den/temp);
x=1;
break;
}
elsetemp--;

}
}
elseprintf("分子分母相同");
if(x==0)printf("不能约分");
}

你如果要的是这个的话

热点内容
医美大数据库 发布:2025-07-03 15:47:07 浏览:355
c语言将二进制转化为十进制 发布:2025-07-03 15:32:47 浏览:987
c语言帮助文档 发布:2025-07-03 15:22:43 浏览:319
双端口存储器在情况下会发生读写冲突 发布:2025-07-03 15:12:54 浏览:270
快站数据库 发布:2025-07-03 14:45:44 浏览:39
jsp获取上传文件路径 发布:2025-07-03 14:44:46 浏览:569
php时间微妙 发布:2025-07-03 14:39:38 浏览:843
巨豆豆手机回复出厂密码是什么 发布:2025-07-03 14:35:19 浏览:474
算法的三个 发布:2025-07-03 14:35:19 浏览:698
wcf源码 发布:2025-07-03 14:33:54 浏览:863