C语言学习记录 6

2023.07.28

函数

模块化程序设计思路:事先编辑好一批常用的函数来实现各种不同的功能,需要用时,就直接在程序中使用即可,使得阅读和维护程序变得方便快捷。

C语言中的函数就是一个完成某项特定任务的一小段代码,从本质意义上来讲,函数就是用来完成一定的功能的。

在设计一个较大的程序的时候,往往把它分为若干个程序模块,每一个模块包括了一个或者多个函数,每个函数实现一个特定的功能。一个C程序可由一个主函数和若干个其他函数构成。由主函数调用其他函数,其他函数也可以互相调用。同一个函数可以被一个或者多个函数调用任意多次。

C语言中一般会见到两类函数:库函数和自定义函数。

前面有学习库函数的相关知识,这里不多讲述。

自定义函数:用户自定义的函数,它是解决用户专门需要的函数。

定义函数需要定义哪些方面呢?

①指定函数的名字。②指定函数的类型,即函数返回值的类型。③指定参数的名字和类型(若定义函数无参数,则不写或者写void)。④指定函数应当完成什么操作,即函数的功能。

定义无参函数

类型名  函数名( )
{
    函数体
}

类型名  函数名(void)
{
    函数体
}

函数名后面括号内的void表示“空”,即函数没有参数。

在定义函数时要用类型名指定函数值的类型,即指定函数带回来的值的类型,如果没有函数值,则应用void类型定义。

定义有参函数

类型名  函数名(形式参数表列)
{
    函数体
}

//举例:输入a,b两数,求两数之间的最大值
int max(int x,int y)//定义max函数,有两个参数,并声明函数类型
{
    int z;        //声明部分,定义临时变量z
    z=x>y?x:y;    //执行语句部分,把x,y中最大的值赋给z
    return(z);    //把z值作为max函数的值带回main函数
}

#include <stdio.h>
int main( )
{
    int max(int x,int y);  //对max函数进行声明
    int a;
    int b;
    int c;
    //输入
    scanf("%d %d",&a,&b);
    c=max(a,b);
    //调用求最值函数,将max(a,b)的值赋给c
    printf("max=%d",c);
    return 0;
}

定义空函数

类型名 函数名( )
{ }

void dummy( )
{ }

这个函数现在不起任何作用,但是在程序编写的初期,可以先用一个空函数占一个位置,日后再来扩写。

函数的调用

函数调用一般形式:函数名(实参表列)//不用写函数类型了

函数调用可以分为3种方式:

①函数调用语句

把函数调用单独作为一个语句。一般不要求函数返回什么值,只要求完成一定的操作即可。

void print_star( )
{
    printf("**********\n");
}

void print_message( )
{
    printf("I love you\n");
}

int main( )
{
    void print_star( );     //声明print_star函数
    void print_message( );  //声明print_message函数
    print_star( );          //调用print_star函数
    print_message( );       //调用print_message函数
    print_star( );       
    return 0;
}

在这里调用这两个自定义的函数,均不要求返回函数值,只要求完成打印的操作即可,则函数可以不需要定义变量。

②函数表达式

函数调用时作为另一个表达式中,这时候要求函数返回一个确定的值以参加表达式的运算。

    c=3*max(a,b);  //函数调用返回一个确定值max,参加表达式的运算

③函数参数

函数调用作为另一个函数调用时的实参。

    m=max(a,max(b,c));

其中,max(b,c)是一次函数调用,它的值是b,c中的最大值,把它作为max另一次调用的实参。赋值之后,m求的是a,b,c三者中的最大值;

形参和实参

在调用有参函数的时候,主函数和被调用函数之间有数据传递关系。

在定义函数时,函数名后面括号中的变量名称为“形式参数”,若不调用,不占用内存。

在主调函数中调用一个函数时,函数名后面括号中的参数称为“实际参数”,占用内存。

实参和形参关系

在调用函数的过程中,系统会把实参的值传递给被调用函数的形参,该值在函数调用期间有效,可以参加该函数中的运算。

实参可以是常量、变量或表达式,但是要求要有确定的值,以在调用函数时将实参的值赋给形参。

实参与形参的类型要相同。

函数的返回值

通过函数调用使主调函数能得到一个确定的值,这就是函数值(函数的返回值)。

函数的返回值是通过函数语句中的return语句获得的。如果不需要从被调函数中返回函数值,则可以不要return语句,应当用定义函数为“void类型”。

return后面的值可以是一个变量,可以是与一个表达式。

int max(int x,int y)
{
    int z;
    z=x>y?x:y;
    return z;
}

int max(int x,int y)
{
    return(x>y?x:y);
}

//两种书写形式等价

给定一个数组,将数组元素打印一遍出来,使用函数打印。

int main()
{
    int array[]={0,1,2,3,4,5,6,7,8,9};
    int sz=sizeof(array)/sizeof(array[0]);
    int i;
    void print(int array[],int sz);//数组写法 arr[常量表达式] 表示数组时,中括号不能省
    print( array, sz);//调用函数时不用标明函数变量
    return 0;
}

void print(int array[],int sz)
{
    int i;
    for(i=0;i<sz;i++)
    {
        printf("%d ",array[i]);
    }
    printf("\n");
}

输入两个实数,用一个函数求他们的和。

int main()
{
    float a,b,c,x,y;
    printf("输入两个实数");
    scanf("%f %f",&a,&b);
    float add(float x,float y);
    c=add(a,b);//调用add函数时在函数内写实参
    printf("和为%f",c);
    return 0;
}

float add(float x,float y)
{
    float z;
    z=x+y;
    return(z);
}

函数的嵌套使用

C语言中,不能嵌套定义函数,但是能嵌套调用函数,即在调用一个函数的过程中,又调用另一个函数。

明天的事明天再说,今天的我超越昨日的我。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值