首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法理解c程序的输出

无法理解c程序的输出
EN

Stack Overflow用户
提问于 2022-02-27 15:55:39
回答 2查看 69关注 0票数 -4

我在一个面试问题中遇到了一个c程序,.The程序的内容如下:

代码语言:javascript
复制
#include<stdio.h>
#define x 9+2/4*3-2*4+(5-4)*3
void main()
{

   int i,y,p;
   y=6+3*3/5;
   printf("%d",x);
   i=x*x+y;
   printf("%d",i);

}

这个程序的输出是30,但我不明白这个程序是如何产生的。有人能解释一下吗?

EN

回答 2

Stack Overflow用户

发布于 2022-02-27 16:20:53

在您的具体情况下,#define可以进行简单的文本替换。

第一个表达式(用于x)是

代码语言:javascript
复制
9+2/4*3-2*4+(5-4)*3
9+ 0 *3-2*4+  1  *3
9+  0  - 8 +    3
  9    - 8 +    3
     1     +    3
          4      

第二个表达式(用于i)是

代码语言:javascript
复制
9+2/4*3-2*4+(5-4)*3*9+2/4*3-2*4+(5-4)*3+y // y is 7
9+2/4*3-2*4+(5-4)*3*9+2/4*3-2*4+(5-4)*3+7 // doing parenthesis
9+2/4*3-2*4+  1  *3*9+2/4*3-2*4+  1  *3+7 // doing multiplications and divisions
9+ 0 *3- 8 +    3  *9+ 0 *3- 8 +    3  +7 // doing multiplications and divisions again
9+   0 - 8 +    27   +  0  - 8 +    3  +7 // doing addition and subtraction left to right
   9   - 8 +    27   +  0  - 8 +    3  +7
       1   +    27   +  0  - 8 +    3  +7
            28       +  0  - 8 +    3  +7
                28         - 8 +    3  +7
                      20       +    3  +7
                               23      +7
                                   30

当使用操作编写#defines时,总是将整件事情括在一个额外的括号内:

代码语言:javascript
复制
#define x (9+2/4*3-2*4+(5-4)*3)
票数 1
EN

Stack Overflow用户

发布于 2022-02-27 16:25:53

整数除法是答案的一部分,但更棘手的部分是#define。许多人假设定义#define时会对其进行评估,但它实际上只是一个简单的文本替换。所以当你被授予x*x时,你会得到

代码语言:javascript
复制
9+2/4*3-2*4+(5-4)*3*9+2/4*3-2*4+(5-4)*3

注意,这是中间的3*9,如果假设x是一个简单的数字值,则不会得到这个值。以下是整个过程:

代码语言:javascript
复制
  x * x
= 9+2/4*3-2*4+(5-4)*3*9+2/4*3-2*4+(5-4)
= 9 +  0 - 8 +    27   +  0  - 8 +  3
=        1   +    27   -     5
=              23

然后,自从y=723 + 7 = 30

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71286236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档