/*
7.12 编程练习
1.编写一个程序读取输入,读到#字符停止,然后报告读取的空格数、换行符数和所有其他字符的数量。
*/
#include <stdio.h>
int main(void) {
const char 终止='#';
char 字符;
int 空格,行数,其他;
空格=行数=其他=0;
printf("输入一些字符('#' 退出):");
while ((字符=getchar()) != 终止) {
if (字符==' ')
空格++;
else if (字符=='\n')
行数++;
else
其他++;
}
printf("空格=%d, 行数=%d, 其他=%d\n", 空格, 行数, 其他);
return 0;
}
/*
2.编写一个程序读取输入,读到#字符停止。程序要打印每个输入的字符以及对应的ASCII码(十进制)。
每行打印8个“字符-ASCII码”组合。
建议:使用字符计数和求模运算符(%)在每8个循环周期时打印一个换行符。
*/
#include <stdio.h>
int main(void) {
const char 终止 = '#';
char 字符;
int 统计 = 0;
printf("输入一些字符('#' 退出):");
while ((字符 = getchar()) != 终止) {
if (统计++ % 8 == 0)
putchar('\n');
if (字符=='\n')
printf("'\\n' == %3d ", 字符);}
else if (字符=='\t')
printf("'\\t' == %3d ", 字符);}
else
printf("'%c' == %3d ", 字符, 字符);}
}
return 0;
}
/*
3.编写一个程序,读取整数直到用户输入0。
输入结束后,程序应报告用户输入的偶数(不包括0)个数、
这些偶数的平均值、输入的奇数个数及其奇数的平均值。
*/
#include <stdio.h>
int main(void) {
int 整数, 奇数, 偶数, 总偶数, 总奇数;
奇数 = 偶数 = 总偶数 = 总奇数 = 0;
printf("请输入一个整数(0退出):");
while ((scanf("%d", &整数) == 1) && (整数 != 0)) {
if (整数 % 2 == 0) {
偶数++;
总偶数 += 整数;
}
else {
奇数++;
总奇数 += 整数;
}
printf("您可以再次输入(0退出):");
}
printf("偶数:%d个\n", 偶数);
if (偶数 > 0) {
printf("偶数平均值:%g\n", (short)总偶数 / 偶数);
}
printf("奇数:%d个\n", 奇数);
if (奇数 > 0) {
printf("奇数平均值:%g\n", (short)总奇数 / 奇数);
}
printf("完毕。\n");
return 0;
}
/*
4.使用if else语句编写一个程序读取输入,读到#停止。
用感叹号替换句号,用两个感叹号替换原来的感叹号,最后报告进行了多少次替换。
*/
#include <stdio.h>
#define 终止 '#'
int main(void)
{
char 字符;
int 统计 = 0;
printf("输入一些字符(#退出):\n");
while ((字符 = getchar()) != 终止) {
if (字符 == '.') {
putchar('!');
统计++;
}
else if (字符 == '!') {
printf("!!");
统计++;
}
else {putchar(字符);}
}
printf("\n总共替换 %d 次。\n", 统计);
printf("('.'->'!') 或 ('!'->'!!').\n");
return 0;
}
/*
5.使用switch重写练习4。
*/
#include <stdio.h>
#define 终止 '#'
int main(void)
{
char 字符;
int 统计 = 0;
printf("输入一些字符(#退出):\n");
while ((字符 = getchar()) != 终止) {
switch (字符) {
case '.':
putchar('!');
统计++;
break;
case '!':
printf("!!");
统计++;
break;
default: putchar(字符);
}
}
printf("\n总共替换 %d 次。\n", 统计);
printf("('.'->'!') 或 ('!'->'!!').\n");
return 0;
}
/*
6.编写程序读取输入,读到#停止,报告ei出现的次数。
注意-该程序要记录前一个字符和当前字符。用“Receive your eieio award”这样的输入来测试。
*/
#include <stdio.h>
#define 终止 '#'
int main(void)
{
char 字符;
int 统计 = 0;
int 标记 = 0;
printf("输入一些字符(#退出):\n");
while ((字符 = getchar()) != 终止) {
switch (字符) {
case 'e':
标记=1; //↑保存一个出现e的标记;
break;
case 'i':
if (1 == 标记) 统计++; //↑统计ei出现的次数;
标记=0;
break;
default: 标记=0; //↑如果e的下一个字符不是i则清除标记;
}
}
printf("\n共出现%d次ei。\n", 统计);
return 0;
}
/*
7.编写一个程序,提示用户输入一周工作的小时数,然后打印工资总额、税金和净收入。做如下假设:
a.基本工资 = 10.00美元/小时
b.加班(超过40小时) = 1.5倍的时间
c.税率: 前300美元为15%
续150美元为20%
余下的为25%
用#define定义符号常量。不用在意是否符合当前的税法。
*/
#include <stdio.h>
#define 基本工资 10.0f
#define 加班工时 1.5f
#define 基本税率 0.15f
#define 加班税率 0.2f
#define 超出税率 0.25f
int main(void)
{
short 每周工时 = 0.0f;
short 总工资, 税率, 净收入;
printf("输入每周的工作时间:");
while (scanf("%f", &每周工时) != 1 || (每周工时 < 0)) {
while (getchar() != '\n')
continue;
printf("请输入正数:");
}
if (每周工时 <= 30) {
总工资 = 每周工时 * 基本工资;
税率 = 总工资 * 基本税率;
净收入 = 总工资 - 税率;
}
else if (每周工时 <= 40) {
总工资 = 每周工时 * 基本工资;
税率 = 300 * 基本税率 + (总工资 - 300) * 加班税率;
净收入 = 总工资 - 税率;
}
else {
总工资 = (40 + (每周工时 - 40) * 加班工时) * 基本工资;
if (总工资 <= 450)
税率 = 300*基本税率 + (总工资-300)*加班税率;
else
税率 = 300*基本税率 + 150*加班税率 + (总工资-450)*超出税率;
净收入 = 总工资 - 税率;
}
printf("总工资(税前): %g美元\n", 总工资);
printf("税率: %g美元\n", 税率);
printf("净收入(税后): %gm美元\n", 净收入);
return 0;
}
/*
8.修改练习7的假设a,让程序可以给出一个供选择的工资等级菜单。
使用switch完成工资等级选择。运行程序后,显示的菜单应该类似这样:
*****************************************************************
输入所需工资率或操作对应的数字:
1) 8.75美元/小时 2) 9.33美元/小时
3) 10.00美元/小时 4) 11.20美元/小时
5) 退出
*****************************************************************
如果选择1~4其中的一个数字,程序应该询问用户工作的小时数。
程序要通过循环运行,除非用户输入5。如果输入1~5以外的数字,
程序应提醒用户输入正确的选项,然后再重复显示菜单提示用户输入。
使用#define创建符号常量表示各工资等级和税率。
*/
#include <stdio.h>
#include <ctype.h>
#define 加班工时 1.5f
#define 基本税率 0.15f
#define 加班税率 0.2f
#define 超出税率 0.25f
int 显示菜单(void);
void 显示工资(short 基本工资, short 每周工时);
int 获取数字(void);
void 剔除行余(void);
int main(void)
{
int 数字;
short 统计;
while ((数字 = 显示菜单()) != 5) {
printf("输入每周的工作时间:");
while (scanf("%f", &统计)!=1 || (统计<0)) {
剔除行余();
printf("输入一个正数:");
}
剔除行余();
switch (数字) {
case 1:
显示工资(8.75f, 统计);
break;
case 2:
显示工资(9.33f, 统计);
break;
case 3:
显示工资(10.00f, 统计);
break;
case 4:
显示工资(11.20f, 统计);
break;
}
putchar('\n');
}
printf("完毕!\n");
return 0;
}
int 获取数字(void) {
int 数字;
scanf("%d", &数字);
剔除行余();
return 数字;
}
void 剔除行余(void) {
while (getchar() != '\n')
continue;
return;
}
int 显示菜单(void) {
int 数字;
printf("**************************************\n");
printf("输入与所需工资率或操作对应的数字:\n");
printf("1) 8.75美元/小时 \t\t 2) 9.33美元/小时\n");
printf("3) 10.00美元/小时 \t\t 4) 11.20美元/小时\n");
printf("5) 退出\n");
printf("**************************************\n");
printf("您选择了:");
数字 = 获取数字();
while (数字!=1 && 数字!=2 && 数字!=3 && 数字!=4 && 数字!=5) {
printf("请输入 1、2、3、4 或 5:");
数字 = 获取数字();
}
return 数字;
}
void 显示工资(short 基本工资, short 每周工时) {
short 总工资, 税率, 净收入;
if (每周工时 <= 30) {
总工资 = 每周工时 * 基本工资;
税率 = 总工资 * 基本税率;
净收入 = 总工资 - 税率;
}
else if (每周工时 <= 40) {
总工资 = 每周工时 * 基本工资;
税率 = 300 * 基本税率 + (总工资 - 300) * 加班税率;
净收入 = 总工资 - 税率;
}
else {
总工资 = (40 + (每周工时 - 40) * 加班工时) * 基本工资;
if (总工资 <= 450)
税率=300*基本税率+(总工资-300)*加班税率;
else
税率=300*基本税率+150*加班税率+(总工资-450)*超出税率;
净收入 = 总工资 - 税率;
}
printf("总工资(税前):%g美元\n", 总工资);
printf("税率:%g美元\n", 税率);
printf("净收入(税后):%g美元\n", 净收入);
return;
}
/*
9.编写一个程序,只接受正整数输入,然后显示所有小于或等于该数的素数。
*/
#include <stdio.h>
#include <数学模块>
int main(void)
{
int i, j, 数字, 标记;
printf("请输入一个数字(<= 0 退出):");
while (scanf("%d", &数字) == 1 && (数字 > 0)) {
if (数字 == 1) {
printf("1 不是素数!\n");
printf("您可以再次输入(<= 0 退出):");
continue;
}
printf("这些是素数(<= %d):\n", 数字);
遍历循环 (i = 2; i <= 数字; i++) {
标记 = 1; // 下面的sqrt()是求平方函数
遍历循环 (j = 2; j <= 求平方(i); j++) {
if (i % j == 0) {
标记 = 0;
break;
}
}
if (标记) printf("%-3d", i);
}
printf("\n您可以再次输入(<= 0 退出):");
}
printf("完毕!\n");
return 0;
}
/*
10.1988年的美国联邦税收计划是近代最简单的税收方案。
它分为4个类别,每个类别有两个等级。下面是该税收计划的摘要(美元数为应征税的收入):
类别 税金
单身 17850美元按15%计,超出部分按28%计
户主 23900美元按15%计,超出部分按28%计
已婚共有 29750美元按15%计,超出部分按28%计
已婚离异 14875美元按15%计,超出部分按28%计
例如,一位工资为20000美元的单身纳税人,应缴纳税费0.15×17850+0.28×(20000−17850)美元。
编写一个程序,让用户指定缴纳税金的种类和应纳税收入,然后计算税金。
程序应通过循环让用户可以多次输入。
*/
#include <stdio.h>
#define 单身税点 17850
#define 户主税点 23900
#define 已婚税点 29750
#define 离婚税点 14875
#define 费率1 0.15
#define 费率2 0.28
int main(void)
{
int 数字;
double 工资, 税金;
while (1) {
printf("********************************\n");
printf("1)单身\n");
printf("2)户主\n");
printf("3)已婚\n");
printf("4)离婚\n");
printf("5)退出\n");
printf("********************************\n");
printf("请您选择:");
while (scanf("%d",&数字)!=1 || (数字>5 || 数字<1)) {
while (getchar() != '\n')
continue;
printf("请选择输入 1、2、3、4 或 5:");
}
if (数字 != 5) {
printf("请输入您的工资:");
scanf("%lf", &工资);
}
if (1 == 数字) {
if (工资 <= 单身税点)
税金 = 工资 * 费率1;
else
税金 = 单身税点 * 费率1 + (工资 - 单身税点) * 费率2;
printf("您应纳税: %g\n\n", 税金);
}
else if (2 == 数字) {
if (工资 <= 户主税点)
税金 = 工资 * 费率1;
else
税金 = 户主税点 * 费率1 + (工资 - 户主税点) * 费率2;}
printf("您应纳税: %g\n\n", 税金);
}
else if (3 == 数字) {
if (工资 <= 已婚税点)
税金 = 工资 * 费率1;
else
税金 = 已婚税点 * 费率1 + (工资 - 已婚税点) * 费率2;
printf("您应纳税: %g\n\n", 税金);
}
else if (4 == 数字) {
if (工资 <= 离婚税点)
税金 = 工资 * 费率1;
else
税金 = 离婚税点 * 费率1 + (工资 - 离婚税点) * 费率2;
printf("您应纳税: %g\n\n", 税金);
}
else if (5 == 数字)
break;
}
printf("完毕!\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是甜菜的磅数,字符是萝卜的磅数,q是退出订购。
程序要记录累计的重量。即,如果用户输入4磅的甜菜,然后输入5磅的甜菜,程序应报告9磅的甜菜。
然后,该程序要计算货物总价、折扣(如果有的话)、运费和包装费。随后,程序应显示所有的购买信息:
物品售价、订购的重量(单位:磅)、订购的蔬菜费用、订单的总费用、折扣(如果有的话)、运费和包装费,
以及所有的费用总额。
*/
#include <stdio.h>
#include <ctype.h>
int main(void) {
const double 洋葱价 = 2.05;
const double 甜菜价 = 1.15;
const double 萝卜价 = 1.09;
const double 折扣率 = 0.05;
const double 在5斤内 = 6.50;
const double 在20斤内 = 14.00;
const double 超出20斤 = 14.00;
const double 打包费 = 0.50;
char 字符;
double 洋葱重,甜菜重,萝卜重,需求,总重;
洋葱重=甜菜重=萝卜重=0;
double 洋葱成本,甜菜成本,萝卜成本;
double 总成本,总费用,批发价,运费;
printf("输入a买洋葱,b买甜菜,c买萝卜,q退出:");
// tolower()函数 转换成小写字母
while ((字符 = tolower(getchar())) != 'q') {
if (isspace(字符)) // isspace()测是否空白符
continue;
while (getchar() != '\n')
continue;
switch (字符) {
case 'a':
printf("输入洋葱数量(斤): ");
scanf("%lf", &需求);
洋葱重 += 需求;
break;
case 'b':
printf("输入甜菜数量(斤): ");
scanf("%lf", &需求);
甜菜重 += 需求;
break;
case 'c':
printf("输入萝卜数量(斤): ");
scanf("%lf", &需求);
萝卜重 += 需求;
break;
default:
printf("%c不是一个有效的选择。\n", 字符);
}
printf("输入a买洋葱,b买甜菜,c买萝卜,q退出:");
}
洋葱成本 = 洋葱价 * 洋葱重;
甜菜成本 = 甜菜价 * 甜菜重;
萝卜成本 = 萝卜价 * 萝卜重;
总成本 = 洋葱成本 + 甜菜成本 + 萝卜成本;
总重 = 洋葱重 + 甜菜重 + 萝卜重;
if (总重 <= 0)
运费 = 0.0;
else if (总重 < 5.0)
运费 = 在5斤内;
else if (总重 < 20.0)
运费 = 在20斤内;
else
运费 = 超出20斤 + 打包费 * 总重;
if (总成本 > 100.0)
批发价 = 折扣率 * 总成本;
else
批发价 = 0.0;
总费用 = 总成本 + 运费 - 批发价;
printf("您的订单:\n");
printf("%.2f斤洋葱,每斤%.2f元,总共:%.2f元\n",
洋葱重,洋葱价,洋葱成本);
printf("%.2f斤甜菜,每斤%.2f元,总共:%.2f元\n",
甜菜重,甜菜价,甜菜成本);
printf("%.2f斤萝卜,每斤%.2f元,总共:%.2f元\n",
萝卜重,萝卜价,萝卜成本);
printf("蔬菜总成本:%.2f\n", 总成本);
if (总成本 > 100)
printf("批发价:%.2f\n", 批发价);
printf("运费:%.2f\n", 运费);
printf("总费用:%.2f\n", 总费用);
return 0;
}
C语言 第7章 编程练习
于 2022-05-16 08:43:40 首次发布
本章节深入探讨C语言编程,通过一系列蓝桥杯竞赛相关的练习题,提升编程技巧。涵盖基础语法、逻辑控制、函数应用等多个方面,适合初学者巩固知识并为参赛做准备。
摘要由CSDN通过智能技术生成