C语言程序:自定义单词长度直方图

需积分: 30 1 下载量 54 浏览量 更新于2024-09-08 1 收藏 508B TXT 举报
在这个C语言编程练习中,你正在尝试编写一个简单的程序,用于统计输入字符串中单词的长度分布,并以直方图的形式展示。题目要求是根据给定的字符逐个判断是否为单词边界(空格、制表符或换行符),并统计每个单词长度出现的次数。以下是对这段代码的详细解释: 1. **包括头文件**: `#include<stdio.h>`:引入了stdio库,这是标准输入输出库,提供了处理输入和输出的标准函数,如`getchar()` 和 `printf()`。 2. **宏定义**: `#define MAXWORD 11`:这是一个预处理器指令,定义了一个名为MAXWORD的常量,其值为11。这个值可能表示程序可以处理的最大单词长度,但实际中可能需要根据需求调整。 3. **主函数**: `main()`:程序的入口点,接下来的所有代码都在这里执行。 4. **变量声明**: - `int n, i, j, k, c;`:声明了整型变量n用于计数单词数量,i、j和k用于遍历数组,c用于接收输入字符。 - `int wordlength[MAXWORD];`:定义了一个大小为MAXWORD的数组,用于存储每个单词长度的计数。 5. **输入处理循环**: `while((c=getchar())!=EOF)`:通过`getchar()`函数获取输入流中的字符,当遇到文件结束符(EOF)时跳出循环。在循环内部,有以下判断: - 如果`c`是空格、制表符或换行符,说明当前字符不是单词的一部分,因此增加`wordlength[n]`的值并将`n`重置为0,表示下一个单词开始。 - 否则,`c`被视为单词的一部分,`n`加1。 6. **直方图输出**: - 循环遍历`wordlength`数组,对于每个单词长度`j`,打印出对应的频率(`wordlength[j]`)和星号(*),形成一个宽度固定的列。`%12.0d`是格式化字符串,其中12代表宽度,0表示左对齐,`.`表示整数格式,不保留小数。 7. **暂停程序**: `system("pause")`:这是一个Windows系统调用,使程序在输出结束后暂停,等待用户按下任意键再继续执行。非Windows平台可能需要其他方法实现相同的功能。 8. **返回值**: `return 0;`:表示程序正常结束,返回0给操作系统。 总体而言,这个程序的主要目的是演示如何使用C语言统计输入字符串中单词的长度分布,通过数组来存储每个长度的词频,然后以直方图形式显示。虽然功能上比参考答案简单,但对于初学者来说,这是一个很好的实践,有助于理解如何处理输入流、数据结构以及基本的控制结构。