精华内容
下载资源
问答
  • 由于全局变量的作用域是从定义变量开始直到程序结束,而对于编写有多个返回值的C语言函数,我们可以考虑把要返回多个值定义成全局变量。当函数调用时,全局变量被更改,我们再把更改后的全局变量值应用于主调...

    慢慢更新哦!

    一、利用全局变量

    分析:全局变量作为C语言的一个知识点,虽然我们都了解它的特点,但在实际教学过程中应用得并不是很多。由于全局变量的作用域是从定义变量开始直到程序结束,而对于编写有多个返回值的C语言函数,我们可以考虑把要返回的多个值定义成全局变量。当函数被调用时,全局变量被更改,我们再把更改后的全局变量值应用于主调函数中。函数被调用后被更改后的全局变量值即为函数的数个返回值。下面以一个实例演示该方法的应用。

    例一:编写函数求3个数中的最大值与最小值。
    方法:把最大值、最小值分别定义成2个全局变量max、min,在用户自定义函数中把求出来的最大值与最小值分别赋给全局变量max、min。函数调用完毕后全局变量的max、min值即保存了函数要求返回的值。程序参考代码如下:

    #include <stdio.h>
    #include <conio.h>
    int max,min;//主角——全局变量
    void max_min(int a,int b,int c)//定义求最大最小的函数{
    max=min=a;
    if(//先省略
    }
    最后如果能打印的话,是可以答应出经过函数max_min()处理的值的
    

    二、传递数组指针
    分析:在教学过程中,我们知道C语言函数参数的传递方式有值传递与地址传递。当进行值传递时,主调函数把实参的值复制给形参,形参获得从主调函数传递过来的值运行函数。在值传递过程中被调函数参数值的更改不能导致实参值的更改。而如果是地址传递,由于传递过程中从实参传递过来的是地址,所以被调函数中形参值的更改会直接导致实参值的更改。因此,

    我们可以考虑把多个返回值作为数组元素定义成一个数组的形式,并使该数组的地址作为函数的形式参数,以传址方式传递数组参数

    。函数被调用后,形参数组元素改变导致实参改变,我们再从改变后的实参数组元素中获得函数的多个返回值。以下实例演示该方法的应用。

    实例

    展开全文
  • 该怎么实现一个函数返回两个值或是多个值?,可以采用“间接方法”。大概有三种方法:全局变量法、变量指针法、结构体指针法等。1. 全局变量法全局变量法,顾名思义,将需要的变量X设为全局变量 ,在调用应用函数后...

    正常思维:使用return 语句,但每调用一次函数 return 语句只能返回一个值 。这是C语言语法规则。

    该怎么实现一个函数返回两个值或是多个值?,可以采用“间接方法”。大概有三种方法:全局变量法、变量指针法、结构体指针法等。

    1. 全局变量法

    全局变量法,顾名思义,将需要的变量X设为全局变量 ,在调用应用函数后,X 被附上值 ,可以直接使用X变量值。

    代码分析:(编程之美 小飞 电梯调度算法)

    // 全局变量法 :返回多个值

    //但毕竟全局变量应用过程中有很多危险,要慎重使用。

    #include

    /* 问题描述*/

    /**

    * 编程之美 小飞 电梯调度算法

    * 在繁忙的时间,每次电梯从一层往上走时,我们只允许电梯停在其中的某一层。

    * 所有乘客都从一楼上电梯,到达某层楼后,电梯听下来,所有乘客再从这里爬楼梯到自己的目的层。

    * 在一楼时,每个乘客选择自己的目的层,电梯则自动计算出应停的楼层。

    * 问:电梯停在哪一层楼,能够保证这次乘坐电梯的所有乘客爬楼梯的层数之和最少?

    思路:当电梯停靠在第i层时,乘客所要爬的总的楼梯数为Y.

    假设有N1个乘客要到达的层数i.

    所以有:

    (1)当电梯改停在i-1,则 Y+(N2+N3-N1)

    (2)当电梯改停在i+1,则 Y+(N1+N2-N3)

    所以当后面那部分的值<0时(如(2)的N1+N2

    因此,我们可以从第一层开始,用以上策略,考察N1,N2,N3的值,依次调整以得到最优解.

    */

    int targartfloor;

    int sumstars;

    void getMinFloors(int N ,int * nperson)

    {

    //int nperson[i] // 到达i层下的总人数

    //int targartfloor;

    //int sumstars;

    int N1; // 到达i层以下 楼层总人数

    int N2; //到达i层 楼层总人数

    int N3; //到达i层以上 楼层总人数

    //初始化

    // 从第二层开始 计算N1 N2 N3

    targartfloor=2; //

    N1=0;

    N2=nperson[2]; // 第二层

    N3=0;

    int i ,j;

    for(i=3;i<=N;i++)

    {

    N3+=nperson[i];

    sumstars+=nperson[i]*(i-targartfloor);

    }

    //让电梯依次改停在3楼、4楼...N楼,出现更优解时,则调整电梯停靠层数以及N1,N2,N3

    for(i=3;i<=N;i++)

    {

    if(N1+N2

    {

    targartfloor=i;

    sumstars+=N1+N2-N3;

    // 为下次判断 修正N1 N2 N3

    N1 +=N2;

    N2=nperson[i];

    N3-=nperson[i];

    }

    else

    break;

    }

    }

    int main()

    {

    int nperson[50]={0,0,2,5,7,8,9,6,6,1,4,4,8,5,2,4,5,8,6,3,3,5,9,9,6,6,9,8,8,5,5,9,6,6,3} ;

    //int nperson[50]={0,0,2,5,7,8,9,6,} ;

    int N=34;

    int i;

    for(i=2;i<=N;i++)

    {

    printf("在第%d层下的乘客人数为:%d\n",i,nperson[i]);

    }

    printf("************************************\n");

    getMinFloors(N,nperson);

    printf("电梯停在第%d层,所有的乘客所需爬楼层数最少,最少为:%d层",targartfloor,sumstars);

    return 0;

    }

    设置全局变量targartfloor ,sumstats ,调用 getMinfloors函数后 ,在主函数中直接得有需要的targartfloor ,sumstats 的值。

    但毕竟全局变量应用过程中有很多危险,要慎重使用。全局变量维护起来麻烦,因为全局变量可能在多个地方被修改。在查错是也不好发现问题。

    2.变量指针法(数组指针法)

    C语言函数参数的传递方式有值传递与地址传递。当进行值传递时,主调函数把实参的值复制给形参,形参获得从主调函数传递过来的值运行函数。在值传递过程中被调函数参数值的更改不能导致实参值的更改。

    而如果是地址传递,由于传递过程中从实参传递过来的是地址,所以被调函数中形参值的更改会直接导致实参值的更改。可以把变量的地址作为函数的形式参数,函数被调用后,形参元素改变导致实参改变,我们再从改变后的实参数组元素中获得函数的多个返回值。

    (如果所求的返回值类型相同,我们可以考虑把多个返回值作为数组元素定义成一个数组的形式,并使该数组的地址作为函数的形式参数,以传址方式传递数组参数。函数被调用后,形参数组元素改变导致实参改变,我们再从改变后的实参数组元素中获得函数的多个返回值。)

    代码分析:(编程之美 小飞 电梯调度算法)

    #include

    /* 问题描述*/

    /**

    * 编程之美 小飞 电梯调度算法

    * 在繁忙的时间,每次电梯从一层往上走时,我们只允许电梯停在其中的某一层。

    * 所有乘客都从一楼上电梯,到达某层楼后,电梯听下来,所有乘客再从这里爬楼梯到自己的目的层。

    * 在一楼时,每个乘客选择自己的目的层,电梯则自动计算出应停的楼层。

    * 问:电梯停在哪一层楼,能够保证这次乘坐电梯的所有乘客爬楼梯的层数之和最少?

    思路:当电梯停靠在第i层时,乘客所要爬的总的楼梯数为Y.

    假设有N1个乘客要到达的层数i.

    所以有:

    (1)当电梯改停在i-1,则 Y+(N2+N3-N1)

    (2)当电梯改停在i+1,则 Y+(N1+N2-N3)

    所以当后面那部分的值<0时(如(2)的N1+N2

    因此,我们可以从第一层开始,用以上策略,考察N1,N2,N3的值,依次调整以得到最优解.

    */

    void getMinFloors(int N ,int * nperson ,int *targartfloor,int *sumstars)

    {

    //int nperson[i] // 到达i层下的总人数

    //int targartfloor;

    //int sumstars;

    int N1; // 到达i层以下 楼层总人数

    int N2; //到达i层 楼层总人数

    int N3; //到达i层以上 楼层总人数

    //初始化

    // 从第二层开始 计算N1 N2 N3

    *targartfloor=2; //

    N1=0;

    N2=nperson[2]; // 第二层

    N3=0;

    *sumstars=0;

    int i ;

    for(i=3;i<=N;i++)

    {

    N3+=nperson[i];

    (*sumstars)+=nperson[i]*(i-2);

    }

    //让电梯依次改停在3楼、4楼...N楼,出现更优解时,则调整电梯停靠层数以及N1,N2,N3

    i=0;

    for(i=3;i<=N;i++)

    {

    if(N1+N2

    {

    *targartfloor=i;

    (*sumstars)+=N1+N2-N3;

    // 为下次判断 修正N1 N2 N3

    N1 +=N2;

    N2=nperson[i];

    N3-=nperson[i];

    }

    else

    break;

    }

    }

    int main()

    {

    int nperson[50]={0,0,2,5,7,8,9,6,6,1,4,4,8,5,2,4,5,8,6,3,3,5,9,9,6,6,9,8,8,5,5,9,6,6,3} ;

    //int nperson[50]={0,0,2,5,7,8,9,6,} ;

    int targartfloor;

    int sumstars;

    int N=34;

    int i;

    for(i=2;i<=N;i++)

    {

    printf("在第%d层下的乘客人数为:%d\n",i,nperson[i]);

    }

    printf("************************************\n");

    getMinFloors(N,nperson,&targartfloor,&sumstars);

    printf("电梯停在第%d层,所有的乘客所需爬楼层数最少,最少为:%d层\n",targartfloor,sumstars);

    return 0;

    }

    传递变量地址&targartfloor  &sumstats    调用函数后 形参元素改变导致实参改变. 变量targartfloor sumstars  中包含所需的值。

    值得注意的是 传入变量初始化问题。

    另:数组指针传递 可以把 两变量写进数组A ,A[]={targartfloor,sumstars},  此时函数变为  void getMinfloor(int N ,int *nperson, int A函数内用 A[0] A[1] 代替变量targartfloor,sumstars 参与运算。调用函数: int B[2]={};getMinfloor(int N ,int *nperson, B),求得B[0] B[1]中包含所需的值。

    3.结构体指针传递法

    我们知道如果返回的数个数值的数据类型不一致,可以考虑把要求返回的数个值定义成一个结构体,然后同样以传递结构体指针方式把结构体的指针传递给形参结构体指针,那么函数中对形参结构体的修改即是对实参结构体的修改,函数被调用后获取的实参结构体成员即为函数的多个返回值。

    // 测试返回多个值 ------结构体法:试用 返回不同类型的数据

    //传递结构体指针

    #include

    /* 问题描述*/

    /**

    * 编程之美 小飞 电梯调度算法

    * 在繁忙的时间,每次电梯从一层往上走时,我们只允许电梯停在其中的某一层。

    * 所有乘客都从一楼上电梯,到达某层楼后,电梯听下来,所有乘客再从这里爬楼梯到自己的目的层。

    * 在一楼时,每个乘客选择自己的目的层,电梯则自动计算出应停的楼层。

    * 问:电梯停在哪一层楼,能够保证这次乘坐电梯的所有乘客爬楼梯的层数之和最少?

    思路:当电梯停靠在第i层时,乘客所要爬的总的楼梯数为Y.

    假设有N1个乘客要到达的层数i.

    所以有:

    (1)当电梯改停在i-1,则 Y+(N2+N3-N1)

    (2)当电梯改停在i+1,则 Y+(N1+N2-N3)

    所以当后面那部分的值<0时(如(2)的N1+N2

    因此,我们可以从第一层开始,用以上策略,考察N1,N2,N3的值,依次调整以得到最优解.

    */

    struct minfloor

    {

    int targartfloor;

    int sumstars;

    };

    void getMinFloors(int N ,int * nperson, struct minfloor *mf)

    {

    //int nperson[i] // 到达i层下的总人数

    //int targartfloor;

    //int sumstars;

    int N1; // 到达i层以下 楼层总人数

    int N2; //到达i层 楼层总人数

    int N3; //到达i层以上 楼层总人数

    //初始化

    // 从第二层开始 计算N1 N2 N3

    mf->targartfloor=2; //

    N1=0;

    N2=nperson[2]; // 第二层

    N3=0;

    int i ,j;

    for(i=3;i<=N;i++)

    {

    N3+=nperson[i];

    mf->sumstars+=nperson[i]*(i-mf->targartfloor);

    }

    //让电梯依次改停在3楼、4楼...N楼,出现更优解时,则调整电梯停靠层数以及N1,N2,N3

    for(i=3;i<=N;i++)

    {

    if(N1+N2

    {

    mf->targartfloor=i;

    mf->sumstars+=N1+N2-N3;

    // 为下次判断 修正N1 N2 N3

    N1 +=N2;

    N2=nperson[i];

    N3-=nperson[i];

    }

    else

    break;

    }

    }

    int main()

    {

    int nperson[50]={0,0,2,5,7,8,9,6,6,1,4,4,8,5,2,4,5,8,6,3,3,5,9,9,6,6,9,8,8,5,5,9,6,6,3} ;

    //int nperson[50]={0,0,2,5,7,8,9,6,} ;

    int N=34;

    int i;

    struct minfloor pr;

    for(i=2;i<=N;i++)

    {

    printf("在第%d层下的乘客人数为:%d\n",i,nperson[i]);

    }

    printf("************************************\n");

    getMinFloors(N,nperson,&pr);

    printf("电梯停在第%d层,所有的乘客所需爬楼层数最少,最少为:%d层",pr.targartfloor,pr.sumstars);

    return 0;

    }

    原理同方法2 类似。

    三种方法 都得到同一结果:

    0818b9ca8b590ca3270a3433284dd417.png

    小结: 复习小飞 电梯调度算法(动态规划法)时,引申出C语言的一个基本问题:一个函数如何返回两个值或多个值?

    建议使用方法:变量指针法 或是结构体指针法。

    展开全文
  • 但在实际很多应用中,我们需要从函数返回多个值,那我们可以用什么方法实现呢?此时我们可以用三种方法来实现。方法一:设置全局变量全局变量是在函数外部定义的全局变量,它不属于任何一个函数,其作用域是从变量...

    在C语言中,一般情况下函数的返回值是通过函数中的return语句来实现的,每调用一次return语句只能从函数中返回一个值。但在实际很多应用中,我们需要从函数中返回多个值,那我们可以用什么方法实现呢?此时我们可以用三种方法来实现。

    方法一:设置全局变量

    全局变量是在函数外部定义的全局变量,它不属于任何一个函数,其作用域是从变量的定义处开始,到本程序文件的结尾。在此作用域内,全局变量可为各个函数所引用。当我们需要函数返回多个值时,除了函数体中的return语句返回其中一个之外,其它的返回值我们可以通过定义全局变量来处理。因为根据全局变量的特点,在被调用函数中改变了多个全局变量和值,相当于其主调函数全局变量的值也发生了变化,也就相当于返回了多个值。

    例如:利用一个函数求出正方形的周长和面积。

    #include

    double l=0;//定义全局变量l为正方形周长

    void f(double a)//定义求面积和周长的函数

    { double s; s=a*a;//求面积

    l=6*a;//求周长,并赋给全局变量l

    return s;//仅返回面积的值

    }

    void main()

    { double a,area;

    printf(“请输入边长:");

    scanf("%f",&a);

    area=f(a);//面积的值通过调用f函数返回值

    printf(“面积为:%5.2lf\n”,area);

    printf(“周长为:%5.2lf\n”,l);//周长即为全局变量l在f函数中改变后的值

    }

    上面的例子即用全局变量实现了函数中返回多值的情况,这种方式易懂。但是全局变量用多了会破坏代码的安全性,结构性,这主要是全局变量在所有函数中都可以使用,从而其值的变化不确定,所以我们要慎用。

    方法二:使用数组名或指针作为函数的形参

    数组名或者指针实际为地址,而数组一般都包括多个元素,指针也可以指向一组数据的着地址,把数组名或者指针作为函数形参,实际上相当于主调函数的实参与形参共用地址,所以在函数中的数组元素发生改变即是实参也随之改变。也相当于在调用函数时多个值返回给主调函数。

    实例2:编写函数求一维整形数组的最大值与最小值,并把最大值与最小值返回给主调函数。

    方法:以指针方式传递该一维数组的地址,然后把数组的最大值与数组的第一个元素交换,把数组的最小值与最后一个元素交换。函数被调用完毕后,实参数组中的第一元素为数组的最大值,实参数组中最后一个元素为数组的最小值,从而实现返回数组的最大值与最小值的功能。程序参考代码如下:

    #include "stdio.h"

    #include "conio.h"

    void max_min(int *ptr,int n) /*定义求数组最大值最小值的函数,传递数组指针*/

    {int i,j,k;/*j保存最大值所在位置,k保存最小值所在位置*/

    int *temp;/*用于交换位置*/

    *temp=*ptr;

    for(i=0;i  {

    if(*ptr

    {

    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 ;}

    }

    }

    /*调用最大最小值函数*/

    main()

    {

    int A[6],i;

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

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

    max_min(A,6);

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

    getch();

    }

    调试结果如下:

    请输入6个整形数,以空格隔开:

    5 8 9 32 -6 4

    max=32,min=-6

    注意:该方法适用于多个返回值的数据类型一致的情况。当返回值数据类型不一致时,不适用该方法。

    方法三:使用结构体指针作为函数的形参

    编写返回多个值的C语言函数,可以考虑采用结构体的方式去实现。如果返回的数个数值的数据类型不一致,可以通过定义全局变量实现有多个返回值的C语言函数,也可以考虑把要求返回的数个值定义成一个结构体,然后同样以传递结构体指针方式把结构体的指针传递给形参结构体指针,那么函数中对形参结构体的修改即是对实参结构体的修改,函数被调用后获取的实参结构体成员即为函数的多个返回值,下面以实例演示该方法的应用。

    实例3:编写一个用户自定义函数,允许用户录入学生的基本信息(包括学号、姓名、所属班级、总评成绩),并返回这些基本信息给主调函数。

    方法:把学生基本信息定义成一个结构体,在用户自定义函数中传递该结构体的指针,则自定义函数中对结构体成员的录入操作即是对实参结构体成员的录入操作,从而实现多个返回值。参考代码如下:

    #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("请输入学号,姓名,班别,总评成绩,以空格隔开:\n") ;

    xxxx(&a1);/*调用函数,以学生结构体类型变量地址作为实参*/

    printf("学号:%s,姓名: %s,班别:%s,总评成绩:%d",a1.xh, a1.name,a1.class,a1.chj);

    getch();

    }

    void xxxx(struct inf *ptr)/*该函数实现对结构体成员数据的录入操作*/

    {

    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

    注意:当函数要求返回的多个值是相互联系的或者返回的多个值数据类型不一致时可以采用该方法。

    结束语

    对于以上这三种方法,如果想要返回的数个值数据类型一致,可以考虑采用方法2;而对于不同数据类型的返回值,如果各个数值之间是相互联系的,则方法3较为合适;方法1虽然在很多情况下都可以实现多个返回值的C语言函数,但毕竟全局变量应用过程中有很多危险,要慎重使用。

    通过对以上几种方法的分析讲解,在教学过程中,学生再遇到这样的问题时,就能根据返回值的情况选择合适的途径去实现多个返回值的C语言函数。另外,如果再遇到类似的无法用教材知识点去直接解决的问题时,他们基本都能举一反三地尝试采用间接方式去解决。

    参考材料:http://blog.csdn.net/supreme42/article/details/7636475

    http://wenku.baidu.com/link?url=tJOYOInBS22mj0uJcYDEs0qZHFuCqiuhkKrrJNtoAYkffDnVIt6kiKusF491G2MVbDVzQGQgyAQ9moF3Og9v8Tt0Ny5jG05GgDmlwrhRs8K

    展开全文
  • c语言函数返回数组吗

    千次阅读 2016-03-12 20:51:21
    由于全局变量的作用域是从定义变量开始直到程序结束,而对于编写有多个返回值的C语言函数,我们可以考虑把要返回多个值定义成全局变量。当函数调用时,全局变量被更改,我们再把更改后的全局变量值应用于主调函
    
    不能直接返回一个数组,但是可以用其他方式实现类似功能。
    方法1:利用全局变量
      
      分析:全局变量作为C语言的一个知识点,虽然我们都了解它的特点,但在实际教学过程中应用得并不是很多。由于全局变量的作用域是从定义变量开始直到程序结束,而对于编写有多个返回值的C语言函数,我们可以考虑把要返回的多个值定义成全局变量。当函数被调用时,全局变量被更改,我们再把更改后的全局变量值应用于主调函数中。函数被调用后被更改后的全局变量值即为函数的数个返回值。下面以一个实例演示该方法的应用。
      实例1:编写函数求3个数中的最大值与最小值。
      方法:把最大值、最小值分别定义成2个全局变量max、min,在用户自定义函数中把求出来的最大值与最小值分别赋给全局变量max、min。函数调用完毕后全局变量的max、min值即保存了函数要求返回的值。程序参考代码如下:
      #include "stdio.h"
      #include "conio.h"
      int max,min;/*定义两个全局变量用于保存函数返回值*/
      void max_min(int a,int b,int c) /*定义求最大最小值的函数*/
      {max=min=a; /*初始化最大最小值*/
       if(max   if(max   if(min>b)min=b;
      if(min>c)min=c;
      }
      main()
      {int x,y,z;
      printf(" 请输入3个整数:\n");
      scanf("%d,%d,%d",&x,&y,&z);
      max_min(x,y,z) ;/*调用求最大值与最小值的函数*/
      printf("三个数中的最大值为:%d;最小值为:%d",max,min);/*输出最大值与最小值*/
      getch();
      }
      调试结果如下:
      请输入3个整数:
      5,-6,2
      三个数中的最大值为:5;最小值为:-6
      注意:该方法虽然可以实现有多个返回值的函数,但由于全局变量不能保证值的正确性(因为其作用域是全局,所以程序范围内都可以修改它的值,如果出现错误将非常难以发现),并且全局变量增加了程序间模块的耦合,所以该方法要慎用。
      
     方法2:传递数组指针
      
      分析:在教学过程中,我们知道C语言函数参数的传递方式有值传递与地址传递。当进行值传递时,主调函数把实参的值复制给形参,形参获得从主调函数传递过来的值运行函数。在值传递过程中被调函数参数值的更改不能导致实参值的更改。而如果是地址传递,由于传递过程中从实参传递过来的是地址,所以被调函数中形参值的更改会直接导致实参值的更改。因此,我们可以考虑把多个返回值作为数组元素定义成一个数组的形式,并使该数组的地址作为函数的形式参数,以传址方式传递数组参数。函数被调用后,形参数组元素改变导致实参改变,我们再从改变后的实参数组元素中获得函数的多个返回值。以下实例演示该方法的应用。
      实例2:编写函数求一维整形数组的最大值与最小值,并把最大值与最小值返回给主调函数。
      方法:以指针方式传递该一维数组的地址,然后把数组的最大值与数组的第一个元素交换,把数组的最小值与最后一个元素交换。函数被调用完毕后,实参数组中的第一元素为数组的最大值,实参数组中最后一个元素为数组的最小值,从而实现返回数组的最大值与最小值的功能。程序参考代码如下:
      #include "stdio.h"
      #include "conio.h"
      void max_min(int *ptr,int n) /*定义求数组最大值最小值的函数,传递数组指针*/
      {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 ;}
      }
      }
      /*调用最大最小值函数*/
      main()
      {
      int A[6],i;
      for(i=0;i<6;i++)
       scanf("%d",&A[i]);
      max_min(A,6);
      printf("max=%d, min=%d\n \n",A[0],A[5]);
      getch();
      }
      调试结果如下:
      请输入6个整形数,以空格隔开:
      5 8 9 32 -6 4
      max=32,min=-6
    注意:该方法适用于多个返回值的数据类型一致的情况。当返回值数据类型不一致时,不适用该方法
    展开全文
  • 由于全局变量的作用域是从定义变量开始直到程序结束,而对于编写有多个返回值的C语言函数,我们可以考虑把要返回多个值定义成全局变量。当函数调用时,全局变量被更改,我们再把更改后的全局变量值应用于主调...
  • 这个程序中有一个函数实现了返回多个值的功能。我们知道一个函数只能返回一个值,那么这里怎么实现返回多值呢?实际上这里并没有打破这个规定,函数本身的确只返回了一个值,但是我们通过指针变量作为函数参数,将...
  • c语言函数

    2021-01-11 14:02:31
    函数是一块代码,接受零个或者多个参数,做一件事情,并返回0个或一个值 调用函数:函数名(参数值); 可以只写函数名不写括号,但是就不是这个意思了 函数可以有返回值 返回值也要注意单一出口原则 没有返回值...
  • 函数通常返回多个值

    2014-04-15 17:43:56
    在Go语言中处理错误的基本模式是:函数通常返回多个值,其中最后一个值是error类型,用于表示错误类型极其描述;调用者每次调用完一个函数,都需要检查这个error并进行相应的错误处理。这种模式跟C语言那种很原始的...
  • 如何编写有多个返回值的C语言函数

    千次阅读 2016-09-29 12:20:07
    C语言函数的返回值是通过函数中的return语句来实现的,但是每调用一次该函数,return语句只能返回一个值,所以当我们在编写C语言代码时,想返回多个返回值,直接用return语句是无法实现的。 1)利用全局变量: ...
  • C语言函数

    2020-04-21 17:21:13
    在我们的C语言中,为了解决代码重复编写的问题,我们可以把一些代码提取出来...(1)函数是一块代码,接受零个或多个参数,做一件事情,并返回零个或一个值。 (2)语法格式: 返回值类型 函数名(参数类型 参数名1...
  • 由于全局变量的作用域是从定义变量开始直到程序结束,而对于编写有多个返回值的C语言函数,我们可以考虑把要返回多个值定义成全局变量。当函数调用时,全局变量被更改,我们再把更改后的全局变量值应用于主调...
  • C函数实现返回多个值的方法

    千次阅读 2012-08-07 21:39:34
    C语言中,一个函数最多只能实现一个返回值。 int func (int b) { int a=5; if (a>b) ...通过在函数中使用返回语句,返回个值函数,同时终止函数调用返回主函数。 而在实际操作
  • C语言笔记之函数11. 函数是什么?2. 函数怎么用?2.2 定义函数2.3 函数细节2.3.1 函数的...函数接受零个或多个参数,计算完成返回零个或一个值。 函数的作用:重复使用代码 2. 函数怎么用? 2.1 调用函数 在数学中...
  • 由于全局变量的作用域是从定义变量开始直到程序结束,而对于编写有多个返回值的C语言函数,我们可以考虑把要返回多个值定义成全局变量。当函数调用时,全局变量被更改,我们再把更改后的全局变量值应用于主调...
  • C语言-函数

    2012-03-04 17:14:00
    如果程序中需要次使用某种特定的功能,只要编写一合适的函数即可,也就是函数可以一次编写,调用。第二:函数额可以是程序模块化,更容易阅读和修改。 我们可以把函数看做一“黑盒子”,即对应一定的输入...
  • 返回值类型 函数名(传入的实际参数,多个值则以英文状态下的逗号隔开){ 函数体,书写具体的函数内容,或者实现功能的代码 } 函数的书写 写的是一个简单的max函数,其具体功能为: 输入两个要比较大小的值,如果两...
  • C语言中的函数

    2021-01-31 11:04:32
    什么是函数:函数是一块代码,接收零个或者多个参数,做一件事情,并返回一个或零个值 2.调用函数: 3.函数返回: return可以停止函数的执行,并送回一个值。一个函数里可以出现多个return语句 ...
  • C语言函数不能返回局部变量的地址

    千次阅读 2015-12-21 12:44:28
    但在很多情况下,我们需要从函数中返回多个值,此时使用数组或指针能够很好地完成这样的任务。这里是一个示例。这个程序使用一个整型数组作为参数,并将数组元素的和与积返回给调用函数。下面是C代码,这是一种常见...
  • 写作时间:2021-02-19 ...我将算法都封装成不同的函数,在matlab中调用函数很简单,如下: %matlab 函数示例 [im,para]=function dip_func(Iin); % 正文: 使用C语yan --------- THE END~ ...
  • 读入n整数,调用max_min()函数求这n数中的最大和最小值。 输入格式: 输入有两行: 第一行是n; 第二行是n数。 输出格式: 输出最大和最小值。 输入样例: 在这里给出一组输入。例如: 5 8 9 12 0 3 输出...
  • c语言函数知识点补充

    2016-12-11 21:35:48
    可以通过传出参数让函数返回多个值   2.exit 用来结束程序 return 用来结束函数   3.好的函数要有独立性、扩展性和稳定性   4.函数编写规范 (1)对所调用函数进行异常处理 (2)明确函数功能 (3)...
  • 4.18 C语言--函数

    2021-04-18 19:26:17
    文章目录返回语句从函数返回返回值函数参数形式参数和实际参数数组作函数参数数组名作函数参数数组元素作函数参数 返回语句 从函数返回 在编写程序中,要终止函数的执行,并返回到调用它的语句时,靠``return`...
  • C语言进阶之函数

    2018-02-10 21:15:21
    }由于函数只有一个返回值,当我们需要返回多个值及返回函数调用状态时,我们就要用到多参返回,即:通过传递“调用空间的地址”的方式修改空间的值,以达到传值的目的。二,函数指针函数的实质是一段可执行的代码。...
  • C语言指针与函数传参

    2021-02-01 15:47:02
    指针与函数传参普通变量与函数形参数组作为函数形参结构体变量作为函数形参传值调用和传址调用输入型参数和输出型参数函数的形参和返回值函数传参中使用const指针函数如何向外部返回多个值总结 普通变量与函数形参 ...
  • c语言复习题C语言程序设计(2)复习题判断题:C程序是由函数构成的,每一个函数完成相对独立的功能。...则函数可以返回个值。() 传值调用时,在函数中形参变量值改变后,不改变实参变量的值。() ...
  • 函数是一块代码,接受0个或者多个参数,做一件事情,并返回0个或者一个值,是用于完成特定任务的独立程序代码单元 调用函数 函数名(参数值); 参数表中的参数为形式参数----也即是参数 调用函数时给...
  • C语言- 指针与函数

    2020-06-14 11:11:54
    2,当函数的返回值有多个的时候 3,地址传递 4,如果函数的参数是一个指针,函数希望传递给调用者一个信息,函数内部只会去取指针指向变量的,并不能修改指针指向变量的 指针作为函数的返回值 1,指针当然可以作为函数...

空空如也

空空如也

1 2 3 4 5 ... 14
收藏数 275
精华内容 110
关键字:

c语言调用函数返回多个值

c语言 订阅