C prime plus 第七章 编程练习答案

废话不多说,继续上代码。有问题可于评论或私信作者。

/* 7-1.c -- 读取输入,直至读到'#'停止,统计读取的空格数
、换行符和其他字符的数量  */
#include<stdio.h>

int main(void)
{
	char ch;
	int k, h, p;						// 累计变量,用于统计字符
	k = 0;
	h = 0;
	p = 0;
	while ((ch = getchar()) != '#')
	{
		switch (ch) {
		case ' ':
			k++; 
			break;
		case '\n':
			h++; 
			break;
		default:
			p++; 
			break;
		}
	}
	printf("空格的个数为:%d,换行符的个数为:%d,其他字符的个数为:%d\n", k, h, p);

	return 0;
}
/* 7-2.c -- 读取输入,读到#字符停止,程序要打印每个输入的字符以及
对应的ASCII码。每行打印8个字符的“字符-ASCII”组合 */
#include<stdio.h>

int main(void)
{
	char ch;
	int p = 0;						// 累计变量
	while ((ch = getchar()) != '#')
	{
		p++;
		printf("%c %d ",ch,ch);
		if (p % 8 == 0)
			printf("\n");
	}
	return 0;
}
/* 7-3.c -- 读取输入,直至用户输入0.输入结束后,程序应报告
用户输入的偶数(不包括0)个数,偶数的平均值,奇数的个数,
奇数的平均值 */
#include<stdio.h>
int main(void)
{
	int pants;
	int even = 0;			// 偶数
	int odd = 0;			// 奇数
	int sum_even = 0;
	int sum_odd = 0;
	printf("LSP们请输入你们想要的胖次数:");
	while (scanf("%d", &pants) == 1 && pants != 0)
	{
		if (pants % 2 == 0)
		{
			even++;
			sum_even += pants;
		}
		else
		{
			odd++;
			sum_odd += pants;
		}
		printf("LSP们请输入你们想要的胖次数:");
	}
	printf("偶数个数为:%d,奇数个数为:%d\n", even, odd);
	printf("偶数的平均值为:%d,奇数的平均值为:%d\n",sum_even / even,sum_odd / odd);
	return 0;
}
/* 7-4.c -- 读取用户输入,到#停止。用感叹号替换句号,用两个感叹号
替换原来的感叹号。最后报告进行了多少次替换  */
#include<stdio.h>
int main(void)
{
	char ch;	
	int p = 0;								// 累计变量

	while ((ch = getchar()) != '#')
	{
		if (ch == '.')
		{
			putchar('!');
			p++;
		}
		else if (ch == '!')
		{
			putchar('!');
			putchar('!');
			p++;
		}
		else
			putchar(ch);
	}


	printf("总计变换了%d次!\n",p);
	return 0;
}
/* 7-5.c -- 使用switch语句重写7-4 */
#include<stdio.h>
int main(void)
{
	char ch;
	int p = 0;				// 累计变量
	while ((ch = getchar()) != '#')
	{
		switch (ch)
		{
		case '.':
			putchar('!');
			p++;
			break;
		case '!':
			putchar('!');
			putchar('!');
			p++;
			break;
		default:
			putchar(ch);
			break;
		}
	}
	printf("总计变了%d次\n",p);
	return 0;
}
/* 7-6.c -- 读取输入,直到#停止,报告ei出现的次数 */
#include<stdio.h>

int main(void)
{
	char ch;
	int p = 0;					//  累计变量
	bool e = false;
	while ((ch = getchar()) != '#')
	{
		switch (ch)
		{
		case 'e':
			e = true;
			break;
		default:
			if (!e)
				break;
			else if (e && ch == 'i')
			{
				p++;
				break;
			}
			else
				e = false;
			break;
		}
	}
	printf("ei出现的次数为%d\n",p);
	return 0;
}
/* 7-7.c -- 编写一个程序,提示用户输入一周工作的小时数,然后打印工资总额、税金和净收入。
做如下假设:
a.基本工资 = 10美元/小时
b.加班(超过40小时) = 1.5倍的时间
c.税率: 前300美元为15% 续150美元为20% 余下的为25%
用#define定义符号常量。不用在意是否符合当前的税法 */
#include<stdio.h>
#define SALARY 10			// 基本工资
#define TAX1 0.15			// 前$300的税率
#define TAX2 0.20			// 续$150的税率
#define TAX3 0.25			// 余下的税率

