C语言中的分数四则运算

作者&投稿:胥竖 (若有异议请与网页底部的电邮联系)
c语言,怎么实现对分数<就是几分之几>的加减乘除等等的运算~

定义一个数据结构,可以是一个长度2的数组,也可以是一个struct,下面以数组为例
定义两个长度2的数组 a[2],b[2],分子分别保存在a[0],b[0],分母分别保存在a[1],b[1](负数的话,符号同分子一起)
乘:分母,分子分别相乘;除:乘以倒数(调换乘数的分子分母);然后约分(涉及最大公约数算法,可百度)
加减:分母需要相同,涉及最小公倍数算法(可百度)

以上思路和人工计算的方式相同,只是用c语言“翻译”一下
另外提供一个思路,直接计算结果,然后从无限循环小数转化成分数形式

你没有化简,我给你看一下有化简的:
#include
//求两个数的最大公约数
int calc(int a,int b){
if(a%b==0) {
return b;
}else {
return calc(b,a%b);
}
}
void main(){
int a[4],i;
char op;
for(i=0;i<4;i++){
printf("请输入第%d个数:",(i+1));
scanf("%d",&a[i]);
}
printf("请输入运算符:");
scanf("%s",&op);
if(a[0]==0||a[2]==0){
printf("非法数据!
");
}else if(a[0]==a[2]){
if(op=='+'){
printf("%d/%d+%d/%d=%d/%d
",a[1],a[0],a[3],a[2],((a[1]*a[0]*a[2]/calc(a[0],a[2]))/a[0])/((a[3]*a[0]*a[2]/calc(a[0],a[2]))/a[2])/
calc(((a[1]*a[0]*a[2]/calc(a[0],a[2]))/a[0])/((a[3]*a[0]*a[2]/calc(a[0],a[2]))/a[2]),a[0]*a[2]/calc(a[0],a[2])),a[0]*a[2]/calc(a[0],a[2])/calc(((a[1]*a[0]*a[2]/calc(a[0],a[2]))/a[0])/((a[3]*a[0]*a[2]/calc(a[0],a[2]))/a[2]),
a[0]*a[2]/calc(a[0],a[2])) );
printf("%d/%d-%d/%d=%d/%d
",a[1],a[0],a[3],a[2],(a[1]-a[3])/calc(a[0],a[1]+a[3]),a[0]/calc(a[0],a[1]-a[3]));
}else if(op=='*'){
printf("%d/%d*%d/%d=%d/%d
",a[1],a[0],a[3],a[2],(a[1]*a[3])/calc(a[0]*a[2],a[1]+a[3]),(a[0]*a[2])/calc(a[0]*a[2],a[1]*a[3]));
}else if(op=='/'){
if(a[3]==0){
printf("非法数据!
");
}else{
printf("(%d/%d)/%(d/%d)=%d/%d
",a[1],a[0],a[3],a[2],(a[1]*a[2])/calc(a[1]*a[2],a[0]+a[3]),(a[0]*a[3])/calc(a[1]*a[2],a[0]*a[3]));
}
}else{
printf("非法运算符!
");
}
}else{
if(op=='+'){
if(calc(a[0],a[2])==1){
printf("%d/%d+%d/%d=%d/%d
",a[1],a[0],a[3],a[2],(a[1]*a[2]+a[0]*a[3])/calc(a[1]*a[2]+a[0]*a[3],a[0]*a[2]),a[0]*a[2]/calc(a[1]*a[2]+a[0]*a[3],a[0]*a[2]));
}else{
printf("%d/%d+%d/%d=%d/%d
",a[1],a[0],a[3],a[2],a[1]*calc(a[0],a[2])/a[0]+a[3]*calc(a[0],a[2])/a[2]/calc(a[1]*calc(a[0],a[2])/a[0]+a[3]*calc(a[0],a[2])/a[2],calc(a[0],a[2])));
}
}else if(op=='-'){
if(calc(a[0],a[2])==1){
printf("%d/%d+%d/%d=%d/%d
",a[1],a[0],a[3],a[2],(a[1]*a[2]-a[0]*a[3])/calc(a[1]*a[2]-a[0]*a[3],a[0]*a[2]),a[0]*a[2]/calc(a[1]*a[2]-a[0]*a[3],a[0]*a[2]));
}else{
printf("%d/%d+%d/%d=%d/%d
",a[1],a[0],a[3],a[2],a[1]*calc(a[0],a[2])/a[0]-a[3]*calc(a[0],a[2])/a[2]/calc(a[1]*calc(a[0],a[2])/a[0]-a[3]*calc(a[0],a[2])/a[2],calc(a[0],a[2])));
}
}else if(op=='*'){
printf("%d/%d*%d/%d=%d/%d
",a[1],a[0],a[3],a[2],(a[1]*a[3])/calc(a[0]*a[2],a[1]+a[3]),(a[0]*a[2])/calc(a[0]*a[2],a[1]*a[3]));
}else if(op=='/'){
if(a[3]==0){
printf("非法数据!
");
}else{
printf("(%d/%d)/%(d/%d)=%d/%d
",a[1],a[0],a[3],a[2],(a[1]*a[2])/calc(a[1]*a[2],a[0]+a[3]),(a[0]*a[3])/calc(a[1]*a[2],a[0]*a[3]));
}
}else{
printf("非法运算符!
");
}
}
}

#include<stdio.h>
#include<stdlib.h>
main()
{
int a,b,c,d,i,x,y;
char op;
scanf("%d/%d%c%d/%d",&b,&a,&op,&d,&c);
if(a==0||c==0) exit(0);
if(op=='+'){y=b*c+d*a;x=a*c;}
if(op=='-'){y=b*c-d*a,x=a*c;}
if(op=='*'){y=b*d;x=a*c;}
if(op=='/'){y=b*c;x=a*d;}
if(y==0&&x!=0) { printf("%d/%d%c%d/%d=0\n",b,a,op,d,c); }
else if(x==0) exit(0);
//你的这里怎么可以再用一个ELSE呢,条件已经变化了。后面跟前面没有联系啊
if(x>y) i=y;
while(i>1)
{
if(x%i==0&&y%i==0){x=x/i;y=y/i;continue;}
i--;
}
if(x/i==1) printf("%d/%d%c%d/%d=%d\n",b,a,op,d,c,y);
else printf("%d/%d%c%d/%d=%d/%d.\n",b,a,op,d,c,y,x);
//不明白你后面这里为什么会多出两个花括号。
//由于百度上不能空行,我也不猜测错误原因。你自己理解下。
}
//程序运行无误

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
void operation()
{
int a,b,c,d;
int x,y;
int i,j,t;
char ch; 
printf("-------欢迎进入分数四则运算的操作界面-------\n\n");
printf("请输入第一个分数的分子:"); 
scanf("%d",&b);
printf("请输入第一个分数的分母: ");
scanf("%d",&a);
if(!a)
{
printf("Error,分母不能为0!\n");
exit(0);
}
printf("请输入第二个分数的分子:");
scanf("%d",&d);
printf("请输入第二个分数的分母:");
scanf("%d",&c);
if(!c)
{
printf("Error,分母不能为0!\n");
exit(0);
}

getchar();
printf("请输入运算符号[ + - * / ]: ");
scanf("%c",&ch);
switch(ch)
{
case'+': x=a*c; y=b*c+a*d; break;
case'-': x=a*c; y=b*c-a*d; break;
case'*': x=a*c; y=b*d; break;
case'/': x=a*d; y=b*c; break;
default: printf("Error,不存在该运算符号!\n"); exit(0);
}
printf("通分后的分母是%d,分子是%d\n",x,y);

x>=y?(i=x,j=y):(i=y,j=x);
/*辗转相除法(欧几里德算法)*/
    t=i%j;
    while(t)  
{
i=j;
j=t;
t=i%j;
}
/*更相减损术 */
    /*t=i-j;
while(t)
{
i=j;
j=t;
t=abs(i-j);
if(t==j)
break;
}*/

       if(y/x>=0)
{
x/=j;
     y/=j;
}
else
{
x=abs(x/j);
y=-abs(y/j);
}
        printf("运算结果如下:\n");
if(y%x==0)
printf("%d/%d %c %d/%d = %d\n",b,a,ch,d,c,y/x);
else
printf("%d/%d %c %d/%d =%d/%d\n",b,a,ch,d,c,y,x);
}

void main()
{
operation();
 } 
//转载于微信公众号:会说话的青鸟,这上面有详细的讲解,没看懂可以去那参考一下哦

if(x/i==1) printf("%d/%d%c%d/%d=%d\n",b,a,op,d,c,y);
x/i不都是1么

if(y==1) printf("%d/%d%c%d/%d=%d\n",b,a,op,d,c,y);

i 有可能未初始化

if(x>y) i=y;
else i=x;


数学课程标准学生的数学语言主要表现为
数量关系主要是用符号或含有符号的式子表达数量之间的关系或规律。数与代数是义务教育阶段学生数学学习的重要领域,在小学阶段包括“数与运算”和“数量关系”两个主题.学段之间的内容相互关联,由浅入深,层层递进,螺旋上升,构成相对系统的知识结构。“数与运算”包括整数、小数和分数的认识及其四则运算....

C语言程序设计:实现带有括号的四则运算
呵呵。不知道你是否过关了。我是才看到。我写了个c++版本的。stack_h文件 ifndef STACK_H define STACK_H define STACK_INIT_SIZE 100 include<iostream> using namespace std;template <class type> class stack { public:stack(int = STACK_INIT_SIZE);~stack(){ delete []stackptr;} bool ...

小学1——6年级语文 数学 英语知识点整理 好的追加 严禁吃饱了撑着的...
回答:六(下)语文课文内容复习要点 1、本学期培养的学习习惯:①读万卷书,行万里路;②在实践中学会运用。 2、《长江之歌》是电视系列片《话说长江》的主题歌歌词,词作者是胡宏伟,曲作者是王世光,作者以雄浑的气势,赞颂了长江的宏伟、壮观,以真切的情感表达了中华儿女对长江的热爱、依恋,全诗用第二人称,全诗...

初一上学期的分式,希望有人能够用语言整理!谢谢
分子等于0,则分式值为0。 注:分式的概念包括3个方面:①分式是两个整式相除的分式,其中分子为被除式,分母为除式,分数线起除号的作用;②分式的分母中必须含有字母,而分子中可以含有字母,也可以不含字母,这是区别整式的重要依据;③在任何情况下,分式的分母的值都不可以为0,否则分式无意义。

语文里的数字关于语文的小常识
6、小数与分数的相互改写。 7、小数点位置的移动引起小数大小的变化。 8、四则运算的意义和法则。(同整数) 9、运算定律和性质。 (整数运算定律和性质对小数同样适用) 10、四则混合运算。(同整数四则混合运算) (三)分数 1、分数的意义:把单位“1”平均分成若干份,表示这样一份或几份的数叫做分数。 2、百分...

十进制的来历
在计算数学方面,中国大约在商周时期已经有了四则运算,到春秋战国时期整数和分数的四则运算已相当完备。其中,出现于春秋时期的正整数乘法歌诀“九九歌”,堪称是先进的十进位记数法与简明的中国语言文字相结合之结晶,这是任何其它记数法和语言文字所无法产生的。从此,“九九歌”成为数学的普及和发展最...

什么叫除法
除法是四则运算之一。已知两个因数的积与其中一个非零因数,求另一个因数的运算,叫做除法。两个数相除又叫做两个数的比。若ab=c(b≠0),用积数c和因数b来求另一个因数a的运算就是除法,写作c÷b,读作c除以b(或b除c)。其中,c叫做被除数,b叫做除数,运算的结果a叫做商。

一分之-1怎么简化?
3.繁分数的化简一般由下至上,由左到右,逐次进行化简。繁分数的分子部分和分母部分如果是分数和小数混合出现的形式,可按照分数、小数四则混合运算的方法进行处理。即把小数化成分数,或把分数化成小数后再进行化简。当分子部分和分母部分统一成小数后,化简的方法是中间约分时,把小数看成整数。4.根据...

中西方数学发展史上有什么不同的特点
这部著作于1984年1月,在湖北江陵张家山出土大批竹简中发现的,据有关专家认定《算术书》抄写于西汉初年(约公元前2世纪),成书时间应该更早,大约在战国时期。《算术书》采用问题集形式,共有60多个小标题,90多个题目,包括整数和分数四则运算、比例问题、面积和体积问题等。结论:中国是四大文明古国...

分数乘法教案
本单元是在学生掌握了整数乘法,分数的意义和性质、分数加减法以及约分等知识的上进行学习的,是学习分数、比、分数四则混合运算及百分数的重要基础。本单元的主要学习内容有:整数和分数相乘,分数和分数相乘,分数连乘,“求一个数的几分之几是多少”的问题,倒数的意义和求一个数的倒数。 二、单元教学目标 1.在解决...

北宁市19876894920: C语言中的分数四则运算 -
藩呼依那: #include<stdio.h> #include<stdlib.h> main() { int a,b,c,d,i,x,y; char op; scanf("%d/%d%c%d/%d",&b,&a,&op,&d,&c); if(a==0||c==0) exit(0); if(op=='+'){y=b*c+d*a;x=a*c;} if(op=='-'){y=b*c-d*a,x=a*c;} if(op=='*'){y=b*d;x=a*c;} if(op=='/'){y=b*c;x=a*d;} ...

北宁市19876894920: C语言分数的四则运算 -
藩呼依那: 最低0.27元/天开通百度文库会员,可在文库查看完整内容> 原发布者:茴香绿豆2、如果既有加减、又有乘除法,先算乘除法、再算加减 3、如果有括号,先算括号里面的 4、如果符合运算定律,可以利用运算定律进行简算. 分数的四则运算—...

北宁市19876894920: C语言 分数的四则运算 -
藩呼依那: scanf("%d/%d %c %d/%d",&a,&b,&c,&d,&e);你在% %之间加/干吗啊,要去掉 另外,你说的自动结束程序应该是编程的系统问题,在输出函数之后加上system("pause");试试.顺便说一下,你的排序太乱了

北宁市19876894920: c语言编程分数的四则运算如何约分化简 -
藩呼依那: #include void main() { int num,mark=0,i; int num1,num2,sum,n; scanf("%d",&num); srand((unsigned) time(NULL)); for(i=0;i

北宁市19876894920: C语言编程题(分数的四则运算) -
藩呼依那: //呵呵!写的有些麻烦,但输入的格式你要求的是那样,//只好这样了,应该还符合你的要求!你可以测试一下,//但输入时不必输入括号.如果有兴趣的话,//可以加我qq,大家共同交流!qq:237263394#include<string.h> main() {char mo1,op,...

北宁市19876894920: C语言编写程序,使能对分数进行加减乘除四则运算 急!求!
藩呼依那: 就不写代码了..说思路 关键的部分大概是结果的呈现吧 分数形式的 首先我们需要重载运算符.. 噢 这是C 没有. 那么我们假定是在界面上分别输入分子和分母 这样乘除法计算方法显而易见 加减法则需要利用最小公倍数函数 最后结果的化简需要利用最大公约数函数

北宁市19876894920: c语言 分数的四则运算为什么显示浮点数运算错误? -
藩呼依那: 优先级:括号优先级最高,结合方式从左往右 % * / 是同一优先级,但要高于+ - ,结合方式从左往右 所以说取余与四则运算是同级别是不对的 现在分析你的算式:先不论你的x,y取值 输出结果为0 首先执行() x+y的值被强制转换为整型 其次从左往右执行 a=10 a%3=1 (int)(x+y)%2要么为0 要么为1 如果为0 那么0/4=0 如果为1 1/4等于几呢 1 4都为整数那结果肯定是0 如果说 float m;m = 1 / 4; 那它的结果还是0 不信你可以用编译器调试 那怎么得到0.25呢 把上一句改为 m=1/4.0 结果就为0.25了 希望对你有帮助

北宁市19876894920: c语言中的分数四则运算 出现问题 求救!! -
藩呼依那: 加句return就好了#include #include int main() {int a,b,c,d,i,x,y;char op;scanf("%d/%d %c %d/%d",&b,&a,&op,&d,&c);if(op=='+'){y=b*c+d*a;x=a*c;}if(op=='-'){y=b*c-d*a;x=a*c;}if(op=='*'){y=b*d;x=a*c;}if(op=='/'){y=b*c;x=a*d;}if(y==0&&x!=0) ...

北宁市19876894920: 用c语言编程简单的四则运算 -
藩呼依那: 程序里面用随机数,产生两个自然数,然后根据你需要,如果需要加,就循环上面步骤25次,每次结果打印到文件.如果需要减,也循环25次,依此类推.

北宁市19876894920: 分数计算器用C语言如何实现?编程实现分数计算功能,要有四则运算的功能,使程序能正确识别并计算结果. -
藩呼依那: 给个简单的程序你 #include<stdio.h> #include<math.h>typedef struct Fraction {int m; //分子unsigned int d; //分母 }F;F Addition(F a,F b); //加法 F Subtraction(F a,F b); //减法 F Multiplication(F a,F b); //乘法 F Division(F a,F b); //除法 int ...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网