2021-10-15 C语言 函数

Day8 函数
函数的基本用法
1.定义
函数是一个完成特定功能的代码模块,其程序代码独立,通常要求有返回值,也可以是空值。
一般形式如下:

<数据类型><函数名称>(<形式参数说明>){
   
语句序列;
return [(<表达式>)];
}

① <数据类型>是整个函数的返回值类型,return [(<表达式>)]语句中表达式的值要和函数的<数据类型>保持一致。如无返回值应该写为void型。
② <形式参数说明>是逗号“,”分隔的多个变量的说明形式。
③ 大括弧内{<语句序列>},称为函数体;<语句序列>是大于等于0个语句构成的。
④ 函数的说明就是指函数原型。其中<形式参数说明>可以缺省说明的变量名称,但类型不能缺省。
⑤ 编写函数注意:函数功能、参数、返回值。
例:

double Power (double x , int n );
double Power (double , int );

2.函数的使用
函数的使用也叫函数的调用,形式如下:
函数名称(<实际参数>);
① 实参就是在使用函数时,调用函数传递给被调用函数的数据,需要确切的数据。
② 函数调用可以作为一个运算量出现在表达式中,也可以单独形成一个词语。对于无返回值的函数来讲,只能形成一个函数调用语句。
③ 函数要先说明后使用(可以不用先实现)
例:编写一个函数显示”Hello everyone!”,然后编写主程序main调用它。

#include <stdio.h>

int hello ( ){
   
	printf(“Hello everyone!);
	return 0 ;
}

int main ( ){
   
	hello ( ) ;
	return 0 ;
}

3.程序举例
定义求X的n次方的函数(X是实数,n为正整数)

#include <stdio.h>

double power(double x, int n) 
{
   
        double r = 1;
        int i;

        for (i = 1; i <= n; i++)
                r *= x;

        return r;
}

int main() 
{
   
        double x, ret;
        int n;

        printf("input:");
        scanf("%lf%d", &x, &n);

        ret = power(x, n);

        printf("%lf %d = %lf\n", x, n, ret);

        return 0;
}

问:使用函数库时,为什么引入头文件,有没有别的替代办法?
答:头文件中有函数的说明,引入头文件后才能让编译器看到文件中的函数说明和调用。将头文件中需要的函数说明引入到程序中,可以代替直接引入头文件。
例:引用scanf和printf函数可以引入<stdio.h>头文件,也可以直接引用<stdio.h>中的scanf和printf
函数说明。

//#include <stdio.h>
int scanf(const char *format, ...);
int printf(const char *format, ...);

double power(double, int);

int main() 
{
   
        double x, ret;
        int n;

        printf("input:");
        scanf("%lf%d", &x, &n);

        ret = power(x, n);

        printf("%lf %d = %lf\n", x, n, ret);

        return 0;
}

double power(double x, int n) 
{
   
        double r = 1;
        int i;

        for (i = 1; i <= n; i++)
                r *= x;

        return r;
}

函数的参数传递
函数之间的参数传递方式:全局变量、复制传递方式、地址传递方式
1.全局变量
(1)全局变量就是在函数体外说明的变量,它在程序中的每个函数都是可见的。
(2)全局变量一经定义后就会在程序中的任何地方可见。函数调用的位置不同,程序的执行结果可能会受到影响,不建议使用。
例:

#include <stdio.h>

double x = 2;
int n = 3;

double power();

int main() 
{
   
//        double x = 2;
//        int n = 3;
        double ret;

        ret = power();

        printf("%lf %d = %lf\n", x, n, ret);

        return 0;
}

double power() 
{
   
        double r = 1;
        int i;

        for (i = 1; i <= n; i++)
                r *= x;

        return r;
}

2.复制传递方式(值传递)
(1)调用函数将实参传递给被调用函数,被调用函数将创建同类型的形参并用实参初始化。
(2)形参是新开辟的存储空间,因此在函数中改变形参的值,不会影响到实参。形参、实参是一对一关系。

例:

#include <stdio.h>

double power(double, int);

int main() 
{
   
        double x = 2;
        int n = 3;
        double ret;

        printf("&x=%p &n=%p\n", &x, &n);

        ret = power(x, n);

        printf("%lf %d = %lf\n", x, n, ret);

        return 0;
}

double power(double a, int b) //double a =
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值