C 简化分数
我已经编译了一个有理数数据库。整数用来表示有理数的分子和分母。可以执行减法、加法、乘法和除法。然而,在完成任务后,我并没有得到简单的答案。另外,C 简化分数,c,C,我已经编译了一个有理数数据库。整数用来表示有理数的分子和分母。可以执行减法、加法、乘法和除法。然而,在完成任务后,我并没有得到简单的答案。另外,1/2-1/2的答案是0/4,这很奇怪 我的代码: #include <stdio.h> int gcd(int a, int b) { if (a == 0) return b; return gcd(b % a, a); } int addFraction(int n1, int d1, int n2,
1/2-1/2
的答案是0/4
,这很奇怪
我的代码:
#include <stdio.h>
int gcd(int a, int b) {
if (a == 0)
return b;
return gcd(b % a, a);
}
int addFraction(int n1, int d1, int n2, int d2, int d3, int n3) { //Add
d3 = gcd(d1, d2);
d3 = (d1 * d2) / d3;
n3 = (n1) * (d3 / d1) + (n2) * (d3 / d2);
printf("\n %d/%d + %d/%d \t = \t %d/%d\n", n1, d1,n2, d2, n3, d3);
return 0;
}
int subFraction(int n1, int d1, int n2, int d2, int d3, int n3) { //Subtract
d3 = d1 * d2;
n3 = (n1 * d2 - n2 * d1);
printf("\n %d/%d - %d/%d \t = \t %d/%d\n", n1, d1, n2, d2, n3, d3);
return 0;
}
int mulFraction(int n1, int d1, int n2, int d2, int d3, int n3) { //Multiply
n3 = n1 * n2;
d3 = d1 * d2;
printf("\n %d/%d * %d/%d \t = \t %d/%d\n", n1, d1, n2, d2, n3, d3);
return 0;
}
int divFraction(int n1, int d1, int n2, int d2, int d3, int n3) { //division
n3 = n1 * d2;
d3 = d1 * n2;
printf("\n %d/%d / %d/%d \t = \t %d/%d\n", n1, d1, n2, d2, n3, d3);
return 0;
}
int main() {
int n1, d1, n2, d2, d3 = 0, n3 = 0;
printf("\n Enter the values of numerator 1 and denominator 1: ");
scanf("%d %d", &n1, &d1);
printf("\n Enter the values of numerator 2 and denominator 2: ");
scanf("%d %d", &n2, &d2);
addFraction(n1, d1, n2, d2, d3, n3); //calling the function to perform addition of rational values
subFraction(n1, d1, n2, d2, d3, n3); //calling the function to perform subtraction of rational values
mulFraction(n1, d1, n2, d2, d3, n3); //calling the function to perform multiplication of rational values
divFraction(n1, d1, n2, d2, d3, n3); //calling the function to perform division of rational values
return 0;
}
#包括
内部gcd(内部a、内部b){
如果(a==0)
返回b;
返回gcd(b%a,a);
}
intaddfraction(intn1,intd1,intn2,intd2,intd3,intn3){//Add
d3=gcd(d1,d2);
d3=(d1*d2)/d3;
n3=(n1)*(d3/d1)+(n2)*(d3/d2);
printf(“\n%d/%d+%d/%d\t=\t%d/%d\n”,n1、d1、n2、d2、n3、d3);
返回0;
}
整数子分数(整数n1,整数d1,整数n2,整数d2,整数d3,整数n3){//减法
d3=d1*d2;
n3=(n1*d2-n2*d1);
printf(“\n%d/%d-%d/%d\t=\t%d/%d\n”,n1、d1、n2、d2、n3、d3);
返回0;
}
整数倍分数(整数n1,整数d1,整数n2,整数d2,整数d3,整数n3){//
n3=n1*n2;
d3=d1*d2;
printf(“\n%d/%d*%d/%d\t=\t%d/%d\n”,n1、d1、n2、d2、n3、d3);
返回0;
}
整数除法分数(整数n1,整数d1,整数n2,整数d2,整数d3,整数n3){//除法
n3=n1*d2;
d3=d1*n2;
printf(“\n%d/%d/%d/%d\t=\t%d/%d\n”,n1、d1、n2、d2、n3、d3);
返回0;
}
int main(){
int n1,d1,n2,d2,d3=0,n3=0;
printf(“\n输入分子1和分母1的值:”);
scanf(“%d%d”、&n1和&d1);
printf(“\n输入分子2和分母2的值:”);
scanf(“%d%d”、&n2和&d2);
addFraction(n1,d1,n2,d2,d3,n3);//调用函数执行有理值的加法
子分式(n1,d1,n2,d2,d3,n3);//调用函数执行有理值的减法
mulFraction(n1,d1,n2,d2,d3,n3);//调用函数以执行有理值的乘法
divFraction(n1,d1,n2,d2,d3,n3);//调用函数执行有理值的除法
返回0;
}
任何帮助都将不胜感激。您需要对结果使用gcd函数,例如定义一个以简化形式打印分数的函数:
void printFraction(int numerator, int denominator)
{
int d = gcd(numerator, denominator);
int p = numerator / d;
int q = denominator / d;
printf("%d", p);
if (q != 1) {
printf("/%d", q);
}
}
您还需要确保对scanf的调用成功,并且分母不为零。您需要对结果使用gcd函数,例如,通过定义一个以简化形式打印分数的函数:
void printFraction(int numerator, int denominator)
{
int d = gcd(numerator, denominator);
int p = numerator / d;
int q = denominator / d;
printf("%d", p);
if (q != 1) {
printf("/%d", q);
}
}
您还需要确保对scanf的调用成功,并且分母不为零。代码中存在多个问题:
- 函数应该使用指向结果分子和分母的指针
- 您应该在计算其组件后减少结果分数
#include <stdio.h>
int gcd(int a, int b) {
if (a == 0)
return b;
return gcd(b % a, a);
}
void reduce(int n, int d, int *np, int *dp) {
int dd = gcd(n, d);
*np = n / dd;
*dp = n / dd;
}
int addFraction(int n1, int d1, int n2, int d2, int *n3, int *d3) {
reduce(n1 * d2 + n2 * d1, d1 * d2, n3, d3);
printf("%d/%d + %d/%d \t = \t %d/%d\n", n1, d1, n2, d2, *n3, *d3);
return 0;
}
int subFraction(int n1, int d1, int n2, int d2, int *n3, int *d3) {
reduce(n1 * d2 - n2 * d1, d1 * d2, n3, d3);
printf("%d/%d - %d/%d \t = \t %d/%d\n", n1, d1, n2, d2, *n3, *d3);
return 0;
}
int mulFraction(int n1, int d1, int n2, int d2, int *n3, int *d3) {
reduce(n1 * n2, d1 * d2, n3, d3);
printf("%d/%d * %d/%d \t = \t %d/%d\n", n1, d1, n2, d2, *n3, *d3);
return 0;
}
int divFraction(int n1, int d1, int n2, int d2, int *n3, int *d3) {
reduce(n1 * d2, d1 * n2, n3, d3);
printf("%d/%d / %d/%d \t = \t %d/%d\n", n1, d1, n2, d2, *n3, *d3);
return 0;
}
int main() {
int n1, d1, n2, d2, d3, n3;
printf("Enter the values of numerator 1 and denominator 1: ");
if (scanf("%d %d", &n1, &d1) != 2)
return 1;
printf("\n");
printf("Enter the values of numerator 2 and denominator 2: ");
if (scanf("%d %d", &n2, &d2) != 2)
return 1;
printf("\n");
addFraction(n1, d1, n2, d2, &n3, &d3);
subFraction(n1, d1, n2, d2, &n3, &d3);
mulFraction(n1, d1, n2, d2, &n3, &d3);
divFraction(n1, d1, n2, d2, &n3, &d3);
return 0;
}
#包括
内部gcd(内部a、内部b){
如果(a==0)
返回b;
返回gcd(b%a,a);
}
void reduce(int n,int d,int*np,int*dp){
int-dd=gcd(n,d);
*np=n/dd;
*dp=n/dd;
}
整数加分数(整数n1、整数d1、整数n2、整数d2、整数n3、整数d3){
减少(n1*d2+n2*d1、d1*d2、n3、d3);
printf(“%d/%d+%d/%d\t=\t%d/%d\n”,n1、d1、n2、d2、*n3、*d3);
返回0;
}
整数子部分(整数n1、整数d1、整数n2、整数d2、整数n3、整数d3){
减少(n1*d2-n2*d1、d1*d2、n3、d3);
printf(“%d/%d-%d/%d\t=\t%d/%d\n”,n1、d1、n2、d2、*n3、*d3);
返回0;
}
整数倍分数(整数n1、整数d1、整数n2、整数d2、整数n3、整数d3){
减少(n1*n2,d1*d2,n3,d3);
printf(“%d/%d*%d/%d\t=\t%d/%d\n”,n1、d1、n2、d2、*n3、*d3);
返回0;
}
整数分数(整数n1、整数d1、整数n2、整数d2、整数n3、整数d3){
减少(n1*d2,d1*n2,n3,d3);
printf(“%d/%d/%d/%d\t=\t%d/%d\n”,n1、d1、n2、d2、*n3、*d3);
返回0;
}
int main(){
int n1、d1、n2、d2、d3、n3;
printf(“输入分子1和分母1的值:”);
如果(扫描频率(“%d%d”、&n1和&d1)!=2)
返回1;
printf(“\n”);
printf(“输入分子2和分母2的值:”);
如果(扫描频率(“%d%d”、&n2和&d2)!=2)
返回1;
printf(“\n”);
添加分数(n1、d1、n2、d2、n3和d3);
亚组分(n1、d1、n2、d2、n3和d3);
多组分(n1、d1、n2、d2、n3和d3);
二组分(n1、d1、n2、d2、n3和d3);
返回0;
}
您的代码中存在多个问题:
- 函数应该使用指向结果分子和分母的指针
- 您应该在计算其组件后减少结果分数
#include <stdio.h>
int gcd(int a, int b) {
if (a == 0)
return b;
return gcd(b % a, a);
}
void reduce(int n, int d, int *np, int *dp) {
int dd = gcd(n, d);
*np = n / dd;
*dp = n / dd;
}
int addFraction(int n1, int d1, int n2, int d2, int *n3, int *d3) {
reduce(n1 * d2 + n2 * d1, d1 * d2, n3, d3);
printf("%d/%d + %d/%d \t = \t %d/%d\n", n1, d1, n2, d2, *n3, *d3);
return 0;
}
int subFraction(int n1, int d1, int n2, int d2, int *n3, int *d3) {
reduce(n1 * d2 - n2 * d1, d1 * d2, n3, d3);
printf("%d/%d - %d/%d \t = \t %d/%d\n", n1, d1, n2, d2, *n3, *d3);
return 0;
}
int mulFraction(int n1, int d1, int n2, int d2, int *n3, int *d3) {
reduce(n1 * n2, d1 * d2, n3, d3);
printf("%d/%d * %d/%d \t = \t %d/%d\n", n1, d1, n2, d2, *n3, *d3);
return 0;
}
int divFraction(int n1, int d1, int n2, int d2, int *n3, int *d3) {
reduce(n1 * d2, d1 * n2, n3, d3);
printf("%d/%d / %d/%d \t = \t %d/%d\n", n1, d1, n2, d2, *n3, *d3);
return 0;
}
int main() {
int n1, d1, n2, d2, d3, n3;
printf("Enter the values of numerator 1 and denominator 1: ");
if (scanf("%d %d", &n1, &d1) != 2)
return 1;
printf("\n");
printf("Enter the values of numerator 2 and denominator 2: ");
if (scanf("%d %d", &n2, &d2) != 2)
return 1;
printf("\n");
addFraction(n1, d1, n2, d2, &n3, &d3);
subFraction(n1, d1, n2, d2, &n3, &d3);
mulFraction(n1, d1, n2, d2, &n3, &d3);
divFraction(n1, d1, n2, d2, &n3, &d3);
return 0;
}
#包括
内部gcd(内部a、内部b){
如果(a==0)
返回b;
返回gcd(b%a,a);
}
void reduce(int n,int d,int*np,int*dp){
int-dd=gcd(n,d);
*np=n/dd;
*dp=n/dd;
}
整数加分数(整数n1、整数d1、整数n2、整数d2、整数n3、整数d3){
减少(n1*d2+n2*d1、d1*d2、n3、d3);
printf(“%d/%d+%d/%d\t=\t%d/%d\n”,n1、d1、n2、d2、*n3、*d3);
返回0;
}
整数子部分(整数n1、整数d1、整数n2、整数d2、整数n3、整数d3){
减少(n1*d2-n2*d1、d1*d2、n3、d3);
printf(“%d/%d-%d/%d\t=\t%d/%d\n”,n1、d1、n2、d2、*n3、*d3);
返回0;
}
整数倍分数(整数n1、整数d1、整数n2、整数d2、整数n3、整数d3){
减少(n1*n2,d1*d2,n3,d3);
printf(“%d/%d*%d/%d\t=\t%d/%d\n”,n1、d1、n2、d2、*n3、*d3);
返回0;
}
整数分数(整数n1、整数d1、整数n2、整数d2、整数n3、整数d3){
减少(n1*d2,d1*n2,n3,d3);
printf(“%d/%d/%d/%d\t=\t%d/%d\n”,n1、d1、n2、d2、*n3、*d3);
返回0;
}
int main(){
int n1、d1、n2、d2、d3、n3;
printf(“输入分子1和分母1的值:”);
如果(扫描频率(“%d%d”、&n1和&d1)!=2)
返回1;
printf(“\n”);
printf(“输入分子2和分母2的值:”);
如果(扫描频率(“%d%d”、&n2和&d2)!=2)
返回1;
printf(“\n”);
添加分数(n1,