第七章编程练习

版权声明:本文为博主原创文章,未经博主允许不得转载! https://blog.csdn.net/weixin_42839965/article/details/89485504
/*
1、编写一个程序读取输入,读到#字符停止,然后报告读取的空格数、换行符数、
和所有其他字符的数量。
*/
#include <stdio.h>
#include<ctype.h>
#define STOP '#'
int main(void)
{
	char ch;
	int linescount = 0;	//换行符数
	int spacecount = 0;	//空格数
	int otherscount = 0;	//其他字符的数量

	printf("请输入字符:\n");
	while((ch = getchar()) != STOP)
	{
		if (ch==' ')
			spacecount++;
	   if (ch == '\n')
			linescount++;
		else
			otherscount++;
	}
	printf("spacecount=%d,linescount=%d,otherscount=%d,\n", spacecount, linescount,otherscount);

	return 0;
}
/*
2、编写一个程序读取输入,读到#字符停止。程序要打印每个输入的字符以及对应的ASCII码(十进制)。
一行打印8个字符。建议:使用字符计数和求模运算符(%)在每8个循环周期时打印一个换行符。
每行打印8个“字符-ASCII码”组合。
*/
#include <stdio.h>
int main(void)
{
	int count = 0;
	char ch;

	printf("请输入字符(#字符停止):\n");
	while ((ch = getchar()) != '#')
	{
		count++;
		printf("%c,%d\t", ch, ch);
		if (count % 8 == 0)
		{
			printf("\n");
			count = 0;
		}
	}
	printf("\n");
	return 0;
}
/*
3、编写一个程序,读取整数直到用户输入0,。输入结束后,程序应报告用户输入的偶数(不包括0)
个数、这些偶数的平均值、输入的奇数个数及其奇数的平均值。
*/
#include <stdio.h>
int main(void)
{
	int index;
	int count1 = 0, count2 = 0;
	float sum1 = 0, sum2 = 0;
	float average1, average2;

	printf("请输入整数(0停止):\n");
	while (scanf("%d", &index) && index != 0)
	{
		if (index % 2 == 0)
		{
			count1++;
			sum1 += index;
			average1 = sum1 / count1;
		}
		else
		{
			count2++;
			sum2 += index;
			average2 = sum2 / count2;
		}
	}
	if (count1)
		printf("偶数的个数是%d,平均值是%.2f\n", count1, average1);
	else
		printf("未输入偶数!\n");
	if (count2)
		printf("奇数的个数是%d,平均值是%.2f\n", count2, average2);
	else
		printf("未输入奇数!\n");
	return 0;
}
/*4、使用if else语句编写一个程序读取输入,读到#停止。用感叹号替换句号,
用两个感叹号替换原来的感叹号,最后报告进行了多少次替换。*/
#include <stdio.h>
int main(void)
{
	char ch;
	int  count = 0;

	printf("请输入字符(标点为英文输入,#停止):\n");
	while ((ch = getchar()) != '#')
	{
		if (ch == '.' )
		{
			putchar('!');
			count++;
		}
		else if (ch == '!')
		{
			putchar('!');
			putchar('!');
			count++;
		}
		else	
			putchar(ch);
	}
	printf("\n");
	printf("替换的次数为count=%d.\n", count);
	return 0;
}
/*5、使用switch语句编写一个程序读取输入,读到#停止。用感叹号替换句号,
用两个感叹号替换原来的感叹号,最后报告进行了多少次替换。*/
#include <stdio.h>
int main(void)
{
	char ch;
	int  count = 0;

	printf("请输入字符(标点为英文输入,#停止):\n");
	while ((ch = getchar()) != '#')
	{
		switch (ch)
		{
		case '.':
		{
			putchar('!');
			count++;
			break;
		}
		case '!':
		{
			putchar('!');
			putchar('!');
			count++;
			break;
		}
		default:
			putchar(ch);
		}

	}
	printf("\n");
	printf("替换的次数为count=%d.\n", count);
	return 0;
}
/*
6、编写程序读取输入,读到#停止,报告ei出现的次数。
注意:
	该程序要记录前一个字符和当前字符,用"Receive your eieio award"这样的输入来测试。
*/
#include<stdio.h>
#define STOP '#'
int main(void)
{
	char ch;
	int count=0;

	printf("请输入字符(#停止):\n");
	while ((ch = getchar()) != STOP)
	{
		if (ch == 'e')
		{
			ch = getchar();
			if (ch == 'i')
				count++;
		}
	}
	printf("ei出现的次数是:%d\n",count);
	return 0;
}
/*
7、编写一个程序,提示用户输入一周工作的小时数,然后打印工资总额、税金和净收入。
做如下假设:
a.基本工资=10.00美元/小时
b.加班(超过40小时)=1.5倍的时间
c.税率: 前300美元为15%
		 续150美元为20%
		 余下的为25%
用#define定义符号常量,不用在意是否符合当前税法。
*/
#include <stdio.h>
#define B_WAGE	10.00	//基本工资
#define	OVERTIME	1.5	//加班
#define TAX_RATE1	0.15 //前300美元的税率
#define TAX_RATE2	0.2 //续150美元的的税率
#define TAX_RATE3	0.25 //余下的税率为25%
#define TAX1	45	//前300美元的税金
#define TAX2	75	//前450美元的税金
int main(void)
{
	double index;//一周工作的小时数
	double  tax;//税金
	double wage;	//工资总额
	double income;//净收入

	printf("请输入一周工作的小时数(精确到小数点后两位):");
	scanf_s("%lf", &index);

		if (index <= 40)
		{
			wage = index*B_WAGE;
			if (wage > 300)
				tax = (wage - 300)*TAX_RATE2 + TAX1;
			else
				tax = wage*TAX_RATE1;
		}
		else
		{
			wage =400+(index-40)*OVERTIME*B_WAGE;
			tax = (wage - 450)*TAX_RATE3 + TAX2;
		}
		income = wage - tax;
	printf("工资总额为:%.2f,净收入:%.2f,税金为:%.2f\n", wage, income, tax);
	if (!index)
		printf("未工作,因此收入为零!\n");
	printf("Done!\n");
	return 0;
}
/*
8、修改练习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>
#include<stdbool.h>

#define	TAX_RATE1	0.15//前300美元的税率
#define TAX_RATE2	0.2//续150美元的税率
#define TAX_RATE3	0.25//超过450美元的税率
#define OVERTIME	1.5//加班(超过40小时)按照1.5倍时间计算
int main(void)
{
	int  num;//用于输入工资等级
	double hours;//用于提示工作小时数
	double wage;//工资等级数额
	double income;//净收入
	double tax;//税金
	double money;//工资总额
	bool puanduan=false;

	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-4:");

	while (scanf_s("%d", &num) == 1 && num != 5)
	{
		if (1 <= num&&num < 5)
		{
			puanduan = true;
			printf("请输入工作时间(小时数):");
			scanf_s("%lf", &hours);
		}
		
		switch (num)
		{
		case 1:
			wage = 8.75;
			break;
		case 2:
			wage = 9.33;
			break;
		case 3:
			wage = 10.00;
			break;
		case 4:
			wage = 11.2;
			break;
		default:
			printf("请输入正确选项!\n");
			break;
		}
		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-4:");

	}
	if (puanduan)
	{
		money = (hours > 40) ? (wage * 40 + (hours - 40)*OVERTIME*wage) : (wage*hours);
		printf("工资总额是%.3lf\n", money);
		if (money <= 300)
			tax = money*TAX_RATE1;
		else if (300 < money&&money <= 450)
			tax = 300 * TAX_RATE1 + (money - 300)*TAX_RATE2;
		else
			tax = 300 * TAX_RATE1 + 150 * TAX_RATE2 + (money - 450)*TAX_RATE3;
		printf("税金是%.3lf\n", tax);
		income = money - tax;
		printf("净收入是%.3lf\n", income);
	}
	printf("Done!\n");

	return 0;
}
/*
9、 编写一个程序,只接受正整数输入,然后显示所有小于或等于该数的素数
*/
#include<stdio.h>
#include<stdbool.h>
int main(void)
{
	int index;
	int i, j;
	bool isprime;

	printf("请输入正整数:");
	while (scanf("%d", &index) == 1)
	{
		if (index == 1)
			printf("这不是素数!\n");
		if (index == 2)
			printf("这是素数!\n");
		for (i = 3; i <= index; i++)
		{
			for (j = 2, isprime = true; j < i; j++)
				if (i%j == 0)
			//printf("%d是素数!\n", i);
					isprime = false;
			if (isprime)
				printf("%d是素数!\n", i);
		}
		printf("请继续输入正整数:");
	}
	printf("BYB!\n");
	return 0;
}
/*
10、1988年的美国联邦税收计划是近代最简单的税收方案。它分为4个类别,每个类别
有两个等级。下面是该税收计划的摘要(美元数应为应征税的收入):
类别		|税金
单身		|17850美元按15%计,超出部分按28%计
户主		|23900美元按15%计,超出部分按28%计
已婚,共有	|29750美元按15%计,超出部分按28%计
已婚,离异	|14875美元按15%计,超出部分按28%计
例如,一位工资为20000美元的单身纳税人,应缴纳税费0.15X17580+(20000-17850)X0.28
美元。编写一个程序,让用户指定缴纳税金的种类和应纳税收入,然后计算税金。
程序应通过循环让用户可以多次输入。
*/
#include <stdio.h>
#define TAX_RATE1 0.15
#define TAX_RATE2 0.28
int main(void)
{
	int index;
	double money;
	double tax;
	double tax_money;

	printf("类别					税金\n");
	printf("1、单身					17850美元按0.15计,超出部分按0.28计\n");
	printf("2、户主					23900美元按0.15计,超出部分按0.28计\n");
	printf("3、已婚,共有			29750美元按0.15计,超出部分按0.28计\n");
	printf("4、已婚,离异			14875美元按0.15计,超出部分按0.28计\n");
	printf("请输入应缴纳税金的类别(1-4):");

	while (scanf_s("%d", &index) == 1)
	{
		printf("请输入应纳税收入:");
		scanf_s("%lf", &money);
		switch (index)
		{
		case 1:
			tax_money = 17850;
			break;
		case 2:
			tax_money = 23900;
			break;
		case 3:
			tax_money = 29750;
			break;
		default:
			tax_money = 14875;
			break;
		}
		tax = (money - tax_money)*TAX_RATE2 + TAX_RATE1*tax_money;
		printf("缴纳税金的种类是:%d,应纳税收入是:%.3lf,税金是:%.3lf\n", index, money, tax);
		
		printf("类别					税金\n");
		printf("1、单身					17850美元按0.15计,超出部分按0.28计\n");
		printf("2、户主					23900美元按0.15计,超出部分按0.28计\n");
		printf("3、已婚,共有			29750美元按0.15计,超出部分按0.28计\n");
		printf("4、已婚,离异			14875美元按0.15计,超出部分按0.28计\n");
		printf("请输入应缴纳税金的类别(1-4):");
	}

	printf("Done!\n");
	return 0;
}
/*
11、ABC邮购杂货店出售的洋蓟售价为2.05美元/磅,甜菜的售价为1.15美元/磅,
胡萝卜的售价为1.09美元/磅。在添加运费之前,超过100美元的订单有5%的打折优惠。
少于或等于5磅的订单收取6.5美元的运费和包装费,5磅~20磅的订单收取14美元的
运费和包装费,超过20磅的订单在14美元的基础上每续重1磅增加0.5美元。编写一个
程序,在循环中用switch语句实现用户输入不同的字母时有不同的响应,即输入a的响应
是让用户输入洋蓟的磅数,b是甜菜的磅数,c是胡萝卜的磅数,q是退出订购。
程序要记录累计的重量。即如果用户输入4磅的甜菜,然后输入5磅的甜菜,程序应
报告9磅的甜菜。然后,该程序要计算货物的总价、折扣(如果有的话)、运费和包装费。
随后,程序应显示所有的购买信息:物品售价、订购的重量(单位:磅)、订购的蔬菜
费用、订单的总费用、折扣(如果有的话)、运费和包装费,以及所有的费用总额。
*/
#include <stdio.h>
int main(void)
{
	double artichoke;//洋蓟
	double artichoke_w = 0;
	double beet;//甜菜
	double beet_w = 0;
	double carrot;//胡萝卜
	double carrot_w = 0;
	double money;//所有的费用总额
	double weight;//订购的重量
	double feiyong;//订购的蔬菜费用
	double zongfeiyong;//订单的总费用
	double yunfei;//运费和包装费
	char ch;
	int num;

	printf("		菜单、售价(美元/磅):\n");
	printf("	a)洋蓟->2.05		b)甜菜->1.15\n");
	printf("	c)胡萝卜->1.09		d)q退出订购\n");
	printf("请输入菜单选项(a-c/q):");
	
		while ((ch = getchar()) != 'q')
		{
			switch (ch)
			{
			case 'a':
				printf("请输入洋蓟的重量(磅):");
				scanf_s("%lf", &artichoke);
				artichoke_w += artichoke;
				break;
			case 'b':
				printf("请输入甜菜的重量(磅):");
				scanf_s("%lf", &beet);
				beet_w += beet;
				break;
			case 'c':
				printf("请输入胡萝卜的重量(磅):");
				scanf_s("%lf", &carrot);
				carrot_w += carrot;
				break;
			default:
				printf("请核对输入选项!\n");
				break;
			}
			printf("请继续输入菜单选项(a-c/q):");
			 getchar();//将存于缓冲区中的回车符读入,避免在后面作为有效字符读入
		}
	
	if (artichoke_w)
		printf("订购的洋蓟的重量(磅):%.2lf\n", artichoke_w);
	if(beet_w)
		printf("订购的甜菜的重量(磅):%.2lf\n", beet_w);
	if(carrot_w)
		printf("订购的胡萝卜的重量(磅):%.2lf\n", carrot_w);
	weight = artichoke_w + beet_w + carrot_w;
	printf("订购的总重量是:%.2lf\n", weight);
	printf("\n");
	printf("		运费和包装费价格表(美元)\n");
	printf("1.少于或等于5磅->6.5			2.5~20磅->14\n");
	printf("3.超过20磅,在14美元的基础上每续重1磅增加0.5美元\n");
	printf("注:按q键退出!\n");
	printf("请根据实际重量输入选项(1-3/q):");
	while (scanf("%d", &num) == 1)
	{
		switch (num)
		{
		case 1:
			yunfei = 6.5;
			printf("运费与包装费为%.3lf美元\n", yunfei);
			break;
		case 2:
			yunfei = 14;
			printf("运费与包装费为%.3lf美元\n", yunfei);
			break;
		case 3:
			yunfei = 14 + (weight - 20)*0.5;
			printf("运费与包装费为%.3lf美元\n",yunfei);
			break;
		default:
			printf("请输入正确选项!\n");
			break;
		}
		printf("请继续输入选项(1-3/q):");
	}
	if (weight)
	{
		feiyong = 2.05*artichoke_w + 1.15*beet_w + 1.09*carrot_w;
		printf("订购蔬菜的费用为:%.3lf美元\n", feiyong);
		if (feiyong >= 100)
		{
			zongfeiyong = feiyong*0.05;
			printf("订单的折扣为5%,订单的总费用为%.3lf美元\n", zongfeiyong);
		}
		zongfeiyong = feiyong;
		printf("订单的总费用为:%.3lf美元\n", zongfeiyong);
		money = zongfeiyong + yunfei;
		printf("所有的费用总和为%.3lf美元\n", money);
	}
	else
		printf("您还未消费,欢迎选购!\n");
	printf("Good Luck!\n");
	return 0;
}
感觉很麻烦,可能后期会更改!

猜你喜欢

转载自blog.csdn.net/weixin_42839965/article/details/89485504