C语言 函数问题

#include<stdio.h>
int f(int n)
{
if(n>0)
n=n+10;
else
if(n<0)
n=n+20;
else
n=100;
printf("n=%d\n",n);
return 0;

}
int main()
{
int x;
printf("input number\n");
scanf("%d",&x);
f(x);
return 0;
}
这段代码的x在书上原本是n,我改成x,结果没变。谁能解释下 x的意义,我在学函数这章,但是感觉有点混乱了、求给点帮助啊

你好,这是C语言的变量作用域问题。书本上的两个n其实是不一样的。在主函数main的n只是在main中有用,当调用函数是,这个n会被函数的n给屏蔽掉。而你改为x后其实并不影响函数f的功能。
×××××××××××××××××××××××××××××××补充知识××××××××××××××××××××××××××
C语言中变量的作用域
C语言中所有变量都有自己的作用域,申明变量的类型不同,其作用域也不同。C语言中的变量,按照作用域的范围可分为两种, 即局部变量和全局变量。
一、局部变量
局部变量也称为内部变量。局部变量是在函数内作定义说明的。其作用域仅限于函数内, 离开该函数后再使用这种变量是非法的。
例如:

int f1(int a) /*函数f1*/
{
int b,c;
……
}

int f2(int x) /*函数f2*/
{
int y,z;;
……
}

f1内定义了三个变量,a为形参,b,c为一般变量。在 f1的范围内a,b,c有效,或者说a,b,c变量的作用域限于f1内。

f2内定义了三个变量,x为形参,y,z为一般变量。在 f2的范围内x,y,z有效,或者说x,y,z变量的作用域限于f2内。

关于局部变量的作用域还要说明以下几点:
主函数中定义的变量也只能在主函数中使用,不能在其它函数中使用。同时,主函数中也不能使用其它函数中定义的变量。因为主函数也是一个函数,它与其它函数是平行关系。
形参变量是属于被调函数的局部变量,实参变量是属于主调函数的局部变量。
允许在不同的函数中使用相同的变量名,它们代表不同的对象,分配不同的单元,互不干扰,也不会发生混淆。虽然允许在不同的函数中使用相同的变量名,但是为了使程序明了易懂,不提倡在不同的函数中使用相同的变量名。
二、全局变量

int a,b; /*外部变量*/
void f1() /*函数f1*/
{
……
}

float x,y; /*外部变量*/
int fz() /*函数fz*/
{
……
}

全局变量也称为外部变量,它是在函数外部定义的变量。 它不属于哪一个函数,它属于一个源程序文件。其作用域是整个源程序。在函数中使用全局变量,一般应作全局变量说明。 只有在函数内经过说明的全局变量才能使用。全局变量的说明符为extern。 但在一个函数之前定义的全局变量,在该函数内使用可不再加以说明。 例如:
  从上例可以看出a、b、x、y 都是在函数外部定义的外部变量,都是全局变量。
  对于全局变量还有以下几点说明:
对于局部变量的定义和说明,可以不加区分。而对于外部变量则不然,外部变量的定义和外部变量的说明并不是一回事。外部变量定义必须在所有的函数之外,且只能定义一次。其一般形式为: [extern] 类型说明符 变量名,变量名… 其中方括号内的extern可以省去不写。
   例如: int a,b;
   等效于:
extern int a,b;

   而外部变量说明出现在要使用该外部变量的各个函数内,在整个程序内,可能出现多次,外部变量说明的一般形式为: extern 类型说明符 变量名,变量名,…; 外部变量在定义时就已分配了内存单元,外部变量定义可作初始赋值,外部变量说明不能再赋初始值,只是表明在函数内要使用某外部变量。
外部变量可加强函数模块之间的数据联系,但是又使函数要依赖这些变量,因而使得函数的独立性降低。从模块化程序设计的观点来看这是不利的, 因此在不必要时尽量不要使用全局变量。
在同一源文件中,允许全局变量和局部变量同名。在局部变量的作用域内,全局变量不起作用。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-03-17
在main函数里调用f(x)的时候,x是实参。
实参也是变量。
所谓变量其实是有名字的一块内存存储区域,无论这块区域叫什么名字,都是指同一个东西。
所以,无论int x还是int n,是没有区别的。
调用其他函数的函数叫做主调函数,被调用的函数叫做被调函数。
主调函数在调用被调函数的时候,如果被调函数要求有参数,则主调函数必须传递相同类型相同个数的参数。被调函数里的参数叫做形参,主调函数传递给被调函数的参数叫做实参。
如main函数里f(x)中的x是实参,函数int f(int n)中的n是形参。
函数调用时,参数的传递都是将参数(变量)的值由实参复制给形参。
由此可见,实参和形参不是同一个变量,所以它们之间除了传递值,其他是没有什么关系的。
希望能帮助你。
有问题联系我。追问

那这个f(x) 是不是代表运行上面的f函数啊,就是说x可以和n不同 但两个f是必须得一样的吧?

追答

函数名必须是一样的,还有要传递的参数类型和个数都要一致。

其实这里涉及了“名字”的作用域问题。
名字是代码中除标点符号之外的符号或者符号组合。比如C语言中的变量名、函数名等。
继续学习函数这部分的内容,你会接触到作用域这个概念和它的原理、规定。
[email protected]
可以随时电邮,my pleasure to help you with any of your questions.

本回答被提问者采纳
第2个回答  2014-03-17
输入x,如果x>0,x=x+10;
如果x<0,x=x+20;
x==0;x==100.
这里面x是实际参数,n是形式参数。函数学习没有办法 ,我当时学的时候把书上所有的程序抄了七八遍才理解的……
第3个回答  2014-03-17
x和以前的n一样,都是一个局部变量的名字,传递给f(int)函数,改成别的名字(如hhh,k)也一样;
你要改变什么f函数运行的结果,该f函数过程中的控制结构;追问

那这个f(x) 是不是代表运行上面的f函数啊,就是说x可以和n不同 但两个f是必须得一样的吧?

第4个回答  2014-03-17
额。。以前的内容没好好看吧。。
x就是一个int型的变量;叫x或n都无所谓,不过是你自己给这个变量取的一个名字
相似回答