优秀C程序员的基本素质--丰富的想象、严谨的思维

程序运行结果看起来对了,但并不意味着程序没有隐藏的问题

1) 以下程序是从键盘输入一个数(x,x是一个int型整数),计算y(y=1000x+9)并在屏幕上输出,程序基本上是对的,能输出正确的结果。
   
   
  1. #include <stdio.h>
  2. void main(){
  3. int x, y;
  4. printf("Please input x:");
  5. scanf("%d", &x);
  6. y = 1000*x + 9;
  7. printf("y=%d\n", y);
  8. }
但是,当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-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,树上的鸟里有没有聋子?”
“没有。”
“有没有关在笼子里的?”
“没有。”
“边上还有没有其他的树,树上还有没有其他鸟?”
“没有。”
“有没有残疾的或饿的飞不动的鸟?”
“没有。”
“算不算怀孕肚子里的小鸟?”
“不算。”
“打鸟的人眼有没有花?保证是十只?”
“没有花,就十只。” 偶已经满脑门是汗,且下课铃响,但他继续问
“有没有傻的不怕死的?”
“都怕死。”
“会不会一枪打死两只?” 
“不会。”
“所有的鸟都可以自由活动吗?”
“完全可以。”
“如果您的回答没有骗人,”学生满怀信心的说,“打死的鸟要是挂在树上没掉下来,那么就剩一只,如果掉下来,就一只不剩。”
老师当即晕倒。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值