本人自己初学C语言,如果有错误,请帮忙指出,多多担待。谢谢!
运行环境为DevCpp
第七章共十一道题。
第一题:
/*
编写一个程序读取输入,读到#字符停止,
然后报告读取的空格数、换行数和其他所有字符的数量
*/
#include
int main(){
char str=0;
int space=0;
int enter=0;
int ch=0;
int i;
printf("Please input what you want to write:\n");
//scanf("%c",&str);
while((str=getchar())!='#'){
if(str==' '){
space++;
}else if(str=='\n'){
enter++;
}else{
ch++;
}
}
printf("\n\n\n");
printf("Input space %d times.\n",space);
printf("Input enter %d times.\n",enter);
printf("Input other words %d times.\n",ch);
printf("END!\n");
return 0;
}
运行结果:
Please input what you want to write:
抗裂砂浆领放卡看到了考虑不车 klskk
sdjaklj 'ld'a ,s;ada[]
a;sld;akd[acp,zx;cc
sd;la'lda'd
d;
s;c,;x'c.#,ds'dplf[pdl[s
Input space 9 times.
Input enter 5 times.
Input other words 94 times.
END!
--------------------------------
Process exited after 39.9 seconds with return value 0
请按任意键继续. . .
第二题:
/*
编写一个程序读取输入,读到#字符停止。
程序要打印每个输入的字符以及对应的ASCII码(十进制),一行打印8个"字符-ASCII码"
建议:使用字符计数和求模运算符(%)在每8个循环周期时打印一个换行符
*/
#include
#define Row 8
int main(){
char ch;
int i=0;
printf("请输入您想要转换的文本(输入'#'代表结束文本):\n");
while((ch=getchar())!='#'){
if(ch=='\n'){
i=0;
printf("换行符的ASCII码为%d\n",ch);
continue;
}
i++;
printf("%c的ASCII码为%d\n",ch,ch);
if((i==Row)){
i=0;
printf("\n");
}
}
printf("END!\n");
return 0;
}
运行结果:
请输入您想要转换的文本(输入'#'代表结束文本):
zsjf, l;[]c'
z的ASCII码为122
s的ASCII码为115
j的ASCII码为106
f的ASCII码为102
,的ASCII码为44
的ASCII码为32
l的ASCII码为108
;的ASCII码为59
[的ASCII码为91
]的ASCII码为93
c的ASCII码为99
'的ASCII码为39
换行符的ASCII码为10
#
END!
--------------------------------
Process exited after 23.37 seconds with return value 0
请按任意键继续. . .
//:’#'这个字符是在换行之后再次打印的,为了证明一下 运行结果
第三题:
/*
编写一个程序,读取整数直到用户输入0.
输入结束后,程序应该报告用户输入的偶数(不包括0)个数
以及这些偶数的平均值、输入的奇数以及奇数的平均值
*/
#include
int main(){
int num;
int i=0;
int j=0;
double sum1=0.0;
double sum2=0.0;
double average1=0.0;
double average2=0.0;
printf("请输入一个大于零的整数(如果输入数字 0 则输入结束!):\n");
while((scanf("%d",&num))&&(num!=0)){
if(num%2==0){
sum1+=num;
i++;
}else{
sum2+=num;
j++;
}
}
average1=sum1/i;
average2=sum2/j;
if(i>0){
printf("您输入的偶数个数为:%d 个,这些偶数的平均值为:%lf.\n",i,average1);
}else{
printf("您输入的数字没有偶数!\n");
}
if(j>0){
printf("您输入的奇数个数为:%d 个,这些奇数的平均值为:%lf.\n",j,average2);
}else{
printf("您输入的数字没有奇数!\n");
}
printf("END!\n");
return 0;
}
运行结果:
请输入一个大于零的整数(如果输入数字 0 则输入结束!):
5
4
78
56
33
53
49
0
您输入的偶数个数为:3 个,这些偶数的平均值为:46.000000.
您输入的奇数个数为:4 个,这些奇数的平均值为:35.000000.
END!
--------------------------------
Process exited after 14.36 seconds with return value 0
请按任意键继续. . .
第四题:
注:请用英文字符进行测试,由于还没有学会中文字符串的应用,这是个bug!
请一定用英文字符进行测试!!!谢谢!!!
/*
使用if else语句编写一个程序读取输入,读到#停止
使用感叹号替换句号,用两个感叹号替换原来的感叹号
最后报告进行了多少次替换
*/
#include
int main(){
char str;;
int i=0;
int j=0;
int k=0;
printf("请输入您想测试的一段话('#'代表停止):\n");
while((str=getchar())!='#'){
if(str=='.'){
putchar('!');
i++;
}else if(str=='!'){
putchar('!');
putchar('!');
j++;
}else{
putchar(str);
}
}
k=i+j;
printf("\n");
printf("'.'进行了%d次替换,'!'进行了%d次替换,一共进行了%d次替换。\n",i,j,i+j);
printf("END!\n");
return 0;
}
运行结果:
请输入您想测试的一段话('#'代表停止):
jdios.jsioajdoa!jojdoasd.!!joisajdoa.jcidosjcs!!!..sw#
jdios!jsioajdoa!!jojdoasd!!!!!joisajdoa!jcidosjcs!!!!!!!!sw
'.'进行了5次替换,'!'进行了6次替换,一共进行了11次替换。
END!
--------------------------------
Process exited after 28.53 seconds with return value 0
请按任意键继续. . .
第五题:
/*
使用switch重写第四题
*/
#include
int main(){
char str;;
int i=0;
int j=0;
int k=0;
printf("请输入您想测试的一段话('#'代表停止):\n");
while((str=getchar())!='#'){
switch(str){
case '.':
putchar('!');
i++;
break;
case '!':
putchar('!');
putchar('!');
j++;
break;
default:
putchar(str);
}
}
k=i+j;
printf("\n");
printf("'.'进行了%d次替换,'!'进行了%d次替换,一共进行了%d次替换。\n",i,j,i+j);
printf("END!\n");
return 0;
}
运行结果:
请输入您想测试的一段话('#'代表停止):
jdios.jsioajdoa!jojdoasd.!!joisajdoa.jcidosjcs!!!..sw#
jdios!jsioajdoa!!jojdoasd!!!!!joisajdoa!jcidosjcs!!!!!!!!sw
'.'进行了5次替换,'!'进行了6次替换,一共进行了11次替换。
END!
--------------------------------
Process exited after 3.763 seconds with return value 0
请按任意键继续. . .
第六题:
/*
编写程序读取输入,读到 # 停止,报告出现 e i 的次数。
注意:该程序要记录一个字符和当前字符。
用"Receive your eieio award"这样的输入来测试
*/
#include
int main(){
char ch;
int e=0;
int i=0;
printf("用'Receive your eieio award''这样的输入来测试(程序读到'#'停止):\n");
while((ch=getchar())!='#'){
switch(ch){
case 'e':
e++;
putchar(ch);
break;
case 'i':
i++;
putchar(ch);
break;
default:
putchar(ch);
}
}
printf("\n");
printf("报告!\n字符'e'出现的次数为%d,字符'i'出现的次数为%d,字符'e'和'i'一共出现的次数为:%d\n报告完毕!\n"
,e,i,(e+i));
return 0;
}
运行结果:
用'Receive your eieio award''这样的输入来测试(程序读到'#'停止):
Receive your eieio award#
Receive your eieio award
报告!
字符'e'出现的次数为5,字符'i'出现的次数为3,字符'e'和'i'一共出现的次数为:8
报告完毕!
--------------------------------
Process exited after 4.474 seconds with return value 0
请按任意键继续. . .
第七题:
/*
编写一个程序,提示用户输入一周工作的小时数,然后打印工资总额、税金和净收入
做如下假设:
a.基本工资 = 1000美元 / 小时
b.加班(超过40小时) = 1.5倍时间
c.税率: 前300美元为15%
续150美元为20%
余下的为25%
用#define定义符号常量,不用在意是否符合当前的税法
*/
#include
#define Base 1000
#define AddTimes 1.5
#define RateA 0.15
#define RateB 0.2
#define RateC 0.25
int main(){
double hours;
double hour;
double sum; //工资总额
double tax; //税金
double profit; //净收入
printf("请输入您一周工作的小时数:\n");
scanf("%lf",&hours);
while(hours<0){
printf("请重新输入有效的小时(大于0)的数!\n");
scanf("%lf",&hours);
}
if(hours<=40){
sum=Base*hours;
}else {
hour=(hours-40)*AddTimes+40;
sum=Base*hour;
}
if(sum<=300){
tax=sum*RateA;
profit=sum-tax;
}else if(sum<=450){
tax=(sum-300)*RateB+300*RateA;
profit=sum-tax;
}else{
tax=(sum-300-150)*RateC+(450-300)*RateB+300*RateA;
profit=sum-tax;
}
printf("您一周工作的时间为%lf小时.\n",hours);
printf("您的工资总额为:%lf美元.\n",sum);
printf("您需要交纳%lf美元的税金.\n",tax);
printf("您的净收入为%lf美元.\n",profit);
printf("谢谢您的使用!\n");
return 0;
}
运行结果:
请输入您一周工作的小时数:
50.6
您一周工作的时间为50.600000小时.
您的工资总额为:55900.000000美元.
您需要交纳13937.500000美元的税金.
您的净收入为41962.500000美元.
谢谢您的使用!
--------------------------------
Process exited after 3.695 seconds with return value 0
请按任意键继续. . .
第八题:
/*
修改练习7的假设a,让程序可以给出一个供选择的工资等级菜单
使用 switch 完成工资等级的选择。
运行程序后,显示的菜单应该类似这样:
*******************************************************************************
Enter the number corresponding to the desired pay rate of 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
#define RateA 0.15
#define RateB 0.2
#define RateC 0.25
#define AddTimes 1.5
int main(){
int i=2;
float salary;
float hours;
float hour;
float sum;
float tax;
float profit;
do{
printf("请选择您的工资等级(输入1-5):\n");
printf("*******************************************************************************\n");
printf("Enter the number corresponding to the desired pay rate of 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");
scanf("%d",&i);
while(i<1||i>5){
printf("请输入正确的选项!(例如:1、2、3、4、5)\n");
scanf("%d",&i);
}
}while(i<1||i>5);
while(i != 5){
switch(i){
case 1 :
salary = 8.75;
break;
case 2 :
salary = 9.33;
break;
case 3 :
salary = 10.00;
break;
case 4 :
salary = 11.20;
}
printf("请输入您的工作时间:\n");
scanf("%f",&hours);
while(hours<0){
printf("请输入有效的工作时间(工作时间大于0)!\n");
printf("请重新输入您的工作时间:");
scanf("%f",&hours);
}
if(hours>0&&hours<=40){
sum=salary*hours;
} else{
hour=(hours-40)*AddTimes+40;
sum=salary*hour;
}
if(sum<=300){
tax=sum*RateA;
}else if(sum<=450){
tax=(sum-300)*RateB+300*RateA;
}else{
tax=(sum-450)*RateC+(450-300)*RateB+300*RateA;
}
profit=sum-tax;
printf("您的工作时间为:%f小时\n",hours);
printf("您的基本工资为:$%f/hr\n",salary);
printf("您的工资总额为:$%f\n",sum);
printf("您的工资税费为:$%f\n",tax);
printf("您的净收入为:$%f\n",profit);
printf("您可以重新选择您的工资等级!\n");
scanf("%d",&i);
}
printf("感谢您的使用!欢迎下次再来!\n");
return 0;
}
运行结果:
请选择您的工资等级(输入1-5):
*******************************************************************************
Enter the number corresponding to the desired pay rate of action:
1) $8.75/hr 2) $9.33/hr
3) $10.00/hr 4) $11.20/hr
5) quit
*******************************************************************************
6
请输入正确的选项!(例如:1、2、3、4、5)
2
请输入您的工作时间:
50
您的工作时间为:50.000000小时
您的基本工资为:$9.330000/hr
您的工资总额为:$513.150024
您的工资税费为:$90.787506
您的净收入为:$422.362518
您可以重新选择您的工资等级!
5
感谢您的使用!欢迎下次再来!
--------------------------------
Process exited after 19.46 seconds with return value 0
请按任意键继续. . .
第九题:
/*
编写一个程序,只接受正整数输入,然后显示所有小于或等于该数的素数。
*/
#include
#include
int main(){
int num;
int div;
int i;
bool judge=true;
printf("请输入一个正整数:");
while((scanf("%d",&num))==1){
if(num<=1){
printf("%d这个数字没有素数!\n",num);
}else{
for(i=2;i<=num;i++){
judge=true;
for(div=2;div*div<=i;div++){
if(i%div==0){
judge=false;
}
}
if(judge){
printf("%d是素数\n",i);
}
}
}
printf("请重新输入一个正整数:");
}
printf("END!\n");
return 0;
}
运行结果:
请输入一个正整数:15
2是素数
3是素数
5是素数
7是素数
11是素数
13是素数
请重新输入一个正整数:0
0这个数字没有素数!
请重新输入一个正整数:-1
-1这个数字没有素数!
请重新输入一个正整数:1
1这个数字没有素数!
请重新输入一个正整数:2
2是素数
请重新输入一个正整数:a
END!
--------------------------------
Process exited after 38.08 seconds with return value 0
请按任意键继续. . .
第十题:
/*
1988年的美国联邦税收计划是近代最简单的税收方案。
它分为4个类别,每个类别有两个等级。
下面是税收计划的摘要(美元数为应征税的收入):
类别 税金
单身 17850美元按15%计,超出部分按28%计
户主 23900美元按15%计,超出部分按28%计
已婚,共有 29750美元按15%计,超出部分按28%计
已婚,离异 14875美元按15%计,超出部分按28%计
例如:一位工资为20000美元的单身纳税人,应缴纳税费 0.15x17850+0.28x(20000-17850)美元。
编写一个程序,让用户指定缴纳税金的种类和应纳税收入,然后计算税金。
程序应通过循环让用户可以多次输入。
*/
#include
#define Rate 0.15
#define AddRate 0.28
int main(){
int i,Base;
float sum,tax;
do{
printf(" 如下是1988年的美国联邦税收计划中的税收方案\n");
printf("*************************************************************************\n");
printf(" 类别 税金\n");
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("*************************************************************************\n");
printf("请输入您对应的类别的序号:");
scanf("%d",&i);
}while(i<1||i>5);
while(i>0&&i<5){
switch(i){
case 1 :
Base=17850;
break;
case 2 :
Base=23900;
break;
case 3 :
Base=29750;
break;
case 4 :
Base=14875;
break;
}
printf("请输入您的工资:");
scanf("%f",&sum);
if(sum<Base){
tax=sum*Rate;
}else{
tax=Base*Rate+(sum-Base)*AddRate;
}
printf("\n您的类别为%d,您应缴纳的税金为%f美元\n",i,tax);
printf("您可以再次输入对应的类别的序号:");
scanf("%d",&i);
}
printf("您输入的序号不正确!欢迎下次再来!\n");
return 0;
}
运行结果:
如下是1988年的美国联邦税收计划中的税收方案
*************************************************************************
类别 税金
1)、单身 17850美元按15计,超出部分按28计
2)、户主 23900美元按15计,超出部分按28计
3)、已婚,共有 29750美元按15计,超出部分按28计
4)、已婚,离异 14875美元按15计,超出部分按28计
*************************************************************************
请输入您对应的类别的序号:1
请输入您的工资:20000
您的类别为1,您应缴纳的税金为3279.500000美元
您可以再次输入对应的类别的序号:0
您输入的序号不正确!欢迎下次再来!
--------------------------------
Process exited after 8.266 seconds with return value 0
请按任意键继续. . .
第十一题:
/*
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
#define Discount 0.05
#define Add1 6.5
#define Add2 14
#define Add3 0.5
#define artichoke 2.05 //洋蓟
#define beet 1.15 //甜菜
#define carrot 1.09
#define Base 100
int main(){
float vegetable=0.0;
float order=0.0;
float discounts=0.0;
float packet=0.0;
float sum=0.0;
float artichokes=0.0;
float beets=0.0;
float carrots=0.0;
char ch;
float mount;
float mounts1=0.0;
float mounts2=0.0;
float mounts3=0.0;
printf(" ABC邮购杂货店\n");
printf("*********************************\n");
printf(" 类别 售价\n");
printf("a、洋蓟 2.05美元/磅\n");
printf("b、甜菜 1.15美元/磅\n");
printf("c、胡萝卜 1.09美元/磅\n");
printf("q、推出订购 敬请期待!\n");
printf("*********************************\n");
printf("请您输入您想要购买蔬菜类别的序号:");
if((scanf("%c",&ch))==1){
switch(ch){
case 'a' :
printf("\n请您输入购买洋蓟的数量(以磅为单位):");
scanf("%f",&mounts1);
case 'b' :
printf("\n请您输入购买甜菜的数量(以磅为单位):");
scanf("%f",&mounts2);
case 'c' :
printf("\n请您输入购买胡萝卜的数量(以磅为单位):");
scanf("%f",&mounts3);
case 'q' :
printf("\n敬请期待!\n");
break;
}
}
mount=mounts1+mounts2+mounts3;
artichokes=artichoke*mounts1;
beets=beet*mounts2;
carrots=carrot*mounts3;
vegetable=artichokes+beets+carrots;
if(vegetable>Base){
discounts=vegetable*Discount;
}else{
discounts=0;
}
order=vegetable-discounts;
if(mount<=5){
packet=Add1;
}else if(mount>5&&mount<=20){
packet=Add2;
}else{
packet=Add2+(mount-20)*Add3;
}
sum=order+packet;
printf("您在ABC邮购杂货店的购买信息如下:\n");
printf("蔬菜类别 蔬菜单价 订购重量(磅) 价格\n");
printf(" 洋蓟 %10f %10f %10f\n",artichoke,mounts1,artichokes);
printf(" 甜菜 %10f %10f %10f\n",beet,mounts2,beets);
printf(" 胡萝卜 %10f %10f %10f\n",carrot,mounts3,carrots);
printf("\n您的订单总折扣为:%f美元\n",discounts);
printf("您订单蔬菜(出去折扣)的总费用为:%f美元\n",order);
printf("您的运费和包装费一共为%f美元\n",packet);
printf("您订单所有费用的总额为:%f美元\n",sum);
printf("END!\n");
printf("欢迎您下次光临!\n");
return 0;
}
运行结果:
ABC邮购杂货店
*********************************
类别 售价
a、洋蓟 2.05美元/磅
b、甜菜 1.15美元/磅
c、胡萝卜 1.09美元/磅
q、推出订购 敬请期待!
*********************************
请您输入您想要购买蔬菜类别的序号:a
请您输入购买洋蓟的数量(以磅为单位):50
请您输入购买甜菜的数量(以磅为单位):20
请您输入购买胡萝卜的数量(以磅为单位):10
敬请期待!
您在ABC邮购杂货店的购买信息如下:
蔬菜类别 蔬菜单价 订购重量(磅) 价格
洋蓟 2.050000 50.000000 102.500000
甜菜 1.150000 20.000000 23.000000
胡萝卜 1.090000 10.000000 10.900000
您的订单总折扣为:6.820000美元
您订单蔬菜(出去折扣)的总费用为:129.579987美元
您的运费和包装费一共为44.000000美元
您订单所有费用的总额为:173.579987美元
END!
欢迎您下次光临!
--------------------------------
Process exited after 11.51 seconds with return value 0
请按任意键继续. . .