新闻  |   论坛  |   博客  |   在线研讨会
可爱的几道C语言题
xinjinlong | 2011-05-29 01:56:31    阅读:4002   发布文章

今天我的一个师弟很伤心,本来他们想暑假找份实习的工作挣个零花钱,结果人家给他出了几个C语言的笔试题,他很有信心的几分钟做完了,
感觉小case,没有想到等了几天给人家公司打电话问为什么,人家说你的笔试十分的不理想,是在没有办法,他不服气就让偶看看其中的几道
题,问问为什么,是不是提的不好?我看完后总结了几点:
第一:他花在C上面的功夫太少了,他藐视C了
第二:学校学完C就不管了,认为简单,当然了我们一个学校,也知道老师教的程度
第三:虽然都是计算机,还是没有找到好的网站学习C,这几个题我大一学习完C后总结有重新学习C,写程序时遇到这错误,当时自己遇到时也
很纳闷,后来多次C重看,明白了,当然也有高手早都遇到了,那是我后来在网上找到类似问题,而且也给了说明,只是我这师弟没有找到
第四:也许没有看到好的C语言书本
下面是这个几个问题,不过还挺有意思的,偶尔可以看看,消遣一下烦躁的心:
题目一:
#include <stdio.h>
#define N 12
int main()
{
int a = 12;

printf("size(N) =%d\n", sizeof(N));
printf("sizeof(a++) =%d\n", sizeof(a++));
printf("a = %d\n", a);

return 0;
}
师弟的答案是:12 13 13
我说过我自己重新学过C,这个问题我遇到过,这个问题的要点就是要明白预编译,因为师弟不知道sizeof()是什么,他认为是函数,实际大家
都一样,这是个宏,实际看字体颜色就应该明白,而且这个东西只认变量类型,说白了就是他的结果对PC来说就只有1、2、4、8了,并且sizeof()
自动识别你变量类型,也就是在预编译阶段,sizeof(N)=sizeof(12)=4,sizeof(a++)=4,全部都替换了(++是在运行时操作),所以最终结果应该是
4 4 12
大家都习惯用IDE了,这也是一个坏习惯,用过GCC的应该不会烦这个错误
题目二:
#include <stdio.h>
int main()
{
int i;
int a[4] = {0001,0010,0100,1000};

for(i = ; i < 4; i++)
printf("a[%d]= %d\n", i, a[i]);

return 0;
}
师弟的答案:1 10 100 1000
我看到结果我都笑了,这个不能埋怨他,他不是第一个问我,我说你回去翻书看看C数值的表示方法,如何表示八机制,他恍然大悟,实际的结果
应该是1 8 64 100,八进制是以0开始,他说他错的他不应该了,学以致用不是那么容易的
题目三:
#include <stdio.h>
int main()
{
int a = 3, b =4;

//printf("&b["good boy %s\n"]", &b["goodboy"]); 多谢有人提出,感谢 追求
printf("&b[good boy %s\n]", &b["goodboy"]);

return 0;
}
他说他这个题不会做,不知道是什么意思
实际这个题如果学过JAVA的人应该还好写,C语言定义数组一个公式话了,不像Java习惯这样定义:[6]a
实际结果到现在不用说应该明白了是:d boyoy

我劝他也不要那么灰心,C不是你想象的那样简单和变态,这个不是你的全不错,计算机语言上千种呀,每一种都有他存在的价值,请不要藐视
任何一种,C也不应被藐视,C都过来四十多年了,至今屹立不倒,是有他的价值的
当然在工作中我们也不会写出这样变态的程序,毕竟可读性是很重要的!

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
pingc  2012-06-12 11:02:49 

题目三 tc结果是: &b[good boy boy ] 望赐教

xinjinlong  2011-06-16 23:31:12 

多谢 追求 楼主指出错去,看来写东西还要慎重!

追求  2011-06-16 12:19:30 

找出错误了,printf("&b["good boy %s\n"]",&b["goodboy"]); 应该改为,printf("&b[good boy %s\n]",&b["goodboy"]); 更好点形式,printf("&b[good boy]=%s\n",&b["goodboy"]); 不知道为啥[]里不能出现引号"",?

追求  2011-06-16 12:02:47 

printf("&b["good boy %s\n"]", &b["goodboy"]); 这句在VC6.0里编译有错啊。语法错误。 ????

fellow  2011-06-01 15:04:16 

看似简单,估计很多人都会做错的,谢谢楼主,很多人会从中得到启发的。

五湖四海皆朋友
最近文章
浅谈MIPS的MMU(二)
2016-08-16 19:33:41
浅谈MIPS的MMU(一)
2016-05-05 10:55:06
推荐文章
最近访客