C Primer Plus 第6版 编程练习参考答案 第7章

tip:

vs2019如果无法使用scanf函数,直接在开头加上

#define _CRT_SECURE_NO_WARNINGS

使用scanf(" %c", &ch)可以避免读取到上一次输入的换行符,也可以不加空格,在scanf上一行中添加getchar()读取换行符后丢弃详见第11题 

one:
scanf(" %c", &ch);
two:
getchar();
scanf("%c", &ch);

1.

#include <stdio.h>
int main(void)
{
	char ch;
	int ch_lines = 0;
	int ch_blank = 0;
	int ch_other = 0;

	while (
			(ch = getchar())
								!= '#')
	{
		switch (ch) {
		case '\n': ch_lines++;
			break;
		case ' ': ch_blank++;
			break;
		default: ch_other++;
			break;
		}
	}
	printf("行数:%d\n空格数:%d\n所有其他字符数:%d\n",
		ch_lines, ch_blank, ch_other);

	return 0;
}

2.

#include <stdio.h>
int main(void)
{
	int sum = 0;
	char ch;

	while (
			(ch = getchar())
								!= '#'
		)
	{
		printf("\"%c-%d\"", ch, ch);
		sum++;
		if (sum % 8 == 0)
			printf("\n");
	}

	return 0;
}

3.

#include <stdio.h>
int main(void)
{
	int digit;
	int even_count = 0;
	int odd_count = 0;
	double even_sum = 0; 
	double odd_sum = 0;

	scanf("%d", &digit);
	while (digit != 0)
	{
		if (digit % 2 == 0)
		{
			even_count++;
			even_sum += digit;
		}
		else
		{
			odd_count++;
			odd_sum += digit;
		}
		scanf("%d", &digit);
	}
	printf("偶数个数:%d\n偶数平均值:%0.2f\n奇数个数:%d\n奇数平均值:%0.2f\n",
		even_count, even_sum / even_count, odd_count, odd_sum / odd_count);

	return 0;

4.

#include <stdio.h>
int main(void)
{
	char ch;
	int replace_count = 0;

	while ((ch = getchar()) != '#')
	{
		if (ch == '.' || ch == '!')
			replace_count += 1;
	}
	printf("进行了%d次替换", replace_count);

	return 0;
}

5.

#include <stdio.h>
int main(void)
{
	char ch;
	int replace_count = 0;

	while ((ch = getchar()) != '#')
	{
		switch (ch) {
		case '.': replace_count++;
			break;
		case '!': replace_count++;
			break;
		default: break;
		}
	}
	printf("进行了%d次替换", replace_count);

	return 0;
}

6.

#include <stdio.h>
int main(void)
{
	char ch_past, ch_now;
	int ei_cont = 0;

	ch_past = getchar();
	while (ch_past != '#' && (ch_now = getchar()) != '#')
	{
		if (ch_past == 'e' && ch_now == 'i')
			ei_cont++;
		ch_past = ch_now;
	}
	printf("出现ei次数:%d&
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值