嘿我正在编写一个添加分数的简单程序。 但每当我运行程序时,它都不会执行操作。 它只扫描输入,但没有输出。
请发现我的错误! >>>>>>>不能使用FLOATS<<<<<<<<<<
#include <stdio.h>
int main ( void )
{
int lcd, d1, d2, num1, num2, sum;
printf("Enter the first number:");
printf("Enter the numerator:");
scanf("%d", num1);
printf("Enter the denominator:");
scanf("%d", &d1);
printf("Enter the second number:");
printf("Enter the numerator:");
scanf("%d", &num2);
printf("Enter the denominator:");
scanf("%d", &d2);
for (lcd = d1; lcd % d2 != 0; lcd+= d1);
num1 *= lcd / d1;
num2 *= lcd / d2;
sum = num1 + num2;
printf("%d", sum);
return 0;
}
答案 0 :(得分:2)
scanf
必须收到指针
scanf("%d", num1)
- &gt; scanf("%d", &num1)
因为scanf
使用按引用调用。那是什么?请参阅以下代码。
#include <stdio.h>
void foo(int i)
{
i = 1;
}
void bar(int *pi)
{
*pi = 1;
}
int main()
{
int a = 2;
foo(a);
printf("%d", a); /* output is 2 */
bar(&a);
printf("%d", a); /* output is 1 */
}
在foo(a)
中,我们使用按值调用。这意味着当我们调用a
时,foo
被复制。 i = 1
的代码foo
仅更改a
的副本,并且不会更改a
的实际值。
在bar(&a)
中,我们使用按引用调用。你能找到区别吗?是的,它是bar(&a)
,而不是bar(a)
。 “&
”运算符获取a
的指针,我们用指针调用bar
。因此pi
引用a
,*pi = 1
成功更改a
的实际值。
这里有一个真实的例子:printf
和scanf
。
int i = 0;
printf("output number : %d\n", i);
scanf("%d", &i); /* input number */
printf
不需要更改其参数,因此它使用call-by-value。
但是,scanf
接收用户的输入并将其参数更改为用户的输入。所以它使用call-by-reference。因此,我们应该使用&i
,而不是i
。
答案 1 :(得分:0)
它需要那么复杂吗?为什么不把分子除以分母?
另外,你使用整数。我想你想要漂浮物。
#include <stdio.h>
int main ( void )
{
int d1, d2, num1, num2;
printf("Enter the first number:");
printf("Enter the numerator:");
scanf("%d", &num1);
printf("Enter the denominator:");
scanf("%d", &d1);
printf("Enter the second number:");
printf("Enter the numerator:");
scanf("%d", &num2);
printf("Enter the denominator:");
scanf("%d", &d2);
printf("%f",
((float) num1 / (float) d1) + ((float) num2 / (float) d2)
);
return 0;
}
答案 2 :(得分:0)
如果要计算两个分数的非简化总和,只需使用以下公式
a/b + c/d = (a*d + c*b)/(b*d)
因此,以下代码可用于实现您的目标
#include <stdio.h>
int main ( void )
{
int den1, den2, num1, num2, sum_num, sum_den;
printf("Enter the first number:\n");
printf("\tEnter the numerator:");
scanf("%d", &num1);
printf("\tEnter the denominator:");
scanf("%d", &den1);
printf("Enter the second number:\n");
printf("\tEnter the numerator:");
scanf("%d", &num2);
printf("\tEnter the denominator:");
scanf("%d", &den2);
sum_num = num1 * den2 + num2 * den1;
sum_den = den1 * den2;
printf("sum = %d/%d\n", sum_num, sum_den);
return 0;
}