谭老师在列出这些程序代码的同时,详细地介绍了其中每一句的作用。我们可以在自己的开发环境中实现这些程序,然后尝试着修改其中的某些代码以实现不同的功能,以便对C语言程序有一个感性的认识。比如,其中的例1.3只是实现了两个数的比较,我们可以对其进行简单修改,从而实现三个数的比较。当然,这已经不是"最简单的C语言程序"了。进行这样的修改,可以激发我们对于C语言的兴趣。看着程序在我们的修改之下,实现了新的功能,一定会有一种"C语言在手,江山我有"的成就感。话不多说了,让我们来看看如何修改例1.3以实现三个数的比较。广州网站建设
- // 引入标准输入输出头文件
- #include <stdio.h>
- // 使用“?:”操作符对两个数进行比较
- int max(int a, int b)
- {
- return a > b ? a : b;
- }
- // 主函数
- int main()
- {
- // 定义三个变量并进行初始化,分别保存三个整数和最大值
- int a=b=c=m=0;
- // 提示输入格式
- printf("Please input integers.(e.g. 19 83 73)\n");
- // 获得用户输入的整数并保存到三个变量中
- scanf("%d %d %d", &a,&b,&c);
- // 获得a和b中较大的一个整数
- m = max(a, b);
- // 获得c与a、b中较大值比较的结果,也就是三个整数中最大的一个
- m = max(c, m);
- // 输出结果
- printf("the max integer of %d,%d,%d is %d.\n",
- a,b,c,m);
- return 0;
- }
经过简单的改写,我们就将原来只能进行两个数的比较的程序扩展为可以进行三个数的比较的程序,当然,如果愿意,我们也可以将其扩展为可以进行更多数据的比较。相对而言,改写一个程序以对其进行扩展从而实现自己的功能,要比全新地去设计实现一个程序简单得多,这也告诉我们这样一条实践的经验,如果我们要实现的程序已经有原型代码,也即是实现了基本功能的代码(例如这里的例1.3,已经实现了两个数的比较),我们最好的策略应该是修改原型代码,对其进行扩展以实现新的功能,而不是全部重新再来。这样既可以提高效率(只需要对原型代码进行扩展),也可以保证质量(原型代码已经得到验证,质量可以得到保证)。我们要学会站在别的程序员的肩膀上。
回到代码本身,我们对例1.3的修改主要有这样几个地方:
提前声明max()函数
在C语言中,当我们要调用某个函数时,必须知道这个函数的声明,也就是要知道这个函数的函数名、参数以及返回值等等,这样我们才知道如何对其进行调用。否则,编译器在编译这个函数调用时,并不知道它是一个函数调用,就会产生编译错误。这也就是我们为什么在用到标准库中的函数时,首先需要在源文件的开始部分,使用"#include"预编译指令引入相应的头文件的原因。
除了将函数提前定义之外,我们还可以将函数提前声明,就像例1.3在main()函数中提前声明max()函数一样。只要在函数被调用的时候是已经声明过的就可以了,而至于函数的具体定义可以放在源文件的其他位置,比如main()函数之后。
修改max()函数的实现
在max()函数中,我们修改了max()函数的实现,将原来比较复杂的条件判断语句简化为使用"?:"操作符对两个整数进行判断并返回较大的一个整数。经过这样的修改,代码更加简洁,逻辑也更加清晰明了。在C语言中,条条道路通罗马,任何问题都不止一种解决办法。我们编写程序,很多时候都是在对程序不断优化,寻求问题的最佳解决方案。
在定义变量的同时进行初始化
在C语言中,局部变量定义后是一个随机的初始值。如果直接使用这个未经过初始化的变量,可能会让我们的程序产生奇奇怪怪的结果。如果你遇到这样的问题,那将是你的噩梦。虽然在定义变量的同时对其进行初始化并不是必需的,但是这实在是一个好习惯。它可以让你逃离那调试程序的无数个不眠之夜。



