c 笔记吕科 函数

函数三要素:返回值、参数列表、声明

1函数的定义

main函数作为整个程序的入口,返回值给了他的父进程
char argv[]指针数组:[]优先级很高,argv[]代表数组,里面所有的元素是char类型,每个main函数的参数都是字符串(char )
直接给main函数传参,一空格表示一个参数的结束
strcmp比较两个字符串大小strcmp(const char
s1, const char *s2)

形式、
//函数实现(定义)
float add(float a, float b)
{
float c = a + b;

return c;
// return a + b;
}

float sub(float a, float b)
{
return a - b;
}

float mul(float a, float b)
{
return a * b;
}

float div(float a, float b)
{
if (b == 0)
{
printf("除数不能是0.\n");
//高精度向低精度隐式转换,会丢掉数据。低精度向高精度隐式转换,结果更精确。
// return -1;
// 结束整个程序
_exit(0);
}

return a / b;
}

2函数的声明

形式
#include <stdio.h>
#include <unistd.h>

//函数的声明
float add(float a, float b);
float sub(float a, float b);
float mul(float a, float b);
float div(float a, float b);

3函数的调用

形式 switch (ch)
{
case '+':
ret = add(a, b);
break;

case '-':
ret = sub(a, b);
break;

case '*':
ret = mul(a, b);
break;

case '/':
ret = div(a, b);
break;

default:
printf("error.\n");
break;
}

注意 一般使用函数两种顺序

【1 函数声明 调用 定义 2 定义 调用】

不带参数的宏定义:
#define 宏名 字符序列
#define FALSE 0

带参数的宏定义:
#define 宏名(形参表) 字符序列
#define MAX(a,b) ( (a) > (b) ) ? (a) : (b)

取消宏定义:
#undef 宏名

带参宏和内联函数

一些语句比较短小,功能比较简单的函数,可以用宏定义实现,提高效率。
宏定义只是替换,没有调用开销(栈空间的使用),函数有开销。
函数会检查你的参数列表和返回值类型,而宏定义没有类型,也就不会检查

带参宏和普通函数

1、能完成相类似的功能
2、函数会检查你的参数列表和返回值类型,而宏定义没有类型,也就谈不上检查
3、宏定义只是替换,没有调用开销,函数有开销。

/ 高仿shell

#include <stdio.h>
#include <string.h>
//定义一些我们自己的命令
#define ls_ "ls123"
#define pwd
"pwd123"
#define mkdir
"mkdir_123"
//自定义命令个数
#define NUM 3
//每个命令支持最大字符个数
#define CNT 100

//全局变量,3行100字符的数组, 默认是全为0
char buf[NUM][CNT];

//进行命令初始化
void initcommand(void)
{
strcpy(buf[0], ls
);
strcpy(buf[1], pwd);
strcpy(buf[2], mkdir
);
}

int main(void)
{
//定义一个输入命令的字符数组
char cmd[CNT];

memset(cmd, 0, sizeof(cmd));

//初始化命令
init_command();

//工作
while (1)
{
printf("[root@]# ");
//输入命令
scanf("%s", cmd);

//查找命令
int i = 0;

for (i=0; i<NUM; i++)
{
if (!strcmp(buf[i], cmd))
{
printf("%s是合法命令:%s.\n", cmd, buf[i]);
break;
}
}

if (i >= 3)
{
printf("%s是非法命令,请重新输入.\n", cmd);
}
}

return 0;
}

行缓冲

输出行缓冲:
以\n为输出结束标识符,若没有该换行符,则将一直运算至缓冲区填满后或运算结束后一起输出。
输入行缓冲:
以\n为输入结束标识符,若不键入换行符,则一直等待输入。

精度转换

默认低精度向高精度转换
高精度向低精度转换会丢失数据

0代表数字零
'/0'代表字符串的结束
'0'代表字符0

strcmp strcpy strcat
a,b两组字符串
strcmp ( a , b ) 将两个字符串进行对比,相等返回值为0,a大于b返回值正数,a小于b返回值为负
strcpy ( a , b ) 将字符串b复制到字符串a上
strcat ( a , b ) 将字符串b追加在字符串a后面

递归函数的应用

1阶乘
c 笔记吕科  函数

2fibo

c 笔记吕科  函数

c 笔记吕科  函数迭代函数的应用

求10 之内的和c 笔记吕科  函数

c 笔记吕科  函数

转载于:https://blog.51cto.com/13408467/2043906

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值