int sign( int x );
其中x是用户传入的整型参数。符号函数的定义为:若x大于0,sign(x) = 1;若x等于0,sign(x) = 0;否则,sign(x) = −1。
int main()
{
int x;
scanf("%d", &x);
printf("sign(%d) = %d\n", x, sign(x));
return 0;
}
int sign( int x )
{
int y;
if(x > 0)
y = 1;
else if(x == 0)
y = 0;
else
y = -1;
return y;
}
{
if(x>0)
{
sign(x) = 1;
}
else if(x==0)
{
sign(x) = 0;
}
else
{
sign(x) = -1;
}
return sign(x);
}
参考GPT和自己的思路:首先,第二种函数体不行是因为在C语言中,函数名表示的是函数的地址,而函数名是不能被赋值的,所以不能通过赋值来改变函数的返回值。
其次,第一种函数体中的函数sign(x)并不是函数调用,而是在函数体内部定义的一个变量y的值,所以可以直接return y,而不需要return sign(x)。在主函数中的sign(x)也是调用了函数而不是赋值。
总结:函数名表示的是函数的地址,不可被赋值。y是函数体内定义的变量,所以可以直接return y。在主函数中,sign(x)表示调用sign函数,不是赋值。
sign(x) = 1; --- 没有这种写法啊,前面是函数调用,函数调用怎么能赋值呢?
{
if(x>0)
{
return 1;
}
else if(x==0)
{
return 0;
}
else
{
return -1;
}
}
这样写
的确有些语言,是写函数名=什么值来返回的,比如说basic,但是C语言没有这个语法。
还有的语言(比如Ruby)是最后一行的表达式自动返回。见得多了就会知道编程语言的五花八门