05函数

C语言中的函数可以帮助我们编写大型应用程序,同时c中的函数也是oc语言函数(方法)的基础

任何一个应用程序都包含的功能模块:

  • 联网模块

  • 数据下载

  • 界面搭建

  • 数据解析/数据显示

[前言] 在大型应用程序开发过程中,对于某个代码片段需要反复的使用,我们(程序员)可以将这个需要反复使用的代码片段[封装] 成一个[函数],给这个函数起个名字,当需要使用这个代码片段时,只需要通过名字去[调用]这个函数就可以了

首先,函数必须先定义,然后才能使用[调用]

一丶函数的定义

//函数声明 (声明,是给编译器看的)
返回值类型 函数名(参数列表);
//函数定义(实现) (实现,是给链接器看的)
返回值类型 函数名(参数列表)
{
    //函数体
}

返回值类型,可以是int,char,double 等等这些基本数据类型,也可以是复合数据类型

函数名,必须符合标识符的命名规则

参数列表,这里是多个变量的定义列表

函数体,所有在main函数中可以写的代码,在函数体中都可以书写

二丶函数的分类

系统函数/库函数

库函数,指的是由官方或者第三方编写的函数,这些函数不需要程序员再进行开发,只需要在需要使用对应功能的函数时,通过函数名调用就可以了,同时需要包含对应的头文件

#include<stdio.h>
    //printf scanf
#include<unistd.h>
    //sleep
#include<stdlib.h>
    //abs
#include<math.h>
    //pow sqrt sin cos

自定义函数

指的是,函数的名字,函数的功能(函数体),都需要程序员自己自定义

1.main函数,main函数的函数名是固定的,但是功能是自定义的

2.完全自定义函数,函数名,函数的功能,都需要程序员自定义

三丶自定义函数

1.最简单的自定义函数

//所有的函数 都必须单独定义(不能嵌套定义)
//函数声明,声明语句必须以分号结束
//函数声明是给编译器看的
void func(void);
//函数定义(实现)
//函数定义是给链接器看的
void func(void)
{
    printf("🐰\n");
}
//左侧void,表示没有返回值
//右侧void,表示没有参数

2.带参数,带返回值的自定义函数

带参函数

void func1(int a);
void func2(int a,char b);
func1(10);//10 是实际参数,简称“实参”
//调用带参函数时,会发生参数的传递,称为“传参”
//传参,将 实参 传递给 形参
//传参,就是赋值
func2(100, '+');

带返回值函数

//函数定义(实现)
int fun(void)
{
    printf("返回之前\n");
    return 0;//当程序执行到return语句时,当前函数立即结束
}

return的使用

(1)在返回值类型为void的函数中使用return,不能带有返回值

void foo(int a,int b)
{
    int sum=a+b;
    printf("%d\n",sum);
    return;//结束当前函数
}

(2)在返回值类型不为void的函数中使用return,可以带有返回值

int fun(int a,int b)
{
    int c;
    c=a*a*a+b*b*b;
    return c;
}

(3)特殊函数

void fun(void);
//参数为void,表示一个参数也不能传
void fun();
//参数为空,表示可以传入任意多个、任意类型的参数,但是所传参数无法保存 

四丶函数的栈空间 和 函数调用

[注] 函数调用发生时,会立即在内存的栈内存区开辟一个属于这个函数自己的[栈空间],这个[栈空间]用来存储函数内部的局部 变量(普通变量,数组等等),这个[栈空间]的大小取决于这些变量所要占的内存大小

函数调用结束时,[栈空间]被释放

五丶递归函数

递归函数的书写步骤:

  • 明确函数的功能,根据函数的功能确定函数的原型(声明)

  • 找出递归函数退出的临界条件(特殊情况)

  • 大胆假设整个函数的功能已经写好,直接调用自己(本函数)就可以完成想要的功能

[结论] 凡是用循环可以实现的,用递归都可以实现

六、练习

1.编写函数,判断一个字符是否是表示数字的字符,如果是返回1,不是,返回0

