C Prime plus 第七章练习题

学习记录贴
摘要由CSDN通过智能技术生成

7-1

#include<stdio.h>
int main(void)
{
	char stop = '#';
	int num_others = 0;
	int num_blank = 0;
	int num_enter = 0;
	char ch;

	printf("请输入一段字符串:");
	while ((ch = getchar()) != stop)
	{
		if (ch == ' ') //注意字符和字符串区别,一个是单引号,一个是双引号
			num_blank++;
		else if (ch == '\n')//注意字符和字符串区别,一个是单引号,一个是双引号
			num_enter++;
		else 
			num_others++;
	}
	printf("空格数有%d个,换行符数有%d个,其他字符有%d个", num_blank, num_enter, num_others);
	return 0;
}

7-2

int main(void)
{
	char stop = '#';
	int num_char = 0;
	char ch;
	printf("请输入一串字符:\n");

	while ((ch = getchar()) != stop)
	{
		//num_char++;
		if (num_char++ % 8 == 0)//如果上一步++,这里便不再是%8,而是%7
		{
			printf("\n");
		}
		if (ch == '\n')//换行符要显示出来
			printf("'\\n'-%.3d ", ch);
		else if (ch == '\t')//制表符要显示出来
			printf("'\\t'-%.3d ", ch);
		else
		printf("%c-%.3d ", ch, ch);	
	}
	printf("Done");
	return 0;
}

这里有一个缺点,只要输入换行键程序就会输出结果,此时继续输入的话,第一行的8个便不再是8个,而是和上一次输出剩的最后一行输出加起来为8个;

这样就是一直等待输入,直到输入#才开始运行;

7-3

int main(void)
{
	int num_odd = 0;
	int num_even = 0;
	double average = 0;
	int sum = 0;
	int num = 0;
	int input;
	printf("输入一串整数(输入0结束程序):");


	while (scanf("%d", &input) == 1 && input != 0)
	{
		if (input % 2 == 0)
			num_even++;
		else
			num_odd++;
		num++;
		sum += input;
	}
	average = (double)sum / num;
	printf("你输入的偶数有%d个,奇数有%d个,平均数为%lf.", num_even, num_odd, average);
	return 0;
}

 7-4

int main(void)
{
	char stop = '#';
	int num_convert1 = 0;
	int num_convert2 = 0;
	char ch;

	printf("Enter your input:\n");
	while ((ch = getchar()) != stop)
	{
		if (ch == '.')
		{
			num_convert1++;
			printf("!");
		}
		else if (ch == '!')
		{
			num_convert2++;
			printf("!!");
		}
		else
			putchar(ch);
	}
	printf("\n");
	printf(".转换成!的次数为%d,!转换成!!的次数为%d。", num_convert1, num_convert2);
	return 0;
}

7-5

int main(void)
{
	char stop = '#';
	int num_convert1 = 0;
	int num_convert2 = 0;
	char ch;
	int flag=3;

	printf("Enter your input:\n");
	while ((ch = getchar()) != stop)
	{
		if (ch == '.')
			flag = 1;
		if (ch == '!')
			flag = 2;
		switch(flag)
		{
		
		case 1:
			printf("!");
			num_convert1 ++;
			break;//break语句作用跳出switch语句
		case 2:
			printf("!!");
			num_convert2++;
			break;
		default:
			putchar(ch);
		}
		
	}
	printf("\n");
	printf(".转换成!的次数为%d,!转换成!!的次数为%d。", num_convert1, num_convert2);
	return 0;
}

7-6

int main(void)
{
	int num_times = 0;
	char ch;
	char ch_next;
	char stop = '#';
	int flag = 0;

	printf("Enter your input\n");
	while ((ch = getchar()) != stop)
	{
		//ch_next = getchar();
		//if (ch == 'e' && ch_next == 'i')
		//	num_times++;  // 不对,因为e也可以为ch_next
		switch (ch)
		{
		case 'e':
			flag = 1;
			break;
		case 'i':
			if (flag == 1)
				num_times++;
			break;
		default:
			flag = 0;
		}
	}
	printf("ei出现的次数为%d", num_times);
	return 0;
}

7-7

int main(void)
{
	int hour = 0;
	double  salary = 0;
	double tax = 0;
	double money = 0;
	printf("请输入你的工作时间:");
	scanf("%d", &hour);
	if (hour <= 40)
		salary = salary_per_hour * hour;
	else
		salary = salary_per_hour * hour * 1.5;
		
	if (salary < 300 )
		tax = rate_300 * salary;
	else if (salary >= 300 && salary <= 450)
			tax = 45 + rate_left_150 * (salary - 300);
	else 
		tax = 45 + 30 + rate_left * (salary - 450);

		money = salary - tax;
		printf("你的工资总额是%.3lf,税金是%.3lf,净收入是%.3lf。", salary, tax, money);

	return 0;
}

7-8

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#define salary_per_hour_a 8.75
#define salary_per_hour_b 9.33
#define salary_per_hour_c 10.00
#define salary_per_hour_d 11.20
#define rate_300 0.15
#define rate_left_150 0.2
#define rate_left 0.25
int selection(void);

