• c语言编程函数


    C程序是由一组或是变量或是函数的外部对象酿成的.函数是一个自我包涵的
    实现必然相关功能的实施代码段.咱们可以把函数看成一个"黑盒子",你只要将数
    据送到里面去就能得到结论,而函数内部毕竟是似果何任务的的,外部程序是不懂得的.
    外部程序所懂得的仅限于输入给函数啥以及函数输出啥.函数供应了编制程序
    的伎俩,使之简单读、写、懂得得、排解差错、修改和维护.
    C程序中函数的数目事实上是不限的,介入讲有啥限定的话,那定是,一个C
    程序中必须至少有一个函数,同时且其中必须有一个同时且仅有一个以main为名,那个
    函数称为主函数,整个程序从那个主函数最早实施.
    C 语言程序激劝和倡导人们把一个大题目分割成一个个子题目,对应于操作一
    个子题目编制一个函数,是以,C 语言程序同样是由大量的小函数而不是由少量大
    函数变成的,即所谓"小函数造成大程序".似许的好处是让各部分彼此充实独立,
    同时且任务单一.因而这些充实独立的小模块也能够做为一种固定规格的小"构件",
    用来造成新的大程序.
    C语言的一个关键特点是可以创立库函数.Turbo C2,0供应的运路程序库有500
    多个函数,每个函数都实现必然的功能,可由用户随意调用.这些函数总的分为输
    入输出函数、数学函数、字符串和内存函数、与BIOS和DOS有关的函数、字符屏幕
    和图形功能函数、环节操纵函数、目录函数等.对这些库函数应相熟其功能,只有
    似许才可省去非常多不需要的任务.
    本教程后半部分特意讲授Turbo C2,0的库函数,同时对每个函数都给出例程,读
    者可以将自已需要的部分以块的方式定义,接着将此块写入文件,似许就能在进
    入Turbo C2,0集成开发环境后,开门见山调用此程序,毗连,运行,察看结论,以加深
    对该函数的懂得得.
    用户编制Turbo C语言源程序,定是操纵Turbo C的库函数.可以把全部使用的
    库函数放在一个巨大的主函数里,也能够按差不功能假想成一个个用户函数而被其
    它函数调用.Turbo C2,0定见用户使用后者,当用户编制了部分较常用的函数时,
    只要将其存在函数库里,在日后的编程中可被便当的调用而不需要再去编译它们.
    毗连时将会自动从相应的库中装配成所需程序.
    2,函数的表明与定义
    Turbo C2,0中全部函数与变量同样在使用往常必须表明.所谓表明是指表明函
    数是啥类型的函数,同样库函数的表明都包涵在相应的头文件<.h>中, 例似标
    准输入输出函数包涵在stdio.h中,非规格输入输出函数包涵在io.h中, 日后在使
    用库函数时必须先懂得该函数包涵在啥样的头文件中,在程序的开头用#include
    <
    .h>或#include"*.h"表明.只有似许程序在编译,毗连时Turbo C 才懂得它是提
    供的库函数,否那么,将信任是用户自已编写的函数而不能装配.
    2,2 函数表明
    2,典范方式
    其情势为: 函数类型 函数名();
    2,ANSI 法那么方式
    其情势为: 函数类型 函数名(信息类型 情势指标, 信息类型 情势
    指标,…);
    其中:函数类型是该函数返回值的信息类型,可所以 早年讲授的整型(int),
    长整型(long),字符型(char),单浮点型(float),双浮点型(double)以及无值型
    (void),也可所以 指针,包罗结构指针.无值型示意函数没有返回值.
    函数名为Turbo C2,0的标识符,小括号中的内容为该函数的情势指标表明.可
    以只有信息类型而没有情势指标,也能够两者都有.对于典范的函数表明没有指标
    信息.似:
    int putlll(int x,int y,int z,int color,char *p)表明一个整型函数
    char *name(void); 表明一个字符串指什函数
    void student(int n,char *str);表明一个不返回值的函数
    float calculate(); 表明一个浮点型函数
    看重:介入一个函数没有表明就被调用,编译程序同时不信任犯错,而将此函数
    默许为整型(int)函数.是以当一个函数返回其它类型,又没有事先表明, 编译时
    将会犯错.
    2,2 函数定义

    函数定义定是必然该函数实现啥功能以及似何运行,相当于其它语言的一个 
    
    • 1

    子程序.Turbo C2,0对函数的定义接收ANSI法那么的方式.即:
    函数类型 函数名(信息类型情势指标;信息类型 情势指标…)
    {
    函数体;
    }
    其中函数类型和情势指标的信息类型为Turbo C2,0的全然信息类型.函数体为
    Turbo C2,0供应的库函数和语句以及其它用户自定义函数调用语句的组合,同时包罗
    在一对花括号"{“和”}“中.
    需要指出的是一个程序必须有一个主函数,其它用户定义的子函数可所以 随意任性
    多个,这些函数的位置也没有啥限定,可以在main()函数前, 也能够在其后.
    Turbo C2,0将全部函数都被信任是全局性的.同时且是外部的,即可以被另一个文件
    中的任何一个函数调用.
    2 函数的调用
    2,2 函数的简单调用
    Turbo C2,0调用函数时开门见山使用函数名和实参的方式,也定是将要赋给被调用
    函数的参量,按该函数表明的指标情势传送已往,接着进入子函数运行,运行终了
    后再按子函数法那么的信息类型返回一个值给调用函数.使用Turbo C2,0的库函数就
    是函数简单调用的方式.举例表明似下:
    例2:
    #include
    int maxmum(int x,int y,int z); 表明一个用户自定义函数
    int main()
    {
    int i,j,k;
    printf(“i,j,k=? \n”);
    scanf(”%5d%5d%5d",&i,&j,&k);
    maxmum(i,j,k);
    gainch();
    return 0;
    }

     maxmum(int x,int y,int z) 
     { 
          int max;
          max=x>y? x:y;
          max=max>z? max:z;
          printf("The maxmum value of the 3 data is %d\n",max);
     } 
    2,2 函数指标传送 
    
    一、调用函数向被调用函数以情势指标传送 
    用户编写的函数同样在对其表明和定义时就法那么了情势指标类型,是以调用这 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    些函数时参量必须与子函数中情势指标的信息类型、次序和数量无缺同样,否那么在
    调用中将会犯错,得到意想不到的结论.
    看重:
    当数组做为情势指标向被调用函数传送时,只传送数组的地点,而不是将整个
    数组元素都复制到函数中去,即用数组名做为实参调用子函数,调用时指向该数组
    第一个元素的指针就被传送给子函数.因为在Turbo C2,0中,没有下标的数组名就
    是一个指向该数组第一个元素的指针.毫无疑难数组变量的类型在两个函数中必须同样.
    用下述方式传送数组形参.
    例2:
    #include
    void disp(int *n);
    int main()
    {
    int m[20],i;
    for(i=0;i<20;i++)
    m[i]=i;
    disp(m); 按指针方式传送数组
    gainch();
    return 0;
    }
    void disp(int n)
    {
    int j;
    for(j=0;j<20;j++)
    printf(“%3d”,
    (n++));
    printf(“\n”);
    }
    另外,当传送数组的某个元素时,数组元素做为实参,如今按使用其它简单变
    量的方式使用数组元素.例2按传送数组元素的方式传送时变为:
    #include
    void disp(int n);
    int main()
    {
    int m[20],i;
    for(i=0;i<20;i++){
    m[i]=i;
    disp(m[i]); 追个传送数组元素
    }
    gainch();
    return 0;
    }
    void disp(int n)
    {
    printf(“%3d\t”);
    }
    这时一次只传送了数组的一个元素.
    二、被调用函数向调用函数返回值
    同样使用return语句由被调用函数向调用函数返回值,该语句有以下用途:
    2,它能急速从所在的函数中退出,返回到调用它的程序中去.
    2,返回一个值给调用它的函数.
    有两种方式可以中断子函数运行同时返回到调用它的函数中:一是实施到函数的
    末了一条语句后返回;一是实施到语句return时返回.前者当子函数实施完后仅返
    回给调用函数一个0.似果要返回一个值,就必须用return语句.只需在return 语句
    中指定返回的值即可.例2返回最大值时变为:
    例3:
    #include
    int maxmum(int x,int y,int z); 表明一个用户自定义函数
    int main()
    {
    int i,j,k,max;
    printf(“i,j,k=? \n”);
    scanf(“%5d%5d%5d”,&i,&j,&k);
    max=maxmum(i,j,k); 调用子函数,同时将返回值赋给max
    printf(“The maxmum value is %d\n”,max);
    gainch();
    return 0;
    }

     maxmum(int x,int y,int z) 
     { 
          int max;
          max=x>y? x:y;        *求最大值* 
          max=max>z? max:z;
          return(max);        *返回最大值* 
     } 
    return语句可以向调用函数返回值,但这类方式只能返回一个指标,在非常多情 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    况下要返回多个指标,这是用return语句就不能知足要求.Turob C2,0供应了另一
    种指标传送的方式,定是调用函数向被调用函数传送的情势指标不是传送变量自已,
    而是传送变量的地点,当子函数中向相应的地点写入差不的数值之后,也就扭转了
    调用函数中相应变量的值,从而到达了返回多个变量的妄图.
    例5:
    #include
    void subfun(int m,int n); 表明子函数
    int main()
    {
    int i,j;
    printf(“i,j=? \n”);
    scanf(“%d,%d”,&i,&j);从键盘输入2个整数
    printf("In main before calling\n"输出此2数及其乘积
    "i=%-5d j=%-5d i
    j=%-5d\n",i,j,i
    j);
    subfun(&i,&j); 以传送地点的方式调用子函数
    printf("In main after calling\n"调用子函数后输出变量值
    “i=%-5d j=%-5d ij=%-5d\n",i,j,ij);
    gainch();
    return 0;
    }
    void subfun(int *m,int *n)
    {
    *m=*m+2;
    *j=*i-j;
    printf(“In subfun after calling\n” 子函数中输出变量值
    "i=%-5d j=%-5d i
    j=%-5d\n”,*i,j,ij);
    }
    上例中,*i
    j示意指针i和j所指的两个整型数
    i和
    j之乘积.
    另外,return语句也能够返回一个指针,举例似下.
    下例中先守侯输入一字符串,再守侯输入要查找的字符,接着调用match() 函
    数在字符串中查找该字符.似果有同样字符,那么返回一个指向该字符串中这一名置的
    指针,介入没有找到,那么返回一个空(NULL)指针.
    例5:
    #include
    char *match(char c,char *s);
    int main()
    {
    char s[50],c,*str;
    str=malloc(50); 为字符串指什安顿内存空间
    printf(“Please input character string:”);
    gains(s); 键盘输入字符串
    printf(“Please input one character:”);
    c=gainche(); 键盘输入字符
    str=match(c,s); 调用子函数
    putchar(‘\n’);
    puts(str); 输出子函数返回的指针所指的字符串
    gainch();
    return 0;
    }
    char *match(char c,char *s)
    {
    int i=0;
    while(c!=s[i]&&s[i]!=‘\n’)找字符串中指定的字符
    i++;
    return(&s[i]); 返回所找字符的地点
    }

  • 相关阅读:
    ZYNQ之FPGA学习----FIFO IP核使用实验
    Redis实战 - 01 Redis 和 SpringSecurity Oauth2 实现认证授权中心
    【Redis】五大常见的数据类型之 Set
    使用mindspore提供的docker运行官方示例resnet_thor,训练速度非常慢
    【机器学习】基于卷积神经网络 CNN 的猫狗分类问题
    【Node.js】npm和包
    构建健康游戏环境:DFA算法在敏感词过滤的应用
    V4L2 驱动架构介绍
    【压力测试】用JMeter进行百科网站压力测试
    寻找文本之间的不同
  • 原文地址:https://blog.csdn.net/zxbyzx/article/details/128157711