废话不多说,继续上代码。有问题可于评论或私信作者。
/* 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;
}