Tzdner_C 发表于 2012-6-27 22:28:41

出一个题目,考验下大家。(仅限纯C语言)

题目要求(在下面一段代码中if(。。。)这个括号中添加代码,使得此程序执行的时候实现,用户输入多少,就再屏幕上打印出多少个hello word!
代码如下:
void fun()
{
int s;
printf("hello word!\n");
if(......)               //此处添加代码
{
fun();
}
}
void main()
{
int a=0;
scanf("%d",&a);
fun();
}
只能在if后面的括号内添加代码,其余地方不能修改。。。

wangyexin 发表于 2012-6-27 22:53:30

没有参数传递,能实现?

clm~~ 发表于 2012-6-27 22:58:23

:funk:这个真的可以吗???:funk:

Mushroom"_ 发表于 2012-6-27 23:00:42

没参数传递真能做么

Tzdner_C 发表于 2012-6-27 23:00:48

wangyexin 发表于 2012-6-27 22:53 static/image/common/back.gif
没有参数传递,能实现?

这就是技术问题了{:5_109:}

Tzdner_C 发表于 2012-6-27 23:01:42

clm~~ 发表于 2012-6-27 22:58 static/image/common/back.gif
这个真的可以吗???

这个真的可以的。。。其实对于懂的人,很简单。。。{:5_109:}

longdeqidao 发表于 2012-6-27 23:18:21

求解!!!!!!!!!!!

莱瑞古德 发表于 2012-6-28 00:11:36

本帖最后由 莱瑞古德 于 2012-6-28 00:14 编辑

#include<stdio.h>
void fun()
{
int s;
printf("hello word!\n");
if(s=*(int*)((int)&s+0x58)-1)               //此处添加代码
{
fun();
}
}
void main()
{
int a=0;
scanf("%d",&a);
fun();
}
以上,win7编译通过,经某XP网友证实,XP也能编译通过可以达到题目的要求,但不知道是不是楼主的答案类型

我是师兄 发表于 2012-6-28 07:48:40

莱瑞古德 发表于 2012-6-28 00:11 static/image/common/back.gif
以上,win7编译通过,经某XP网友证实,XP也能编译通过可以达到题目的要求,但不知道是不是楼主的答案类型

XP下失败 死循环了

我是师兄 发表于 2012-6-28 07:50:37

如果LZ的技术性是指这种带破坏性质的 那就没什么意思了

莱瑞古德 发表于 2012-6-28 08:03:05

我是师兄 发表于 2012-6-28 07:50 static/image/common/back.gif
如果LZ的技术性是指这种带破坏性质的 那就没什么意思了

实际上就是要设法获得a的地址。因为没有传参过程,至于死循环- -,,
题目本身没有提供获取main地址的途径。。。。。so,直接- -写出了偏移
我让我好友- -编译 过了,运行是正确的,
- -当然如果你用的是非VC6
可能 。。。。。。。。。。。。。。

我是师兄 发表于 2012-6-28 08:11:45

莱瑞古德 发表于 2012-6-28 08:03 static/image/common/back.gif
实际上就是要设法获得a的地址。因为没有传参过程,至于死循环- -,,
题目本身没有提供获取main地址的途 ...

这已经不是纯C语言了~~~

莱瑞古德 发表于 2012-6-28 08:13:54

我是师兄 发表于 2012-6-28 08:11 static/image/common/back.gif
这已经不是纯C语言了~~~

就是纯C呗- -我可没有内联汇编

莱瑞古德 发表于 2012-6-28 08:14:28

这就是指针的一种用法 - -,直接转化整数为指针

我是师兄 发表于 2012-6-28 08:27:43

莱瑞古德 发表于 2012-6-28 08:13 static/image/common/back.gif
就是纯C呗- -我可没有内联汇编

不是这个的问题 你这样做 对运行环境有特殊要求 C对运行环境可没这样的要求

莱瑞古德 发表于 2012-6-28 08:32:18

我是师兄 发表于 2012-6-28 08:27 static/image/common/back.gif
不是这个的问题 你这样做 对运行环境有特殊要求 C对运行环境可没这样的要求

算了- -,哥就要断网了,断网了,断网了,
希望- -今天- -楼主还存在(在11:00之前)
否则我就永远的离开了

Tzdner_C 发表于 2012-6-28 08:59:48

莱瑞古德 发表于 2012-6-28 00:11 static/image/common/back.gif
以上,win7编译通过,经某XP网友证实,XP也能编译通过可以达到题目的要求,但不知道是不是楼主的答案类型

唉!没想到这帖子挺火哦。 其实这个题目你已经算是对了,如果单纯考虑答案的话,不过有人说的对,你用到了一个伟大的定律,那就是传说中的 0x58定律,这让我想起了,曾经的我,因为计算出了这个0x58定律,实现了一个不限定参数函数,高兴了好几天。但是最后发现,这个东西只能限定在特定的编译器,特定的运行环境。在保证这种规律不变的情况下。。。还有,在主函数里面,若是多定义一个变量,这个0x58也会变化(当然我说了,题目代码不改变) 。所以,若后面再没人给出更完美的答案,就给分了。。。若没人能给出更完美的答案,还是有些失望的。。。完了我会给出正确答案。。。你可以继续想想。。。其实你已经做的差不多了

Tzdner_C 发表于 2012-6-28 09:01:29

longdeqidao 发表于 2012-6-27 23:18 static/image/common/back.gif
求解!!!!!!!!!!!

若是到明天还是没人能给出完美的答案。我会解的。。。{:5_109:}

仰望天上的光 发表于 2012-6-28 09:03:44

#include <stdio.h>

void fun()
{
        int s;
        printf("hello word!\n");
        if( s = --(&s) )               //此处添加代码
        {
                fun();
        }
}
void main()
{
        int a=0;
        scanf("%d",&a);
        fun();
}

仰望天上的光 发表于 2012-6-28 09:04:49

这个不如帖袄汇编版.表面C是,其实是汇编的.
页: [1] 2 3 4 5
查看完整版本: 出一个题目,考验下大家。(仅限纯C语言)