四、、函数

本文介绍了函数在编程中的关键应用,包括递归、参数类型、库函数示例、自定义函数实践(如猴子吃桃问题、斐波那契数列、数组操作等),以及如何使用指针、递归和简单计算器功能。同时涵盖了音乐相关的音符播放函数。
摘要由CSDN通过智能技术生成

main就是一个函数,因此放在main的内容一定可以通过函数实现,但函数有一个重要应用:递归。递归即在函数里调用自身,例如阶乘:

int f(int x){
return x*f(x-1)
}

(2)函数参数类型:函数里的变量为局部变量,仅在函数体内有效,但函数可以通过指针修改实参指向的值。

函数的类型

  1. 库函数:
    函数都要题头
  • 一般头文件#include<stdio.h>有main
  • 数学公式#include<math.h>有sqrt()平方根,paw()n次方
  • #include<string.h>有strlen()长度strcat()连接
  • #include<windows.h>有beep
  1. main函数:必要
    3.自定义函数
    例:
int f(int x,int y,int z){
int max=x;
if(x<y) max=x;
if(y<z) max=z;
return max;
}

得到,基本结构:

返回值类型 函数名(参数类型 参数1, 参数类型 参数2, ...) { // 函数体 
return 返回值; // 可选,如果函数有返回值
}

return;& 参数类型void返回值为空

作业:
关注公众号[Kimo姬]即可获得答案,还有实用工具等着你。简洁好用的公众号,无付费项目无捆绑应用

1. 猴子吃桃问题(递归) 一个猴子摘了一堆桃子,第一天吃了一半多一个,以后每天都吃一半多一个,到了第十天,发现只剩一个桃子了。编写递归函数计算第一天共摘了多少个桃子。

2. 使用递归计算斐波那契数列 编写一个递归函数,计算斐波那契数列的第 n 项,斐波那契数列的定义为:F(0) = 0, F(1) = 1, F(n) = F(n-1) + F(n-2)。

3. 输入一个数 n,使用自定义函数计算 n 的二次方的值并输出
自定义函数,不得使用 pow()

4. 求数组的最大值和最小值(通过函数修改实参指向的值) 编写一个函数,通过指针修改实参指向的数组中的最大值和最小值,并在主函数中输出修改后的数组。

5. 计算一个数的各位数字之和(递归实现) 编写一个递归函数,计算一个整数各位数字之和。

6. 使用指针实现字符串连接 编写一个函数,通过指针实现两个字符串的连接,并输出连接后的字符串。

7. 输入 m 和 n,输出 [m, n] 之间素数和
编写函数计算素数和。

  • 8. 输入一个数,输出其最大三位公约数
    编写函数计算最大三位公约数。

9. 使用递归计算阶乘 编写一个递归函数,计算给定整数 n 的阶乘。

10. 实现简单的计算器 编写一个函数,实现简单的加减乘除运算,函数接受两个操作数和运算符作为参数,返回运算结果。

11. 使用递归实现二分查找 编写一个递归函数,实现在有序整数数组中的二分查找。


彩蛋:

#include <stdio.h>
#include <windows.h>

// 定义音符的频率(Hz)
#define NOTE_C4 261.63
#define NOTE_D4 293.66
#define NOTE_E4 329.63
#define NOTE_F4 349.23
#define NOTE_G4 392.00
#define NOTE_A4 440.00
#define NOTE_B4 493.88
#define NOTE_REST 0  // 休止符的频率
  
// 定义音符的持续时间(毫秒)
#define DURATION 500
#define DURATION_HALF DURATION / 2
#define DURATION_QUARTER DURATION / 4 

// 播放音符函数
void playNote(double frequency, int duration) {
    if (frequency > 37 && frequency < 32767) {
        Beep((DWORD)frequency, duration);
    } else {
        printf("Invalid frequency: %.2lf\n", frequency);
    }
}  
 
int main() {
// 播放音乐
    playNote(NOTE_C4, DURATION);
    playNote(NOTE_C4, DURATION);
    playNote(NOTE_G4, DURATION);
    playNote(NOTE_G4, DURATION);
    playNote(NOTE_A4, DURATION);
    playNote(NOTE_A4, DURATION);
    playNote(NOTE_G4, DURATION);
    playNote(NOTE_F4, DURATION);
    playNote(NOTE_F4, DURATION);
    playNote(NOTE_E4, DURATION);
    playNote(NOTE_E4, DURATION);
    playNote(NOTE_D4, DURATION);
    playNote(NOTE_D4, DURATION);
    playNote(NOTE_C4, DURATION);
    playNote(NOTE_G4, DURATION);
    playNote(NOTE_G4, DURATION);
    playNote(NOTE_F4, DURATION);
    playNote(NOTE_F4, DURATION);
    playNote(NOTE_E4, DURATION);
    playNote(NOTE_E4, DURATION);
    playNote(NOTE_D4, DURATION);  
    return 0;
}

💖知道是什么的打在评论区,前20名抽JD50元代金卷💖

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值