C Primer Plus 第6版 编程练习 chapter 8

1. 第1题

1.1 题目描述

设计一个程序,统计在读到文件结尾之前读取的字符数

1.2 编程源码

# include<stdio.h>

int main(){
   
   
	int num = 0;
	char c;
	
	while((c = getchar())!=EOF)	++num;
	
	printf("\n共计 %d 个字符\n", num);

	return 0;
}

1.3 结果显示

输入文本内容:

abc
e
f

结果显示


2. 第2题

2.1 题目描述

编写一个程序,在遇到EOF之前,把输入作为字符流读取。程序要打印每个输入的字符及其相应的ASCII 十进制值。注意,在 ASCII 序列中,空格字符前面的字符都是非打印字符,要特殊处理这些字符。如果非打印字符是换行符或制表符,则分别打印\n或\t。否则,使用控制字符表示法。例如ASCII的1是Ctrl+A,可显示为^A。注意A的ASCII值是Ctrl+A的值加上64.其他非打印字符也有类似的关系。除每次遇到换行符打印新的一行外,每行打印10对值。(注意:不同的操作系统其控制字符可能不同)。

2.2 编程源码

# include<stdio.h>

int main(){
   
   
	int num = 0;
	char c;
	
	while((c = getchar())!=EOF){
   
   
		++num;
		if('\n' == c) {
   
   
			printf("\n\\n-%d\t", c);
			num = 1;
		} else if('\t' == c) printf("\\t-%d\t", c);
		else printf("%c-%d\t", c,c);
		if(num%10 == 0) putchar('\n');
	}

	return 0;
}

2.3 结果显示

输入文本内容:

abc	123
e
f

在这里插入图片描述


3. 第3题

3.1 题目描述

编写一个程序,在遇到EOF之前,把输入作为字符流读取。该程序要报告输入中的大写字母和小写字符个数。假设大小写字母数值是连续的。或者使用ctype.h库中合适的分类函数更方便。

3.2 编程源码

# include<stdio.h>
# include<ctype.h>

int main(){
   
   
	int num = 0;
	int n=0;
	char c;
	
	while((c = getchar())!=EOF){
   
   
		if(isupper(c)) ++n;
		if(islower(c)) ++num;
	}
	printf("大写字母的个数:%d\n", n);
	printf("小写字母的个数:%d\n", num);

	return 0;
}

3.3 结果显示

输入文本内容:

ab	cde123 445
AAA AAB C
212324
f

结果显示


4. 第4题

4.1 题目描述

编写一个程序,在遇到EOF之前,把输入作为字符流读取。该程序要报告平均每个单词的字母数。不要把空白统计为单词的字母。实际上,标点符号也不应该统计,但是现在暂时不考虑这么多(如果你比较在意这点,考虑使用ctype.h系列中的ispunct()函数。

4.2 编程源码

# include<stdio.h>
# include<ctype.h>

int main(){
   
   
	int num_w = 0;
	float num_c=0;
	char c;
	int flag = 0;
	
	while((c = getchar())!=EOF){
   
   
		if(flag){
   
   
			if(isalpha(c)) ++num_c;
			else{
   
   
				++num_w;
				flag = 0;
			}
		}else{
   
   
			if(isalpha(c)){
   
   
				flag = 1;
				num_c++;
			}
		}
	}
	printf("\n该文章共计%d个单词,每个单词平局%f个字符\n", num_w,num_c/num_w);

	return 0;
}

4.3 结果显示

输入文本内容:

this is a dog.
dog is running on the grass.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值