目录
8.11.1
设计一个程序,统计在读到文件结尾之前读取的字符数。
/*8.11.1. 设计一个程序,统计在读到文件结尾之前读取的字符数。*/
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main(void)
{
int count = 0;
int ch; //getchar()返回的是int类型,所以最好将ch声明为int类型
while ((ch = getchar()) != EOF)
count++;
printf("一共有%d个字符\n", count);
return 0;
}
运行结果:
8.11.2
编写一个程序,在遇到EOF之前,把输入作为字符流读取。程序要打印每个输入的字符及其相应的ASCII十进制值。注意,在ASCII序列中,空格字符前面的字符都是非打印字符,要特殊处理这些字符。如果非打印字符是换行符或制表符,则分别打印\n或\t。否则,使用控制字符表示法。例如,ASCII的1是Ctrl+A,可表示为`A。注意,A的ASCII值是Ctrl+A的值加上64。其他非打印字符也有类似的关系。除每次遇到换行符打印新的一行之外,每行打印10对值。(注意:不同的操作系统其控制字符可能不同。)
/*8.11.2. 编写一个程序,在遇到EOF之前,把输入作为字符流读取。程序要打印每个输
入的字符及其相应的ASCII十进制值。注意,在ASCII序列中,空格字符前面的字符都是非
打印字符,要特殊处理这些字符。如果非打印字符是换行符或制表符,则分别打印\n或\t。
否则,使用控制字符表示法。例如,ASCII的1是Ctrl+A,可表示为`A。注意,A的ASCII值
是Ctrl+A的值加上64。其他非打印字符也有类似的关系。除每次遇到换行符打印新的一行
之外,每行打印10对值。(注意:不同的操作系统其控制字符可能不同。)*/
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main(void)
{
char ch;
int count = 0;
while ((ch = getchar()) != EOF)
{
if (ch < ' ') //<32是非打印字符
{
if (ch == '\n')
printf("\\n:%d ", ch);
else if (ch == '\t')
printf("\\t:%d ", ch);
else
printf("^%c:%d ", ch + 64, ch);
}
else // >= 32是打印字符
printf("%c:%d ", ch, ch);
count++;
count % 10 == 0 ? printf("\n") : count;
//如果count % 10 == 0成立则换行,否则还是不变
}
return 0;
}
运行结果:
8.11.3
编写一个程序,在遇到EOF之前,把输入作为字符流读取。该程序要报告输入中的大写字母和小写字母的个数,假设大小写字母数值是连续的。或者使用ctype.h库中合适的分类函数更方便。
/*8.11.3. 编写一个程序,在遇到EOF之前,把输入作为字符流读取。该程序要报告输入中
的大写字母和小写字母的个数,假设大小写字母数值是连续的。或者使用ctype.h库中合适的
分类函数更方便。*/
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<ctype.h>
int main(void)
{
int ch = 0;
unsigned int upper = 0;
unsigned int lower = 0;
unsigned int other = 0;
while ((ch = getchar()) != EOF)
{
if (isupper(ch)) //大写字母
upper++;
else if (islower(ch)) //小写字母
lower++;
else //其他字符
other++;
}
printf("大写字母有:%u 个,小写字母有:%u 个, 其他字符有:%u 个\n",
upper, lower, other);
return 0;
}
运行结果:
8.11.4
编写一个程序,在遇到EOF之前,把输入作为字符流读取。该程序要报告平均每个单词的字母数。
不要把空白统计为单词的字母。实际上,标点符号也不应该统计,但是现在暂时不用考虑那么多(如果你比较在意的话,考虑使用ctype.h系列中的ispunct()函数。
解析:
/*8.11.4. 编写一个程序,在遇到EOF之前,把输入作为字符流读取。该程序要报告平均每
个单词的字母数。不要把空白统计为单词的字母。实际上,标点符号也不应该统计,但是现
在暂时不用考虑那么多(如果你比较在意的话,考虑使用ctype.h系列中的ispunct()函数。*/
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include&l