-
Lesson 1 - 最简单的C程序
-
Lesson 2 - 打印输出
-
Lesson 3 - 循环打印
-
Lesson 4 - 判断奇偶
-
Lesson 5 - 从1加到100求和
-
Lesson 6 - 乘法表
-
Lesson 7 - 求100以内的最大素数
-
Lesson 8 - 1到100有多少个9
-
Lesson 9 - 整型转字符串
-
Lesson 10 - 约瑟夫环
-
Lesson 11 - 求两个坐标点之间的距离
-
Lesson 12 - 判断机器存储是否小尾端
-
Lesson 13 - 对不起,你的车今天限行
-
Lesson 14 - 判断地图上某点是否有出路
-
Lesson 15 - 统计一个数二进制表示中1的个数
-
Lesson 16 - 字符串拷贝
-
Lesson 17 - 统计单词个数
-
Lesson 18 - 实现 printf
-
Lesson 19 - 命令解释器
-
Lesson 20 - 预处理器实现
-
Lesson 21 - 词法分析器实现
-
Lesson 22 - 猜数游戏
-
Lesson 23 - 五子棋
-
Lesson 24 - 超链接分析器
-
Lesson 25 - cp命令实现
-
Lesson 26 - ELF文件头分析器实现
-
Lesson 27 - 简单流处理器实现和正则表达式
-
Lesson 28 - 数学计算器实现
-
Lesson 29 - 数学计算器实现more命令实现
-
Lesson 30 - sort命令实现
-
Lesson 31 - ls -l命令实现
-
Lesson 32 - Bash项目
-
Lesson 33 - 动态数组实现
-
Lesson 34 - 约瑟夫环问题
-
Lesson 35 - 表达式求值问题
-
Lesson 36 - 广度优先解决迷宫问题
-
Lesson 37 - 词频统计器
-
Lesson 38 - 堆排序问题
-
Lesson 39 - 构造符号表
-
Lesson 40 - MyDictionary项目
-
Lesson 41 - BSearch 实现
-
Lesson 42 - QSort 实现
-
Lesson 43 - 深度优先解决迷宫问题
-
Lesson 44 - KMP 算法实现
-
Lesson 45 - 最长公共子序列(LCS)问题
-
Lesson 46 - Dijkstra 算法
-
Lesson 47 - Huffman Coding 算法
-
Lesson 48 - 地图导航项目
Lesson 28 - math calculator (数学计算器实现)
课程任务
实现在 Bash 提示符下面的数学函数计算功能,要求调用不少于 3 种数学函数。
double sqrt(double x); 开平方
double pow(double x, double y); 计算以x为底数的y次幂
double sin(double x); 正弦
copy
运行示例
limingth@gmail ~/Github/NCCL.codes/Lesson-32$ ./bashclone NCCL# math sin 1 result = 0.841471 NCCL# math sqrt 81 result = 9.000000 NCCL#
copy
参考资料
重要知识点
- 数学函数接口 sin, sqrt, pow, modf,fmod 等
- 字符串和数值类型的转换 atoi, atof, strtol, strtof 等
- 掌握 Makefile 的写法,注意通用性,提高编程效率
常用 API
转换函数
atof(); 将字符串转换成浮点型数 atoi(); 将字符串转换成整型数 atol(); 将字符串转换成长整型数 strtod(); 将字符串转换成浮点数 strtol(); 将字符串转换成长整型数 strtoul(); 将字符串转换成无符号长整型数
copy
三角函数
double sin(double x); 正弦 double cos(double x); 余弦 double tan(double x); 正切 *cot 三角函数,可以使用tan(PI/2-x)来实现。
copy
反三角函数
double asin(double x); 结果介于[-PI/2, PI/2] double acos(double x); 结果介于[0, PI] double atan(double x); 反正切(主值), 结果介于[-PI/2, PI/2] double atan2(double y,double); 反正切(整圆值), 结果介于[-PI, PI]
copy
双曲三角函数
double sinh(double x); 计算双曲正弦 double cosh(double x); 计算双曲余弦 double tanh(double x); 计算双曲正切
copy
指数与对数
double exp(double x); 求取自然数e的幂 double sqrt(double x); 开平方 double log(double x); 以e为底的对数 double log10(double x); 以10为底的对数 double pow(double x, double y); 计算以x为底数的y次幂 float powf(float x, float y); 与pow一致,输入与输出皆为浮点数
copy
取整
double ceil(double); 取上整 double floor(double); 取下整
copy
标准化浮点数
double frexp(double f, int *p); 标准化浮点数, f = x * 2^p, 已知f求x, p ( x介于[0.5, 1] ) double ldexp(double x, int p); 与frexp相反, 已知x, p求f
copy
取整与取余
double modf(double, double*); 将参数的整数部分通过指针回传, 返回小数部分 double fmod(double, double); 返回两参数相除的余数
copy