精华内容
下载资源
问答
  • C语言 分数运算

    千次阅读 2019-11-04 22:46:56
    题目 读入4个整数a、b、c、d和一个运算符(‘+’、‘-’、‘*’、‘/’中的一个),进行分数a/b和c/d的对应运算,输出最简结果。...对应每组测试数据,输出分数运算的最简结果,占一行。具体可参照样例...

    题目

    读入4个整数a、b、c、d和一个运算符(‘+’、‘-’、‘*’、‘/’中的一个),进行分数a/b和c/d的对应运算,输出最简结果。

    输入

    有多组测试数据。输入的第一行是整数T(1<=T<=200),表示随后测试数据的组数。每组测试数据占一行,由一个四个正整数a,b,c,d和一个运算符组成,相邻数据间有一个空格

    输出

    对应每组测试数据,输出分数运算的最简结果,占一行。具体可参照样例。

    样例输入 Copy

    3
    1 2 3 4 -
    35 24 24 5 *
    25 72 9 5 /

    样例输出 Copy

    1/2-3/4=-1/4
    35/24*24/5=7
    25/72/9/5=125/648

    解题思路

    #include<stdio.h>
    #include<math.h>
    int main(){
         int n,a,b,c,d,e,fz,fm,m,i,j,p,f=1,l;/*n:几组数据;fz:分子;fm:分母;f:1正0负;*/
         scanf("%d",&n);
         for(i=1;i<=n;i++){/*for循环*/
         	scanf("%d %d %d %d %c",&a,&b,&c,&d,&e);
         	f=1;
            {
            if(e=='-'){fz=a*d-b*c;fm=b*d;}
    		if(e=='+'){fz=a*d+b*c;fm=b*d;}
    		if(e=='/'){fz=a*d;fm=b*c;}
    		if(e=='*'){fz=a*c;fm=b*d;}   /*根据数学计算分别赋值分子分母*/
    		}
    		if(fz%fm==0)          /*整除即输出*/
    		printf("%d/%d%c%d/%d=%d\n",a,b,e,c,d,fz/fm);
    		else{      
    		    if(fz<0){f=0;fz=-fz;}/*分子为负时f赋0*/
    		    if(fz>fm)p=fm;
    		    else p=fz;/*p存储分子分母较小值*/
    			for(j=2;j<=p;j++){
    			     for(l=2;l<=j;l++)
    			     if(fz%l==0&&fm%l==0){
    			          fz=fz/l;fm=fm/l;}
    			}/*约分分子分母*/
    		    if(f==1)printf("%d/%d%c%d/%d=%d/%d\n",a,b,e,c,d,fz,fm);
    		    else printf("%d/%d%c%d/%d=%d/%d\n",a,b,e,c,d,-fz,fm);  /*根据f值分情况输出*/
    		    }
    	  }
         
    }
    
    展开全文
  • 100个经典c语言程序hbnkaf5pdvbbs________________________________________100个经典C语言程序1.绘制余弦曲线在屏幕上用“*”显示0~360度的余弦函数cos(x)曲线*问题分析与算法设计如果在程序中使用数组,这个问题...

    100个经典c语言程序hbnkaf5p

    dvbbs

    ________________________________________

    100个经典C语言程序

    1.绘制余弦曲线

    在屏幕上用“*”显示0~360度的余弦函数cos(x)曲线

    *问题分析与算法设计

    如果在程序中使用数组,这个问题十分简单。但若规定不能使用数组,问题就变得不容易了。

    关键在于余弦曲线在0~360度的区间内,一行中要显示两个点,而对一般的显示器来说,只能按行输出,即:输出第一行信息后,只能向下一行输出,不能再返回到上一行。为了获得本文要求的图形就必须在一行中一次输出两个“*”。

    为了同时得到余弦函数cos(x)图形在一行上的两个点,考虑利用cos(x)的左右对称性。将屏幕的行方向定义为x,列方向定义为y,则0~180度的图形与180~360度的图形是左右对称的,若定义图形的总宽度为62列,计算出x行0~180度时y点的坐标m,那么在同一行与之对称的180~360度的y点的坐标就 应为62-m。程序中利用反余弦函数acos计算坐标(x,y)的对应关系。

    使用这种方法编出的程序短小精炼,体现了一定的技巧。

    *程序说明与注释

    #include

    #include

    void main()

    {

    double y;

    int x,m;

    for(y=1;y>=-1;y-=0.1) /*y为列方向,值从1到-1,步长为0.1*/

    {

    m=acos(y)*10; /*计算出y对应的弧度m,乘以10为图形放大倍数*/

    for(x=1;x

    printf(" ");

    printf("*"); /*控制打印左侧的 * 号*/

    for(;x<62-m;x++)

    printf(" ");

    printf("*\n"); /*控制打印同一行中对称的右侧*号*/

    }

    }

    2.绘制余弦曲线和直线

    在屏幕上显示0~360度的cos(x)曲线与直线f(x)=45*(y-1)+31的迭加图形。其中cos(x)图形用“*”表示,f(x)用“+”表示,在两个图形相交的点上则用f(x)图形的符号。

    *问题分析与算法设计

    本题可以在上题的基础上进行修改。图形迭加的关键是要在分别计算出同一行中两个图形的列方向点坐标后,正确判断相互的位置关系。为此,可以先判断图形的交点,再分别控制打印两个不同的图形。

    *程序注释与说明

    #include

    #include

    void main()

    {

    double y;

    int x,m,n,yy;

    for(yy=0;yy<=20;yy++) /*对于第一个y坐标进行计算并在一行中打印图形*/

    {

    y=0.1*yy; /*y:屏幕行方向坐标*/

    m=acos(1-y)*10; /*m: cos(x)曲线上y点对应的屏幕列坐标*/

    n=45*(y-1)+31; /*n: 直线上y点对应的列坐标*/

    for(x=0;x<=62;x++) /*x: 屏幕列方向坐标*/

    if(x==m&&x==n) printf("+"); /*直线与cos(x)相交时打印“+”*/

    else if(x==n) printf("+"); /*打印不相交时的直线图形*/

    else if(x==m||x==62-m) printf("*"); /*打印不相交时的cos(x)图形*/

    else printf(" "); /*其它情况打印空格*/

    printf("\\n");

    }

    }

    -- 作者:huang01

    -- 发布时间:2004-10-21 16:59:29

    --

    3.绘制圆

    在屏幕上用“*”画一个空心的圆

    *问题分析与算法设计

    打印圆可利用图形的左右对称性。根据圆的方程:

    R*R=X*X+Y*Y

    可以算出圆上每一点行和列的对应关系。

    *程序说明与注释

    #include

    #include

    void main()

    {

    dou

    展开全文
  • #include #include #include //using namespace std;class fraction{public:fraction(int x... //以“/”的分数形式输出//定义重载运算符的友元函数friend fraction operator+(fraction &a,fraction &b);fri...

    #include

    #include

    #include

    //using namespace std;

    class fraction

    {

    public:

    fraction(int x=0,int y=1);

    void print(); //以“/”的分数形式输出

    //定义重载运算符的友元函数

    friend fraction operator+(fraction &a,fraction &b);

    friend fraction operator-(fraction &a,fraction &b);

    friend fraction operator*(fraction &a,fraction &b);

    friend fraction operator/(fraction &a,fraction &b);

    private:

    int numerator,denominator;  //numerator为分子,denominator为分母

    void optim();//  化简的函数

    };

    void fraction::optim()

    {

    int gcd,min,max;

    if(denominator==0)

    {

    cout<

    exit(1);

    }

    gcd=(abs(numerator)>abs(denominator)?abs(denominator):abs(numerator));

    if(gcd==0) return;          //注意:return语句的特殊用法

    if(abs(numerator)>abs(denominator))

    {

    max=numerator;

    min=denominator;

    }

    else

    {

    min=numerator;

    max=denominator;

    }

    do

    {

    gcd=max%min;

    max=min;

    min=gcd;

    }while(gcd!=0);

    numerator/=max;

    denominator/=max;

    if(denominator<0)

    {

    numerator=-numerator;

    denominator=-denominator;

    }

    }

    fraction::fraction(int x,int y)

    {

    numerator=x;

    denominator=y;

    }

    void fraction::print()

    {

    cout<

    optim();

    }

    fraction operator+(fraction &a,fraction &b)

    {return( fraction(a.numerator+b.numerator,a.denominator+b.denominator);

    }

    fraction operator-(fraction &a,fraction &b)

    {return( fraction(a.numerator-b.numerator,a.denominator-b.denominator);

    }

    fraction operator*(fraction &a,fraction &b)

    {return( fraction(a.numerator*b.numerator,a.denominator*b.denominator);

    }

    fraction operator/(fraction &a,fraction &b)

    {return (a.numerator*b.denominator,a.denominator*b.numerator);

    }

    int main()

    {  fraction a(2,3),b(3,4),c(0,1),d(0,1),e(0,1),f(0,1);

    c=a+b;

    d=a-b;

    e=a*b;

    f=a/b;

    cout<

    cout<

    cout<

    cout<

    return 0;

    }

    额   不知道学过c++没,应该能看懂吧

    展开全文
  • 问题出在1/2,运算表达式中出现两个整型数据的相除,相除结果为整型,在此1/2的结果为0,所以给h赋的值最终为0 如何使分数参与运算的表达式正确? 分数带上.0表示浮点数 #include #include #define g 10 #define t 3...

    我们要计算一个物理自由落体运动的3s的位移,设重力加速度为10m/s^2

    ​公式为h = 1/2 g t^2

    如果用小数0.5表示1/2

    代码如下:

    #include<stdio.h>
    #include<math.h>
    #define g 10
    #define t 3
    int main(){
        float h;
        h = 0.5 * g * pow(t, 2);
        printf("h = %0.2f", height);
        return 0;
    }
    

    输出结果:

    h = 45.00
    

    将0.5改为1/2

    代码如下:

    #include<stdio.h>
    #include<math.h>
    #define g 10
    #define t 3
    int main(){
        float h;
        h = 1/2 * g * pow(t, 2);
        printf("h = %0.2f", height);
        return 0;
    }
    

    输出结果:

    h = 0.00
    

    为什么没有输出正确结果?
    问题出在1/2,运算表达式中出现两个整型数据的相除,相除结果为整型,在此1/2的结果为0,所以给h赋的值最终为0

    如何使分数参与运算的表达式正确?

    分数带上.0表示浮点数

    #include<stdio.h>
    #include<math.h>
    #define g 10
    #define t 3
    int main(){
        float height;
        height = 1.0/2.0 * g * pow(t,2);
        printf("height = %0.2f", height);
    }
    

    输出结果:

    h = 45.00
    
    展开全文
  • C语言 分数四则运算

    千次阅读 2018-11-07 20:50:45
    #include&lt;stdio.h&gt; int main() { int x1,x2,y1,y2,a,b; char fh; scanf("%d/%d %c %d/%d",&amp;x1,&amp;x2,&amp;fh,&amp;y1,&amp;y2);... a=x1...
  • C语言 分数加减运算

    千次阅读 2018-07-31 16:40:10
    #include&lt;stdio.h&gt; #include&lt;math.h&gt; char s[100]; int lcm(int n,int m){ //构建求得最小公倍数的函数    int i;    for(i = n; i &lt;= n*m; i = i + n){ ...i...
  • } else if (this->up > this->down) { //假分数:分子>分母 printf("%lld %lld/%lld", this->up / this->down, abs(this->up) % abs(this->down), this->down); } else { //真分数:分子up, this->down); } printf("\...
  • C语言实现分数的四则运算

    千次阅读 2018-10-15 20:06:58
    C语言实现分数的四则运算 #include&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;stdio.h&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt; int main() { int a,b,d,e,f...
  • 2、再找出在两正分数之间的分子分母最大公约数为1的分数,用一下辗转相除法。做后总结1、本人感觉应该还有更好的方法,后续再想想。#includeint com(const void* a,const void* b){return *(double*)a>*(double*)...
  • struct fraction {//分数的结构体定义 int up;//分子 int down;//分母 }; int legal = 0;//分数合法标志,初值为0才能输入 int gcd(int a,int b) {//求最大公约数 if (b == 0) return a; else return gcd(b,...
  • 输入含有两个分数的表达式求出其结果以分数形式表示 解决思路:将两个分数通分后运算并将其结果约分输出 ...//cal函数计算出分数运算后的结果,未约分 void fun();//用来对n1和n2进行约分 int a,b,c,d; char ch;
  • c语言分数计数程序

    千次阅读 2014-01-13 12:31:02
     printf("其运算结果为:%d/%d\n",fz,fm); } void add(int a,int b,int c,int d) {  int u1,u2,v=gbs(b,d),fz1,fm1;  printf("%d\n",v);  u1=v/b*a;  u2=v/d*c;  fz1=u1+u2;  fm1=v; ...
  • 作者的思路是16种结果,每一种结果计算一次分数差 1、0-15 正好二进制 0000 - 1111 0001 0010 0011 .... 1110 1111 表示16种结果(这里可以单纯理解为甲的结果,1胜利,0失败) 2、for 4次循环,代表4局比赛, ...
  • 分数的表示:需要分别表示分子和分母,可以采用结构体的形式。...于是可以得到使用结构体表示的分数四则运算函数 分数加法: fraction add(fraction a,fraction b) { fraction result; resu...
  • c语言 分数阶乘计算

    千次阅读 2017-10-13 11:54:20
    计算n为1~100的[(-1)^(n+1)*(1/n)]!
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼函数主要分为四个部分:...下面是源代码和编译错误结果:(因为不能上传附件,所以只能直接贴出来了)//两个分数的算数运算并且用最简式表示出来#include#include#include...
  • 分数的显示 ③分数化简 ④加减乘除实现 看似麻烦实际上最本质的操作就是 求最大公约数和最小公倍数 代码实现 #include <stdio.h> int gcd(int a,int b)//求最大公约数 { int tmp; int r; if(a<b) { ...
  • 标签:c++位运算是一种针对二进制数的一种运算运算 共有六种都有其对应得操作符号& (and) 位于| (or) 位或~ (not) 取反^ (xor) 异或>> (shr) 右移一位<< (shl) 左移一位运算说明:=== 1. and...
  • 下面这个程序使用C语言的结构体实现了分数的加减乘除四则运算,同时将结果最简化#include <stdio.h>struct fraction { int numerator; int denominator; };// 将分数化为最简形式 struct fraction reduce_fraction...
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼当个反面典型,让大家见识下丑陋无比的程序好了,主要是想练练打字,HOHO。应该用二维数组且全部函数化的,rand的%后面或是101或是100,可能和编译器有关,TC2下应写100...
  • 古代埃及人在进行分数运算时,只使用分子是1的分数。因此这种分数也叫做埃及分数,或者叫单分子分数。如:8/11=1/2+1/5+1/55+1/110。若真分数的分子b能整除分母a,则真分数经过化简就可以得到埃及分数;若真分数的...
  • 设计思想:出三十道一百以内数的随机四则运算题目,先随机两个一百以内的数字,再通过随机数确定四则运算算符,最后通过for循环输出三十道源代码程序:#include #include #include #include int main(){int a = 0;...
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼当个反面典型,让大家见识下丑陋无比的程序好了,主要是想练练打字,HOHO。应该用二维数组且全部函数化的,rand的%后面或是101或是100,可能和编译器有关,TC2下应写100...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,473
精华内容 2,989
关键字:

c语言分数运算

c语言 订阅