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

