优秀C程序员的基本素质--丰富的想象、严谨的思维
程序运行结果看起来对了,但并不意味着程序没有隐藏的问题
1) 以下程序是从键盘输入一个数(x,x是一个int型整数),计算y(y=1000x+9)并在屏幕上输出,程序基本上是对的,能输出正确的结果。#include <stdio.h> void main(){ int x, y; printf("Please input x:"); scanf("%d", &x); y = 1000*x + 9; printf("y=%d\n", y); }但是,当x输入为5000000,屏幕上却输出y=705032713,出现了错误。
2) 以下程序的功能是从键盘上读入一串字符,然后在屏幕上输出。
#include <stdio.h> void main(){ char str[10]; printf("Please input str:"); scanf("%s", &str); printf("str=%s\n", str); }若用户在输入str时不小心多按了(或无意碰触)几下键盘,则程序运行会出错,如图3-3所示——可能稍严重的是程序运行死机(不报错),特别严重的是若有人精心设计输入的字符,完全可能造成系统被入侵或被严重破坏。
3) 以下程序的功能是从计算班中男生(boy)和女生(girl)的比例。如果女生数为0时,程序会怎样?
#include <stdio.h> void main(){ int boy, girl; printf("Please input boy,girl:"); scanf("%d,%d", &boy, &girl); printf("boy/girl=%.2f\n", boy*1.0/girl); }实际工作中,类似的隐藏的问题往往是破坏力巨大的“地雷”,往往造成极大的损失,例如火箭发射、宇宙飞船飞行、高速列车运行中的事故,我们平常接触最多的恐怕是微软的各种系统需要不断地打补丁。因此,在程序设计中,必须缜密考虑各种情况,哪怕是机率极小的意外。
2) 严谨思维的典范——程序员学习的榜样
丰富的想象力、严谨的思维是一个优秀的程序应当具备的素质。 设计程序时不要拘泥于固定的思维方式,遇到问题的时候要多想几种解决问题的方案,并且考虑全面、思维严谨。以下2个小故事,应当是一个优秀程序员的标准思维,它形象、幽默、充分地展示了一个优秀程序员的严谨、全面的思维。一个优秀的程序员只有这样思考并设计程序,才能保证程序始终能可靠、稳定地工作,减少和避免发生事故。
1) 方程仅仅对于正实数的简单情形成立
物理教授走过校园,遇到数学教授。 物理教授在进行一项实验,他总结出一个经验方程,似乎与实验数据吻合,他请数学教授看一看这个方程。 一周后他们碰头,数学教授说这个方程不成立。可那时物理教授已经用他的方程预言出进一步的实验结果,而且效果颇佳,所以他请数学教授再审查一下这个方程。 又是一周过去,他们再次碰头。数学教授告诉物理教授说这个方程的确成立, "但仅仅对于正实数的简单情形成立。"
2) 判断开枪后树上还有几只鸟
某日,老师在课堂上想看看一学生智商有没有问题,问他 “树上有十只鸟,开枪打死一只,还剩几只?”
他反问“是无声手枪或别的无声的枪吗?”(例如激光枪)
“不是。”
“枪声有多大?”
“80-100分贝。”
“那就是说会震的耳朵疼?”
“是。”
“在这个城市里打鸟犯不犯法?”
“不犯。”
“您确定那只鸟真的被打死啦?”
“确定。”偶已经不耐烦了“拜托,你告诉我还剩几只就行了,OK”
“OK,树上的鸟里有没有聋子?”
“没有。”
“有没有关在笼子里的?”
“没有。”
“边上还有没有其他的树,树上还有没有其他鸟?”
“没有。”
“有没有残疾的或饿的飞不动的鸟?”
“没有。”
“算不算怀孕肚子里的小鸟?”
“不算。”
“打鸟的人眼有没有花?保证是十只?”
“没有花,就十只。” 偶已经满脑门是汗,且下课铃响,但他继续问
“有没有傻的不怕死的?”
“都怕死。”
“会不会一枪打死两只?”
“不会。”
“所有的鸟都可以自由活动吗?”
“完全可以。”
“如果您的回答没有骗人,”学生满怀信心的说,“打死的鸟要是挂在树上没掉下来,那么就剩一只,如果掉下来,就一只不剩。”
老师当即晕倒。