①为什么需要return?
为了回答这个问题,
我打算用 模块思维 来解释.
②定义模块(形参模块)
定义函数:f(s)(a,b)
满足公式:s=a+b
函数名:f(s)
形参: a,b(公式中的 变量 )
函数返回值:return s
③调用模块(实参模块)
主函数:main()表示用户自己编写的部分
函数名:f(s)和定义函数一致,产生调用
求值:printf("%d\n",x),求x的值?
④值的传递过程
定义模块 中的形参a和b
(实参到形参是单向传递,不可逆)
定义模块 中的return s
将s的值赋值给
~
return s的作用
就是将定义模块中的s
赋值 给调用模块中的调用函数
如果没有return s
调用模块中的调用函数将永远没有定值
即所求x 无定值
这一点和数学不一样,
数学中
同一函数名的值是 通用 的,
C语言中
定义函数和调用函数的值是 隔离 的,
尽管函数名一样
如果不赋值,调用函数永远无定值.
{
//函数体
}
type 可以为任意的C语言中的数据类型.也可以为VOID(即无返回值).
其次,main函数的前面可以为int也可以为void.因为main函数也是函数(废话).当这个函数执行完毕之后会返回给系统一个值,0表示正确(常)执行.如果你写void的话,编译调试的时候,编译器会自动像系统返回一个值.
第三,在写C++程序的时候一般写:
int main()
....
return 0;
一个函数的函数名既是该函数的代表,也是一个变量.由于函数名变量通常用来把函数的处理结果数据返回给调用函数,即递归调用,所以一般把函数名变量称为返回值,函数的返回值类型是在定义函数时指定的.
函数可以有返回值,也可以没有返回值.
①.、没有返回值的函数:功能只是完成一个操作,应将返回值类型定义为void,函数体内可没有return语句.
扩展资料
C程序中的print函数:
是这样写的:printf("%d\n",printf("%d",printf("%d",i)));
一共有三个printf函数,我们可以使用一些代号来简化这个printf函数,如下:
代号A: printf("%d",printf("%d",i));
代号B: printf("%d",i)
则C程序代码可以简化为:printf("%d\n",A); 那么我们就先来求A.而A,又可以简化为:printf("%d",B);那么就先来求B.
你可以这么理解,比如我们定义了一个函数fun(),如果这个函数有返回值,那么在调用程序里面(比如主函数)就可以把这个函数当成一个数使用;如果没有返回值,那么通常他就是一个独立的语句存在.
比如fun函数里面有个return 0;表示返回值是零,那么在调用函数里面就可以存在诸如
a=fun();b=a+fun();if(fun()=0{};......这类的语句,表示a=0;b=a+0;if(00){};等等,当然也可能是返回一个变量的值,你个指针的值是一样的.
如果没有return 语句,那么函数没有返回值,调用函数里面就不能把他当做一个数值来使用,会出现:
fun();单独成句的语句,在fun()里面可能进行了一些操作,但不需要结果.
C语言自带的函数通常都有返回值,计算函数返回计算结果,操作函数返回操作结果(成功返回1,失败返回0)
导语:编写有多个返回值的函数是所有C语言教材里均没有提到的知识点,但在实际教学与应用的过程中我们都有可能会遇到这样的问题.以下是引导学生采用的三种不同方法编写多个返回值的C语言函数,一起来学习下吧:
方法1:利用全局变量
分析:全局变量作为C语言的一个知识点,虽然我们都了解它的特点,但在实际教学过程中应用得并不是很多.由于全局变量的作用域是从定义变量开始直到程序结束,而对于编写有多个返回值的C语言函数,我们可以考虑把要返回的多个值定义成全局变量.当函数被调用时,全局变量被更改,我们再把更改后的全局变量值应用于主调函数中.函数被调用后被更改后的全局变量值即为函数的数个返回值.下面以一个实例演示该方法的应用.
#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(minb)min=b;
if(minc)min=c;
main()
{int x,y,z;
scanf("%d,%d,%d",x,y,z);
max_min(x,y,z) ;/*调用求最大值与最小值的函数*/
printf("三个数中的最大值为:%d;最小值为:%d",max,min);/*输出最大值与最小值*/
getch();
调试结果如下:
注意:该方法虽然可以实现有多个返回值的函数,但由于全局变量不能保证值的正确性(因为其作用域是全局,所以程序范围内都可以修改它的值,如果出现错误将非常难以发现),并且全局变量增加了程序间模块的耦合,所以该方法要慎用.
分析:在教学过程中,我们知道C语言函数参数的传递方式有值传递与地址传递.当进行值传递时,主调函数把实参的值复制给形参,形参获得从主调函数传递过来的值运行函数.在值传递过程中被调函数参数值的更改不能导致实参值的更改.而如果是地址传递,由于传递过程中从实参传递过来的是地址,所以被调函数中形参值的更改会直接导致实参值的更改.所以呢,我们可以考虑把多个返回值作为数组元素定义成一个数组的形式,并使该数组的地址作为函数的形式参数,以传址方式传递数组参数.函数被调用后,形参数组元素改变导致实参改变,我们再从改变后的实参数组元素中获得函数的多个返回值.以下实例演示该方法的应用.
方法:以指针方式传递该一维数组的地址,然后把数组的最大值与数组的'第一个元素交换,把数组的最小值与最后一个元素交换.函数被调用完毕后,实参数组中的第一元素为数组的最大值,实参数组中最后一个元素为数组的最小值,从而实现返回数组的最大值与最小值的功能.程序参考代码如下:
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;
*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 ;}
/*调用最大最小值函数*/
scanf("%d",A[i]);
注意:该方法适用于多个返回值的数据类型一致的情况.当返回值数据类型不一致时,不适用该方法.
方法:把学生基本信息定义成一个结构体,在用户自定义函数中传递该结构体的指针,则自定义函数中对结构体成员的录入操作即是对实参结构体成员的录入操作,从而实现多个返回值.参考代码如下:
struct inf{/*定义学生结构体,分别包含成员学号、姓名、班别、总评成绩*/
int chj;
};
main(void)
struct inf a1; /*定义学生结构体类型变量*/
void xxxx(struct inf *ptr);
printf("请输入学号,姓名,班别,总评成绩,以空格隔开: ") ;
xxxx(a1);/*调用函数,以学生结构体类型变量地址作为实参*/
printf("学号:%s,姓名: %s,班别:%s,总评成绩:%d",a1.xh, a1.name,a1.class,a1.chj);
void xxxx(struct inf *ptr)/*该函数实现对结构体成员数据的录入操作*/
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;
请输入学号,姓名,班别,总评成绩,以空格隔开:
注意:当函数要求返回的多个值是相互联系的或者返回的多个值数据类型不一致时可以采用该方法.
总结
函数的返回值通过return语句来执行,即return后的变量或表达式的值,就为该函数的返回值(你可以根据需要自定义返回什么值),而返回值的类型是指该值你想要得到的类型,比如return
a;(a的类型,你在函数体里定义的是int
a;但根据需要,你要的是一个float型的返回值),于是,这样定义一个函数:
float
函数名(参数列表)
int
a;
函数体;
......
return
这样,返回值a就变成了float型.
以上就是土嘎嘎小编为大家整理的oracle如何获取整相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!