最近在幫助其它人的學(xué)習(xí)中發(fā)現(xiàn)了許多問題就數(shù)組和局部變量和全居變量的兩道例題進(jìn)行刨析和思考!
排序操作
#include
voidsort(array,n)
intarray[];
intn;
{
inti,j,k,t;
for(i=0;i)/* 循環(huán)9次,這里循環(huán)9次因?yàn)榕帕械降?次的時(shí)候的已經(jīng)自動(dòng)被排列到最后了 */
{
k=i;[/LIGHT] /* 把i記錄下來,以便進(jìn)行調(diào)換操作 */
for(j=i+1;)j/* 在外部i循環(huán)內(nèi)進(jìn)行第二次循環(huán),檢查所有的剩余元素 */
{
if(array[j])/* 利用k對(duì)比j循環(huán)的元素大小是否比外部i循環(huán)當(dāng)前元素的值 */
{
k=j; /* 將k的值定義為j循環(huán)的最小元素的(下標(biāo)),以便進(jìn)行調(diào)換操作 */
}
t=array[k]; /* 將t的值定義為j循環(huán)的最小值元素的值 */
array[k]=array[i]; /* 把j循環(huán)內(nèi)的(也就是array[j])的值,調(diào)換為此次外部i循環(huán)元素的值 */
array[i]=t; /* 將外部i循環(huán)的當(dāng)前元素的值替換為前面以t為臨時(shí)存儲(chǔ)的(也就是array[j])的值 */
}
}
}
main()
{
inta[10],i; /* 定義a[10]為一個(gè)數(shù)組,用于輸入10個(gè)不同的數(shù)字;定義用于循環(huán)的便量i; */
printf("enter the array\n");
for(i=0;i<10;i++)
{
scanf("%d",&a[i]); /* 利用這10次循環(huán)給每個(gè)數(shù)組元素盡心賦值操作從a[0]到a[9] */
}
sort(a,10);/* 把數(shù)組a的各數(shù)組元素地址和數(shù)組數(shù)量傳遞給自定義排序涵數(shù)的形式參數(shù) */
printf("the sorted array:\n");
for(i=0;i<10;i++)
{
printf("%d",a[i]); /*利用10次循環(huán)把排序后的數(shù)組元素打印在屏幕上*/
}
printf("\n");
}/* 此篇代碼練習(xí)序號(hào)注意的是用數(shù)組名作涵數(shù)實(shí)際參數(shù)的時(shí)候,不是把數(shù)組的值傳遞給形式參數(shù),
而是把實(shí)際參數(shù)數(shù)組的起始地址傳遞給形式參數(shù)數(shù)組,這樣兩個(gè)數(shù)組就共同占用一段內(nèi)存單元,而
不需要建立兩個(gè)不同的數(shù)組浪費(fèi)內(nèi)存空間 */
求平均值和找最小值
#include
floatmax; /* 定義全局變量max用于存儲(chǔ)的數(shù) */
floatmin; /* 定義全居變量min用于存儲(chǔ)最小的數(shù) */
main()
{
floatcount_avg(); /* 聲明自定義涵數(shù)的數(shù)據(jù)類型 */
floatscore[10]; /* 定義一個(gè)數(shù)組用于存儲(chǔ)輸入數(shù)字 */
floatscore_avg;
inti; /* 定義用于循環(huán)的變量i */
for(i=0;i<10;i++) /* 利用一個(gè)為10次的循環(huán)為score[0]-score[9]的數(shù)組元素輸入值*/
{
scanf("%f",&score); /* 格式化輸入 */
}
score_avg =count_avg (score,10); /* 調(diào)用count_avg涵數(shù)計(jì)算平均值,在實(shí)際參數(shù)中帶如數(shù)組score的地址和數(shù)組元素個(gè)數(shù) */
printf("avg=%6.2f max=%6.2f min=%6.2f",score_avg,max,min); /* 將平均值,值,最小值打印在屏幕上 */
}
floatcount_avg(array,score_num) /* 定義count_avg這個(gè)自定義涵數(shù)的數(shù)據(jù)類型為浮點(diǎn)形 */
floatarray[]; /* 定義形式參數(shù)array[]這個(gè)數(shù)組為浮點(diǎn)形 */
intscore_num; /* 定義形式參數(shù)score_num為正形,用于得到實(shí)際參數(shù)也就是數(shù)組的元素個(gè)數(shù) */
{
inti; /* 定義用于循環(huán)的變量i */
floatsum =array[0]; /* 預(yù)先設(shè)置總數(shù)初始值為array[0]以便于后面對(duì)比大小的操作 */
floatavg; /* 定義avg也就是平局值存儲(chǔ)變量為浮點(diǎn)形 */
max=array[0]; /* 預(yù)先設(shè)置值初始值為array[0]以便于后面對(duì)比大的操作 */
min=array[0]; /* 預(yù)先設(shè)置最小值初始值為array[0]以便于后面對(duì)比小的操作 */
for(i=1;i<10 ;i++ ) /* 利用一個(gè)為9次的循環(huán)逐個(gè)和array[0]進(jìn)行對(duì)比找出值和最小值 */
{
if(array>max) /* 利用已經(jīng)存儲(chǔ)的值和當(dāng)前循環(huán)下的array進(jìn)行對(duì)比(找大計(jì)算) */
{
max=array; /* 符合條件的存儲(chǔ)為值.注意:(這里利用循環(huán)判斷反復(fù)的對(duì)比操作逐步替換值最后得到的數(shù))*/
}
elseif(array {
min=array; /* 符合條件的存儲(chǔ)為最小值.注意:(這里利用循環(huán)判斷反復(fù)的對(duì)比操作逐步替換最小值最后得到的數(shù))*/
}
sum += array; /* 計(jì)算個(gè)數(shù)組元素的總和 */
}
avg =sum / score_num; /* 計(jì)算出最后的平均值 */
return(avg); /* 返回平均值 */
}
/* 此例需要注意的是利用全局變量可以減少實(shí)際參數(shù)和形式參數(shù)的個(gè)數(shù),從而減少內(nèi)存空間和傳遞值數(shù)據(jù)是的時(shí)間開銷.此外c語言也規(guī)定外部
數(shù)組可以富裕初值,而局部數(shù)組是不能賦予初值的,建議不在必要的時(shí)候不要使用全局變量,因?yàn)?:全局變量在程序的全部執(zhí)行過程中都占用存儲(chǔ)
單元,而不是僅在需要的時(shí)候開辟單元.2:它使涵數(shù)的通用性降低了,因?yàn)楹瓟?shù)在執(zhí)行過程中要依賴于其他所在的外部變量.3:全局變量使用過多,
會(huì)降低程序的清晰性,難以清楚判斷每個(gè)瞬時(shí)各個(gè)外部變量的值.在各個(gè)涵數(shù)執(zhí)行的時(shí)候都會(huì)改變外部變量的值,導(dǎo)致程序出錯(cuò)!4.如果外部變量不
在文件開頭定義,那么它只限與定義點(diǎn)到文件終了這段才起作用
*/在學(xué)習(xí)中應(yīng)該多注意細(xì)節(jié)這些東西在java中也是類似的,希望對(duì)大家有所啟發(fā)!
排序操作
#include
voidsort(array,n)
intarray[];
intn;
{
inti,j,k,t;
for(i=0;i)/* 循環(huán)9次,這里循環(huán)9次因?yàn)榕帕械降?次的時(shí)候的已經(jīng)自動(dòng)被排列到最后了 */
{
k=i;[/LIGHT] /* 把i記錄下來,以便進(jìn)行調(diào)換操作 */
for(j=i+1;)j/* 在外部i循環(huán)內(nèi)進(jìn)行第二次循環(huán),檢查所有的剩余元素 */
{
if(array[j])/* 利用k對(duì)比j循環(huán)的元素大小是否比外部i循環(huán)當(dāng)前元素的值 */
{
k=j; /* 將k的值定義為j循環(huán)的最小元素的(下標(biāo)),以便進(jìn)行調(diào)換操作 */
}
t=array[k]; /* 將t的值定義為j循環(huán)的最小值元素的值 */
array[k]=array[i]; /* 把j循環(huán)內(nèi)的(也就是array[j])的值,調(diào)換為此次外部i循環(huán)元素的值 */
array[i]=t; /* 將外部i循環(huán)的當(dāng)前元素的值替換為前面以t為臨時(shí)存儲(chǔ)的(也就是array[j])的值 */
}
}
}
main()
{
inta[10],i; /* 定義a[10]為一個(gè)數(shù)組,用于輸入10個(gè)不同的數(shù)字;定義用于循環(huán)的便量i; */
printf("enter the array\n");
for(i=0;i<10;i++)
{
scanf("%d",&a[i]); /* 利用這10次循環(huán)給每個(gè)數(shù)組元素盡心賦值操作從a[0]到a[9] */
}
sort(a,10);/* 把數(shù)組a的各數(shù)組元素地址和數(shù)組數(shù)量傳遞給自定義排序涵數(shù)的形式參數(shù) */
printf("the sorted array:\n");
for(i=0;i<10;i++)
{
printf("%d",a[i]); /*利用10次循環(huán)把排序后的數(shù)組元素打印在屏幕上*/
}
printf("\n");
}/* 此篇代碼練習(xí)序號(hào)注意的是用數(shù)組名作涵數(shù)實(shí)際參數(shù)的時(shí)候,不是把數(shù)組的值傳遞給形式參數(shù),
而是把實(shí)際參數(shù)數(shù)組的起始地址傳遞給形式參數(shù)數(shù)組,這樣兩個(gè)數(shù)組就共同占用一段內(nèi)存單元,而
不需要建立兩個(gè)不同的數(shù)組浪費(fèi)內(nèi)存空間 */
求平均值和找最小值
#include
floatmax; /* 定義全局變量max用于存儲(chǔ)的數(shù) */
floatmin; /* 定義全居變量min用于存儲(chǔ)最小的數(shù) */
main()
{
floatcount_avg(); /* 聲明自定義涵數(shù)的數(shù)據(jù)類型 */
floatscore[10]; /* 定義一個(gè)數(shù)組用于存儲(chǔ)輸入數(shù)字 */
floatscore_avg;
inti; /* 定義用于循環(huán)的變量i */
for(i=0;i<10;i++) /* 利用一個(gè)為10次的循環(huán)為score[0]-score[9]的數(shù)組元素輸入值*/
{
scanf("%f",&score); /* 格式化輸入 */
}
score_avg =count_avg (score,10); /* 調(diào)用count_avg涵數(shù)計(jì)算平均值,在實(shí)際參數(shù)中帶如數(shù)組score的地址和數(shù)組元素個(gè)數(shù) */
printf("avg=%6.2f max=%6.2f min=%6.2f",score_avg,max,min); /* 將平均值,值,最小值打印在屏幕上 */
}
floatcount_avg(array,score_num) /* 定義count_avg這個(gè)自定義涵數(shù)的數(shù)據(jù)類型為浮點(diǎn)形 */
floatarray[]; /* 定義形式參數(shù)array[]這個(gè)數(shù)組為浮點(diǎn)形 */
intscore_num; /* 定義形式參數(shù)score_num為正形,用于得到實(shí)際參數(shù)也就是數(shù)組的元素個(gè)數(shù) */
{
inti; /* 定義用于循環(huán)的變量i */
floatsum =array[0]; /* 預(yù)先設(shè)置總數(shù)初始值為array[0]以便于后面對(duì)比大小的操作 */
floatavg; /* 定義avg也就是平局值存儲(chǔ)變量為浮點(diǎn)形 */
max=array[0]; /* 預(yù)先設(shè)置值初始值為array[0]以便于后面對(duì)比大的操作 */
min=array[0]; /* 預(yù)先設(shè)置最小值初始值為array[0]以便于后面對(duì)比小的操作 */
for(i=1;i<10 ;i++ ) /* 利用一個(gè)為9次的循環(huán)逐個(gè)和array[0]進(jìn)行對(duì)比找出值和最小值 */
{
if(array>max) /* 利用已經(jīng)存儲(chǔ)的值和當(dāng)前循環(huán)下的array進(jìn)行對(duì)比(找大計(jì)算) */
{
max=array; /* 符合條件的存儲(chǔ)為值.注意:(這里利用循環(huán)判斷反復(fù)的對(duì)比操作逐步替換值最后得到的數(shù))*/
}
elseif(array
min=array; /* 符合條件的存儲(chǔ)為最小值.注意:(這里利用循環(huán)判斷反復(fù)的對(duì)比操作逐步替換最小值最后得到的數(shù))*/
}
sum += array; /* 計(jì)算個(gè)數(shù)組元素的總和 */
}
avg =sum / score_num; /* 計(jì)算出最后的平均值 */
return(avg); /* 返回平均值 */
}
/* 此例需要注意的是利用全局變量可以減少實(shí)際參數(shù)和形式參數(shù)的個(gè)數(shù),從而減少內(nèi)存空間和傳遞值數(shù)據(jù)是的時(shí)間開銷.此外c語言也規(guī)定外部
數(shù)組可以富裕初值,而局部數(shù)組是不能賦予初值的,建議不在必要的時(shí)候不要使用全局變量,因?yàn)?:全局變量在程序的全部執(zhí)行過程中都占用存儲(chǔ)
單元,而不是僅在需要的時(shí)候開辟單元.2:它使涵數(shù)的通用性降低了,因?yàn)楹瓟?shù)在執(zhí)行過程中要依賴于其他所在的外部變量.3:全局變量使用過多,
會(huì)降低程序的清晰性,難以清楚判斷每個(gè)瞬時(shí)各個(gè)外部變量的值.在各個(gè)涵數(shù)執(zhí)行的時(shí)候都會(huì)改變外部變量的值,導(dǎo)致程序出錯(cuò)!4.如果外部變量不
在文件開頭定義,那么它只限與定義點(diǎn)到文件終了這段才起作用
*/在學(xué)習(xí)中應(yīng)該多注意細(xì)節(jié)這些東西在java中也是類似的,希望對(duì)大家有所啟發(fā)!