程序中变量也有不同的使用范围,称为变量的作用域。变量的作用域决定变量的可访问性.
其分为局部变量和全局变量
局部变量:在函数内声明的变量,其作用范围仅限于该函数内
1.主函数中定义的变量也只能在主函数中使用,不能在其他函数中使用
2允许在不同的函数中使用相同的变量名,它们代表不同的变量,分配不同的存放单元,互不相干,不会发生混淆
3复合语句中定义的变量,也是复合语句的局部变量,所谓复合语句就是用{}包含起来的语句块
#include <stdio.h> void m(); void main() { int a=1,b=2; { int a=3,b=4; printf("复合语句的变量a=%d,b=%d\n",a,b); } printf("main函数的变量a=%d,b=%d\n",a,b); m(); } void m() { int a=5,b=6; printf("m函数的变量a=%d,b=%d\n",a,b); } |
全局变量:在任何函数外部声明的变量,叫全局变量。它的作用域是从声明时刻开始,到程序结束。
1.全局变量定义必须在所有的函数之外。
2.全局变量可加强函数模块之间的数据联系, 但是又使函数要依赖这些变量,因而使得函数的独立性降低。
3. 在同一源文件中,允许全局变量和局部变量同名。在局部变量的作用域内,同名的全局变量不起作用。
#include <stdio.h> int sum=0;//全局变量 void addNumbers() { int sum;//局部变量 int num1,num2; printf("\n 请输入两个数:"); scanf("%d %d",&num1,&num2); sum=num1+num2; printf(" 子函数中 sum 的值是 %d \n",sum); } void main() { int sum=0;//局部变量 addNumbers(); printf("\n 主函数中 sum 的值是 %d \n ",sum); } |
计算N的阶乘:5!=5*4*3*2*1
#include <stdio.h> int fun(int n); void main(){ int n; printf("请输入您要计算阶乘的数:\n"); scanf("%d",&n); int sum=fun(n); printf("%d的阶乘是%d",n,sum); } //计算阶乘 int fun(int n){ int sum=1; while(n>1){ sum*=n; n--; } return sum; } |
//博客评选大赛,10为评为为选手打分,去掉一个最高分和一个最低分,计算选手的最后得分。
#include <stdio.h> void showMenu(); void getScores(); float calcAvg(); float scores[10];//定义全局变量,用于保存评委的打分 void main(){ float avg; //1.打印菜单 showMenu(); //2.获取评委打分 getScores(); //3.计算选手最后得分 avg = calcAvg(); printf("该选手去掉一个最高分和一个最低分最终得分为%.2f分\n",avg); } //1.打印菜单 void showMenu() { printf("************************************************\n"); printf("*************郑州杯博客大赛***************\n"); printf("************************************************\n"); } //2.获取10个评委打分 void getScores() { int i; for(i=0;i<10;i++){ printf("请%d号评委打分:\n",i+1); scanf("%f",&scores[i]);//将评委的打分获取并保存到数组中 } printf("评委打分完毕,分数正在紧张统计中.....\n"); } //3.统计评委成绩去掉一个最高分和一个最低分,计算选手平均得分 float calcAvg() { float max,min,avg,sum=0; int i; max=scores[0];//假设第一个分数最高 min=scores[0];//假设第一个分数最低 for(i=0;i<10;i++){//计算总分 sum+=scores[i]; if(scores[i]>max){//获取最高分 max=scores[i]; } if(scores[i]<min){//获取最低分 min=scores[i]; } } //去除最低分和最高分计算平均分 avg=(sum-max-min)/8; return avg; } |