常见的两类数值计算的函数
1. C语言 pow() 函数用来求 x 的 y 次方的值。 头文件:math.h
语法/原型 ==>double pow(double x,double y); 实参是int 类型也可以,它会被强制转换的
参数说明:
举个简单的例子 求2^3次方 并打印在屏幕上
关键的语句是 printf("%d",pow(2,3)); 那么聪明的tz伙伴们看出问题了吗? 这个结果实际上是打印输出了 0 我们把错误的地方改一下printf("%f",pow(2,3)); 此时输出就是我们想要的结果 8 了。
在TZOJ 题库中 常见的有 水仙花数(Narcissistic number) 之类的题目,我遇到的 题目的题号是 1372 《C语言实验》 实验四 循环程序设计 水仙花数
2. C语言中 sqrt() 函数用来 计算平方根。 头文件:math.h
语法/原型为 ==> float sqrt (float),double sqrt (double),double long sqrt(double long)
实参是int 类型同样也是可以的,它会被强制转换的
在运行时可能会出现的错误,也和上面一样。
为什么会把这两个放在一起讲呢?原因很简单,当遇到的题目是需要逻辑判断和数值运算的时候,这两个错误经常是形影不离
1.首先是考虑的不全面,这种就是需要再三检查,自己的逻辑有没有出错,题目给的案例输入输出,不会很全面。往往你以为输入输出正确了,其实还有其他的数值情况你没有考虑,比如 0 ,输入0 输出还是0 的情况。
2.其次还需要注意一下,有些题目会要求输入多组数据,在输出多组数据,输出的数据要各占一行。最后一行输出完后,他可能是不换行的。
Runtime Error: 运行时错误,这个一般是程序在运行期间执行了非法的操作造成的。以下列出常见的两种错误类型:
1.Runtime Error(ARRAY_BOUNDS_EXCEEDED) //数组越界 这种情况的话就是你的定义的数组范围太小了,题目可能测试用到数组范围是10000,而你以为自己定义9999已经很大了,结果还是白给。
2.Runtime Error(DIVIDE_BY_ZERO) //除零 这种情况说实话,我没遇到过,这个就检查除数有没有问题。
Time Limit Exceeded: 您的程序运行的时间已经超出了这个题目的时间限制。
1.这种的话,常见在根据某个公式,求值。 这种就要避免造成大量冗余循环,和限制循环次数。当题目有具体给出,输出的精度的时候,你可以用个范围 限定一下, 比如 某个值算到 <1e-6 (10^-6) 时候就退出循环。后面算不算都一样,对题目输出的精度没影响就好了。如题目 1477 实验四 循环程序设计 C语言实验题――余弦
2.还有一种就要用到数组的,对于常用要计算的数据,可以放在数组中,后面到数组中找就好了,不用计算,减少运行时间,降低程序复杂度。 如题目 1163 实验5 数组的使用 统计1到N之间数字1的个数
最后想给大家再遇到bug时,找bug的思路,一种是设断点,这个可以百度下 ,另外一种 注释,把一部分注释点,检查另外一部分由没有问题,因为有些时候,程序往往是相关联的,一步错,步步错。两种本质都差不多
✍了这么多不点个赞再走。祝大家在TZOJ 玩的开心 o(* ̄▽ ̄*)ブ
相关资料由菜鸟BBQ收集并编辑