7.1
编写一个程序读取输入,读到#字符停止,然后报告空格数、换行符数和其他字符的数量
#include <stdio.h>
#define STOP '#'
int main(void)
{
int space = 0; //空格数量
int line = 0; //换行符数量
int ch = 0; //其他字符数量
char c; //输入的字符
printf("Enter text( '#' to Stop ):>");
while ((c = getchar()) != STOP)
{
ch++; //先计算所有字符数量
if (c == '\n')
line++;
if (c == ' ')
space++;
}
ch = ch - space - line; //所有字符数 - 空格数 - 换行数 = 其他字符数
printf("Spaces = %d, Lines = %d, Others = %d\n", space, line, ch);
return 0;
}
7.2
编写一个程序,读到#为止,程序打印每个输入的字符和所对应的ASCII码(十进制),每行打印8个“字符 - ASCII码”组合
#include <stdio.h>
#define STOP '#'
int main(void)
{
int i = 0;
char c = 0;
printf("Enter text( '#' to STOP ):>");
while ((c = getchar()) != STOP)
{
if (i % 8 == 0 && i != 0)
printf("\n");
i++;
printf("%c-%d\t", c, c);
}
return 0;
}
7.3
编写一个程序,读取整数直到用户输入0,输入结束后,程序报告用户输入的偶数个数(不包括0)、这些偶数的平均值、输入的奇数个数、这些奇数的平均值
#include <stdio.h>
int main(void)
{
int num = 0; //输入的数
int evens = 0; //偶数个数
float average_even = 0; //偶数平均值
int odds = 0; //奇数个数
float average_odd = 0; //奇数平均值
printf("Enter the numbers( 0 to STOP):>");
while (scanf_s("%d", &num) == 1)
{
if (num == 0)
break;
if ((num % 2) == 0)
{
evens++;
average_even += num; //先计算偶数的和
}
if ((num + 1) % 2 == 0)
{
odds++;
average_odd += num;
}
}
printf("The evens are: %d\tThe average of even is: %f\nThe odds are: %d\tThe average of odd is: %f\n", evens, (average_even / evens), odds, (average_odd / odds));
return 0;
}
7.4
使用 if else 编写一个程序读取输入,读到#为止,用感叹号代替句号,用两个感叹号代替原本的感叹号,输出替换后的文本,最后报告替换了多少次
#include <stdio.h>
#define STOP '#'
int main(void)
{
int replacements = 0;
char c;
printf("Enter text( '#' to STOP):>");
while ((c = getchar()) != STOP)
{
if (c == '.')
{
replacements++;
printf("!");
continue;
}
if (c == '!')
{
replacements++;
printf("!!");
continue;
}
printf("%c", c);
}
printf("\nReplacements are: %d\n", replacements);
return 0;
}
7.5
用switch编写7.4
#include <stdio.h>
#define STOP '#'
int main(void)
{
int replacements = 0;
char c;
printf("Enter text( '#' to STOP):>");
while ((c = getchar()) != STOP)
{
switch (c)
{
case '.':
replacements++;
printf("!");
break;
case '!':
replacements++;
printf("!!");
break;
default:
printf("%c", c);
break;
}
}
printf("\nReplacements are: %d\n", replacements);
return 0;
}
7.6
编写程序读取输入,读到#为止,报告ei出现的次数
#include <stdio.h>
#define STOP '#'
int main(void)
{
int ei = 0;
char c = 0;
printf("Enter text( '#' to STOP):>");
while ((c = getchar()) != STOP)
{
if (c == 'e')
{
c = getchar();
if (c == STOP) //此处再做判断,避免读取到‘e#’无法停止
break;
if (c == 'i')
ei++;
}
}
printf("The number of 'ei' is %d\n", ei);
return 0;
}
7.7
编写一个程序,输入一周的小时数,打印工资总额、税金、净收入
a.基本工资 = 10元/小时
b.加班(超过40小时) = 1.5倍的时间
c.税率:<300元 = 15%;300< <450 = 20%;>450 = 25%
#include <stdio.h>
#define WAGE 10 //基本工资
#define RATE1 0.15
#define RATE2 0.2
#define RATE3 0.25
int main(void)
{
float salary = 0; //总工资(含税收
int hour = 0; //工作时间
float tax = 0; //税收
float income = 0; //收入
printf("Enter work-hours:>");
scanf_s("%d", &hour);
if (hour > 40)
salary = hour * WAGE + (hour - 40) * 1.5 * WAGE;
else
salary = hour * WAGE;
if (salary <= 300)
tax = salary * RATE1;
else if (salary >= 300 && salary <= 450)
tax = 300 * RATE1 + (salary - 300) * RATE2;
else
tax = 300 * RATE1 + 150 * RATE2 + (salary - 450) * RATE3;
income = salary - tax;
printf("SALARY: %f\n TAX: %f\nINCOME: %f\n", salary, tax, income);
return 0;
}
7.8 ( 暂时解法
修改7.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
××××××××××××××××××××××××××××××××××××××××××××××××××
输入5退出,输入其他数字提醒重新输入
#include <stdio.h>
#define RATE1 0.15
#define RATE2 0.2
#define RATE3 0.25
int main(void)
{
float salary = 0; //总工资(含税收
int hour = 0; //工作小时数
float tax = 0; //税收
float income = 0; //收入
float wage = 0; //基本工资
int option = 0; //基本工资选项
char choice; //“是否重新计算”选项
while (1)
{
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\n");
printf("Enter your option:>");
scanf_s("%d", &option);
switch (option)
{
case 1:
wage = 8.75;
break;
case 2:
wage = 9.33;
break;
case 3:
wage = 10.00;
break;
case 4:
wage = 11.20;
break;
case 5:
return 0;
default:
printf("Please enter the correct options\n\n");
continue;
}
printf("Enter work-hours:>");
scanf_s("%d", &hour);
if (hour > 40)
salary = hour * wage + (hour - 40) * 1.5 * wage;
else
salary = hour * wage;
if (salary <= 300)
tax = salary * RATE1;
else if (salary >= 300 && salary <= 450)
tax = 300 * RATE1 + (salary - 300) * RATE2;
else
tax = 300 * RATE1 + 150 * RATE2 + (salary - 450) * RATE3;
income = salary - tax;
printf("SALARY: %f\n TAX: %f\nINCOME: %f\n\n", salary, tax, income);
while (1)
{ //判断是否还要重新计算
//此处会有错误,不运行scanf_s就直接进行下一步,可以把这个循环删去
printf("Whether to recalculate<Y/N>:>");
scanf_s("%c", &choice, 1);
if (choice == 'N' || choice == 'n')
return 0;
else if (choice == 'Y' || choice == 'y')
break;
else
printf("Please enter the correct options\n\n");
}
}
return 0;
}
7.9
编写一个程序,只接受正整数输入,然后显示所有小于或等于该数的素数
#include <stdio.h>
int main(void)
{
int num; //用户输入的数
int i; // <= num的数
int j; // <= i的数(除数)
while (1)
{
printf("Enter a number( >0 ):>");
scanf_s("%d", &num);
if (num > 0)
break;
printf("Please re-enter\n");
}
for (i = 1; i < num + 1; i++)
{
for (j = 2; j < i + 1; j++)
{
if (j == i)
printf("%d ", i);
//此时的 i 没有被除了1和 i 自身整除,为素数
if (i % j == 0)
break;
//i 被整除,若除数 < i,则 i 不是素数
}
}
return 0;
}
7.10
美国税收有4种类型,如下:
单身:17850美元及以内按15%计算,超出部分按28%计算
户主:23900美元及以内按15%计算,超出部分按28%计算
已婚,共有:29750美元及以内按15%计算,超出部分按28%计算
已婚,离异:14875美元及以内按15%计算,超出部分按28%计算
编写一个程序,让用户指定缴纳税金的种类和收入,然后计算税金
#include <stdio.h>
int main(void)
{
int option;
int boundary; //税率变化的界限
float salary; //收入
float tax; //税收
while (1)
{
printf("1)单身----------17850美元及以内按 15% 计算,超出部分按 28% 计算\n");
printf("2)户主----------23900美元及以内按 15% 计算,超出部分按 28% 计算\n");
printf("3)已婚,共有----29750美元及以内按 15% 计算,超出部分按 28% 计算\n");
printf("4)已婚,离异----14875美元及以内按 15% 计算,超出部分按 28% 计算\n");
printf("5)退出-----------------------------------------------------\n");
printf("Enter your option:>");
scanf_s("%d", &option);
switch (option)
{
case 1:
boundary = 17850;
break;
case 2:
boundary = 23900;
break;
case 3:
boundary = 29750;
break;
case 4:
boundary = 14875;
break;
case 5:
return 0;
default:
printf("Please re-enter\n\n");
continue;
}
printf("Enter your salary:>");
scanf_s("%f", &salary);
if (salary > boundary)
{
tax = boundary * 0.15 + (salary - boundary) * 0.28;
printf("Your tax are: %f\n\n", tax);
continue;
}
tax = boundary * 0.15;
printf("Your tax are: %f\n\n", tax);
}
return 0;
}
7.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是退出订购。程序要记录累积的磅数,然后要计算货物的总价、折扣、运费,随后打印出所有购买信息:物品售价、订购的磅数、订购的蔬菜费用、订单的总费用、折扣、运费、及最后需要支付的价格
#include <stdio.h>
#include <Windows.h>
int main(void)
{
int m; //任意一种蔬菜磅数
int m_arti = 0, m_beet = 0, m_carr = 0; //每种蔬菜的磅数
int pounds = 0; //总磅数
float dis = 0; //折扣
int fre = 0; //运费
float vege = 0; //订购蔬菜的总费用
float cost = 0; //总费用
float c_arti = 0, c_beet = 0, c_carr = 0; //每种蔬菜的费用
char option = 1;
while (option != 'q')
{
system("cls"); //清屏
printf("---------------ABC---------------\n");
printf(" a)洋蓟 $2.05/LB\n");
printf(" b)甜菜 $1.15/LB\n");
printf(" c)胡萝卜 $1.09/LB\n");
printf(" q)下单\n");
printf("---------------ABC---------------\n\n");
printf("输入你要购买的蔬菜:>");
scanf_s("%c", &option, 1);
switch (option)
{
case 'a':
printf("输入购买磅数:>");
scanf_s("%d", &m);
m_arti += m;
pounds += m;
c_arti += (m * 2.05);
continue;
case 'b':
printf("输入购买磅数:>");
scanf_s("%d", &m);
m_beet += m;
pounds += m;
c_beet += (m * 1.15);
continue;
case 'c':
printf("输入购买磅数:>");
scanf_s("%d", &m);
m_carr += m;
pounds += m;
c_carr += (m * 1.09);
continue;
case 'q':
continue;
default:
printf("出错,请重新输入正确选项\n");
continue;
}
}
system("cls");
vege = c_arti + c_beet + c_carr;
if (vege >= 100)
dis = vege * 0.05;
if (pounds <= 5)
fre = 6.5;
else if (pounds > 5 && pounds <= 20)
fre = 14;
else
fre = 14 + fre - 20;
cost = vege + fre - dis;
printf("--------------ABC--------------\n");
printf(" 洋蓟 LB %-5d $ %-5.2f\n", m_arti, c_arti);
printf(" 甜菜 LB %-5d $ %-5.2f\n", m_beet, c_beet);
printf(" 胡萝卜 LB %-5d $ %-5.2f\n", m_carr, c_carr);
printf("-------------------------------\n");
printf(" 总计 LB %-5d $ %-5.2f\n", pounds, vege);
printf("-------------------------------\n");
printf(" 折扣 $ %-5.2f\n", dis);
printf(" 运费 $ %-5d\n", fre);
printf("-------------------------------\n");
printf(" 支付 $ %-5.2f\n", cost);
printf("--------------ABC--------------\n");
return 0;
}