关于pow和define宏的问题
源代码如图执行后如图
遇到的问题:想要输出2^3=8但是输出后的结果每次都不一样而且很大
疑问:define宏能否用数学知识一样的办法定义一个新函数
如#define f(x) pow(x,x+1)
// 表达函数f(x) = x^(x+1)
如果不能,为什么,尽可能简单的解释一下原理(鄙人刚刚学习C语言,功底不深)
如果能,告诉我正确的代码实例及本题的解决方案
编译环境:
系统:Distributor ID: Debian
Description: Debian GNU/Linux 9.4 (stretch)
Release: 9.4
Codename: stretch
编译器:gcc (Debian 6.3.0-18+deb9u1) 6.3.0 20170516
Copyright (C) 2016 Free Software Foundation, Inc.
代码编辑器:VIM - Vi IMproved 8.0 (2016 Sep 12, compiled Sep 30 2017 18:21:38)包含补丁: 1-197, 322, 377-378, 550, 703, 706-707
鄙人知识水平
渥太华大学语言预科阶段(=还没读专业知识)
请各位大佬通俗点讲,不然小弟
别想复杂了,pow和#define 我们分开理解
#define 就是宏定义,可以理解成替换 用什么符号 替换成什么字符
比如:#define f(x) pow(x,x+1)就是只要在程序其他位置出现 “f(值)” 就会在该位置前替换成pow(x,x+1)
说下你为什么错了double pow( double x, int y);
差不多就是这样到错误:printf("%d",8.0);
pow返回一个double,而你用%d去打印,所以错了
如何用#deifne 去定义一个类似pow到函数,这个我也不是非常清楚,但是可以肯定到是#define还是非常强大。比如pirntf实现到多参,还有 很多小技巧,慢慢掌握吧,你到错误就是用%d打印了double类型的参数
#define POW(i) (pow((double)(i),(i+1)))这样好点,括号是为了不被其他情况影响,第一个参数需要强转
或者:POW(2.0,3) #include <stdio.h>
#include <math.h>
#define f(i) pow(i, i + 1)
int main(void)
{
printf("i = %d\n", (int)f(2));
return 0;
}
页:
[1]