int main(void)
{
	double work_hours;
	double income;
	double taxes;
	printf("打工人!请输入一周工作的时长:");
	scanf("%lf", &work_hours);
	// 如果超过40小时,工作时长会变为1.5倍
	if (work_hours > 40)
		work_hours = 40 + (work_hours - 40) * 1.5;
	income = work_hours * SALARY;
	if (income <= 300)
		taxes = 300 * TAX1;
	else if (income > 300 && income <= 450)
		taxes = 300 * TAX1 + (income - 300) * TAX2;
	else
		taxes = 300 * TAX1 + 150 * TAX2 + (income - 450) * TAX3;
	printf("打工人!你这周的工作时长为:%.2f\n",work_hours);
	printf("应得薪水为$%.2f\n",income);
	printf("奈何你要交个人所得税!应交的税款为:$%.2f\n",taxes);
	printf("所以这周的实际收入为$%.2f\n",income - taxes);
	printf("累吗?累就对了,舒服是留给有钱人的,只要我们拼命努力,就能让老板过上幸福的生活!\n");
	return 0;
}
/* 7-8.c -- 修改练习7的假设a,让程序可以给出一个供选择的工资等级菜单。
使用switch完成工资等级选择。运行程序后,
显示的菜单应该类似这样: 
*****************************************************************
Enter the number corresponding to the desired pay rate or action:
1) $8.75/hr                            2) $9.33/hr
3) $10.00/hr                          4) $11.20/hr
5) quit
*****************************************************************
如果选择 1~4 其中的一个数字,程序应该询问用户工作的小时数。程序要通过循环运行,
除非用户输入 5。如果输入 1~5 以外的数字,程序应提醒用户输入正确的选项,然后再
重复显示菜单提示用户输入。使用#define创建符号常量表示各工资等级和税率 */
#include<stdio.h>
#define PER_HOUR_SALARY1 8.75
#define PER_HOUR_SALARY2 9.33
#define PER_HOUR_SALARY3 10.00
#define PER_HOUR_SALARY4 11.20
#define TAXES1 0.15						// 前$300的税收
#define TAXES2 0.20						// 续$150的税收
#define TAXES3 0.25						// 余下的税收

int main(void)
{
	double work_hours;
	int label;
	double income;
	double taxes;
	printf("*****************************************************************\n");
	printf("Enter the number corresponding to the desired pay rate or action:\n");
	printf("1) $8.75/hr                            2) $9.33/hr\n");
	printf("3) $10.00/hr                          4) $11.20/hr\n");
	printf("5) quit\n");
	printf("*****************************************************************\n");
	printf("请输入1-5的数字来选择功能模块:");
	while (scanf("%d", &label) == 1)
	{
		if (label < 1 && label > 5)
		{
			printf("请重新输入,你个臭憨批,不是说了让输入1-5的数字吗?\n");
			continue;
		}
		if (label == 5)
			break;
		printf("请输入你一周的工作时长:");
		scanf("%lf", &work_hours);
		switch (label)
		{
		case 1:
			income = work_hours * PER_HOUR_SALARY1;
			break;
		case 2:
			income = work_hours * PER_HOUR_SALARY2;
			break;
		case 3:
			income = work_hours * PER_HOUR_SALARY3;
			break;
		case 4:
			income = work_hours * PER_HOUR_SALARY4;
			break;
		case 5:
			break;
		}
		if (income <= 300)
			taxes = income * TAXES1;
		else if (income > 300 && income <= 450)
			taxes = 300 * TAXES1 + (income - 300) * TAXES2;
		else
			taxes = 300 * TAXES1 + 150 * TAXES2 + (income - 450) * TAXES3;
		printf("打工人!你这周的工作时长为:%.2f\n", work_hours);
		printf("应得薪水为$%.2f\n", income);
		printf("奈何你要交个人所得税!应交的税款为:$%.2f\n", taxes);
		printf("所以这周的实际收入为$%.2f\n", income - taxes);
		printf("累吗?累就对了,舒服是留给有钱人的,只要我们拼命努力,就能让老板过上幸福的生活!\n\n");
		printf("请输入1-5的数字来选择功能模块:");
	}

	return 0;
}
/* 7-9.c -- 编写一个程序,只接受正整数输入,然后显示所有小于或等于该数的素数 */
#include<stdio.h>

int main(void)
{
	int num;
	int flag = 0;
	while (scanf("%d", &num) == 1 && num > 0)
	{
		printf("小于%d的素数有:", num);
		for (int i = num; i >= 2; i--)
		{
			for (int j = 2; j < i; j++)
			{
				flag = 0;
				if (i % j == 0)
				{
					flag = 1;
					break;
				}
				else
					continue;
			}
			if (!flag)
				printf("%d ", i);
		
		}
		printf("\n若继续,请接着输入一个正整数,若要停止,请输入非正整数或非数值字符:");
	}
	return 0;
}
/* 7-10.c */
#include<stdio.h>

