当然,下面的代码包括了加减乘除以及分数的化简的函数,但是无法输入0,还请各位大神多多斧正

#include<stdio.h>
#include<stdlib.h>
//有理数数据类型定义 
typedef struct {
    int fenzi;
    int fenmu; 
} *ration,ration1;
//函数声明 
void mul(ration num1,ration num2);//执行乘法函数并输出结果
void div(ration num1,ration num2);//执行除法函数并输出结果
void add(ration num1,ration num2);//执行加法函数并输出结果
void sep(ration num1,ration num2);//执行减法函数并输出结果 
void clean(int num1,int num2);//化简分数的函数

void clean(int num1,int num2)
{
    int flag = 0;
    //判断两数是否发生交换
    int temp;
    if(num1 < num2) 
    {
        temp = num1;
        num1 = num2;
        num2 = temp;
        flag = 1;
    }
    int i = num2;//寻找最大公因数 
    while(i >= 1)
    {
        if(num1 % i == 0 && num2 % i == 0)
        {
            break;
        }
        i--;
    }
    num1 = num1 / i;
    num2 = num2 / i;
    if(flag)
    {
        temp = num1;
        num1 = num2;
        num2 = temp;
    }
    printf("%d/%d\n",num2,num1);    
}

void add(ration num1,ration num2)
{
    int resultmu = num1->fenmu * num2->fenmu;
    int resultzi;
    resultzi = num1->fenzi * num2->fenmu + num1->fenmu * num2->fenzi;
    clean(resultmu,resultzi);
}

void sep(ration num1,ration num2)
{
    int resultmu = num1->fenmu * num2->fenmu;
    int resultzi;
    resultzi = num1->fenzi * num2->fenmu - num1->fenmu * num2->fenzi;
    clean(resultmu,resultzi);
}

void mul(ration num1,ration num2)
{
    int resultmu = num1->fenmu * num2->fenmu;
    int resultzi = num1->fenzi * num2->fenzi;
    clean(resultmu,resultzi);
}

void div(ration num1,ration num2)
{
    int resultmu = num1->fenmu * num2->fenzi;
    int resultzi = num1->fenzi * num2->fenmu;
    clean(resultmu,resultzi);
}

int main()
{
    ration num1 = (ration)malloc(sizeof(ration1));
    ration num2 = (ration)malloc(sizeof(ration1));
    //定义两个有理数型指针以及为其分配结构体空间
    if(num1 == NULL || num2 == NULL)
    {
        printf("内存分配不够");
        exit(1);
    }
    printf("输入第一个形如(x/y)的有理数(整数形如2/1):"); 
    scanf("%d/%d",&num1->fenzi,&num1->fenmu);
    printf("输入第二个形如(x/y)的有理数(整数形如2/1):"); 
    scanf("%d/%d",&num2->fenzi,&num2->fenmu);
    //输入数据完毕
    if(num1->fenmu == 0 || num2->fenmu == 0)
    {
        printf("有理数分母为0,不符合数学定义,程序结束");
        exit(1); 
    }
    printf("对两个有理数执行乘法:");
    mul(num1 ,num2);
    printf("对两个有理数执行除法:");
    //对除法的除数不仅要判断分母的合理性,还要判断分子不能为0
    if(num2->fenzi != 0)
    {
        div(num1 ,num2);
    } 
    else
    {
        printf("除数为0,不符合数学逻辑,故不执行除法操作");
    }
    printf("对两个有理数执行加法:");
    add(num1 ,num2);
    printf("对两个有理数执行减法:");
    sep(num1 ,num2);
    free(num1);
    free(num2);
    //显示学号姓名
    int count = 5;
    while(count){
        putchar('\n');
        count--;
    } 
    printf("学生姓名:罗文广\n");
    printf("学号:%d\n",2021102533);
    return 0;
}

