二维字符串数组,你别告诉我你看不懂s[10][10]
垂直就比水平麻烦点,没什么意思。估计有人帮你。我反正对这个问题没兴趣了
垂直就比水平麻烦点,没什么意思。估计有人帮你。我反正对这个问题没兴趣了
程序代码:#include <stdio.h>
#define MAXHIST 15 /* 直方图的最大长度 */
#define MAXWORD 11 /* 输入单词的最大长度 */
#define IN 1 /* 在一个单词内部 */
#define OUT 0 /* 在一个单词外部 */
main()
{
int c, i, j, nc, state;
int maxvalue; /* wl[] 数组里最大的值 */
int ovflow; /* 溢出的词数 */
int wl[MAXWORD]; /* 计算单词长度 */
state = OUT;
nc = 0; /* 一个单词的字符数 */
ovflow = 0; /* 单词字符数大于最大长度 */
for (i = 0; i < MAXWORD; ++i) /* 给数组赋值 */
wl[i] = 0;
while ( (c = getchar()) != EOF ){
if (c == ' ' || c == '\n' || c == '\t'){ /* 遇到空格,换行,Tab表示一个单词的结束 */
state = OUT;
if (nc > 0) /* 单词长度大于0 */
if (nc < MAXWORD) /* 长度小于最大值 */
++wl[nc]; /* 在相应的单词长度上加1 */
else
++ovflow; /* 大于最大值的单词加1 */
nc = 0;
} else if (state = OUT) { /* 是否是单词的开始 */
state = IN; /* 把状态改为在单词内 */
nc = 1; /* 重新开始记录单词数 */
} else
++nc;
}
maxvalue = 0;
for (i = 1; i < MAXWORD; ++i) /* 找出数组里最大的值 */
if (wl[i] > maxvalue)
maxvalue = wl[i];
for (i = MAXHIST; i > 0; --i) { /* 打印直方图 */
for (j = 1; j < MAXWORD; ++j)
if (wl[j] * MAXHIST / maxvalue >= i) /* 这条语句是什么原理? */
printf("*");
else
printf(" ");
putchar('\n');
}
for (i = 1; i < MAXWORD; ++i)
printf("%4d ", i);
putchar('\n');
for (i = 1; i < MAXWORD; ++i)
printf("%4d ", wl[i]);
putchar('\n');
if (ovflow > 0)
printf("There are %d words >= %d\n", ovflow, MAXWORD);
}
程序代码:#include <stdio.h>
#define MAXHIST 15 /* 直方图的最大长度 */
#define MAXWORD 11 /* 输入单词的最大长度 */
#define IN 1 /* 在一个单词内部 */
#define OUT 0 /* 在一个单词外部 */
main()
{
int c, i, j, nc, state;
int maxvalue; /* wl[] 数组里最大的值 */
int ovflow; /* 溢出的词数 */
int wl[MAXWORD]; /* 计算单词长度 */
state = OUT;
nc = 0; /* 一个单词的字符数 */
ovflow = 0; /* 单词字符数大于最大长度 */
for (i = 0; i < MAXWORD; ++i) /* 给数组赋值 */
wl[i] = 0;
while ( (c = getchar()) != EOF ){
if (c == ' ' || c == '\n' || c == '\t'){ /* 遇到空格,换行,Tab表示一个单词的结束 */
state = OUT;
if (nc > 0) /* 单词长度大于0 */
if (nc < MAXWORD) /* 长度小于最大值 */
++wl[nc]; /* 在相应的单词长度上加1 */
else
++ovflow; /* 大于最大值的单词加1 */
nc = 0;
} else if (state = OUT) { /* 是否是单词的开始 */
state = IN; /* 把状态改为在单词内 */
nc = 1; /* 重新开始记录单词数 */
} else
++nc;
}
maxvalue = 0;
for (i = 1; i < MAXWORD; ++i) /* 找出数组里最大的值 */
if (wl[i] > maxvalue)
maxvalue = wl[i];
for (i = MAXHIST; i > 0; --i) { /* 循环最大直方图的次数 15 */
for (j = 1; j < MAXWORD; ++j) /* 每循环一次直方图次数,就循环一回数组的值。判断并输出*或空格,好打印出垂直的直方图 */
if (wl[j] * MAXHIST / maxvalue >= i) /* 这样可可以打印出一个 15*10 的直方图,每次输出一行输出15次 */
printf("*"); /* 这里的计算 是判断是否需要在一个位置输出*号 */
else /* 用单词长度数 × 直方图最大值 / 单词长度最大值 >= 直方图对应的行数 */
printf(" "); /* 大于行数就打印 * 否则打印空格 */
putchar('\n'); /* 在循环完10次后换行,在继续循环下一行 */
}
for (i = 1; i < MAXWORD; ++i)
printf("%d ", i);
putchar('\n');
for (i = 1; i < MAXWORD; ++i)
printf("%d ", wl[i]);
putchar('\n');
if (ovflow > 0)
printf("There are %d words >= %d\n", ovflow, MAXWORD);
}
程序代码:
#include <stdio.h>
#include <stdbool.h>
#include <ctype.h>
#define MAX_WORDS 10
int main(void) {
int a[MAX_WORDS] = {0};
// 所有单词的最大长度
int max_len = 0;
// 输入的单词数
int nwords = 0;
int c;
int len = 0;
bool is_inword = false;
bool is_space;
while (nwords < MAX_WORDS && (c = getchar())) {
is_space = isspace(c);
if (is_space && !is_inword) {
continue;
}
else if (is_space) {
a[nwords++] = len;
if (len > max_len) {
max_len = len;
}
len = 0;
if (c == '\n') {
break;
}
}
else {
++len;
is_inword = true;
}
}
for (int i = max_len; i > 0; --i) {
for (int j = 0; j <= nwords; ++j) {
if (a[j] >= i) {
printf("* ");
}
else {
printf(" ");
}
}
putchar('\n');
}
return 0;
}
[此贴子已经被作者于2016-7-25 22:08编辑过]

