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个小故事,应当是一个优秀程序员的标准思维,它形象、幽默、充分地展示了一个优秀程序员的严谨、全面的思维。一个优秀的程序员只有这样思考并设计程序,才能保证程序始终能可靠、稳定地工作,减少和避免发生事故。
1) 方程仅仅对于正实数的简单情形成立
物理教授走过校园,遇到数学教授。 物理教授在进行一项实验,他总结出一个经验方程,似乎与实验数据吻合,他请数学教授看一看这个方程。 一周后他们碰头,数学教授说这个方程不成立。可那时物理教授已经用他的方程预言出进一步的实验结果,而且效果颇佳,所以他请数学教授再审查一下这个方程。 又是一周过去,他们再次碰头。数学教授告诉物理教授说这个方程的确成立, "但仅仅对于正实数的简单情形成立。"
2) 判断开枪后树上还有几只鸟
某日,老师在课堂上想看看一学生智商有没有问题,问他:
老师当即晕倒。