数据结构 有理数实现加减乘除运算相关推荐

  1. 有理数加减乘除 计算机应用带答案,列50道有理数的混合运算(加减乘除)包括答案 初一的...

    列50道有理数的混合运算(加减乘除)包括答案 初一的 列50道有理数的混合运算(加减乘除)包括答案 初一的 人气:123 ℃时间:2019-09-17 20:27:24 优质解答 一定要选我为最佳答案 ...

  2. java float 加法_JAVA 实现精确的加减乘除运算

    JAVA在加减乘除运算时易发生精度丢失,达不到我们想要的计算结果:为了能够精确表示.计算浮点数,JAVA提供了BigDecimal类,可以以BigDecimal为基础定义一个Arith工具类,代码如下 ...

  3. 简单工厂模式--加减乘除运算

    下面基于简单的<加减乘除运算>实例来讲讲实用简单工厂模式:<备注:以后根据认识的加深,可以添加和修改内容> 需求分析:希望程序提供"加减乘除"四种功能. 功 ...

  4. java用流体加减乘除_任意输入两个数,完成加法、减法、乘法、除法运算!(加减乘除运算分别定义四个方法)_学小易找答案...

    [简答题]编写程序实现菜单设计 [简答题]一层平面图 [简答题]编写一个程序实现大小写字母转换 [简答题]利用循环语句输出一个五行的等腰三角形,如下图 [简答题]编写一个程序实现交换两个变量的数值. ...

  5. matlab 矩阵加减乘除运算

    文章目录 matlab 矩阵加减乘除运算 1 .加.减运算 2. 乘法 3.向量点积 4.向量叉乘 5.混合积 6.矩阵的卷积和多项式乘法 7.反褶积(解卷)和多项式除法运算 8.张量积 9. 除法运 ...

  6. [基础题]2.(*)利用接口做参数,写个计算器,能完成加减乘除运算。

    /*2.(*)利用接口做参数,写个计算器,能完成加减乘除运算. (1)定义一个接口Compute含有一个方法int computer(int n, int m). (2)设计四个类分别实现此接口,完成 ...

  7. sql的加减乘除运算_SQL简单查询语、运算符学习和练习

    本次主要学习了SQL语言的书写和运算,多为实操,一定要多写多思考,综合运用起来. 基本查询语句(select *全部 as替换 distinct删除重复) 指定查询条件(where 从哪里查询) 注释 ...

  8. 关于浮点型加减乘除运算不精确的问题

    关于浮点型加减乘除运算不精确的问题 先举一个遇到这个错误的项目例子: 之前做一个小模块,由于后端接口还没有完成,需要自己搭建node服务,返回数据,功能需求是实时更新的,这个小模块中本人没有使用web ...

  9. 51单片机实现三位十进制数加减乘除运算

    51单片机实现三位十进制数加减乘除运算 一.题目 51单片机IO接口作业 请将附件给出的Proteus图用51单片机完成一个计算器功能. 1.显示采用动态分时8位共阳数码管输出. 2.采用4*4矩阵键 ...

最新文章

  1. Python中处理时间 —— time模块
  2. XP调整禁用页面文件
  3. css比较特殊选择器汇总(持续更新)
  4. react-native 发送接收“广播”
  5. 花瓣长度和花瓣宽度散点图鸢尾花_[创意榫卯结构] 形如花瓣的燕尾榫,不但美,而且非常牢固...
  6. 机器学习工程师 - Udacity 强化学习 Part Nine
  7. 怎么使用聚焦搜索NTFS格式磁盘
  8. linux巡检 python_LINUX服务器批量巡检的PYTHON脚本
  9. CDN 原理和几种变形(DCDN/ECDN/PCDN/SCDN)
  10. java 解析p12_java读取*.p12证书的信息
  11. 饥荒一直服务器没有响应,饥荒总是启动服务器进不去 | 手游网游页游攻略大全...
  12. 数码单反相机与无反光镜相机。选择产品摄影解决方案
  13. OA办公——SwebUI开源应用解决方案
  14. (1)asp。net操作ftp,上传和下载 (2) 长时间提交,在提交后禁止页面按钮 (3) 方便的javascript日历
  15. 电子签名、私钥、公钥
  16. 直播系统开发,直播平台源码切忌一成不变
  17. 信息系统项目管理师考试是自学好还是找培训好?
  18. 发现一个有趣的漫画网站
  19. 虚拟机 Ubuntu 14.04 LTS (64 bits) 下安装 Kurento v6 并运行 kurento-hello-world
  20. 字符串分割【Java】

热门文章

  1. 【软件测试】一个真正的测试面试过程,我比面试官还狡猾......
  2. AtCoder Regular Contest 084
  3. 云原生时代的流水线框架 Argo
  4. ELK搭建-基于自制docker镜像
  5. 物理渲染数学(s2013_pbs_physics_math_notes)
  6. 对于编码器与解码器的理解
  7. 99元包月,每周鲜花送上门,看好!
  8. java 案例写作_用Java编写一个银行转账案例
  9. 计算机专业车辆控制,智能无人驾驶汽车的计算机控制系统详细介绍和要求及设计资料概述...
  10. 关于Android Studio中点9图的编译错误问题:Some file crunching failed