代码:
#include
void one()
{
printf("欢迎学习c语言!\n");
}
int main()
{
one(); // one的调用
return 0;
}
第一步: 进入main()
函数;
第二步: 调用one()
函数;
①: 它会在main()
函数的前寻找有没有一个名字叫“one”
的函数定义;
②: 如果找到,接着检查函数的参数,这里调用函数时没有传参,函数定义也没有形参,参数类型匹配;
③:开始执行one()
函数,这时候,main()
函数里面的执行会阻塞( 停 )在one()
这一行代码,等待one()
函数的执行。
第三步: 当 one()
函数执行完( 这里打印一句话 ),main()
才会继续往下执行,执行到return 0
, 程序执行完毕。
在C语言中,能够使用函数嵌套调用的机制,这种嵌套调用的方式可以将一些复杂的操作流程进行分步完成,从而增强程序的可读性和可维护性,这在大型程序中尤其重要。
函数嵌套调用的基本语法格式如下:
return_type function_name_1(arguments_1) {
// function_name_1 code
return function_name_2(arguments_2);
}
return_type function_name_2(arguments_2) {
// function_name_2 code
return function_name_3(arguments_3);
}
return_type function_name_3(arguments_3) {
// function_name_3 code
return some_value;
}
如上所示,这里有三个函数 function_name_1、function_name_2 和 function_name_3
,它们互相调用。
当 function_name_1
调用 function_name_2
函数时,function_name_1
函数的执行暂停,function_name_2
函数开始执行。
当 function_name_2
函数调用 function_name_3
函数时,function_name_2
函数的执行暂停,function_name_3
函数开始执行。
一旦 function_name_3
函数执行完毕并返回一个值,控制权会传递回 function_name_2
函数,function_name_2
函数接着执行,并将返回值传递给 function_name_1
函数。最终,function_name_1
函数的执行也会继续,直到它返回一个值。
函数嵌套调用可以无限地进行下去,也就是说,你可以在任何一个函数中调用另一个函数,只要你遵循C语言的函数调用规则。需要注意的是函数的调用栈有一定的大小限制,如果调用层数过多,可能会导致栈溢出的问题。
函数嵌套调用在C语言中应用广泛,有助于提高程序的模块化和可读性,同时还可以减少一些冗余的代码。在程序设计中,我们应该恰当地运用函数嵌套调用,切勿滥用,以免导致调用层数过多带来的问题。
#include
//求阶乘
long factorial(int n){
int i;
long result=1;
for(i=1; i<=n; i++){
result *= i;
}
return result;
}
// 求累加的和
long sum(long n){
int i;
long result = 0;
for(i=1; i<=n; i++){
//在定义过程中出现嵌套调用
result += factorial(i);
}
return result;
}
int main(){
printf("1!+2!+...+9!+10! = %ld\n", sum(10)); //在调用过程中出现嵌套调用
return 0;
}
全局变量是在函数外部定义的变量,它们可以在整个程序范围内被访问和使用,即在任何函数中都可以使用这些变量。全局变量的作用域始于变量定义的位置,在程序结束时结束。
全局变量的优点是:它们可以方便地在程序的多个函数中使用,而不必在每个函数中传递参数。全局变量的缺点是:它们易受程序中其他函数的影响,因此需要小心处理。
以下是一些全局变量的定义示例:
int global_var = 10; // 定义一个全局变量
void func1() {
printf("The value of the global variable is %d\n", global_var);
}
void func2() {
global_var++; // 修改全局变量的值
}
局部变量是在函数内部定义的变量,它们只能在函数内部被访问和使用。局部变量的作用域始于变量定义的位置,在函数结束时结束。局部变量只能在定义它们的函数中使用,不能在其他函数中使用。
局部变量的优点是:它们只在定义它们的函数中可见,不会受到其他函数的影响。这使得程序更加安全,并且可以帮助避免变量名冲突。局部变量的缺点是:每个函数都需要重复定义。
以下是一些局部变量的定义示例:
void func() {
int local_var = 20; // 定义一个局部变量
printf("The value of the local variable is %d\n", local_var);
}
在函数内部,可以定义多个具有相同名称的局部变量,它们之间互不干扰。例如:
void func() {
int local_var = 20; // 定义一个局部变量
// 定义一个名称相同的局部变量
for (int i = 0; i < 10; i++) {
int local_var = i;
printf("The value of the local variable is %d\n", local_var);
}
printf("The value of the local variable is still %d\n", local_var);
}
代码:
#include
int s1, s2, s3; //面积
int vs(int a, int b, int c){
int v; //体积
v = a * b * c;
s1 = a * b;
s2 = b * c;
s3 = a * c;
return v;
}
int main(){
int v, length, width, height;
printf("长方体长: 宽: 高: ");
scanf("%d %d %d", &length, &width, &height);
v = vs(length, width, height);
printf("体积=%d, 长方体前面面积=%d, 长方体侧面面积=%d, 长方体上面面积=%d\n", v, s1, s2, s3);
return 0;
}
总之,全局变量和局部变量是C语言中两种不同类型的变量,它们在作用域、生命周期和访问方式等方面有所不同。在编写程序时,需要根据具体情况选择使用哪种类型的变量。
C语言中,变量可以被定义为全局变量或局部变量,其主要区别在于作用域和生命周期。