【正文】
=%\nmin=%\n average=%\n,Max,Min,ave)。 return 0。 } float average(float array[ ],int n) { int i。 float aver,sum=array[0]。 Max=Min=array[0]。 for(i=1。in。i++) { if(array[i]Max) Max=array[i]。 else if(array[i]Min) Min=array[i]。 sum=sum+array[i]。 } aver=sum/n。 return(aver)。 } ave score 10 Max Min aver array n Max Min main 函數(shù) average 函數(shù) 建議不在必要時不要使用全局變量 局部變量的存儲類別 全局變量的存儲類別 存儲類別小結(jié) ?從變量的作用域的角度來觀察,變量可以分為 全局變量 和 局部變量 ?從變量值存在的時間 (即生存期 )觀察 , 變量的存儲有兩種不同的方式: 靜態(tài)存儲方式 和動態(tài)存儲方式 ?靜態(tài)存儲方式 在程序運(yùn)行期間分配固定的存儲空間。在程序的整個運(yùn)行過程中一直存在。 ?動態(tài)存儲方式 是在程序運(yùn)行期間根據(jù)需要進(jìn)行動態(tài)的分配存儲空間的方式 程序區(qū) 靜態(tài)存儲區(qū) 動態(tài)存儲區(qū) 用戶區(qū) 將 數(shù)據(jù)存放在 此區(qū) 全局變量全部存放在靜態(tài)存儲區(qū)中 ①函數(shù)形式參數(shù)②函數(shù)中定義的沒有用關(guān)鍵字 static聲明的變量③函數(shù)調(diào)用時的現(xiàn)場保護(hù)和返回地址等 存放在動態(tài)存儲區(qū) 程序 開始執(zhí)行時給全局變量分配存儲區(qū),程序執(zhí)行完畢就釋放。在程序執(zhí)行過程中占據(jù)固定的存儲單元 函數(shù)調(diào)用開始時分配,函數(shù)結(jié)束時釋放。在程序執(zhí)行過程中,這種分配和釋放是動態(tài)的 ?每一個變量和函數(shù)都有兩個屬性: 數(shù)據(jù)類型 和數(shù)據(jù)的 存儲類別 ?數(shù)據(jù)類型 ,如整型、浮點型等 ?存儲類別 指的是數(shù)據(jù)在內(nèi)存中存儲的方式 (如靜態(tài)存儲和動態(tài)存儲 ) ?存儲類別 包括 : 自動的、靜態(tài)的、寄存器的、外部的 ?根據(jù)變量的存儲類別,可以知道變量的作用域和生存期 局部變量的存儲類別 (auto變量 ) ?局部變量,如果不專門聲明存儲類別,都是動態(tài)地分配存儲空間的 ?調(diào)用函數(shù)時,系統(tǒng)會給 局部 變量分配存儲空間,調(diào)用結(jié)束時就自動釋放空間。因此這類局部變量稱為自動變量 ?自動變量用關(guān)鍵字 auto作存儲類別的聲明 局部變量的存儲類別 int f(int a) { auto int b,c=3。 ┇ } 可以省略 局部變量的存儲類別 (static局部變量 ) ?希望函數(shù)中的局部變量在函數(shù)調(diào)用結(jié)束后不消失而繼續(xù) 保留原值 ,即其占用的存儲單元不釋放,在下一次再調(diào)用該函數(shù)時,該變量已有值 (就是上一次函數(shù)調(diào)用結(jié)束時的值 ), 這時就應(yīng)該指定該局部變量為“靜態(tài)局部變量”,用關(guān)鍵字 static進(jìn)行聲明 例 考察靜態(tài)局部變量的值。 include int main() { int f(int)。 int a=2,i。 for(i=0。i3。i++) printf(“%d\n”,f(a))。 return 0。 } int f(int a) { auto int b=0。 static c=3。 b=b+1。 c=c+1。 return(a+b+c)。 } 調(diào)用三次 每調(diào)用一次,開辟新 a和 b,但 c不是 例 考察靜態(tài)局部變量的值。 include int main() { int f(int)。 int a=2,i。 for(i=0。i3。i++) printf(“%d\n”,f(a))。 return 0。 } int f(int a) { auto int b=0。 static c=3。 b=b+1。 c=c+1。 return(a+b+c)。 } 0 3 b c 第一次調(diào)用開始 例 考察靜態(tài)局部變量的值。 include int main() { int f(int)。 int a=2,i。 for(i=0。i3。i++) printf(“%d\n”,f(a))。 return 0。 } int f(int a) { auto int b=0。 static c=3。 b=b+1。 c=c+1。 return(a+b+c)。 } 0 3 b c 第一次調(diào)用期間 1 4 例 考察靜態(tài)局部變量的值。 include int main() { int f(int)。 int a=2,i。 for(i=0。i3。i++) printf(“%d\n”,f(a))。 return 0。 } int f(int a) { auto int b=0。 static c=3。 b=b+1。 c=c+1。 return(a+b+c)。 } b c 第一次調(diào)用結(jié)束 1 4 7 例 考察靜態(tài)局部變量的值。 include int main() { int f(int)。 int a=2,i。 for(i=0。i3。i++) printf(“%d\n”,f(a))。 return 0。 } int f(int a) { auto int b=0。 static c=3。 b=b+1。 c=c+1。 return(a+b+c)。 } b c 第二次調(diào)用開始 0 4 例 考察靜態(tài)局部變量的值。 include int main() { int f(int)。 int a=2,i。 for(i=0。i3。i++) printf(“%d\n”,f(a))。 return 0。 } int f(int a) { auto int b=0。 static c=3。 b=b+1。 c=c+1。 return(a+b+c)。 } b c 第二次調(diào)用期間 0 4 51 例 考察靜態(tài)局部變量的值。 include int main() { int f(int)。 int a=2,i。 for(i=0。i3。i++) printf(“%d\n”,f(a))。 return 0。 } int f(int a) { auto int b=0。 static c=3。 b=b+1。 c=c+1。 return(a+b+c)。 } b c 第二次調(diào)用結(jié)束 1 5 8 例 考察靜態(tài)局部變量的值。 include int main() { int f(int)。 int a=2,i。 for(i=0。i3。i++) printf(“%d\n”,f(a))。 return 0。 } int f(int a) { auto int b=0。 static c=3。 b=b+1。 c=c+1。 return(a+b+c)。 } b c 第三次調(diào)用開始 0 5 例 考察靜態(tài)局部變量的值。 include int main() { int f(int)。 int a=2,i。 for(i=0。i3。i++) printf(“%d\n”,f(a))。 return 0。 } int f(int a) { auto int b=0。 static c=3。 b=b+1。 c=c+1。 return(a+b+c)。 } b c 第三次調(diào)用期間 0 5 61 例 考察靜態(tài)局部變量的值。 include int main() { int f(int)。 int a=2,i。 for(i=0。i3。i++) printf(“%d\n”,f(a))。 return 0。 } int f(int a) { auto int b=0。 static c=3。 b=b+1。 c=c+1。 return(a+b+c)。 } b c 第三次調(diào)用結(jié)束 1 6 9 例 考察靜態(tài)局部變量的值。 include int main() { int f(int)。 int a=2,i。 for(i=0。i3。i++) printf(“%d\n”,f(a))。 return 0。 } int f(int a) { auto int b=0。 static c=3。 b=b+1。 c=c+1。 return(a+b+c)。 } c 整個程序結(jié)束 6 例 考察靜態(tài)局部變量的值。 include int main() { int f(int)。 int a=2,i。 for(i=0。i3。i++) printf(“%d\n”,f(a))。 return 0。 } int f(int a) { auto int b=0。 static c=3。 b=b+1。 c=c+1。 return(a+b+c)。 } 在編譯時賦初值 在函數(shù)調(diào)用時賦初值 例 考察靜態(tài)局部變量的值。 include int main() { int f(int)。 int a=2,i。 for(i=0。i3。i++) printf(“%d\n”,f(a))。 return 0。 } int f(int a) { auto int b=0。 static c=3。 b=b+1。 c=c+1。 return(a+b+c)。 } 若不賦 初值 ,是 0 若不 賦初值 ,不確定 例 考察靜態(tài)局部變量的值。 include int main() { int f(int)。 int a=2,i。 for(i=0。i3。i++) printf(“%d\n”,f(a))。 return 0。 } int f(int a) { auto int b=0。 static c=3。 b=b+1。 c=c+1。 return(a+b+c)。 } 僅在本函數(shù)內(nèi)有效 例 輸出 1到 5的階乘值。 ?解題思路:可以編一個函數(shù)用來進(jìn)行連乘,如第 1次調(diào)用時進(jìn)行 1乘 1,第 2次調(diào)用時再乘以 2,第 3次調(diào)用時再乘以 3,依此規(guī)律進(jìn)行下去。 include int main() { int fac(int n)。 int i。 for(i=1。i=5。i++)