變程序量中使用的範圍不一樣:做用域(Scope),就是變量的有效範圍。變量的做用域取決於變量的訪問性。數組
局部變量:函數內部的變量稱爲局部變量(Local Variable),它的做用域僅限於函數內部, 離開該函數後就是無效的,再使用就會報錯。函數
1.主函數中定義的變量也只能在主函數中使用,不能在其餘函數中使用。spa
2.容許在不一樣的函數中使用相同的變量名,他們表明不一樣變量,分配不一樣的存放單元,互不相干,不會發生混淆。作用域
3.複合語句中定義的變量,只限於使用當前函數中,也是複合語句的局部變量,複合語句:就是用{}包含起來的語句塊。get
4.形參變量、在函數體內定義的變量都是局部變量。實參給形參傳值的過程也就是給局部變量賦值的過程。博客
#include <stdio.h>io
void m();變量
void main(){float
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);
}
}
全局變量:在全部函數外部定義的變量稱爲全局變量(Global Variable),它的做用域默認是整個程序,也就是全部的源文件,包括 .c 和 .h 文件。它的做用域是從聲明時刻開始,到程序結束。
1.全局變量定義必須在全部函數以外。
2.全局變量可增強函數模塊之間的數據聯繫,可是函數又依賴這些變量,下降函數的獨立性。
3.在同一源文件中,容許全局變量和局部變量同名,在局部變量做用域內,同名的全局變量不起做用。
int sum=0;//全局變量
void addNumbers(){
int sum;//局部變量
int num1,num2;
printf("\n請輸入兩個數;");
scanf("%d,%d",&num1,&num2);
sum=num1+num2;
}
void main(){
int sum=0;//局部變量
addNumbers();
printf("\n 主函數中 sum 的值是 %d \n ",sum);
}
示例:計算n的階乘
#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;
showMenu();//1.打印菜單
getScores();//2.獲取評委分
avg=calcAvg();//計算選手的最後得分
printf("該選手去掉一個最高分和一個最低分最終得分爲%.2f分\n",avg);
}
//1.打印菜單
void showMenu(){
printf("************************************************\n");
printf("*************杯博客大賽********************************\n");
printf("************************************************\n");
}
//獲取評委分數
void getScores(){
int i;
for(i=0;i<10;i++){
printf("請%d號評委打分:\n",i+1);
scanf("%f",&scores[i]);//將評委的打分獲取並保存到數組中
}
printf("評委打分完畢,分數正在緊張統計中.....\n");
}
//統計去掉一個最高分,一個最低分,選手得分
float calcAvg(){
float max,min,avg,sum=0;
int i;
min=max=scores[0];//假設第一個分數最高和最低分
for(i=0;i<10;I++){
sum+=scores[i];
if(scores[i]>max){//獲取最高分
max=scoures[i];
}
if(scores[i]<min){//獲取最低分
min=scoures[i];
}
}
//去除最高最低計算平均分
avg=(sum-max-min)/8;
return avg;
}