前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >习题:if选择结构与宏定义

习题:if选择结构与宏定义

作者头像
用户6755376
发布2020-03-19 14:58:50
5130
发布2020-03-19 14:58:50
举报

今天有同学问了这道题目,感觉挺有意思的,跟大家细讲一下。

不少同学看到这个题目会觉得,这不很简单吗,三个if判断都不成立,数值不变,选D呗。当然这个题目没这么简单,只考一个if判断整这么复杂干嘛。

我们之前讲过的C语言带参数的宏定义:#define f(X) ((X)*(X)),不知道你收获了多少?根据宏定义,上面的程序应该替换为:

代码语言:javascript
复制
#include<stdio.h>
#define SWAT(t,a,b) t=a;a=b;b=t;
main()
{ int x=6,y=4,z=3,s=0; 
  if(x<y) s=x;x=y;y=s; //SWAT(s,x,y); 
  if(x<z) s=x;x=z;z=s; //SWAT(s,x,z); 
  if(y<z) s=y;y=z;z=s; //SWAT(s,y,z); 
  printf ("%d,%d,%d\n",x,y,z);
}

其实这样写还不够明了,我们再来改一下:

代码语言:javascript
复制
#include<stdio.h>
#define SWAT(t,a,b) t=a;a=b;b=t;
main()
{ int x=6,y=4,z=3,s=0; 
  if(x<y) s=x; //条件不成立
  x=y;         // x=4
  y=s;         // y=0
  if(x<z) s=x; //条件不成立
  x=z;         // x=3
  z=s;         // z=0 
  if(y<z) s=y; //条件不成立
  y=z;         // y=0
  z=s;         // z=0 
  printf ("%d,%d,%d\n",x,y,z);
}

有同学说:唉,老师你这意思不对了?

老师:那里不对了呢,这修改前后意思不是一样的吗?

同学:那一开始就不对了,if后面3个赋值语句应该用个大括号括起来。应该是这样

代码语言:javascript
复制
 if(x<y) {s=x;x=y;y=s;} //SWAT(s,x,y); 

老师:你说的少一对大括号确实是不少同学写程序时候犯的错误。但是这个题目意思跟你们想的不一样。宏定义只是简单、机械字符替换,定义没有括号,替换也没有括号。之前讲过的C语言带参数的宏定义:#define f(X) ((X)*(X))还要再复习一遍。

接下来就是按照步骤,一步步把数值的变化写出来了。我们写在上面注释里了。

注意:这里不要偷懒,一定要一步步的写出来。有同学说我口算一下就好了,没几步。中间很容易哪一步没仔细就使用了之前的值。结果没算对就打脸了。

这个题目如果我们放在C语言带参数的宏定义:#define f(X) ((X)*(X))里面讲解,估计多数同学都能想到作对。考试就是这样,问这个知识点你可能是记得的,但是看到题目却不一定想到它。多刷题练练感觉也是很重要的。


本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 计算机二级C语言 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档