一个经典C语言程序的改进
2020-02-22巨同升


摘要:统计单词个数的程序是一个经典的C语言程序,传统的写法存在结构复杂、可读性差的不足。通过对相邻的两个字符同时进行判断,即可简化程序结构,改善程序的可读性。
关键词:单词个数;标记变量;结构性;可读性
中图分类号:TP312 文献标识码:A
文章编号:1009-3044(2020)36-0071-02
培养学生良好的编程能力是程序设计课程的核心目标[1],而编程能力的培养离不开一个个具体的案例程序。
在教学中选用优质的案例程序,对于培养学生的程序设计能力具有重要的示范引导作用[2-3],因此应该选择更加合理有效的程序实现方法。不过,在当前的C语言程序设计教材中,仍有个别案例程序的写法存在改进优化的空间。
1 统计单词个数的传统程序
“统计一个字符串中单词的个数(假定单词之间以空格分隔)”是C语言程序设计中的一个经典程序,是字符串处理部分的一个重要案例[4-5]。
下面的程序是在许多C语言教材中采用的一种传统写法。
源程序1:
#include
#define IN 1 /*表示在一个单词内部*/
#define OUT 0 /*表示在一个单词外部*/
int main(void)
{
char c;
int num,state;
state=OUT; /*初始状态位于单词外部*/
num=0;
while((c=getchar())!='\n')
{
if(c==' ')
state=OUT;
else if(state==OUT)
{
state=IN;
num++;
}
}
printf("单词个数=%d\n",num);
return 0;
}
这是一个经典的程序,同时也是一个比较晦涩难懂的程序。由于第一个单词之前可能有空格,同时两个单词之间也可能有多个空格,因此不能简单地通过统计空格的个数以得到单词的个数。该程序的编程思路是依据相邻的两个字符进行判断,当相邻的两个字符中,前一个是空格符(即处于单词外部),而后一个是非空格字符(即处于单词内部)时,说明找到一个新的单词的开头,从而将单词的个数加一。……