int main(void)
{
	int hour = 0;
	double  salary = 0;
	double tax = 0;
	double money = 0;
	double salary_per_hour;
	int flag;
	
	do {
		selection();
		printf("请输入你的工作等级:");
		scanf("%d", &flag);
		switch (flag)
		{
		case 1:
			salary_per_hour = salary_per_hour_a;
			printf("请输入你的工作时间:");
			break;
		case 2:
			salary_per_hour = salary_per_hour_b;
			printf("请输入你的工作时间:");
			break;
		case 3:
			salary_per_hour = salary_per_hour_c;
			printf("请输入你的工作时间:");
			break;
		case 4:
			salary_per_hour = salary_per_hour_d;
			printf("请输入你的工作时间:");
			break;
		case 5:
			goto end;
			break;
		default:
			printf("请输入正确选项\n");
			continue;
		}
		scanf("%d", &hour);
		if (hour <= 40)
			salary = salary_per_hour * hour;
		else
			salary = salary_per_hour * hour * 1.5;

		if (salary < 300)
			tax = rate_300 * salary;
		else if (salary >= 300 && salary <= 450)
			tax = 45 + rate_left_150 * (salary - 300);
		else
			tax = 45 + 30 + rate_left * (salary - 450);
		money = salary - tax;
		printf("你的工资总额是%.3lf,税金是%.3lf,净收入是%.3lf。\n", salary, tax, money);
	} while (flag != 5);
	end:printf("quit!");
	return 0;
}
int selection(void)
{
	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");
}

7-9

#include<stdio.h>
int SuShu(int n);
int main(void)
{
	int input;
	printf("请输入一个正整数:");
	while (scanf("%d", &input) == 1 && input>0)
	{
	
		for (int i = 2; i <= input; i++)
		{
			SuShu(i);
		}
	}
	printf("请输入正确的数字");

	return 0;
}
int SuShu(int n)
{
	int i;
	if (n <= 2)
		printf("2 ");
	for (i = 2; i < n; i++)
	{
		if (n % i == 0)
			break;
		if (i == n - 1)
			printf("%d ", n);
	}
	return 0;
}

7-10

int main(void)
{
	int flag;
	int max;
	int salary;
	double  tax;

	do
	{
		printf("请选择你的类别:\n");
		printf("1.单身 2.户主 3.已婚共有  4.已婚离异(输入5退出)");
		scanf("%d", &flag);
		switch (flag)
		{
		case 1:
			max = 17850;
			break;
		case 2:
			max = 23900;
			break;
		case 3:
			max = 29750;
			break;
		case 4:
			max = 14875;
			break;
		case 5:
			goto end;
		}
		printf("输入您的收入:");
		scanf("%d", &salary);
		if (salary < max)
			tax = salary * 0.15;
		else
			tax = max * 0.15 + (salary - max) * 0.28;
		printf("您的税款为%lf\n", tax);
	} while (flag != 5);
	end:
	printf("程序结束。");
	return 0;
}

7-11

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

int main(void)
{
	char flag;
	double unit_price;
	int weight = 0;
	int weight_sum = 0;
	int weight_a = 0;
	int weight_b = 0;
	int weight_c = 0;
	double money = 0;
	double pay = 0;
	double money_goods;
	double discount = 0;
	double dilivery = 0;

	do
	{
		printf("您要购买什么菜品:\n");
		printf("a.洋蓟 b.甜菜 b.胡萝卜 q.退订\n");
		scanf("%c", &flag);
		if (isalpha(flag))
			flag = flag;
		else
		scanf("%c", &flag);
		switch (flag)
		{
		case 'a':
			printf("您要购买的磅数为:");
			scanf("%d", &weight);
			weight_sum += weight;
			weight_a += weight;
			unit_price = 2.05;
			money_goods = weight * unit_price;
			money += money_goods;
			break;
		case 'b':
			printf("您要购买的磅数为:");
			scanf("%d", &weight);
			weight_sum += weight;
			weight_b += weight;
			unit_price = 1.15;
			money_goods = weight * unit_price;
			money += money_goods;
			break;
		case 'c':
			printf("您要购买的磅数为:");
			scanf("%d", &weight);
			weight_sum += weight;
			weight_c += weight;
			unit_price = 1.09;
			money_goods = weight * unit_price;
			money += money_goods;
			break;
		case 'q':
			goto calculate;
		default:
			break;
		}
	} while (flag != 4);
	calculate:
	if (money >= 100)
		discount = money * 0.05;
	if (weight_sum <= 5)
		dilivery = 6.5;
	else if (weight_sum <= 20)
		dilivery = 14;
	else
		dilivery = 14 + 0.5 * (weight_sum - 20);
	pay = money - discount + dilivery;
	if (weight_a != 0)
	{
		printf("你购买了%d磅单价为2.05美元/磅的洋蓟\n", weight_a);
	}
	if (weight_b != 0)
	{
		printf("你购买了%d磅单价为1.15美元/磅的甜菜\n", weight_b);
	}
	if (weight_c != 0)
	{
		printf("你购买了%d磅单价为1.09美元/磅的胡萝卜\n", weight_c);
	}
	printf("您订购的蔬菜费用为%lf,折扣费用为%lf,运费和包装费为%lf,您所需要支付的总费用为%lf", money, discount, dilivery, pay);
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值