第七章 编程练习
7.1
/*************************************************************************/ /*******题 目:编写一个程序读取输入,读到#字符停止然后报 *******/ /******* 告读出的空格数、换行符和所有其他字符数量。 *******/ /*******编译时间:2020.2.5 *******/ /*******作 者:林夕 *******/ /*************************************************************************/ #include<stdio.h> int main(void) { char a=0; int i=0, j=0, k=0; while ((a=getchar())!= '#') { if (a == ' ') i++; else { if(a == '\n') j++; else k++; } } printf("空格数为:%d个\n换行符为:%d个\n字母为%d个", i, j, k); return 0; }
运行结果
7.2
/************************************************************************/ /***题 目:编写一个程序读取输入,读到#号字符停止。程序要打印每个输入 ***/ /*** 字符以及对应的ASCII码(十进制)。每行打印8个“字符-ASCII”***/ /*** 组合。 建议:使用字符计数和求模运算符(%)在每个8个循环周 ***/ /*** 期是打印一个换行符。 ***/ /***编译时间:2020.2.5 ***/ /***作 者:林夕 ***/ /************************************************************************/ #include<stdio.h> int main(void) { int i=0,a=0; printf("输入你需要的一些字符(直到输入#号停止输入):\n"); while ((a=getchar()) != '#') { if (a != '\n' && a != ' ') { i++; printf("%c-%d ", a, a); if ((i % 8) == 0) printf("\n"); } } return 0; }
运行结果
7.3
/*********************************************************************************/ /***题 目:编写一个程序读入输入,读取整数直到用户输入0输入结束后,程序应报告***/ /*** 用户输入的偶数(不包括0)个数、这些偶数的平均值、输入的奇数个数及***/ /*** 其平均值。 ***/ /***完成时间:2020.2.5 ***/ /***作 者:林夕 ***/ /*********************************************************************************/ #include<stdio.h> int main(void) { int num = 0, i = 0, j = 0; float num1 = 0.0, num2 = 0.0; printf("请输入整数(直到输入0停止):\n"); scanf_s("%d", &num); while (num!=0) { if (num % 2 == 0)//偶数 { i++; num1 = num1 + num; } else { j++; num2 = num2 + num; } scanf_s("%d", &num); } num1 = num1 / i; num2 = num2 / j; printf("偶数有%d个,平均值%.3f", i, num1); printf("奇数有%d个,平均值%.3f", j, num2); return 0; }
运行结果
7.4
/*********************************************************************************/ /***题 目:使用if else 语句编写一个程序读取输入,读到#停止。用感叹号代替句号***/ /*** 用俩个感叹号替换原来的感叹号,最后报告进行了多少次替换。 ***/ /***完成时间:2020.2.5 ***/ /***作 者:林夕 ***/ /*********************************************************************************/ #include<stdio.h> int main(void) { char ch; int i=0; printf("输入一段话:\n"); while ((ch=getchar()) != '#') { if ('.' == ch) { putchar(' !'); i++; } else if ('!' == ch) { putchar('!'); putchar('!'); i++; } else putchar(ch); } printf("%d", i); return 0; }
运行结果
7.5
/**************************************************************************/ /***题 目:使用switch重写练习4 ***/ /***完成时间:2020.2.5 ***/ /***作 者:林夕 ***/ /**************************************************************************/ #include<stdio.h> int main(void) { char ch; int i = 0; printf("输入一段话:\n"); while ((ch = getchar()) != '#') { switch (ch) { case '.':putchar('!'); i++; break; case '!':putchar('!'); putchar('!'); i++; default:putchar(ch); } } printf("%d", i); return 0; }
运行结果
7.6
/****************************************************************************/ /***题 目:编写程序读取输入,读到#停止,报告ei出现的次数。 ***/ /***完成时间:2020.2.5 ***/ /***作 者:林夕 ***/ /****************************************************************************/ #include<stdio.h> int main(void) { char ch; int i = 0; printf("输入一串字符直到输入#停止输入:\n"); while ((ch=getchar())!='#') { if ('e' == ch) { if ('i' == (ch = getchar())) { i++; } } } printf("出现%d次", i); return 0; }
运行结果
7.7
/******************************************************************************/ /***题 目:编写一个程序,提示用户输入一周工作的小时数,然后打印工资总额、***/ /*** 税金和净收入。做如下假设: ***/ /*** a.基本工资 = 10.00美元/小时 ***/ /*** b.加班(超过40小时) = 1.5倍的时间 ***/ /*** c.税率:前300美元为15% ***/ /*** 续150美元为20% ***/ /*** 余下的为25% ***/ /*** 用#define定义符号常量。不用在意是否符合当前的税法 ***/ /***完成时间:2020.2.5 ***/ /***作 者:林夕 ***/ /******************************************************************************/ #include<stdio.h> #define DD1 15% #define DD2 20% #define DD3 25% int main(void) { float num = 0.0, taxes = 0.0, net_input = 0.0; int i = 0; printf("请输入工作的小时:\n"); scanf_s("%d", &i); if (i <= 40) { num = 10.00 * i; if (num < 300) { taxes = num * DD1; net_input = num - taxes; } else { taxes = 300 * DD1 + (num - 300) * DD2; net_input = num - taxes; } } else { num = 40 * 10.00 + (i - 40) * 10.00 * 1.5; if (num < 450) { taxes = 300 * DD1 + (num - 300) * DD2; net_input = num - taxes; } else { taxes = 300 * DD1 + 150 * DD2 + (num - 450) * DD3; net_input = num - taxes; } } printf("工资总额为:%.3f\n税金为:%.3f\n净收入%.3f\n", num, taxes, net_input); return 0; }
运行结果
7.8
/******************************************************************************/ /***题 目:修改练习7的假设a,让程序可以给出一个供选择的工资等级菜单。使用***/ /*** switch完成工资等级选择。运行程序后,显示的菜单应该类似这样: ***/ /*** ********************************************************** ***/ /*** Enter the number corresponding to the desired pay rate or ***/ /*** action: ***/ /*** 1)$8.75/hr 2)$9.33/hr ***/ /*** 2)$10.00/hr 3)$11.20/hr ***/ /*** 5)quit ***/ /*** ********************************************************* ***/ /*** 如果选择1-4其中的一个数字,程序应该询问用户工作的小时数。程序 ***/ /*** 要通过循环运行,除非用户输入5.如果输入1-5以外的数字,程序应提 ***/ /*** 醒用户输入正确的选项,然后再重复显示菜单提示用户输入。使用 ***/ /*** #define创建符号常量表示各工资等级和税率。 ***/ /***完成时间:2020.2.6 ***/ /***作 者:林夕 ***/ /******************************************************************************/ #include<stdio.h> #include<stdlib.h> #define NUM1 8.75 #define NUM2 9.33 #define NUM3 10.00 #define NUM4 11.20 #define N1 0.15 #define N2 0.20 #define N3 .025 void IC(float basic); int main(void) { int n = 0, select = 0; while (true) { 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("2)$10.00/hr 3)$11.20/hr\n"); printf("5)quit\n"); printf("请选择你的工资等级:\n"); scanf_s("%d", &select); switch (select) { case 1:IC(NUM1); break; case 2:IC(NUM2); break; case 3:IC(NUM3); break; case 4:IC(NUM4); break; case 5:printf("程序结束!\n"); exit(0); default: {printf("输入错误,请重新输入!\n"); continue; }//终止当前循环以下语句、 } } return 0; } void IC(float basic) { float num = 0.0, taxes = 0.0; int i = 0; printf("请输入工作的小时:\n"); scanf_s("%d", &i); if (i <= 40)//工作时间不高于40h,不加班 { num = basic * N1; if (num <= 300)//工资总额不高于300 { taxes = num * N1; } else if (num <= 450)//工资不高于450且大于300 { taxes = 300 * N1 + (num - 300) * N2; } else //工资高于450 { taxes = 300 * N1 + 150 * N2 + (num - 450) * N3; } } else//超过40h加班 { num = basic * 40 + basic * (i - 40) * 1.5; taxes = 300 * N1 + 150 * N2 + (num - 450) * N3; } printf("工资总额为:%.3f\n税金为:%.3f\n净收入%.3f\n", num, taxes, num - taxes); return ; }
运行结果
7.9
/**************************************************************************************/ /***题 目:编写一个程序,只接受整数输入,然后显示所有小于小于或者等于该数的素数。***/ /***完成时间:2020.2.7 ***/ /***作 者:林夕 ***/ /**************************************************************************************/ #include<stdio.h> int main(void) { int i, j, number; printf("请输入一个整数:\n"); scanf_s("%d", &number); printf("素数:\n"); for (i = 2; i < number; i++) { for (j = 2; j < i; j++) { if (i % j == 0) { break; } } if (j >= i) { printf("%d ", i); } } return 0; }
运行结果
7.10
/*********************************************************************************************/ /***题 目:1988年的美国联邦税收计划是近代最简单的税收方案,它分为4个类型。每个类型有俩个***/ /*** 等级。下面是该税收的摘要(美元数位应征税的收入); ***/ /*** 类型 税金 ***/ /*** 单身 17580美金按15%计,超过部分按照28% ***/ /*** 户主 23900美金按15%计,超过部分按照28% ***/ /*** 已婚,共有 29750美金按15%计,超过部分按照28% ***/ /*** 已婚,离异 14875美金按15%计,超过部分按照28% ***/ /*** 例如,一位工资为20000美元的单身的纳税人,应缴纳税费0.15*17850+0.28*(20000- ***/ /*** 17850)美元。编写一个程序,让用户指定缴纳税金的种类和应纳税收入,然后计算税金***/ /*** 程序应通过循环让用户可以多次输入。 ***/ /***完成时间:2020.2.7 ***/ /***作 者:林夕 ***/ /*********************************************************************************************/ #include<stdio.h> #include<stdlib.h> #define A1 0.15 #define A2 0.28 void IC(float n); int main(void) { int i; float salary = 0, taxes = 0, basis = 0; // 工资 税金 while (true) { printf("*********************************************************\n"); printf("1)单身 2)户主 \n"); printf("3)已婚,共有 4)已婚,离异\n"); printf("5)退出程序!\n"); printf("请选择你的类型:\n"); scanf_s("%d", &i); switch (i) { case 1:IC(17580); break; case 2:IC(23900); break; case 3:IC(29750); break; case 4:IC(14875); break; case 5:exit(0); default:continue; } } return 0; } void IC(float n) { float taxes = 0.0, salary = 0.0; printf("请输入你的工资:\n"); scanf_s("%f", &salary); taxes = n* A1 + (salary - n) * A2; printf("应缴纳税为:%.3f美元\n", taxes); return; }
运行结果
7.11
/*********************************************************************************************/ /***题 目:ABC邮购杂货店出售的洋蓟售价为2.05美元/磅,甜菜售价为1.15美元/磅,胡萝卜售价为***/ /*** 1.09美元/磅。在添加运费之前,100美元的订单有5%打折优惠。少于或等于5磅的订单收***/ /*** 取6.4美元的运费和包装费,5磅-20磅的订单收取14美元的运费和包装费,超过20磅的订***/ /*** 单再14美元的基础上每续重一磅增加0.5美元。编写一个程序,在循环中用switch语句实***/ /*** 现用户输入不同的字母时有不同的响应,即输入a的响应时让用户输入洋蓟的磅数,b是 ***/ /*** 甜菜的磅数,c是胡萝卜的磅数,q是退出订购。程序要记录累计的重量。即,如果用户 ***/ /*** 输入4磅的甜菜,然后输入5磅的甜菜,程序应报告9磅的甜菜,然后,该程序要计算货物***/ /*** 的总价、折扣(如果有的话)、运费和包装费。随后,程序应显示所有的购物信息:物 ***/ /*** 品售价、订购的重量(单位:磅)、订购的蔬菜费用、订单的总费用、折扣(如果有的 ***/ /*** 话)、运费和包装费、以及所有的费用总额。 ***/ /***完成时间:2020.2.7 ***/ /***作 者:林夕 ***/ /*********************************************************************************************/ #include<stdio.h> #include<stdlib.h> #define A1 2.05 #define A2 1.15 #define A3 1.09 int main(void) { float artichoke = 0.0, beet = 0.0, carrot = 0.0, weigth = 0.0, weigth1 = 0.0,weigth2 = 0.0, weigth3 = 0.0; // 洋蓟 甜菜 胡萝卜 float n = 0.0, freight = 0.0, num = 0.0; char ch=1; while ('q'!=ch) { printf("********************************************************************\n"); printf("a.洋蓟:2.05美元/磅 b.甜菜:1.15 美元/磅\n"); printf("c.胡萝卜:1.09美元/磅 q.退出订购\n"); printf("请选择你需要的蔬菜:\n"); scanf_s("%c", &ch,1); switch (ch) { case 'a': printf("请输入磅数:\n"); scanf_s("%f", &n ); weigth1 += n; break; case 'b': printf("请输入磅数:\n"); scanf_s("%f", &n); weigth2 += n; break; case 'c': printf("请输入磅数:\n"); scanf_s("%f", &n); weigth3 += n; break; case 'q':continue; default:printf("输入错误!!!重新输入\n"); break; } while (getchar() != '\n'); } weigth = weigth1 + weigth2 + weigth3;//蔬菜总重量 artichoke = weigth1 * A1;//洋蓟 beet = weigth2 * A2;//甜菜 carrot = weigth3 * A3;//胡萝卜 num = artichoke + beet + carrot;//蔬菜总价 if (weigth <= 5) { freight = 6.4;//包装费和运费 } else { if ( weigth > 20) { freight = 14.0 + (weigth - 20.0) * 0.5;//包装费和运费 } else { freight = 14.0 ; } } printf("***************费用明细**********************\n"); if (weigth1 > 0) { printf("洋蓟共%.3f磅为%.3f美元!\n", weigth1, artichoke); } if (weigth2 > 0) { printf("甜菜共%.3f磅为%.3f美元!\n", weigth2, beet); } if (weigth3 > 0) { printf("胡萝卜共%.3f磅为%.3f美元!\n", weigth3, carrot); } printf("蔬菜总价为%.3f,总重量为%.3f\n", num,weigth); if (num > 100) { printf("折扣为%.3f\n", num * 0.05); } printf("订单总费用为%.3f\n", num + freight); printf("运费和包装费共%.3f\n", freight); printf("费用总额:%.3f\n", num + freight - num * 0.05); return 0; }
运行结果