亚洲一级免费看,特黄特色大片免费观看播放器,777毛片,久久久久国产一区二区三区四区,欧美三级一区二区,国产精品一区二区久久久久,人人澡人人草

C語言

C語言返回多個值的方法

時間:2025-05-20 09:02:42 C語言 我要投稿
  • 相關推薦

C語言返回多個值的方法

  導語:編寫有多個返回值的函數(shù)是所有C語言教材里均沒有提到的知識點,但在實際教學與應用的過程中我們都有可能會遇到這樣的問題。以下是引導學生采用的三種不同方法編寫多個返回值的C語言函數(shù),一起來學習下吧:

  方法1:利用全局變量

  分析:全局變量作為C語言的一個知識點,雖然我們都了解它的特點,但在實際教學過程中應用得并不是很多。由于全局變量的作用域是從定義變量開始直到程序結束,而對于編寫有多個返回值的C語言函數(shù),我們可以考慮把要返回的多個值定義成全局變量。當函數(shù)被調用時,全局變量被更改,我們再把更改后的全局變量值應用于主調函數(shù)中。函數(shù)被調用后被更改后的全局變量值即為函數(shù)的數(shù)個返回值。下面以一個實例演示該方法的應用。

  實例1:編寫函數(shù)求3個數(shù)中的最大值與最小值。

  方法:把最大值、最小值分別定義成2個全局變量max、min,在用戶自定義函數(shù)中把求出來的最大值與最小值分別賦給全局變量max、min。函數(shù)調用完畢后全局變量的max、min值即保存了函數(shù)要求返回的值。程序參考代碼如下:

  #include "stdio.h"

  #include "conio.h"

  int max,min;/*定義兩個全局變量用于保存函數(shù)返回值*/

  void max_min(int a,int b,int c) /*定義求最大最小值的函數(shù)*/

  {max=min=a; /*初始化最大最小值*/

  if(max   if(max   if(min>b)min=b;

  if(min>c)min=c;

  }

  main()

  {int x,y,z;

  printf(" 請輸入3個整數(shù): ");

  scanf("%d,%d,%d",&x,&y,&z);

  max_min(x,y,z) ;/*調用求最大值與最小值的函數(shù)*/

  printf("三個數(shù)中的最大值為:%d;最小值為:%d",max,min);/*輸出最大值與最小值*/

  getch();

  }

  調試結果如下:

  請輸入3個整數(shù):

  5,-6,2

  三個數(shù)中的最大值為:5;最小值為:-6

  注意:該方法雖然可以實現(xiàn)有多個返回值的函數(shù),但由于全局變量不能保證值的正確性(因為其作用域是全局,所以程序范圍內都可以修改它的值,如果出現(xiàn)錯誤將非常難以發(fā)現(xiàn)),并且全局變量增加了程序間模塊的耦合,所以該方法要慎用。

  方法2:傳遞數(shù)組指針

  分析:在教學過程中,我們知道C語言函數(shù)參數(shù)的傳遞方式有值傳遞與地址傳遞。當進行值傳遞時,主調函數(shù)把實參的值復制給形參,形參獲得從主調函數(shù)傳遞過來的值運行函數(shù)。在值傳遞過程中被調函數(shù)參數(shù)值的更改不能導致實參值的更改。而如果是地址傳遞,由于傳遞過程中從實參傳遞過來的是地址,所以被調函數(shù)中形參值的更改會直接導致實參值的更改。因此,我們可以考慮把多個返回值作為數(shù)組元素定義成一個數(shù)組的形式,并使該數(shù)組的地址作為函數(shù)的形式參數(shù),以傳址方式傳遞數(shù)組參數(shù)。函數(shù)被調用后,形參數(shù)組元素改變導致實參改變,我們再從改變后的實參數(shù)組元素中獲得函數(shù)的多個返回值。以下實例演示該方法的應用。

  實例2:編寫函數(shù)求一維整形數(shù)組的最大值與最小值,并把最大值與最小值返回給主調函數(shù)。

  方法:以指針方式傳遞該一維數(shù)組的地址,然后把數(shù)組的最大值與數(shù)組的第一個元素交換,把數(shù)組的最小值與最后一個元素交換。函數(shù)被調用完畢后,實參數(shù)組中的第一元素為數(shù)組的最大值,實參數(shù)組中最后一個元素為數(shù)組的最小值,從而實現(xiàn)返回數(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))/*最大值與第一個元素進行交換*/

  {

  k=i;

  *temp=*ptr;

  *ptr=*(ptr+k);

  *(ptr+k)=*temp ;

  }

  if(*(ptr+n-1)>*(ptr+i))/*最小值與最后一個元素進行交換*/

  {

  j=i;

  *temp =*(ptr+n-1);

  *(ptr+n-1)=*(ptr+j);

  *(ptr+j)= *temp ;}

  }

  }

  /*調用最大最小值函數(shù)*/

  main()

  {

  int A[6],i;

  for(i=0;i<6;i++)

  scanf("%d",&A[i]);

  max_min(A,6);

  printf("max=%d, min=%d ",A[0],A[5]);

  getch();

  }

  調試結果如下:

  請輸入6個整形數(shù),以空格隔開:

  5 8 9 32 -6 4

  max=32,min=-6

  注意:該方法適用于多個返回值的數(shù)據(jù)類型一致的情況。當返回值數(shù)據(jù)類型不一致時,不適用該方法。

  方法3:傳遞結構體指針

  分析:結構體作為教學中的一個難點,教材對它介紹的內容并不多,應用的實例更是少之又少,所以學生對于結構體普遍掌握情況不理想。其實,編寫返回多個值的C語言函數(shù),也可以考慮采用結構體的方式去實現(xiàn)。通過方法2,我們知道如果返回的數(shù)個數(shù)值的數(shù)據(jù)類型不一致,可以通過定義全局變量實現(xiàn)有多個返回值的C語言函數(shù),也可以考慮把要求返回的數(shù)個值定義成一個結構體,然后同樣以傳遞結構體指針方式把結構體的指針傳遞給形參結構體指針,那么函數(shù)中對形參結構體的修改即是對實參結構體的修改,函數(shù)被調用后獲取的實參結構體成員即為函數(shù)的多個返回值,下面以實例演示該方法的應用。

  實例3:編寫一個用戶自定義函數(shù),允許用戶錄入學生的基本信息(包括學號、姓名、所屬班級、總評成績),并返回這些基本信息給主調函數(shù)。

  方法:把學生基本信息定義成一個結構體,在用戶自定義函數(shù)中傳遞該結構體的指針,則自定義函數(shù)中對結構體成員的錄入操作即是對實參結構體成員的錄入操作,從而實現(xiàn)多個返回值。參考代碼如下:

  #include "stdio.h"

  #include "conio.h"

  struct inf{/*定義學生結構體,分別包含成員學號、姓名、班別、總評成績*/

  char xh[12];

  char name[20];

  char class[15];

  int chj;

  };

  main(void)

  {

  struct inf a1; /*定義學生結構體類型變量*/

  void xxxx(struct inf *ptr);

  printf("請輸入學號,姓名,班別,總評成績,以空格隔開: ") ;

  xxxx(&a1);/*調用函數(shù),以學生結構體類型變量地址作為實參*/

  printf("學號:%s,姓名: %s,班別:%s,總評成績:%d",a1.xh, a1.name,a1.class,a1.chj);

  getch();

  }

  void xxxx(struct inf *ptr)/*該函數(shù)實現(xiàn)對結構體成員數(shù)據(jù)的錄入操作*/

  {

  char xh1[12],name1[20],class1[15];

  int chj1;

  scanf("%s%s%s%d",xh1,name1,class1,&chj1);

  strcpy(ptr->xh,xh1);

  strcpy(ptr->name,name1);

  strcpy(ptr->class,class1);

  ptr->chj=chj1;

  }

  調試結果如下:

  請輸入學號,姓名,班別,總評成績,以空格隔開:

  200102LiLi200185

  學號:200102,姓名: LiLi,班別:2001,總評成績:85

  注意:當函數(shù)要求返回的多個值是相互聯(lián)系的或者返回的多個值數(shù)據(jù)類型不一致時可以采用該方法。

  總結

  對于以上這三種方法,如果想要返回的數(shù)個值數(shù)據(jù)類型一致,可以考慮采用方法2;而對于不同數(shù)據(jù)類型的返回值,如果各個數(shù)值之間是相互聯(lián)系的,則方法3較為合適;方法1雖然在很多情況下都可以實現(xiàn)多個返回值的C語言函數(shù),但畢竟全局變量應用過程中有很多危險,要慎重使用。


【C語言返回多個值的方法】相關文章:

C語言函數(shù)的返回值04-11

如何實現(xiàn)C語言多個函數(shù)值的返回12-25

C語言函數(shù)返回值解析04-22

C語言函數(shù)說明與返回值05-21

C語言函數(shù)的參數(shù)和返回值06-02

c語言中多個if的用法02-16

C語言中返回字符串函數(shù)的實現(xiàn)方法03-22

c語言中多個if的用法范例01-14

C語言單向鏈表環(huán)測試并返回環(huán)起始節(jié)點的方法04-26