习题1-9

编写一个将输入复制到输出的程序,并将其中连续的多个空格用一个空格代替。 思路

#include <stdio.h>

int main(){
  int c;
  int count;
  while ((c=getchar()) != EOF)
  {
    if(c == ' ')
    {
      ++count;
      if (count < 2)
      {
        putchar(c);
      }
      else{
        --count;
      }
    }
    else{
      putchar(c);
      count = 0;
    }
  }
}

习题1-13

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

#include <stdio.h>

int main(){
    int c=0;
    int array[3]={0,0,0};

    while ((c = getchar()) != '\\n')
    {
        if (c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z')
        {
            array[0] = array[0]+1;
        }
        else if (c >= '0' && c <='9')
        {
            array[1] =array[1]+1;
        }
        else
        {
            array[2] =array[2]+1;
        }
    }
    for (int b = 0; b < 3; b++)
    {
       for (int  i = 0; i < array[b]; i++)
       {
        printf("*");
       }
       printf("%d\\n", array[b]);
    }
}

习题1-14

编写一个程序,打印输入中各个字符出现频度的直方图

#include <stdio.h>

int main(){
    int array[26];
    int c;
    for (int i = 0; i < 26; i++)
    {
        array[i] = 0;
    }
    while ((c = getchar())!= '\\n' )
    {
        if(c >= 'A' && c <= 'Z'){
            array[c - 65]++;
        }
        else if (c >='a' && c <='z')
        {
            array[c - 97]++;
        }
    }
    for (int b = 0; b < 26; b++)
    {
       printf("%c", b + 65);
       for (int  i = 0; i < array[b]; i++)
       {
        printf("*");
       }
       printf("%d\\n", array[b]);
    }
}