C程序设计语言(第2版)----课后练习题1-13

练习1-13 编写一个程序,打印输入中单词长度的直方图。水平方向的直方图比较容易绘制,垂直方向的直方图则要困难些。

//横向向打印输入中单词长度的直方图
#include<stdio.h>
#define MAXWORDNUM  100    //最大单词数
main()
{
	int cnow, clast;	//clast:上一个字符,cnow:当前字符
	int i = 0, j = 0;
	int len = 0, maxlen = 0;	//len:单词长度
	int num = 0;	//num:文本中单词数目
	int word[MAXWORDNUM];	//单词长度数组
	for (i = 0; i<MAXWORDNUM; i++)
		word[i] = 0;
	i = 0;

//文本单词数统计,单词长度统计
	cnow = getchar();
	clast = cnow;
	if (clast != '\40' && clast != '\n')
		++len;

	while ((cnow = getchar()) != EOF) {
		if (cnow != '\40' && cnow != '\n')
			++len;
		if ((cnow == '\40' && (clast != '\n' && clast != '\40')) || (cnow == '\n' && (clast != '\n' && clast != '\40'))) {
			word[num] = len;
			++num;
			if (len > maxlen)	maxlen = len;
			len = 0;
		}
		clast = cnow;
	}

//横向直方图绘制
	for (i = 0; i<num; i++) {
		printf("%d: ", i + 1);
		for (j = word[i]; j>0; j--)	printf("*");
		printf("\n");
	}
}

//纵向打印输入单词长度的直方图;
#include<stdio.h>
#define MAXWORDNUM 100

main() {
	int cnow, clast;	//clast:上一个字符,cnow:当前字符
	int i = 0, j = 0;
	int len = 0, maxlen = 0;	//len:单词长度
	int num = 0;	//num:文本中单词数目
	int word[MAXWORDNUM];	//单词长度数组
	for (i = 0; i < MAXWORDNUM; i++)
		word[i] = 0;
	i = 0;

//文本单词数量统计,单词长度统计
	cnow = getchar();
	clast = cnow;
	if (clast != '\40' && clast != '\n')
		++len;
	while ((cnow = getchar()) != EOF) {
		if (cnow != '\40' && cnow != '\n')
			++len;
		if ((cnow == '\40' && (clast != '\n' && clast != '\40')) || (cnow == '\n' && (clast != '\n' && clast != '\40'))) {
			word[num] = len;
			++num;
			if (len > maxlen)	maxlen = len;
			len = 0;
		}
		clast = cnow;
	}

//纵向直方图绘制
	for (i = maxlen; i >0; i--) {
		for (j = 0; j < num; j++) {
			if (word[j] >= i) {
				if ((j>8) && (j<99))	printf("*  ");
				else printf("* ");
			}

			else {
				if ((j> 8)&& (j<99))	printf("   ");
				else printf("  ");
			}
		}
		printf("\n");
	}
	for (i = 0; i < num; i++) {
		printf("%d ", i + 1);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值