不能直接返回一個(gè)數(shù)組,但是可以用其他方式實(shí)現(xiàn)類(lèi)似功能。
創(chuàng)新互聯(lián)公司是專(zhuān)業(yè)的崖州網(wǎng)站建設(shè)公司,崖州接單;提供做網(wǎng)站、成都網(wǎng)站制作,網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專(zhuān)業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行崖州網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專(zhuān)業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專(zhuān)業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!
方法1:利用全局變量
分析:全局變量作為C語(yǔ)言的一個(gè)知識(shí)點(diǎn),雖然我們都了解它的特點(diǎn),但在實(shí)際教學(xué)過(guò)程中應(yīng)用得并不是很多。由于全局變量的作用域是從定義變量開(kāi)始直到程序結(jié)束,而對(duì)于編寫(xiě)有多個(gè)返回值的C語(yǔ)言函數(shù),我們可以考慮把要返回的多個(gè)值定義成全局變量。當(dāng)函數(shù)被調(diào)用時(shí),全局變量被更改,我們?cè)侔迅暮蟮娜肿兞恐祽?yīng)用于主調(diào)函數(shù)中。函數(shù)被調(diào)用后被更改后的全局變量值即為函數(shù)的數(shù)個(gè)返回值。下面以一個(gè)實(shí)例演示該方法的應(yīng)用。
實(shí)例1:編寫(xiě)函數(shù)求3個(gè)數(shù)中的最大值與最小值。
方法:把最大值、最小值分別定義成2個(gè)全局變量max、min,在用戶(hù)自定義函數(shù)中把求出來(lái)的最大值與最小值分別賦給全局變量max、min。函數(shù)調(diào)用完畢后全局變量的max、min值即保存了函數(shù)要求返回的值。程序參考代碼如下:
#include "stdio.h"
#include "conio.h"
int max,min;/*定義兩個(gè)全局變量用于保存函數(shù)返回值*/
void max_min(int a,int b,int c) /*定義求最大最小值的函數(shù)*/
{max=min=a; /*初始化最大最小值*/
if(max if(max if(minb)min=b;
if(minc)min=c;
}
main()
{int x,y,z;
printf(" 請(qǐng)輸入3個(gè)整數(shù):\n");
scanf("%d,%d,%d",x,y,z);
max_min(x,y,z) ;/*調(diào)用求最大值與最小值的函數(shù)*/
printf("三個(gè)數(shù)中的最大值為:%d;最小值為:%d",max,min);/*輸出最大值與最小值*/
getch();
}
調(diào)試結(jié)果如下:
請(qǐng)輸入3個(gè)整數(shù):
5,-6,2
三個(gè)數(shù)中的最大值為:5;最小值為:-6
注意:該方法雖然可以實(shí)現(xiàn)有多個(gè)返回值的函數(shù),但由于全局變量不能保證值的正確性(因?yàn)槠渥饔糜蚴侨?,所以程序范圍?nèi)都可以修改它的值,如果出現(xiàn)錯(cuò)誤將非常難以發(fā)現(xiàn)),并且全局變量增加了程序間模塊的耦合,所以該方法要慎用。
方法2:傳遞數(shù)組指針
分析:在教學(xué)過(guò)程中,我們知道C語(yǔ)言函數(shù)參數(shù)的傳遞方式有值傳遞與地址傳遞。當(dāng)進(jìn)行值傳遞時(shí),主調(diào)函數(shù)把實(shí)參的值復(fù)制給形參,形參獲得從主調(diào)函數(shù)傳遞過(guò)來(lái)的值運(yùn)行函數(shù)。在值傳遞過(guò)程中被調(diào)函數(shù)參數(shù)值的更改不能導(dǎo)致實(shí)參值的更改。而如果是地址傳遞,由于傳遞過(guò)程中從實(shí)參傳遞過(guò)來(lái)的是地址,所以被調(diào)函數(shù)中形參值的更改會(huì)直接導(dǎo)致實(shí)參值的更改。因此,我們可以考慮把多個(gè)返回值作為數(shù)組元素定義成一個(gè)數(shù)組的形式,并使該數(shù)組的地址作為函數(shù)的形式參數(shù),以傳址方式傳遞數(shù)組參數(shù)。函數(shù)被調(diào)用后,形參數(shù)組元素改變導(dǎo)致實(shí)參改變,我們?cè)購(gòu)母淖兒蟮膶?shí)參數(shù)組元素中獲得函數(shù)的多個(gè)返回值。以下實(shí)例演示該方法的應(yīng)用。
實(shí)例2:編寫(xiě)函數(shù)求一維整形數(shù)組的最大值與最小值,并把最大值與最小值返回給主調(diào)函數(shù)。
方法:以指針?lè)绞絺鬟f該一維數(shù)組的地址,然后把數(shù)組的最大值與數(shù)組的第一個(gè)元素交換,把數(shù)組的最小值與最后一個(gè)元素交換。函數(shù)被調(diào)用完畢后,實(shí)參數(shù)組中的第一元素為數(shù)組的最大值,實(shí)參數(shù)組中最后一個(gè)元素為數(shù)組的最小值,從而實(shí)現(xiàn)返回?cái)?shù)組的最大值與最小值的功能。程序參考代碼如下:
#include "stdio.h"
#include "conio.h"
void max_min(int *ptr,int n) /*定義求數(shù)組最大值最小值的函數(shù),傳遞數(shù)組指針*/
{int i,j,k;/*j保存最大值所在位置,k保存最小值所在位置*/
int *temp;/*用于交換位置*/
*temp=*ptr;
for(i=0;i{
if(*ptr*(ptr+i))/*最大值與第一個(gè)元素進(jìn)行交換*/
{
k=i;
*temp=*ptr;
*ptr=*(ptr+k);
*(ptr+k)=*temp ;
}
if(*(ptr+n-1)*(ptr+i))/*最小值與最后一個(gè)元素進(jìn)行交換*/
{
j=i;
*temp =*(ptr+n-1);
*(ptr+n-1)=*(ptr+j);
*(ptr+j)= *temp ;}
}
}
/*調(diào)用最大最小值函數(shù)*/
main()
{
int A[6],i;
for(i=0;i6;i++)
scanf("%d",A[i]);
max_min(A,6);
printf("max=%d, min=%d\n \n",A[0],A[5]);
getch();
}
調(diào)試結(jié)果如下:
請(qǐng)輸入6個(gè)整形數(shù),以空格隔開(kāi):
5 8 9 32 -6 4
max=32,min=-6
注意:該方法適用于多個(gè)返回值的數(shù)據(jù)類(lèi)型一致的情況。當(dāng)返回值數(shù)據(jù)類(lèi)型不一致時(shí),不適用該方法
C語(yǔ)言中數(shù)組長(zhǎng)度必須是常量。如果你想用不定長(zhǎng)數(shù)組,可以事先定義一個(gè)比較大的數(shù)組,再用一個(gè)變量記錄實(shí)際用到的數(shù)組元素?cái)?shù),這樣也可以大致不定長(zhǎng)的目的。
在C語(yǔ)言中,函數(shù)中要用數(shù)組做參數(shù),可以采用三種方式,其中后兩種均可適用于變長(zhǎng)數(shù)組參數(shù)。
1 直接以定長(zhǎng)數(shù)組做參數(shù),聲明形式為:
ret_type func(int a[100]);
這里就是以100個(gè)元素的數(shù)組做參數(shù)的。
2 聲明時(shí)不帶長(zhǎng)度,即:
ret_type func(int a[]);
3 以指針替代數(shù)組,即:
ret_type func(int *a);
2,3兩種均可以用于變長(zhǎng)數(shù)組。不過(guò)這種情況下,需要與函數(shù)約定數(shù)組長(zhǎng)度的確定方法,比如約定規(guī)模 ,約定結(jié)束值,增加額外參數(shù)傳長(zhǎng)度,在數(shù)組元素中包含長(zhǎng)度,或采用全局變量傳長(zhǎng)度等等。
你好!
將函數(shù)采用指針的形式返回平均值
注意看后面的注釋
#includestdio.h
int?main()
{
float?*student_aver(float?array[3][3]);???//?改成指針的形式輸出?
float?score[3][3];
float?*a;
int?i,j;
printf("請(qǐng)輸入學(xué)生各科的成績(jī):");
for(i=0;i3;i++)
for(j=0;j3;j++)
scanf("%f",score[i][j]);
printf("每個(gè)學(xué)生的平均成績(jī)分別為:");
a=student_aver(score);????????????????//?指針?a?接收函數(shù)的返回值?
for(i=0;i3;i++)??????????????????????//?打印出平均值?
printf("%.2f?",a[i]);
return?0;
}
float?*student_aver(float?array[3][3])????//?改成指針的形式輸出
{
int?i,j;
float?sum,a[3];
for(i=0;i3;i++)
{
sum=0;
for(j=0;j3;j++)
sum=sum+array[i][j];
a[i]=sum/3;
???}
return?a;?????????????????????????????//?輸出數(shù)組?a?
}
分享名稱(chēng):c語(yǔ)言函數(shù)返回變長(zhǎng)數(shù)組嗎 c語(yǔ)言函數(shù)如何返回?cái)?shù)組
URL地址:http://muchs.cn/article10/doedggo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、品牌網(wǎng)站建設(shè)、定制開(kāi)發(fā)、做網(wǎng)站、手機(jī)網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)