**题目:**已知main
函数中有一个变量i
,我们想要读取它的值并输出。
不得不说,这是一道相当难的题目,可能会难倒一大片刚学C语言的新手。但是不要怕,这道题目其实没有我们想象中的那么难。就算我们现在什么也不知道,我们也可以先写出一个模板:
1 |
|
很多同学到这一步可能就想到了:哎,输出可以用printf
函数。那么我们就可以写出printf("%d\n", /*?*/);
。到这一步可能就有很多同学放弃了。这里注释的地方应该怎么写呢?
这个地方确实有点难想,但是可能有些聪明的小伙伴可能就想到了,我们可以在这里放一个值,这样printf
函数就可以把这个值输出了。
那么我们怎么让这个值等于i
呢?
这时候我们就很自然地想到了,函数的返回值就是一个值。那么问题就很自然地转化成了我们要编写一个函数,让它的返回值等于i
。
可以看到变量i
是int
类型的,那么我们就可以定义一个返回值为int
类型的函数:
1 | int add(int a, int b) |
那么问题就很自然地转化成了找到一个a和b使得a+b的值等于i
。
很多同学到这一步就卡住了。我们怎么才能找到这样的a和b呢?
这个问题确实有点复杂,那么我们简化一下问题,让它只用考虑一个参数。
我们很自然地想到可以通过强制类型转换的方式来实现这一目的,所以我们可以调用((int(int))add)(a)
。
现在问题就简化成了找到一个a,使得调用强制类型转换过的函数add
后,函数的返回值恰好等于i
。
到这一步很多同学可能就放弃了。虽然我们简化了这个问题,但是寻找这个a还是非常困难。
但是不要怕。我们在数学中学过,一个数加上0,结果和这个数相等。很多同学可能就豁然开朗了。这个a为0行不行呢?我们试试看:
1 |
|
我们一看打印结果,这就很神奇了,果然是12345,正好等于i
。
所以说,编程和数学密不可分。这么难的一道编程题目,我们只要稍加转换,再利用我们熟知的数学定理,就可以很轻松地得出答案。
那么为什么会恰好等于i
呢,就留作课后习题吧!