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