#include <stdio.h>
int func(int n);
int func(int n)
{
    if (n>=48&&n<=57)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}

int main(int argc, const char * argv[])
{
    char a;
    scanf("%c",&a);
    printf("%d\n",func(a));
    return 0;
}    

2.编写函数,判断一个字符,是否是表示16进制数字的字符

‘0’ — ‘9’+ ‘a’ — ‘f’

#include <stdio.h>
int func(int n);
int func(int n)
{
    if ((n>=48&&n<=57)||(n>=97&&n<=102))
    {
        return 1;
    }
    else
    {
        return 0;
    }
}

int main(int argc, const char * argv[])
{
    char a;
    scanf("%c",&a);
    printf("%d\n",func(a));
    return 0;
}

3.编写函数,求4个数的平均值。

int avg(int a, int b, int c, int d);
#include <stdio.h>
int func(int a,int b,int c,int d);
int func(int a,int b,int c,int d)
{
    int sum=(a+b+c+d)/4;
    return sum;
}

int main(int argc, const char * argv[])
{
    int a,b,c,d;
    scanf("%d%d%d%d",&a,&b,&c,&d);
    printf("%d\n",func(a, b, c, d));
    return 0;
}

4.编写函数,传入n,打印以n为底的倒三角型

传入:5

输出:

*****

***

*

#include <stdio.h>
void func(int n);
void func(int n)
{
    for (int i=1; i<=(n+1)/2; i++)
    {
        for (int j=1; j<=i-1; j++)
        {
            printf(" ");
        }
        for (int k=n;k>=2*i-1 ; k--)
        {
            printf("*");
        }
        printf("\n");
    }
}

int main(int argc, const char * argv[])
{
    int n;
    scanf("%d",&n);
    func(n);
    return 0;
}

5.编写函数,传入n,打印以n为底的正三角形

#include <stdio.h>
void func(int n);
void func(int n)
{
    for (int i=1; i<=(n+1)/2; i++)
    {
        for (int j=1; j<=(n+1)/2-i; j++)
        {
            printf(" ");
        }
        for (int k=1;k<=2*i-1 ; k++)
        {
            printf("*");
        }
        printf("\n");
    }
}

int main(int argc, const char * argv[])
{
    int n;
    scanf("%d",&n);
    func(n);
    return 0;
}

6.编写函数,求两个数的最小公倍数,用返回值返回。

#include <stdio.h>
int func(int a,int b);
int func(int a,int b)
{
    int sum=(a>b?a:b);
    for (int i=(a>b?a:b); ; i++)
    {
        if (i%a==0&&i%b==0)
        {
            sum=i;
            break;
        }
    }
    return sum;
}

int main(int argc, const char * argv[])
{
    int a,b;
    scanf("%d%d",&a,&b);
    printf("%d\n",func(a, b));
    return 0;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,539评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,594评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,871评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,963评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,984评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,763评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,468评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,357评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,850评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,002评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,144评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,823评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,483评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,026评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,150评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,415评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,092评论 2 355

推荐阅读更多精彩内容

  • 原文地址:C语言函数调用栈(一)C语言函数调用栈(二) 0 引言 程序的执行过程可看作连续的函数调用。当一个函数执...
    小猪啊呜阅读 4,616评论 1 19
  • 函数和对象 1、函数 1.1 函数概述 函数对于任何一门语言来说都是核心的概念。通过函数可以封装任意多条语句,而且...
    道无虚阅读 4,566评论 0 5
  • php usleep() 函数延迟代码执行若干微秒。 unpack() 函数从二进制字符串对数据进行解包。 uni...
    思梦PHP阅读 1,984评论 1 24
  • PHP常用函数大全 usleep() 函数延迟代码执行若干微秒。 unpack() 函数从二进制字符串对数据进行解...
    上街买菜丶迷倒老太阅读 1,370评论 0 20
  • 最近这两天忙东忙西,努力完成着出国的最后一点扫尾工作。发现自己在忙碌的时候,内心无法真正平静下来思考,仿佛肉体与精...
    你好啊我叫露娜阅读 242评论 8 6