c语言(9)—函数(3)

C语言函数:存储类型、传参与预处理命令

一、存储类型补充

extern 声明一个变量是外部存放的(用于多文件,对外声明)

static:对外隐藏

e.g. 用extern写一个四则运算代码

思路:在三个文件里分别定义四则运算函数、定义num1和num2、主运算输出函数,并在主函数前用extern引用加减乘除及定义的变量,最终编译三个文件完成运算输出。

二、函数传参

1.整型数组传参

int fun(int array[5]);               //不常用,元素固定

int fun(int array[], int len)      //常用,元素不固定

#include <stdio.h>                                                                                                                                                                                                                   
 
int OutputArray1(int array[], int len)
{
    int i = 0;
    int max = 0;
 
    max = array[0];
    for(i = 1; i < len; i++)
    {
        if (array[i] > max)
        {
            max = array[i];
        }
    }
    return max;
}
 
int OutputArray2(int array[], int len)
{
    int i = 0;
    int min = 0;
 
    min = array[0];
    for(i = 1 ;i < len; i++)
    {
        if (array[i] < min)
        {
            min = array[i];
        }
    }
  
    return min;
}

int main(void)
{
    int num[5] = {0};
    int max = 0;
    int min = 0;
    int i = 0;

    for (i = 0; i < sizeof(num)/ sizeof(num[0]); i++)
    {
        scanf("%d",&num[i]);
    }

    max = OutputArray1(num, sizeof(num) / sizeof(num[0]));
    min = OutputArray2(num, sizeof(num) / sizeof(num[0]));
 
    printf("max = %d, min = %d\n", max, min);
    
    return 0;
}      

e.g.用接收、运行、输出三个模块编写一个冒泡排序的程序

思路:先定义一个函数用scanf和for循环来接收一个数组,再定义第二个函数用for的嵌套以及if来编写一个冒泡排序的代码,接着定义第三个函数利用for循环输出排序后的数组,最后在主函数内分别调用前面三个函数来实现冒泡排序

e.g.用接收、运行、输出三个模块编写一个数组倒置的程序

先定义一个函数用scanf和for循环来接收一个数组,再定义第二个函数用for循环来完成数组中元素的倒置,接着定义第三个函数利用for循环输出排序后的数组,最后在主函数内分别调用前面三个函数来实现数组元素倒置

 

2.字符型数组的传递

int fun(char str[]);

e.g.利用字符型数组的传递求出字符的长度

思路:在被调函数中用while遍历求出字符串长度,再在主函数中调用即可输出结果

三、预处理命令

1. 宏定义:
(1)不带参宏:#define PI 3.14(宏名一般定义为全部大写)

(2)带参宏(宏函数):#define MAX(x, y) x > y ? x : y

带参宏没有参数类型、返回值、函数类型相关概念,函数有参数类型、函数类型、返回值相关
概念;带参宏只是代码的替换,没有调用传参过程,函数有调用、传参过程;带参宏是在程序编译时展开,代码体积增大,函数是在程序运行过程中加载,代码体积不会增大;带参宏执行效率高,函数有传参过程,需要调用、传参产生资源开销;简单的代码想要封装模块,优先带参宏;需要严谨的代码逻辑,多行代码,使用函数。

e.g.用带参宏求最小值

思路:在带参宏中利用三目运算符,并在主函数中引用宏定义

#include <stdio.h>
 
#define MIN(x, y)    x < y ? x : y

int main(void)
{
    int min = 0;                                                                      
    int num1 = 100;
    int num2 = 200;

    min = MIN(num1, num2);
  
    printf("min = %d\n", min);
}

2. 头文件的包含

#include <stdio.h>

#include 包含一个文件,文件会在预处理编译时展开

<>:在系统目录下查找该头文件

"":在当前目录下查找该头文件,如果找不到再到系统目录下查

(1)头文件中包含:构造数据类型的定义、全局变量的声明、全局函数的声明、宏定义

(2)工程结构

注:main.c中负责主函数编写,功能代码.c中主要负责功能函数的编写,功能代码.h中主要负责声明功能代码.c中编写的功能函数,调用函数的文件只需加对应函数的.h头文件即可使用该函数

3.条件编译

#if         //满足条件代码加入编译

#elif      //如果if不满足条件 elif满足加入编译

#else    //if不满足代码加入编译

#endif   //条件编译结束

#ifdef    //定义了该宏,代码加入编译

#ifndef  //没有定义该宏,代码加入编译
 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值