c语言程序分数化简,【C/C++】分数化简

这些题目都是大一刚入学时学习C语言的课后作业,在OJ上看到还保留着,就都整理下发出来吧......(只有题和代码)

【问题描述】

编写程序,从控制台读入一个分数的分子和分母(分数无符号,并且分子小于分母,其大小不会超过int数据类型的表示范围),输出化简后分子和分母不含公约数的分数。

【输入形式】

从控制台输入两个正整数分别表示分子和分母,两整数之间以一个空格分隔。

【输出形式】

在标准输出上输出化简后的分子和分母,以一个空格分隔。

【输入样例1】

26664 479952

【输出样例1】

1 18

【样例1说明】

输入的分子为26664,分母为479952,分母可以被分子整除,输出化简后的分子为1,分母为18。

【输入样例2】

9 24

【输出样例2】

3 8

【样例2说明】

输入的分子为9,分母为24,化简后分子和分母分别为3和8,不含公约数。

【评分标准】

该题要求输出化简后的分子和分母,提交程序文件名为fraction.c。

【代码】

#include//自定义函数求公约数。即可得到化简后的分式

int main()

{

int max(int,int);

int min(int,int);

int a,b;

scanf("%d %d",&a,&b);

printf("%d %d",a/max(a,b),b/max(a,b));

return 0;

}

int max(int a,int b)

{

int i;

while(b!=0)

{

i=a%b;

a=b;

b=i;

}

return a;

}

PS:由于当时刚学C语言,很多代码显得很稚嫩...需要的人见谅...

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这个分数序列是由以下规律得来的: 第一个分数是 1/2。 第二个分数是 3/2,即前一个分数分子加上 1,分母不变。 第三个分数是 5/3,即前一个分数分子加上 2,分母加上 1。 以此类推,可以得到这个分数序列的通项公式: 第 n 个分数为 (2n-1)/(n),其中 n 为正整数。 因此,这个分数序列的前几项别为: 1/2, 3/2, 5/3, 7/4, 9/5, ... ### 回答2: 这个序列是由以下规律得到的:从2开始的奇数除以从1开始的自然数,依次得到的分数,即1/2、3/2、5/3、7/4、9/5……可以发现,分子从1开始,每次加2;分母从2开始,每次加1。 我们可以用C语言编写一个程序输出这个序列。首先,我们需要定义两个变量,一个用于存放分子,一个用于存放分母: ```c int numerator = 1; // 分子 int denominator = 2; // 分母 ``` 然后,我们可以使用一个循环来依次输出序列中的每个分数。由于需要输出多个分数,我们可以使用一个for循环,循环计数器从1开始,循环n次(n表示需要输出分数的个数): ```c int n = 10; // 输出10个分数 for (int i = 1; i <= n; i++) { printf("%d/%d ", numerator, denominator); numerator += 2; // 分子加2 denominator++; // 分母加1 } ``` 在循环中,我们每次输出当前的分数,然后将分子加2,分母加1。最后,我们可以将这个程序完整地写出来: ```c #include <stdio.h> int main() { int numerator = 1; // 分子 int denominator = 2; // 分母 int n = 10; // 输出10个分数 for (int i = 1; i <= n; i++) { printf("%d/%d ", numerator, denominator); numerator += 2; // 分子加2 denominator++; // 分母加1 } printf("\n"); return 0; } ``` 运行这个程序,就可以得到如下输出结果: ``` 1/2 3/2 5/3 7/4 9/5 11/6 13/7 15/8 17/9 19/10 ``` 这个程序可以输出任意数量的分数序列,只需要将n的值修改为需要输出分数的个数即可。 ### 回答3: 这里有一些关于C语言和该分数序列的相关知识: 首先,C语言可以使用整型和浮点型变量进行数学计算,但是在计算分数时需要小心,因为C语言默认会将整数除法结果转换为整数,因此必须使用浮点型变量或将数值强制转换为浮点型,否则计算结果会不正确。 其次,这个分数序列可以使用循环语句和数组来计算和存储。具体来说,我们可以使用一个数组来存储这个分数序列,如下所示: float fractions[3] = {1.0/2, 3.0/2, 5.0/3}; 这个数组中的每个元素都是一个浮点数,别表示1/2,3/2和5/3这三个分数。 我们还可以使用循环语句来生成这个分数序列,具体来说,可以使用一个for循环,从1开始循环,每次加2,同时计算每个分数,直到计算到第三个分数: float fractions[3]; int i; for(i = 0; i < 3; i++){ fractions[i] = (2*i + 1)*1.0/(i + 1); } 这个代码片段中,我们使用了一个for循环循环3次,每次计算一个分数并将其存储在数组中。在计算分数时,我们使用了公式(2i+1)/(i+1),其中i表示循环的次数。 最后,我们可以使用循环语句和数组来打印出这个分数序列,具体来说,可以使用一个for循环遍历数组,依次打印每个分数: int i; for(i = 0; i < 3; i++){ printf("%d/%d ", (int)((2*i + 1)/(i + 1)), i+1); } 这个代码片段中,我们使用了一个for循环遍历数组,依次打印每个分数,并使用printf函数将其输出。在打印分数时,我们使用了(2i+1)/(i+1)这个公式来计算分子分母,但是由于C语言默认会将整数除法结果转换为整数,因此我们需要将其转换为整形再进行输出

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值