前言:感谢您的关注哦,我会持续更新编程相关知识,愿您在这里有所收获。如果有任何问题,欢迎沟通交流!期待与您在学习编程的道路上共同进步。
目录
一. 基础知识的学习
1.不返回结果函数
2.局部变量
3.全局变量
4.变量生存周期
5.变量存储的内存分布
6.静态变量
二. 所学在程序中的运用
问题1:数字金字塔
问题2:财务现金记账
一. 基础知识的学习
1.不返回结果函数
在很多程序设计中,调用函数不是为了得到某个运算结果,而是要让它产生某些作用。具有类似作用的函数在有些语言中也称为过程。
不返回结果函数定义:
void 函数名(形参表)
{
函数实现过程
}
这里函数类型为void,表示不返回结果,函数体中可以使用没有表达式的return语句,也可以省略return。void类型的函数虽然不直接返回一个值,但它的作用通常以屏幕输出等方式体现。
注意:在不返回结果的函数定义中,void不能省略;否则,函数类型被默认定义为int。
2.局部变量
C语言中把定义在函数内部的变量称为局部变量,局部变量的有效作用范围局限于所在的函数内部。形参的局部变量。使用局部变量可以避免各个函数之间的变量相互干扰。
除了作用于函数的局部变量外,C语言还允许定义作用于复合语句中的局部变量,其有效作用范围被局限于复合语句内,一般用作小范围内的临时变量。
注意:局部变量一般定义在函数或复合语句的开始外,标准C规定其不能定义在中间位置。
3.全局变量
定义在函数外而不属于任何函数的变量称为全局变量。全局变量的作用范围是从定义开始到程序所在文件的结束,它对作用范围内所有的函数都起作用。
全局变量的定义格式与局部变量完全一致,只是定义位置不再函数内,它可以定义在程序的头部,也可以定义在两个函数的中间或程序尾部,只要在程序外部即可。
4.变量生存周期
变量是保存变化数据的工作单元,计算机用内存单元来对于实现。一旦在程序中定义变量,计算机在执行过程中就会根据变量类型分配相应的内存单元供变量保存数据。
其他函数在被调用之前,其局部变量并未分配存储单元,只有当函数被调用时,其形参和局部变量才被分配相应存储单元;一旦函数调用结束返回主调函数,在函数中定义的所有形参和局部变量将不复存在,相应的存储单元由系统收回。根据这种特性,把局部变量称为自动变量,即函数被调用时,系统自动为其局部变量分配存储单元;一旦该函数调用结束(不一定是整个程序运行结束),所有分配给局部变量的单元由系统自动回收。变量从定义开始分配存储单元,到运行结束存储单元被回收,整个过程称为变量生存周期。
5.变量存储的内存分布
为了便于计算机存储管理,C语言把保存所有变量的数据区分成动态存储区和静态存储区。它们的管理方式完全不同,动态存储区是使用堆栈来管理的,适合函数动态分配与回收存储单元。而静态存储区相对固定,管理较简单,它用于存放全局变量和静态变量。
下面是某个程序中变量的储存分布:
6.静态变量
在静态存储区中,除了全局变量外,还有一种特殊的局部变量-----静态局部变量。它存放在静态存储区,不会像普通局部变量那样因为函数调用结束而被系统回收,它的生存周期会持续到程序结束。且函数被再次调用时,静态局部变量会被重新激活。
静态变量定义格式:
static 类型名 变量表
二. 所学在程序中的运用
问题1:数字金字塔。输入一个正整数n,输出n行数字金字塔。
源程序:
#include <stdio.h>
int main()
{int n;void pyramid(int n); //函数声明 printf("Enter n:");scanf("%d", &n);pyramid(n); //调用函数 return 0;
}
void pyramid(int n) //函数定义
{int i,j;for (i=1; i<=n; i++) //需要输出的行数 {for(j=1; j<=n-i; j++) //输出每行左边的空格 {printf(" ");}for (j=1; j<=i; j++) //输出每行的数字 {printf("%d ", i); //%d后面有一个空格 }putchar('\n');}
}
问题2:用函数实现财务现金记账。先输入操作类型(1收入,2支出,0结束),再输入操作金额,计算现金剩余额,经多次操作直到输入操作类型为0时结束。要求定义并调用函数,其中现金收入与现金支出分别用不同函数实现。
源程序:
#include <stdio.h>
double cash; //定义全局变量,保存现金余额
int main()
{int choice;double value;void income(double number), expend(double number); //函数声明 cash=0;printf("Enter operate choice(0--end, 1--income, 2--expend):");scanf("%d", &choice); //输入操作 while (choice!=0) //若操作类型为0,则循环结束 {if (choice==1||choice==2){printf("Enter cash value:"); //输入操作现金 scanf("%lf", &value);if (choice==1){income(value); //函数调用 }else{expend(value); //函数调用 }printf("current cash:%.2f\n", cash);}printf("Enter operate choice(0--end, 1--income, 2--expend):");scanf("%d", &choice);}return 0;
}
//定义计算现金收入函数
void income(double number)
{cash=cash+number;
}
//定义计算现金支持函数
void expend(double number)
{cash=cash-number;
}
感谢老铁的浏览,希望老铁可以一键三连加个关注,您的支持和鼓励是我前进的动力,后续会分享更多学习编程的内容。