由于是自己做的,所以可能会出现小错误以及写的不够好的地方 ,欢迎交流~(=´ω`=)
文章目录
7-1 报告读取的空格数、换行符数和所有其他字符的数量
#include <stdio.h>
//题意好像是要求除去空格和换行之后其他字符的数量
//我一开始以为是所有字符了,不过不想改了……
int main(void) {
int blk = 0;//空格数
int n_num = 0;//换行符
int all_al = 0;//所有字符
char ch;
printf("请输入字符串,以#作为结尾:");
while ((ch = getchar()) != '#') {
all_al++;
if (ch == ' ')
blk++;
else if (ch == '\n')
n_num++;
}
printf("%d个字符中,有%d个空格,%d个换行符。", all_al, blk, n_num);
return 0;
}
7-2 打印8个“字符-ASCII码”组合
#include <stdio.h>
int main(void) {
char ch;
int count = 0;
printf("请输入字符串,以#作为结尾:");
while ((ch = getchar()) != '#') {
count++;
printf("%c-%d ", ch, ch);
if (count % 8 == 0) {
printf("\n");
}
}
return 0;
}
7-3 报告奇数偶数的个数与平均值
#include <stdio.h>
int main(void) {
int num;
int odd = 0;//奇数
int even = 0;//偶数
int sum_even = 0;
int sum_odd = 0;
float average_odd = 0;
float average_even = 0;
printf("请输入一组整数,以空格为间隔,以0作为结尾:");
while (scanf("%d", &num) == 1) {
if (num == 0)
break;
if (num % 2 == 0) {
even++;
sum_even += even;
}
else {
odd++;
sum_odd += odd;
}
}
average_even = sum_even / even;
average_odd = sum_odd / odd;
printf("总共有%d个偶数(不包括0),其平均数为%.3f。\n总共有%d个奇数,其平均数为%.3f。", even, average_even, odd, average_odd);
return 0;
}
7-4 替换符号
#include <stdio.h>
int main(void) {
int count = 0;
char ch;
printf("请输入字符串(包含.以及!),以#作为结尾:");
while ((ch = getchar()) != '#') {
if (ch == '.') {
count++;
putchar('!');
continue;
}
if (ch == '!') {
count++;
putchar('!');
putchar('!');//putchar一次只能一个字符
continue;
}
putchar(ch);
}
printf("\n总共进行了%d此替换", count);
return 0;
}
7-5 switch重写7-4
#include <stdio.h>
int main(void) {
int count = 0;
char ch;
printf("请输入字符串(包含.以及!),以#作为结尾:");
while ((ch = getchar()) != '#') {
switch (ch) {
case '.':
count++;
putchar('!');
break;
case '!':
count++;
putchar('!');
putchar('!');
break;
default:
putchar(ch);
break;
}
}
printf("\n总共进行了%d此替换", count);
return 0;
}
7-6 报告ei出现的次数
#include <stdio.h>
int main(void) {
char former, present;
int count = 0;
printf("请输入字符串(以#作为结尾):");
while ((present = getchar()) != '#') {
if ( present == 'i' && former == 'e') {//former必须放在后面
count++;
}
former = present;
}
printf("该字符串中ei出现的次数为%d", count);
return 0;
}
7-7 计算工资-1
#include <stdio.h>
#define BASE_REVENUE 10
#define TAX_RATE_300 0.15
#define TAX_RATE_450 0.2
#define TAX_RATE_REST 0.25
int main(void) {
float work_time = 0;
double revenue = 0;//总收入
double tax_num = 0;//税金
double new_revenue = 0;
float add_time = 0;//加班时间
printf("请输入一周工作多少小时:");
scanf("%f", &work_time);
if (work_time <= 40) {
revenue = work_time * BASE_REVENUE;
if (revenue <= 300) {
tax_num = revenue * TAX_RATE_300;
new_revenue = revenue - tax_num;
}
else if (revenue > 300) {//一定不会超过400
tax_num = 300 * TAX_RATE_300 + (revenue - 300) * TAX_RATE_450;
new_revenue = revenue - tax_num;
}
}
else {//有加班时间
add_time = work_time - 40;
revenue = (40 + add_time * 1.5) * BASE_REVENUE;
if (revenue <= 450 && revenue > 300) {//一定超过300
tax_num = 300 * TAX_RATE_300 + (revenue - 300) * TAX_RATE_450;
new_revenue = revenue - tax_num;
}
else if (revenue > 450) {
tax_num = 300 * TAX_RATE_300 + 150 * TAX_RATE_450 + (revenue - 450) * TAX_RATE_REST;
new_revenue = revenue - tax_num;
}
}
printf("您这周工作%.2f小时,工资总额为%.3lf,其中税金为%.3lf,最后净收入为%.3lf。", work_time, revenue,tax_num, new_revenue);
return 0;
}
7-8 计算工资-2
#include <stdio.h>
#define BASE_REVENUE_1 8.75
#define BASE_REVENUE_2 9.33
#define BASE_REVENUE_3 10.00
#define BASE_REVENUE_4 11.20
#define TAX_RATE_300 0.15
#define TAX_RATE_450 0.2
#define TAX_RATE_REST 0.25
double Revenue(float work_time, float base_revenue);
double Tax(double revenue);
double NI(double revenue, double tax_num);
int main(void) {
int choice;
float work_time = 0;
double revenue_tol = 0;
double tax_tol = 0;
double net_revenue = 0;
int flag = 1;
while (flag) {
//显示菜单
printf("*****************************************************************\n");
printf("Enter the number correspomding to the desired pay rate or action;\n");
printf("1)$8.75/hr\t\t\t\t2)$9.33/hr\n");
printf("3)$10.00/hr\t\t\t\t4)$11.20/hr\n");
printf("5)quit\n");
printf("*****************************************************************\n");
//接收用户输入
scanf("%d", &choice);
if (choice == 1 || choice == 2 || choice == 3 || choice == 4) {
//询问用户工作时间
printf("请输入一周工作多少小时:");
scanf("%f", &work_time);
}
//switch进行选择
switch (choice) {
case 1:
revenue_tol = Revenue(work_time, BASE_REVENUE_1);//基本工资为选项1时的工资总额
break;
case 2:
revenue_tol = Revenue(work_time, BASE_REVENUE_2);//基本工资为选项2时的工资总额
break;
case 3:
revenue_tol = Revenue(work_time, BASE_REVENUE_3);//基本工资为选项3时的工资总额
break;
case 4:
revenue_tol = Revenue(work_time, BASE_REVENUE_4);//基本工资为选项4时的工资总额
break;
case 5:
flag = 0;
break;
default:
printf("请输入正确的选项!\n");
while ((choice = getchar()) != '\n' && choice != EOF) {
;
}
break;
//由于scanf接收数字,因此若输入字符,则读取失败,进入default
//而scanf是从缓冲区拿取数据,原先的字符没有被读取,一直保存在缓存区,因此一直读取失败进入default,造成死循环
//此处的while可以把字符吃掉(读取但什么也不干),使下次读取前,缓冲区为空
}
if (choice == 1 || choice == 2 || choice == 3 || choice == 4) {
tax_tol = Tax(revenue_tol);//税金
net_revenue = NI(revenue_tol, tax_tol);//净收入
printf("您这周工作%.2f小时,工资总额为%.3lf,其中税金为%.3lf,最后净收入为%.3lf。\n", work_time, revenue_tol, tax_tol, net_revenue);
}
}
printf("Done!");
return 0;
}
double Revenue(float work_time, float base_revenue) {
double revenue = 0;
if (work_time <= 40) {//小于40小时,收入为时间*基本工资
revenue = work_time * base_revenue;
}
else {//大于40小时,收入为40*基本工资+加班时间*1.5*基本工资
revenue = 40 * base_revenue + (work_time - 40) * 1.5 * base_revenue;
}
return revenue;
}
double Tax(double revenue) {
double tax_num = 0;
if (revenue <= 300) {
tax_num = revenue * TAX_RATE_300;
}
else if (revenue > 300 && revenue <= 450) {
tax_num = 300 * TAX_RATE_300 + (revenue - 300) * TAX_RATE_450;
}
else {
tax_num = 300 * TAX_RATE_300 + 150 * TAX_RATE_450 + (revenue - 450) * TAX_RATE_REST;
}
return tax_num;
}
double NI(double revenue, double tax_num) {
double new_revenue = 0;
new_revenue = revenue - tax_num;
return new_revenue;
}
7-9 统计素数
#include <stdio.h>
int main(void) {
int num;
int flag = 0;
printf("请输入正整数:");
while ((scanf("%d", &num)) == 1) {//必须输入整数
//若小于等于0
if (num <= 0) {
printf("输入有误!请输入正整数:");
}
//若为1,无素数
if (num == 1) {
printf("无素数。");
}
else {//大于2,有素数。判断有几个素数
for (int i = 2; i <= num; i++) {
for (int j = 2; j <= i; j++) {
if (i % j == 0 && j != i) {
flag = 1;
break;
}
}
if (flag == 0) {
printf("%d ", i);
}
flag = 0;
}
}
printf("\n请输入正整数(输入q退出程序):");
}
printf("\nDone!");
return 0;
}
7-10 计算税金
#include <stdio.h>
#define BASE_1 17850
#define BASE_2 23900
#define BASE_3 29750
#define BASE_4 14875
#define BASE_RATE 0.15
#define OVER_RATE 0.28
double TAX(long revenue,long base);
int main(void) {
int choice;
long revenue_tol;
double tax_tol = 0;
int flag = 1;
while (flag) {
//显示菜单
printf("*******************************************************\n");
printf("类别\t\t\t税金\n");
printf("(1)单身\t\t\t17850美元按15%计,超出部分按28%计\n");
printf("(2)户主\t\t\t23900美元按15%计,超出部分按28%计\n");
printf("(3)已婚,共有\t\t29750美元按15%计,超出部分按28%计\n");
printf("(4)已婚,离异\t\t14875美元按15%计,超出部分按28%计\n");
printf("(5)退出程序\n");
printf("*******************************************************\n");
printf("请输入符合的选项:");
scanf("%d", &choice);
if (choice == 1 || choice == 2 || choice == 3 || choice == 4) {
printf("请输入应纳税收入:");
scanf("%ld", &revenue_tol);
}
switch (choice) {
case 1:
tax_tol = TAX(revenue_tol, BASE_1);
break;
case 2:
tax_tol = TAX(revenue_tol, BASE_2);
break;
case 3:
tax_tol = TAX(revenue_tol, BASE_3);
break;
case 4:
tax_tol = TAX(revenue_tol, BASE_4);
break;
case 5:
flag = 0;
break;
default:
printf("输入有误!请输入1-5的数字!\n");
while ((choice = getchar()) != '\n' && choice != EOF) {
;
}
break;
}
if (choice == 1 || choice == 2 || choice == 3 || choice == 4) {
printf("您应缴税金为:%.3lf美元。\n", tax_tol);
}
}
printf("Done!");
return 0;
}
double TAX(long revenue,long base) {
double tax_num = 0;
if (revenue <= base) {
tax_num = revenue * BASE_RATE;
}
else {
tax_num = base * BASE_RATE + (revenue - base) * OVER_RATE;
}
return tax_num;
}
7-11 计算订单费用
#include <stdio.h>
#define Y_PRICE 2.05
#define T_PRICE 1.15
#define H_PRICE 1.09
#define DISCOUNT 0.05
#define WEI_P_1 6.5
#define WEI_P_2 14
#define WEI_P_OVER_3 0.5
double Price_tol(float price,double weight);
int main(void) {
int flag = 1;
int discount = 0;
char choice;
double weight_1 = 0;
double weight_2 = 0;
double weight_3 = 0;
double total_weight = 0;
double total_price = 0;
double wei_price = 0;
double total_money = 0;
//显示菜单
while (flag) {
double temp_1 = 0;
double temp_2 = 0;
double temp_3 = 0;
printf("*****************************\n");
printf("类别\t\t售价(美元)\n");
printf("a.洋蓟\t\t2.05\n");
printf("b.甜菜\t\t1.15\n");
printf("c.胡萝卜\t1.09\n");
printf("q.退出订购\n");
printf("*****************************\n");
printf("请输入对应的选项:");
scanf("%c", &choice);
//选择
switch (choice) {
case 'a':
temp_1 = weight_1;
printf("请输入洋蓟的重量:");
scanf("%lf", &weight_1);
weight_1 = temp_1 + weight_1;
break;
case 'b':
temp_2 = weight_2;
printf("请输入甜菜的重量:");
scanf("%lf", &weight_2);
weight_2 = temp_2 + weight_2;
break;
case 'c':
temp_3 = weight_3;
printf("请输入胡萝卜的重量:");
weight_3 = temp_3 + weight_3;
break;
case 'q':
flag = 0;
break;
default:
printf("输入有误!请重新输入正确的选项!\n");
break;
}
while ((choice = getchar()) != '\n' && choice != EOF) {
;
}
}
while (flag == 0) {//flag == 0说明已经订购完毕
//计算蔬菜价格
double temp_price = 0;
if (weight_1 > 0) {//如果有订购洋蓟,则计算
temp_price = Price_tol(Y_PRICE, weight_1);//计算单项目蔬菜价格
total_price = total_price + temp_price;//计算所有蔬菜价格
}
if (weight_2 > 0) {
temp_price = Price_tol(T_PRICE, weight_2);
total_price = total_price + temp_price;
}
if (weight_3 > 0) {
temp_price = Price_tol(H_PRICE, weight_3);
total_price = total_price + temp_price;
}
//计算运费及包装费
total_weight = weight_1 + weight_2 + weight_3;
if (total_weight <= 5 && total_weight > 0) {
wei_price = WEI_P_1;
}
else if (total_weight > 5 && total_weight <= 20) {
wei_price = WEI_P_2;
}
else if (total_weight > 20) {
wei_price = WEI_P_2 + (total_weight - 20) * WEI_P_OVER_3;
}
//计算总价
if (total_price >= 100) {
wei_price = wei_price * (1 - DISCOUNT);
discount = 1;
}
total_money = total_price + wei_price;
printf("****************************************************************************\n");
printf("订单的总费用\t折扣\t运费和包装\t费用总计\n");
printf("%.3lf\t\t%d\t%.3lf\t\t%.3lf\n", total_price, discount, wei_price, total_money);
printf("****************************************************************************\n");
flag = 1;
//对最后显示结果做了点更改,每种蔬菜单列有点麻烦不想弄了
}
return 0;
}
double Price_tol(float price,double weight) {
double tol_price = 0;
tol_price = price * weight;
return tol_price;
}