初步认识函数

1.1函数的定义、声明、调用与返回

1.1.1概述

C语言程序的一般结构,具有的特点:

(1)C语言允许一个程序有多个源文件组成,每个源文件可以独立编译,一个源文件可以被不同的程序使用。

(2)一个源文件可以有多个函数组成,函数是程序的最基本的功能单位,一个函数可以被不同源文件中的函数调用。

(3)一个C程序有且仅有一个主函数main,主函数可以放在任何一个源文件中,程序总是从主函数开始执行。

1.1.2函数定义

函数定义的一般格式

数据类型   函数名(形式参数说明)//数据类型指函数返回值的类型,不能是数组,也不能是函数,可以是:char、int、long、float、指针或结构。函数的类型可以省略,默认为int类型。

{  说明语句

   执行语句

}

形式参数说明的两种形式:

int func( int x ,int y)  //函数定义的头部,进行形式参数说明

{......}

或:

int func( x , y ) //函数定义的头部,给出形式参数列表

   int x , y ; //单独进行参数说明

{......}

用{}括起来的部分是函数的主体,称为函数体。函数内部可以有自己的说明语句和执行语句,但函数内定义的变量不可以与形参同名。

例子:编写一个计算n阶乘的函数factor

#define _CRT_SECURE_NO_WARNINGS 1 //vs编译器使用scanf需要的头文件
#include

long long factor(int n)
{
    long long ret = 1;
    for (int i = 1;i <= n;++i) {
        ret *= i;
    }
    return ret;
}


int main()
{
    printf("输入你要求多少的阶乘:>");
    int num = 0;
    scanf("%d" ,&num);
    long long result = factor(num);
    printf("%d的阶乘是%lld", num, result);
    return 0;
}

代码结果

输入:4 

初步认识函数_第1张图片

1.1.3函数的声明与函数原型

1.函数声明

(1)函数的声明不含具体的执行动作

(2)函数的定义只有一次,而函数的声明可以有很多次

例子:用函数求两个整数之和

#define _CRT_SECURE_NO_WARNINGS 1
#include
int Add(int x, int y)
{
    int z = 0;
    z = x + y;
    return z;
}
int main()
{
    int a, b ;
    scanf("%d%d", &a, &b);
    int r = Add(a, b);
    printf("%d", r);
    return 0;
}

输入:2  5 //两个数之间要有空格

初步认识函数_第2张图片

在以下情况中可以省略函数声明:

(1)当函数的返回值为整型或字符型时,如果在同一文件中即定义函数,又调用该函数,则不论定义函数与调用函数在源程序位置关系如何,都可以省略函数说明。

(2)如果被调用函数的返回值不是整型或字符型,而是其他类型,如果函数定义和函数调用在同一个文件中,且在源文件中函数定义的位置在调用该函数之前,则可以省去在调用函数中对被调用函数的函数说明。
在下列情况下必须给出函数声明:
(1)如果在源文件中函数定义的位置在调用该函数之后,则必须在调用该函数的函数中给出被调用函数的说明。
(2)如果函数的定义与调用在两个不同的文件中,则不论函数返回值的类型是什么,在调用该函数时,都必须给出函数声明。

例子:编写一个函数计算x的n次方

#define _CRT_SECURE_NO_WARNINGS 1
#include
long power(int x, int n) //POWER函数的主要作用是返回给定数字的乘幂。 POWER函数的语法为:POWER (number,power),其中 参数 number表示底数;参数power表示指数。
{
    long p;
    for (p = 1; n > 0; --n)
        p *= x;
    return (p);
}
int main()
{
    int x, m;
    printf("Enter x and m:");
    scanf("%d%d", &x, &m);
    printf("X power M is %1d.\n", power(x, m));
    return 0;
}

输入2  4

初步认识函数_第3张图片

2.函数原型的概念

在进行被调函数声明时,编译系统需要知道被调函数参数的数量,各自是什么类型,而参数名称无关紧要,因此可以可以对被调函数的声明简化

double  fun( float,float );

函数类型标识符   函数名(形参类型1,形参类型2,....)

1.1.4函数调用

函数语句

被调用函数以语句的方式出现。通常只完成一种操作,不带回返回值。

例子:

#define _CRT_SECURE_NO_WARNINGS 1
#include
func()
{
    printf("This is a programm!\n");//以语句的形式调用库函数printf
}
void main()
{
    func();//以语句的形式调用函数func
}

1.1.5函数返回值return

(1)函数返回值只能有一个。

(2)当函数中不需要返回值时,可以写成:

                                                  return;

也可以不写。

(3)一个函数体内可以有多个返回语句,不论执行到哪一个,函数都结束,返回到调用函数。

函数返回类型

函数定义时的类型就是函数的返回类型。理论上讲,C语言要求函数定义的类型应当与返回语句中表达式的类型保持一致。当两者不一致时,系统会自动将函数返回语句中表达式的类型转换为函数定义时的类型。

例子:比较两个数的大小(当函数没有定义类型时,返回值的类型默认int型

#define _CRT_SECURE_NO_WARNINGS 1
#include
max(float x, float y)
{
    float z;
    z = x > y ? x : y;
    return z;
}

int main()
{
    float a, b;
    int c;
    scanf("%f%f", &a, &b);
    c = max(a, b);
    printf("MAX is %d\n", c);
    return 0;
}

输入2.3  4.5

初步认识函数_第4张图片

浮点型转换为整型,保留整数部分

你可能感兴趣的:(算法,c语言)