C分数算术

C分数算术,第1张

概述我需要为分配做以下事情,我遇到了很大困难: 一个.声明包含有理数的数据结构. 湾写f’xns会, – ,*,/有理数. 所有f’xns必须传递3个参数,每个参数指向在a部分中声明的类型I的数据结构; 2个参数= *** 作数,第3个=结果. C.编写一个f’xn,它将指向数据结构的指针作为参数,并返回数字的GCD. &安培; DENOM. d.使用c部分中的f’xn编写一个将分数(有理数)减少到最低项的f 我需要为分配做以下事情,我遇到了很大困难:
一个.声明包含有理数的数据结构.
湾写f’xns会,–,*,/有理数.
所有f’xns必须传递3个参数,每个参数指向在a部分中声明的类型I的数据结构; 2个参数= *** 作数,第3个=结果.
C.编写一个f’xn,它将指向数据结构的指针作为参数,并返回数字的GCD. &安培; DENOM.
d.使用c部分中的f’xn编写一个将分数(有理数)减少到最低项的f’xn.传入指向分数的指针,并用f’xn修改分数.
即写入输入和输出功能,以便用户可以以1/5的形式输入分数.

应允许用户输入任意数量的问题,程序应以最低的条件输出答案.

我在正确的轨道上吗?我相信我有一个c-down,但不是d,尤其是e.有人可以指导我或帮我纠正我的剧本吗?

int GCD (int numer,int denom){    int result;    while (denom > 0) {        result = numer % denom;        numer = denom;        denom = result;    }    return numer;}int getLCM (int numer,int denom){    int max;    max = (numer > denom) ? numer : denom;    while (1) {        if (max % numer == 0 && max % denom == 0)            break;        ++max;    }    return max;}struct Fraction {    int numer;    int denom;};typedef struct {    int numer;    int denom; };FractionFraction add_fractions (Fraction a,Fraction b){    Fraction sum;    sum.numer = (a.numer * b.denom) + (b.numer * a.denom);    sum.denom = a.denom * b.denom;    return sum;}Fraction subtract_fractions (Fraction a,Fraction b){    Fraction sum;    sum.numer = (a.numer * b.denom) - (b.numer * a.denom);    sum.denom = a.denom * b.denom;    return sum;}Fraction multiply_fractions (Fraction a,Fraction b){    Fraction sum;    sum.numer = (a.denom * b.denom);    sum.denom = (a.numer * b.numer);    return sum;}Fraction divIDe_fractions (Fraction a,Fraction b){    Fraction sum;    sum.numer = (a.denom * b.numer);    sum.denom = (a.numer * b.denom);    return sum;}int main (){    char response;    printf ("FRACTION ARITHMETIC PROGRAM\n");    printf ("Enter your problem (example 2/3 + 1/5):\n");    scanf (,&problem);    if (denom == 0 || denom < 0) {        printf ("Illegal input!!\n");        printf ("Another problem (y/n)?  ");        scanf ("%c%*c",&response);    } else {        printf ("The answer is  ");        printf ("Another problem (y/n)?  ");        scanf ("%c%*c",&response);    }    while ((response == 'y') || (response == 'Y')) {        printf ("\nWould you like to play again?\n");        scanf ("%c%*c",&response);    }    while ((response == 'n') || (response == 'N'))        printf ("Goodbye and thank you");    return 0;}

删除typedef后编辑感谢评论回复:

struct Fraction {    int numer;    int denom;};struct Fraction add_fractions (struct Fraction a,struct Fraction b){    struct Fraction sum;    sum.numer = (a.numer * b.denom) + (b.numer * a.denom);    sum.denom = a.denom * b.denom;    return sum;}struct Fraction subtract_fractions (struct Fraction a,struct Fraction b){    struct Fraction sum;    sum.numer = (a.numer * b.denom) - (b.numer * a.denom);    sum.denom = a.denom * b.denom;    return sum;}struct Fraction multiply_fractions (struct Fraction a,struct Fraction b){    struct Fraction sum;    sum.numer = (a.denom * b.denom);    sum.denom = (a.numer * b.numer);    return sum;}struct Fraction divIDe_fractions (struct Fraction a,struct Fraction b){    struct Fraction sum;    sum.numer = (a.denom * b.numer);    sum.denom = (a.numer * b.denom);    return sum;}
解决方法 您的代码的一些评论:

>你没有完全遵循你的要求,因为当需要获取指向struct的指针时,GCD函数需要2个整数,并且你的函数将2个struct作为参数,当它们需要3个(指向)结构时返回另一个.
>你的GCD功能使用了一个很好的GCD实现(感谢Jonathan的评论),即使有些评论解释为什么对未来的读者会很好
>正如你在评论中所说,你应该在对它们进行 *** 作之前减少有理数以避免不必要的溢出,并且在添加或减去有效性时,你应该使用denom的LCM出于同样的原因
>您的LCM算法很差.由于你的GCD很好,为什么不简单地使用:LCM(a,b)= a * b / GCD(a,b)计算为lcm =(a / gcb)* b以降低溢出风险(感谢@nm的简化形成)
> a / b的简化形式是’/ b’,其中’= a / GCD(a,b)和b’= b / GCD(a,b)
>对于输入和输出的“%d /%d”格式,结构的两个成员怎么样?

最后但并非最不重要的是,格式化“%c%* c”以获得对同一个问题的回答是可能但危险的:您可能会将前面输入的换行符转换为响应!选择一个面向行的输入(使用fgets sscanf)或自由格式输入(使用scanf或fscanf)并坚持使用它. %1s变成char响应[2]更安全……

并仔细写下评论,你只处理积极的理性或照顾标志!这样的细节可能会让图书馆的用户感到愤怒……更不用说挑剔老师了(credits为Jonathan Leffler).

总结

以上是内存溢出为你收集整理的C分数算术全部内容,希望文章能够帮你解决C分数算术所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1241448.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存