我是C编程和stackoverflow的新手。我明天有中期,我在学习期间遇到了这个问题。对于我在格式方面的错误,请接受我最深切的歉意。
问题:编写一个名为:divide的函数,它取两个整数和一个整数指针。该函数应将第一个整数除以第二个整数,并将结果作为整数返回,并将余数放入整数指针参数给出的地址中。
给定的主代码读取两个整数:a,b,并创建两个整数而不进行初始化:res,rem。完成函数调用,使res变量变为a / b,rem变量成为调用后的余数。
示例:
Input 12 5 Output 2 2
Input 57 7 Output 8 1
我写的代码是:
int divide (int a , int b);
int divide (int a , int b)
{
int res;
int rem;
res = a/b;
rem = a - res * b ;
return res, rem;
}
int main(void)
{
int a,b;
scanf("%d%d", &a, &b);
int res, rem;
res = divide(a,b);
printf("%d %d", res, rem);
return 0;
}
当我运行它时,我得到res的正确值但是rem总是等于零。如何使用整数指针来表示rem值? 提前谢谢。
答案 0 :(得分:2)
您还可以返回结构:
typedef struct
{
int quot;
int rem;
} div_t;
div_t div( int numerator, int denominator )
{
div_t result;
result.quot = numerator / denominator;
result.rem = numerator % denominator;
return( result );
}
已经实现为part of standard C:
7.22.6.2
div
,ldiv
和lldiv
函数<强>概要强>
#include <stdlib.h> div_t div(int numer, int denom); ldiv_t ldiv(long int numer, long int denom); lldiv_t lldiv(long long int numer, long long int denom);
<强>描述强>
div
,ldiv
和lldiv
,函数计算numer / denom
和numer % denom
只需一次操作。<强>返回强>
div
,ldiv
和lldiv
函数返回类型结构div_t
,ldiv_t
和lldiv_t
分别包含两者 商和其余的。结构应包含(在任何一个 成员quot
(商)和rem
(其余), 每个都与参数numer
和。{denom
。如果结果的任何一部分无法表示,那么 行为未定义。
请注意,调用div()
,ldiv()
或lldiv()
可能比在两个单独的操作中计算商和余数更有效,因为大多数除法机器指令同时生成商和剩余部分在两个单独的寄存器中。
答案 1 :(得分:1)
int divide (int a , int b, int* rem)
{
int res;
res = a/b;
*rem = a - res * b ;
return res;
}
int main(void)
{
int a,b;
scanf("%d%d", &a, &b);
int res, rem;
res = divide(a,b, &rem);
printf("%d %d", res, rem);
return 0;
}
这应该有用。
return res, rem;
只会返回rem。答案 2 :(得分:0)
这里的问题是,
return res, rem;
与
相同 return rem;
由于comma operator的属性不符合您的预期。
你应该
divide()
函数以存储rem
(余数)。res
。答案 3 :(得分:0)
你不能return multiple values in C 您正在使用comma operator
的方式链接上显示了一些解决方案,您可以返回包含所需值的结构或数组。
typedef struct your_return {
int res;
int rem;
} division_return;
division_return divide (int a , int b)
{
division_return ret;
ret.res = a/b;
ret.rem = a - ret.res * b;
return ret;
}
int main(void)
{
int a,b;
scanf("%d%d", &a, &b);
division_return dr;
dr = divide(a,b);
printf("%d %d", dr.res, dr.rem);
return 0;
}
通过价值传递结构不是一个好习惯,因为副本可能很昂贵,但是当您不熟悉该语言时,我不想为代码添加更多复杂性。
不幸的是,C没有references
作为C ++,这使得一切变得更简单。
您还可以使用指针来更改函数内的值。
int divide (int a , int b, int* rem)
{
int res;
res = a/b;
*rem = a - res * b ;
return res;
}