夜の妖精 发表于 2018-6-20 22:29:46

关于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

鄙人知识水平
渥太华大学语言预科阶段(=还没读专业知识)
请各位大佬通俗点讲,不然小弟

关键是感觉 发表于 2018-6-20 22:29:47

别想复杂了,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)

人造人 发表于 2018-6-20 23:00:35

#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]
查看完整版本: 关于pow和define宏的问题