内容正文:
6.5 变量的作用范围
变量可分为局部变量和全局变量,它们的作用范围是不同的。局部变量的作用范围只在被定义的函数的内部,而全局变量的作用范围为从该变量定义开始到程序结束。局部变量就像地方法律,只在某一个地方范围内有效,而全局变量就像是国家的宪法,在全国范围内都有效。
1.局部变量
局部变量总是定义在函数体的内部(即大括号内),并且只在该函数内有效。在该函数之外无法使用该变量。如果在变量的作用区域之外使用变量,系统将报告该变量尚未定义。
2.全局变量
全局变量又叫全程变量,它是在所有函数的外部定义的变量。其作用范围从定义开始到整个程序结束。
例如:
int x,y;
char c; /*x,y,c为全局变量,其作用范围从此开始到程序结束*/
f1()
{
int m;
…..
}
float k; /*k为全局变量,其作用范围从此开始到程序结束*/
f2()
{
int n;
…
}
全局变量虽然作用范围较局部变量大,但是也存在以下不足。
(1)由于在其作用的整个范围内均占用内存,所以增加了内存的开销,不如局部变量节约系统资源。
(2)易与局部变量发生冲突,降低了程序的可读性。
习题
一、选择题
1.下面关于函数参数传递正确的是 。
A.只能传递地址 B.只能传递数据
C.传值,即为传递地址和数据 D.双向传递
2.void返回类型函数正确的描述是 。
A.返回确定的值 B.返回不确定的值
C.返回值 D.不返回值
3.下面说法中正确的是 。
A.C语言程序总是从第一个定义的函数开始执行的
B.在C语言程序中,要调用的函数必须在main()函数中定义
C.C语言程序总是从main()函数开始执行的
D.C语言程序中的main()函数必须放在程序的开始部分
4.以下正确的函数定义是 。
A.int add(int x, int y) B.int add(int x; int y)
C.int add(int x, int y); D.int add(int x, y)
5.若调用一个函数,且此函数中没有return语句,则以下正确的说法是 。
A.没有返回值
B.返回若干个系统默认值
C.能返回一个用户所希望的值
D.返回一个不确定的值
6.关于参数的传递说明正确的是 。
A.地址传递 B.单向值传递
C.由实参传向形参,再由形参传向实参
D.由用户指定传递方式
7.C语言规定,函数的返回值的类型由 。
A.return语句中的表达式类型决定 B.调用该函数时的主调函数类型决定
C.调用该函数时系统临时决定 D.定义该函数时所指定的函数类型决定
8.凡函数中未指定存储类别的局部变量,其默认的存储类别为 。
A.自动 B.静态
C.外部 D.寄存器
二、分析以下程序的功能
#include<stdio.h>
f(int n)
{
int i,j,k;
i=n/100;j=n/10-i*10;k=n%10;
if(I*100+j*10+k==I*I*I+j*j*j+k*k*k) return n;
else return 0;
}
void main()
{
int n,k;
printf("output");
for(n=100;n<1000;n++)
{
k=f(n);
if(k!=0) printf("%d",k);
}
printf("
");
}
三、编程题
1.写两个函数,求3个数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果,3个数由键盘输入。
2.写一判断素数的函数,在主函数中输入1个整数,输出是否是素数的信息。
3.写一函数,将两字符串连接。
4.写一函数,输入一个十六进制数,输出相应的十进制数。
5.给出年、月、日,计算该日是该年的第几天。
$