int main(void)
{
	int label;
	double income;
	double taxes;

	printf("************************************************\n");
	printf("(1)单身					(2)户主\n");
	printf("(3)已婚,共有			(4)已婚,离异\n");
	printf("************************************************\n");
	printf("请选择当前您的生活状态:");
	while (scanf("%d", &label) == 1 && label >= 1 && label <= 4)
	{
		printf("请输入您的收入:");
		scanf("%lf",&income);
		switch (label)
		{
		case 1:
			if (income <= 17850)
				taxes = income * 0.15;
			else
				taxes = 17850 * 0.15 + (income - 17850) * 0.28;
			break;
		case 2:
			if (income <= 23900)
				taxes = income * 0.15;
			else
				taxes = (income - 23900) * 0.28;
			break;
		case 3:
			if (income <= 29750)
				taxes = income * 0.15;
			else
				taxes = 29750 * 0.15 + (income - 29750) * 0.28;
			break;
		case 4:
			if (income <= 14875)
				taxes = income * 0.15;
			else
				taxes = 14875 * 0.15 + (income - 14875) * 0.28;
			break;
		}
		printf("您应缴纳的税收为:%.2lf\n",taxes);
		printf("若要继续,请继续输入,若要截止,请输入1-4以外的其他数或者非数值字符:");
	}
	return 0;
}
/* 7-11.c -- ABC邮购杂货铺 */
#include<stdio.h>
#define ARTICHOKE 2.05				// 洋蓟的价格
#define BEET 1.15					// 甜菜的价格
#define CARROT 1.09					// 胡萝卜的价格
#define FREIGHT1 6.5				// 少于5磅的运费
#define FREIGHT2 14					// 5磅-20磅的运费

int main(void)
{
	char ch;
	double prince;					// 总价
	double artichoke_pound;			// 洋蓟的磅数
	double beet_pound;				// 甜菜的磅数
	double carrot_pound;			// 胡萝卜的磅数
	double freight;					// 运费/包装费
	double discount = 0.0;
	double sum_artichoke = 0.0;
	double sum_beet = 0.0;
	double sum_carrot = 0.0;
	int flag = 0;					// 循环标志
	printf("欢迎来到ABC邮购杂货铺,请根据清单选择相应菜品进行订购!\n");
	printf("*********************************************************\n");
	printf("(a) 请输入洋蓟的磅数	(b) 请输入甜菜的磅数\n");
	printf("(c) 请输入胡萝卜的磅数  (q) 退出\n");
	printf("*********************************************************\n");
	while (!flag)
	{
		printf("请选择要订购的蔬菜序号:");
		scanf("%c", &ch);
		switch (ch)
		{
		case 'a':
			printf("请输入您所需要洋蓟的磅数:");
			scanf("%lf",&artichoke_pound);
			sum_artichoke += artichoke_pound;
			break;
		case 'b':
			printf("请输入您所需要的甜菜的磅数:");
			scanf("%lf",&beet_pound);
			sum_beet += beet_pound;
			break;
		case 'c':
			printf("请输入您所需要胡萝卜的磅数:");
			scanf("%lf",&carrot_pound);
			sum_carrot += carrot_pound;
			break;
		case 'q':
			flag = 1;
			break;
		}
	}
	if (sum_artichoke + sum_beet + sum_carrot <= 5)
		freight = FREIGHT1;
	else if (sum_artichoke + sum_beet + sum_carrot > 5 && sum_artichoke + sum_beet + sum_carrot <= 20)
		freight = FREIGHT2;
	else
		freight = FREIGHT2 + (sum_artichoke + sum_beet + sum_carrot - 20) * 0.5;
	prince = sum_artichoke * ARTICHOKE + sum_beet * BEET + sum_carrot * CARROT;
	if (prince >= 100)
		discount = prince * 0.05;
	printf("洋蓟的单价为$2.05/磅   甜菜的单价为$1.15/磅   胡萝卜的单价为$1.09/磅\n");
	printf("您所订购洋蓟重量为:%.2lf磅, 甜菜的重量为:%.2lf磅, 胡萝卜的重量为:%.2lf磅\n"
		,artichoke_pound,beet_pound,carrot_pound);
	printf("您所订购洋蓟的价格为:%.2lf, 甜菜的价格为:%.2lf,  胡萝卜的价格为:%.2lf\n"
		,sum_artichoke * ARTICHOKE , sum_beet * BEET , sum_carrot * CARROT);
	printf("订单总额为:%.2lf, 折扣为(不包含运费和包装费):%.2lf,运费和包装费为:%.2lf\n"
	,prince,discount,freight);
	printf("最后总计$%.2lf,祝您生活愉快!\n",prince - discount + freight);

	return 0;
}
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值