练习:
封装三个函数完成如下功能:
1.int InputArray(int array[], int len);
从终端接收5个数放入数组中
2.int InvertArray(int array[], int len);
对传入的数组元素实现倒置
3.int OutputArray(int array[], int len);
打印数组中每个元素的值
//练习1. 和2.和 3
1.函数传参:
1.赋值传递
2.全局变量
3.整形数组
4.字符型数组和字符串的传递
char str[32] = {"hello world"};
int fun(char str[]);
练习:
封装一个函数实现对传入字符串统计该字符串长度(不能使用strlen)
int MyStrlen(char str[]);
//MyStrlen(char str[]);
递归函数:
函数体在定义时调用函数体本身
5! = 5 * 4 * 3 * 2 * 1
= 5 * 4!
注意:
1.递归函数一定要有结束条件
2.避免深层次的递归
练习:
编写一个函数,传入一个n,返回斐波那契数列第n项的值
int Fun(int n);
1 1 2 3 5 8 13 21 34 55 ..
//斐波那契数列
带参宏:
1.宏:
宏只是代码的替换,能加括号就加括号
#define
1.不带参宏
2.带参宏(宏函数)
2.带参宏和函数的区别:
1.函数是有参数类型、返回值、调用相关概念,带参宏是没有的
2.宏函数是在编译的时候加载到程序中,函数是在运行时加载到程序中
3.宏函数会使代码体积增大,函数不会使代码体积增大
4.宏函数执行效率高,函数因为有调用和传参的过程会占用系统资源开销,所以执行效率低一些
条件编译:
#if 条件
#elif 条件
#else
#endif
#ifdef 宏名 如果定义了该宏就加入后续代码
#ifndef 宏名 如果没有定义该宏就加入后续代码
#include <stdio.h> 在系统目录下寻找stdio.h
#include "stdio.h" 在当前目录下寻找stdio.h,如果找不到再到系统目录下找stdio.h
#ifndef __HEAD_H__
#define __HEAD_H__
#endif
练习:
1.封装一个函数判断一个数是否为素数?
int IsPrimaryNum(int num);
素数:只能被1和本身整除
3 5 7 11 13 17 19
//素数
2.封装一个函数给定一个数值m,返回满足以下公式变量k的最大值
2^k <= m