新手c语言讲解及题目分享(十四)--函数专项练习(二)

新手c语言讲解及题目分享(十四)--函数专项练习(一)-优快云博客

目录

前言

一.函数调用中的参数传递

1.普通变量作为函数的参数

2.数组元素作为参数

3.数组名作为函数的参数

4.指针变量作为函数的参数

二.函数的嵌套调用

三.函数的递归调用

四.函 数 与 宏

1.不带参数的宏定义

2.带参数的宏定义

五.函数指针与返回指针的函数

1.指向函数的指针变量定义的一般形式

2.用指向函数的指针变量调用函数

Ⅰ.利用指针进行函数的选择调用

Ⅱ.指向函数的指针变量作函数参数

3.返回指针值的函数


前言

前一章我讲解了一些有关函数的部分内容,但已经足够开始编写程序。但还有些细节的地方和不理解的地方在这篇都会涉及到。主要包括函数中参数的传递,不同类型的结构作为函数参数和函数的嵌套等一些函数的进阶内容都会在本文中讲解。对我个人而言函数还是非常重要的,它可以是你的代码具有更高的可读性。

这期题目分享全放到文章中。

一.函数调用中的参数传递

当被调用函数是有参函数时,主调函数与被调函数之间具有数据传递关系。 定义函数时的参数称为形式参数,简称形参。

形参在函数未被调用时没有确定的值,只 是形式上的参数。调用函数时的参数称为实际参数,简称实参。实参可以是变量、常量或表达式,有确定的取值,是实实在在的参数。函数定义时形参不占用内存,只有发生调用时才 被分配内存单元,接收实参传来的数据。

定义函数时必须定义形参的类型。函数的形参与实参的数量应相等,并且对应的形参和 实参的类型相同。形参和实参可以同名,形参是该函数内部的变量,即使形参和实参同名, 也是两个不同的变量,占用不同的内存单元。

1.普通变量作为函数的参数

单向的值传递(实参→形参),形参和实参分别分配存储空间,形参值的改变不会影响 实参。

2.数组元素作为参数

由于形参是在函数被调用时临时分配存储单元,不可能为一个数组元素单独分配存储单 元(数组是一个整体,在内存中占连续的一段存储单元)。因此数组元素只能用作函数实 参,不能用作形参。在用数组元素作函数实参时,把实参的值传给形参,也是单向的值传递 方式。

题目: 编写一个C语言程序,该程序包含一个函数 process_element,它接受一个整数参数。该函数将检查传入的整数是否为正数,如果是,则计算并返回该整数的平方;如果不是,则返回0。然后在 main 函数中,创建一个整数数组,并使用循环遍历数组中的每个元素,调用 process_element 函数处理每个元素,并打印结果。

#include <stdio.h>

// 函数声明
int process_element(int element);

int main() {
    int numbers[] = {3, -1, 5, 0, -4, 7};
    int size = sizeof(numbers) / sizeof(numbers[0]);

    // 遍历数组并处理每个元素
    for (int i = 0; i < size; i++) {
        int result = process_element(numbers[i]);
        printf("The square of %d is: %d\n", numbers[i], result);
    }

    return 0;
}

// 函数定义
int process_element(int element) {
    if (element > 0) {
        return element * element; // 如果是正数,返回其平方
    } else {
        return 0; // 如果不是正数,返回0
    }
}

在这个程序中,process_element 函数接受一个整数参数,并根据该整数的值返回其平方或0。main 函数创建了一个整数数组,并使用 for 循环遍历数组。在每次迭代中,它调用 process_element 函数,并将当前数组元素的值作为参数传递。然后,程序打印出每个元素及其处理后的结果。

这个例子展示了如何将数组元素作为参数传递给函数,以及如何在函数内部根据传入的参数执行不同的操作。

3.数组名作为函数的参数

数组是存储数据的重要工具。数组中存放的数据有次序关系,很容易进行统一处理。 函数可以通过参数传递来处理数组。用数组名作为函数实参时,向形参(数组名或指针变 量)传递的是数组在内存中的起始地址,形参和实参共用一个内存单元,形参值的改变会 影响实参。

题目: 编写一个C语言程序,该程序包含一个函数 sum_array,它接受一个整数数组和数组的大小作为参数,并计算数组中所有元素的和。然后在 main 函数中,创建一个整数数组,调用 sum_array 函数计算并打印数组元素的总和。

#include <stdio.h>

// 函数声明
int sum_array(int arr[], int size);

int main() {
    int numbers[] = {1, 2, 3, 4, 5};
    int size = sizeof(numbers) / sizeof(numbers[0]);
    int sum = sum_array(numbers, size);

    printf("The sum of the array elements is: %d\n", sum);

    return 0;
}

// 函数定义
int sum_array(int arr[], int size) {
    int sum = 0;
    for (int i = 0; i < size; i++) {
        sum += arr[i]; // 累加数组中的每个元素
    }
    return sum; // 返回总和
}

在这个程序中,sum_array 函数接受一个整数数组 arr 和数组的大小 size 作为参数。函数通过一个 for 循环遍历数组中的所有元素,并将它们累加到变量 sum 中。完成累加后,函数返回总和。

在 main 函数中,我们创建了一个整数数组 numbers 并计算了其大小。然后,我们调用 sum_array 函数,并将数组名 numbers 和数组的大小 size 作为参数传递。最后,我们打印出数组元素的总和。

这个例子展示了如何在C语言中将整个数组作为参数传递给函数。需要注意的是,在C语言中,数组名 arr 在函数参数列表中实际上是一个指向数组第一个元素的指针,因此函数内部无法直接获取数组的大小,必须作为单独的参数传递。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

樱娆^_^

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值