Chinaunix首页 | 论坛 | 博客
  • 博客访问: 36204
  • 博文数量: 16
  • 博客积分: 389
  • 博客等级: 一等列兵
  • 技术积分: 215
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-14 02:44
文章分类
文章存档

2012年(16)

我的朋友

分类: C/C++

2012-08-14 20:03:40

最简单的C语言程序举例

1.4.1 比最简单再复杂一点点

谭老师在列出这些程序代码的同时,详细地介绍了其中每一句的作用。我们可以在自己的开发环境中实现这些程序,然后尝试着修改其中的某些代码以实现不同的功能,以便对C语言程序有一个感性的认识。比如,其中的例1.3只是实现了两个数的比较,我们可以对其进行简单修改,从而实现三个数的比较。当然,这已经不是“最简单的C语言程序”了。进行这样的修改,可以激发我们对于C语言的兴趣。看着程序在我们的修改之下,实现了新的功能,一定会有一种“C语言在手,江山我有”的成就感。话不多说了,让我们来看看如何修改例1.3以实现三个数的比较。
[source language="cpp"]
// 引入标准输入输出头文件
#include

// 使用“?:”操作符对两个数进行比较
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;
}
[/source]
经过简单的改写,我们就将原来只能进行两个数的比较的程序扩展为可以进行三个数的比较的程序,当然,如果愿意,我们也可以将其扩展为可以进行更多数据的比较。相对而言,改写一个程序以对其进行扩展从而实现自己的功能,要比全新地去设计实现一个程序简单得多,这也告诉我们这样一条实践的经验,如果我们要实现的程序已经有原型代码,也即是实现了基本功能的代码(例如这里的例1.3,已经实现了两个数的比较),我们最好的策略应该是修改原型代码,对其进行扩展以实现新的功能,而不是全部重新再来。这样既可以提高效率(只需要对原型代码进行扩展),也可以保证质量(原型代码已经得到验证,质量可以得到保证)。我们要学会站在别的程序员的肩膀上。

回到代码本身,我们对例1.3的修改主要有这样几个地方:

  • 提前声明max()函数

    在C语言中,当我们要调用某个函数时,必须知道这个函数的声明,也就是要知道这个函数的函数名、参数以及返回值等等,这样我们才知道如何对其进行调用。否则,编译器在编译这个函数调用时,并不知道它是一个函数调用,就会产生编译错误。这也就是我们为什么在用到标准库中的函数时,首先需要在源文件的开始部分,使用“#include”预编译指令引入相应的头文件的原因。

    除了将函数提前定义之外,我们还可以将函数提前声明,就像例1.3在main()函数中提前声明max()函数一样。只要在函数被调用的时候是已经声明过的就可以了,而至于函数的具体定义可以放在源文件的其他位置,比如main()函数之后。

  • 修改max()函数的实现

    在max()函数中,我们修改了max()函数的实现,将原来比较复杂的条件判断语句简化为使用“?:”操作符对两个整数进行判断并返回较大的一个整数。经过这样的修改,代码更加简洁,逻辑也更加清晰明了。在C语言中,条条道路通罗马,任何问题都不止一种解决办法。我们编写程序,很多时候都是在对程序不断优化,寻求问题的最佳解决方案。

  • 在定义变量的同时进行初始化

    在C语言中,局部变量定义后是一个随机的初始值。如果直接使用这个未经过初始化的变量,可能会让我们的程序产生奇奇怪怪的结果。如果你遇到这样的问题,那将是你的噩梦。虽然在定义变量的同时对其进行初始化并不是必需的,但是这实在是一个好习惯。它可以让你逃离那调试程序的无数个不眠之夜。

  • 对用户友好的输入输出提示

    一个程序,或者说一个软件能否成功的关键,往往不是看它的功能有多么强大,而是看它对用户是否足够友好,用户是否乐于使用这款软件。如果我们开发的软件功能很强大,但是对用户极不友好,用户不会使用或者是使用起来很麻烦,那就没人会用这个软件。如果那样的话,功能再强大又有什么用呢?所以,软件的易用性和它的功能同样重要。改写后的程序改善了程序的易用性,对输入输出都做了很好的提示,用户可以轻松地学会使用这个程序。对比没有任何提示的例1.3,用户一定会更喜欢这个改写后的程序。如果这是两个商业软件,谁会获得商业上的成功,自然不言而喻。虽然C语言不能像Java、C#等高级编程语言一样,为用户提供华美的程序界面,但是即使是简单的纯文本界面,也同样可以做到对用户友好。让程序对用户友好,始终应该是我们在开发C语言程序时的一个目标。

    clip_image002

    东边太阳西边雨:不同的用户体验,不同的程序命运

  • 算法逻辑的改进

    max()函数只能比较两个整数,但是在改写的程序中,我们通过两次简单的max()函数调用的组合,首先比较获得a和b之间的较大的整数,然后将其与c进行比较,最终获得三个数当中最大的一个整数。经过简单的一个比较规则的改变,就获得了三个数中最大的一个数。这就是算法,也是C语言程序的灵魂。算法和程序设计就像一对好兄弟,程序设计能力的提高,离不开我们算法设计与实现能力的提高;而算法能力的提高,同样会促进我们的程序设计能力。所以在学好C语言的同时,也要学好算法设计。

    clip_image004

    算法与程序设计是好兄弟

改写后的程序,并不是“最简单的C语言程序”,但是却很好地反映了C语言程序设计的全貌。小小一个例子的改写,折射了C语言程序设计的方方面面。我们可以从中获得很多程序之外的知识和经验。语法规则人人都可以学会,但这些程序之外的知识经验却更为宝贵。

阅读(783) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~