【C语言学习笔记】函数及多文件开发


第一部分 函数
一、函数的作用
添加一个常用的新功能,有需要的时候就可以直接调用
二、函数的定义
(1)格式
返回值类型 函数名 (形式参数列表)
{
    函数体
}
int average(int num1, int num2)
{
    return (num1 + num2) / 2;
}
(2)步骤
1> 根据函数的作用,起一个有意义的名字。
2> 明确函数的形式参数。
3> 明确函数是否需要返回值。
(3)函数调用
int main(void)
{
    int a = 10;
    int b = 9;
    
    int c = average(a, b);
    printf("c is %d\n", c);

    return 0;
}
三、形式参数和实际参数
(1)形式参数:定义函数时函数名后面括号中的参数,简称形参。
    int average(int num1, int num2)    //num1和num2就是形参
(2)实际参数:调用函数时传入的具体数值,简称实参。
    int c = average(a, b);    // a、b就是实参
(3)注意点
1> 实参和形参的个数必须相等。
2> 函数体内部不能定义和形参一样名字的变量。
3> 如果是基本数据类型作为函数形参,是值传递,修改函数内部形参的值并不会影响外面实参的值。
4> 一个函数可以没有形参,也可以有无数个形参。
四、return
(1)作用
1> 退出函数
2> 返回一个具体值给函数调用者
(2)注意点
1> 如果返回值类型写的是void,说明函数没有返回值,return可写可不写,如果写的画,后面不能写数值
2> 如果没有明确写出返回值类型,默认是int型
3> 就算明确声明了返回值类型,也可以不返回任何值
五、函数注意点
1、默认情况下,C语言不允许两个函数的名称一样
2、函数不能嵌套定义
3、函数不能重复定义,但是可以重复声明,函数声明只要在调用函数之前就好,函声明的位置不固定。
4、如果有函数的声明,没有函数的定义
1> 编译可以通过,因为编译器只会检测语法合不合理
2> 链接报错,因为链接的时候会检测函数是否定义
六、课后练习
/*
 编写一个函数int pows(int base, int n)返回base的n次方
 */

#include <stdio.h>

int pows(int base, int n);

int main(void)
{
    // 1.定义变量保存要计算的整数,和要计算的整数次方
    int a;
    int b;
    
    // 2.提示用户输入
    printf("请输入要计算的数值,以及乘方数:\n");
    
    // 3.接收输入
    scanf("%d %d", &a, &b);
    
    // 4.计算
    int c = pows(a, b);
    printf("%d的%d次方是%d\n", a, b, c);
    
    return 0;
}


int pows(int base, int n)
{
    if (0 == n)
    {
        return 1;
    }
    
    //定义变量保存结果
    int result = 1;
    
    for (int i = 0; i < n; i++)
    {
        result *= base;
    }
    return result;
}
/*
 题目:
 编写一个函数int pieAdd(int n),计算1!+2!+3!+……+n!的值(n>=1)。
 比如pieAdd(3)的返回值是1! + 2! + 3! = 1 + 1*2 + 1*2*3 = 9
 */

#include <stdio.h>

//函数声明
int pieAdd (int n);

int main (void)
{
    // 1.定义一个变量保存用户输入
    int num = 0;
    
    // 2.检查输入是否正确,负数没有阶乘
    while (num < 1)
    {
        // 2.1提示用户输入一个大于等于零的整数
        printf ("请用户输入一个大于等于零的整数:\n");
        
        // 2.2接收输入
        scanf ("%d", &num);
    }
    // 3.定义一个变量保存最终结果
    int result = pieAdd (num);
    
    printf ("结果是%d\n", result);
    
    return 0;
}

//函数定义
int pieAdd (int n)
{
    // 先计算阶乘,再相加
    int jiecheng = 1;
    int sum = 0;
    
    //当下乘的值
    int number = 1;
    
    for (int i = 0; i < n; i++)
    {
        //计算阶乘
        jiecheng *= number;
        
        //当下乘的值+1
        number++;
        
        //相加
        sum += jiecheng;
    }
    
    return sum;
}

第二部分 多文件开发
一、开发原则
(1)函数的定义放.c文件,函数的声明放.h文件
(2)如果要使用某个.c文件中定义的函数,只需要#include这个.c文件对应的.h文件
(3).h头文件的作用:被别人拷贝,编译链接的时候不需要管.h文件
二、实例
(1)公司有个项目,是做基本运算。现分配任务,张三负责编写main函数,李四负责编写运算。
/*
张三 zhangsan.c
 编写main函数
*/
#include <stdio.h>
#include "李四.h"

int main()
{
    int score1 = 100;
    int score2 = 70;
    
    int c = average(score1, score2);
    int d = sum(score1, score2);
    
    printf("平均分是%d\n", c);
    printf("总分是%d\n", d);
    
    return 0;
}
/*
 李四 lisi.c
    负责编写基本运算函数
 */

int average(int a, int b)
{
    return (a + b)/2;
}

int sum(int a, int b)
{
    return a + b;
}
/*
 李四 lisi.h
    编写函数的声明
 */

int average(int a, int b);

int sum(int a, int b);
(2)执行过程
1> 各自生成目标文件
cc -c zhangsan.c    //生成zhangsan.o目标文件<span style="white-space:pre">	</span>
cc -c lisi.c    //生成lisi.o目标文件
2> 链接: 把项目中所有相关联的.o目标文件、C语言函数库合并在一起,生成可执行文件a.out
cc zhangsan.o lisi.o
3> 运行
./a.out

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值