《C Primer Plus》第八章 编程习题

目录

8.11.1

8.11.2

8.11.3

8.11.4

8.11.5

8.11.6

8.11.7

8.11.8


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
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值