递归
#include <stdio.h>int max2(int x, int y);
int max2(int x, int y)
{
int max;
if(x>y)
max = x;
else
max = y;
return (max);
}
int main()
{
int a, b, c, d, m;
printf("numbER 4:");
scanf("%d%d%d%%d", &a, &b, &c, &d);
m = max2(max2(max2(a,b),c),d);
return 0;
}
哪里有问题呢 在主函数中的scanf语句中,您输入的格式化字符串中有一个错误。在输入变量d之后,应该是一个空格而不是一个百分号。
正确的scanf语句应该是:scanf("%d%d%d%d", &a, &b, &c, &d);
此外,您在定义max2函数时,缺少函数的返回类型int。
修正后的代码如下:
#include <stdio.h>
int max2(int x, int y);
int max2(int x, int y)
{
int max;
if(x > y)
max = x;
else
max = y;
return max;
}
int main()
{
int a, b, c, d, m;
printf("请输入四个数字:");
scanf("%d%d%d%d", &a, &b, &c, &d);
m = max2(max2(max2(a, b), c), d);
printf("最大的数字是:%d\n", m);
return 0;
}
现在,您应该可以正确地输入四个数字,并得到最大的数字作为输出了。希望这个解答对您有帮助!有任何问题,请随时提问。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 第20行多了一个百分号,其他应该没问题
#include <stdio.h>
int max2(int x, int y);
int max2(int x, int y)
{
int max;
if(x>y)
max = x;
else
max = y;
return (max);
}
int main()
{
int a, b, c, d, m;
printf("numbER 4:");
scanf("%d%d%d%d", &a, &b, &c, &d); //这一行
m = max2(max2(max2(a,b),c),d);
return 0;
}
scanf("%d%d%d%%←删掉d", &a, &b, &c, &d); 本帖最后由 jackz007 于 2023-12-26 10:10 编辑
你这个不叫递归,亲,这样才是:
void funx(...)
{
. . .
funx(...); // 单个函数调用自己
. . .
}
或者
void funA(...)
{
. . .
funB(...) ; // 多个函数互相调用
. . .
}
void funB(...)
{
. . .
funA(...) ; // 多个函数互相调用
. . .
}
你这个实际上只是在调用一个函数的时候,多次将对同一个函数的调用结果作为了输入参数,从而形成了对同一个函数的多级次嵌套调用,应该叫函数的嵌套调用。
此外,对函数 max2() 的声明多余了:
int max2(int x, int y) ; // 此声明多余
int max2(int x , int y)
{
因为,只有在对函数的调用位置出现在定义位置之前的时候才需要声明,在本例中,对 max2() 的调用出现在 main() 中,而 main() 的位置显然在 max2() 的后面,所以,可以非常放心地去掉对 max2() 的声明。
#include <stdio.h>
int max2(int x , int y) // 这是 max2() 的定义位置
{
return (x > y) ? x : y ; //使用三目运算简洁高效
}
int main(void)
{
int a, b, c, d ;
printf("numbER 4:") ;
scanf("%d%d%d%d", &a, &b, &c, &d) ;
printf("%d\n" , max2(max2(max2(a,b),c),d)) ; // 这是对 max2() 的调用位置,定义在前,调用在后,顺序正常,无需声明。
return 0 ;
}
这是我修改的版本,谨供楼主参考:
页:
[1]