局部變量和全局變量

變程序量中使用的範圍不一樣:做用域(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;

}

相關文章
相關標籤/搜索