程序代码:#include <stdio.h>
int main(void)
{
int y, i, j;
int x[11];
y = 15;
for(i=1; i<11; ++i)
x[i] = i;
for(i=y; i>0; --i){
for(j=1; j<11; ++j){
if( x[j] >= i )
printf("*");
else
printf(" ");
} putchar('\n');
}
}
程序代码:#include <stdio.h>
#define MAXHIST 15 /* 直方图的最大长度 */
#define MAXWORD 11 /* 输入单词的最大长度 */
#define IN 1 /* 在一个单词内部 */
#define OUT 0 /* 在一个单词外部 */
main()
{
int c, i, j, nc, state;
int maxvalue; /* wl[] 数组里最大的值 */
int ovflow; /* 溢出的词数 */
int wl[MAXWORD]; /* 计算单词长度 */
state = OUT;
nc = 0; /* 一个单词的字符数 */
ovflow = 0; /* 单词字符数大于最大长度 */
for (i = 0; i < MAXWORD; ++i) /* 给数组赋值 */
wl[i] = 0;
while ( (c = getchar()) != EOF ){
if (c == ' ' || c == '\n' || c == '\t'){ /* 遇到空格,换行,Tab表示一个单词的结束 */
state = OUT;
if (nc > 0) /* 单词长度大于0 */
if (nc < MAXWORD) /* 长度小于最大值 */
++wl[nc]; /* 在相应的单词长度上加1 */
else
++ovflow; /* 大于最大值的单词加1 */
nc = 0;
} else if (state = OUT) { /* 是否是单词的开始 */
state = IN; /* 把状态改为在单词内 */
nc = 1; /* 重新开始记录单词数 */
} else
++nc;
}
maxvalue = 0;
for (i = 1; i < MAXWORD; ++i) /* 找出数组里最大的值 */
if (wl[i] > maxvalue)
maxvalue = wl[i];
for (i = MAXHIST; i > 0; --i) { /* 循环最大直方图的次数 15 */
for (j = 1; j < MAXWORD; ++j) /* 每循环一次直方图次数,就循环一回数组的值。判断并输出*或空格,好打印出垂直的直方图 */
if (wl[j] * MAXHIST / maxvalue >= i) /* 这样可可以打印出一个 15*10 的直方图,每次输出一行输出15次 */
printf("*"); /* 这里的计算 是判断是否需要在一个位置输出*号 */
else /* 用单词长度数 × 直方图最大值 / 单词长度最大值 >= 直方图对应的行数 */
printf(" "); /* 大于行数就打印 * 否则打印空格 */
putchar('\n'); /* 在循环完10次后换行,在继续循环下一行 */
}
for (i = 1; i < MAXWORD; ++i)
printf("%d ", i);
putchar('\n');
for (i = 1; i < MAXWORD; ++i)
printf("%d ", wl[i]);
putchar('\n');
if (ovflow > 0)
printf("There are %d words >= %d\n", ovflow, MAXWORD);
}[此贴子已经被作者于2016-7-26 23:56编辑过]

程序代码:#include <stdio.h>
#include <ctype.h>
int main(void)
{
int y, i, j, c, max, nc, test;
int x[11];
y = 15;
test = 0;
nc = 0;
for(i=1; i<11; ++i)
x[i] = 0;
//x[1] = 1;
//x[2] = 2;
//x[3] = 1;
while ((c=getchar()) != EOF ){
if(isalpha(c)){
++nc;
test = 1;
} else {
if(test == 1){
++x[nc];
nc = 0;
test = 0;
}
}
}
max = 0;
for(i = 1; i < 11; ++i)
if (x[i] > max)
max = x[i];
for(i=y; i>0; --i){
for(j=1; j<11; ++j){
//if( (x[j]*15/max) >= i ) /* 主要就是改动这两个表达式,它的直方图就完全不一样了 */
if (x[j] >= i)
printf("* ");
else
printf(" ");
} putchar('\n');
}
}
