回 帖 发 新 帖 刷新版面

主题:紧急求助大家帮我修改这些程序

请大家帮我看一下这几个程序的运行结果为什么与我所分析的结果不一样
程序1如下:
#include<iostream.h>
#include<stdlib.h>
#define M 1.5
#define A(a) M*a
void main()
{
  int x(5),y(6);
  cout<<A(x+y)<<endl;
  system("PAUSE");
}
系统运行结果:13.5
而我分析的结果为什么是:16.5(因为1.5*(5+6)的结果是16.5)



程序2如下:
#include<iostream.h>
#include"f1.cpp"
void main()
{
  int a(5),b;
  b=f1(a);
  cout<<b<<endl;
  system("PAUSE");
}

f1.cpp文件内容如下:
#define M(m) m*m
f1(int x)
{
  int a(3);
  return -M(x+a);
}
系统运行结果:10
而我分析的结果为什么是:64
程序2中,我还有一疑问不理解的是:return -M(x+a);语句中的“-”符号有没有用,如果有用的话,那有何作用。


请大家帮我指点哦,谢谢咯








回复列表 (共9个回复)

沙发

小生愚昧,看看这样是不是你要的结果
#include<iostream.h>
#include<stdlib.h>
#define M 1.5
#define A(a) M*a
void main()
{
  int x(5),y(6);
  cout<<A((x+y))<<endl;
  system("PAUSE");
}

板凳


F1(5)=5*m
                                        
m=-M(5+3)=2
也许是这样的吧

3 楼

问题一:是一个宏问题,
#include<iostream.h>
#include<stdlib.h>
#define M 1.5
#define A(a) M*a//如果要得到你分析的结果的话,就这样定义宏#define A(a) M*(a)
int main()//规范使用main,void main()用法是不存在的
{
  int x(5),y(6);
  cout<<A(x+y)<<endl;//这里展开的话的应该是M*5+6,这个嘛当然等于13.5
  system("PAUSE");
  return 0;
}

4 楼

#include<iostream.h>
#define M(m) m*m  //如果这里改成(m)*(m),下面展开就-(5+3)*(5+3)
int f1(int x)
{
  int a(3);
  return -M(x+a);//这个"-"符号就是取负数的意思,和数学的一样
}
int main()//规范使用main
{
  int a(5),b;
  b=f1(a);
  cout<<b<<endl;//结果为-5+3*5+3=13啊
  system("PAUSE");
  return 0;
}
最后结果是13,不是10,可能楼主写错了哦

5 楼

谢谢,我好像理解了,这样子cout<<A((x+y))<<endl;
改了以后就可以得到16.5的结果,但为什么这样子cout<<A(x+y)<<endl;
写的话它就会这样子去执行1.5*5+6的结果是13.5,而不是把它(x+y)看成一个整体a,请1 楼  主人继续帮我讲解一下,谢谢了

6 楼


谢谢,我好像理解了,这样子cout<<A((x+y))<<endl;
改了以后就可以得到16.5的结果,但为什么这样子cout<<A(x+y)<<endl;
写的话它就会这样子去执行1.5*5+6的结果是13.5,而不是把它(x+y)看成一个整体a,请1 楼  主人继续帮我讲解一下,谢谢了

7 楼


非常谢谢一楼三楼给我作的满意答复,特别是三楼的回复讲得很仔细哦,现在我已非常理解这两个题目了,谢谢啦,希望以后多多指点我哦

8 楼

我想知道例2是10还是13??

9 楼


最后结果是13,不是10,确实是我写错了的

我来回复

您尚未登录,请登录后再回复。点此登录或注册