1.编写一个程序。该程序读取输入直到遇到#字符,然后报告读取的空格数目、读取的换行符数目以及读取的所有其他字符数目。

#include<stdio.h>
#include<ctype.h>
int main(void){
char ch;
int count1,count2,count3;
count1 = count2 = count3 = ;
   printf("Enter text to be analyzed(#to terminate):\n");
while((ch = getchar()) != '#'){
if ( ch == '\n'){
count1++;
} else if(isspace(ch)){
count2++;
} else if (!isspace(ch)){
count3++;
}
}
printf("换行数量%d,空格数量%d,其他字符数量%d",count1,count2,count3);
return ;
}

2.编写一个程序。该程序读取输入直到遇到#字符。使程序打印每个输入的字符以及它的十进制ASCII 码。每行打印8 个字符/编码对。建议:利用字符计数和模运算符(%)在每8 个循环周期时打印一个换行符。

#include<stdio.h>
#define STOP '#'
int main(void){
char ch;
int length = ;
printf("Enter text to be analyzed(#to terminate):\n");
while((ch = getchar()) != STOP){
if(length%==){
printf("\n");
}
printf("%c/%d ",ch,ch);
length++;
}
return ;
}

3.编写一个程序。该程序读取整数,直到输入0。输入终止后,程序应该报告输入的偶数(不包括0)总个数、偶数的平均值,输入的奇数总个数以及奇数的平均值。

#include<stdio.h>
int main(void){
int num,even_num,odd_num;
double even_count,odd_count;//必需定义为double类型,否则打印平均值会出错
even_num = odd_num = ;
even_count = odd_count = 0.0 ;
printf("Enter int to be analyzed(0 to terminate):\n");
while (scanf("%d", &num) == && num != ){
if (num% == ){
even_num++;
even_count +=num;
} else {
odd_num++;
odd_count +=num;
}
}
if (even_count > )
printf("Even have %d, even average is %.2f\n",even_num,even_count / even_num);
if (odd_num > )
printf("Odd have %d,odd average is %.2f",odd_num,odd_count/odd_num);
return ;
}

4.利用if else 语句编写程序读取输入,直到#。用一个感叹号代替每个句号,将原有的每个感叹号用两个感叹号代替,最后报告进行了多少次替代。

#include<stdio.h>
#define STOP '#'
int main(void){
char ch;
int i;
i = ;
while((ch = getchar()) != STOP){
if (ch == '.'){
putchar('!');
i++;
} else if (ch == '!'){
putchar(ch);
putchar(ch);
i++;
} else {
putchar(ch);
}
}
printf("\n");
printf("count %d",i);
return ;
}

5.用switch 重做练习3。

#include<stdio.h>
int main(void){
int num,even_num,odd_num;
double even_count,odd_count;//必需定义为double类型,否则打印平均值会出错
even_num = odd_num = ;
even_count = odd_count = 0.0 ;
printf("Enter int to be analyzed(0 to terminate):\n");
while (scanf("%d", &num) == && num != ){
switch (num%){
case :
even_num++;
even_count +=num;
break;
case :
odd_num++;
odd_count +=num;
break;
}
}
if (even_count > )
printf("Even have %d, even average is %.2f\n",even_num,even_count / even_num);
if (odd_num > )
printf("Odd have %d,odd average is %.2f",odd_num,odd_count/odd_num);
return ;
}

6.编写一个程序读取输入,直到#,并报告序列ei 出现的次数。说明此程序必须要记住前一个字符和当前的字符。用诸如“Receive your eieio award.”的输入测试它。

#include<stdio.h>
#define STOP '#'
#define PREV_CHAR 'e'
#define CURRENT_CHAR 'i'
int main(void){
char ch, prev_char;
int i;
i = ;
prev_char = ;
printf("Enter text to be analyzed(#to terminate):\n");
while((ch = getchar()) != STOP){
if (ch == PREV_CHAR){
prev_char = ch;
}
if (ch == CURRENT_CHAR && prev_char == PREV_CHAR){
i++;
}
}
printf("Enter of 'ei' %d ",i);
return ;
}

7.编写程序,要求输入一周中的工作小时数,然后打印工资总额、税金以及净工资。作如下假设:
a.基本工资等级=10.00 美元/小时
b.加班(超过40 小时)=1.5 倍的时间
c.税率前300 美元为15%
下一个150 美元为20%余下的为25%。

用#define 定义常量,不必关心本例是否符合当前的税法。

#include<stdio.h>
#define BASE 10.00
#define TAX_LEVEL1 300
#define TAX_LEVEL2 150
#define TAX_LEVEL1_RATE 0.15
#define TAX_LEVEL2_RATE 0.2
#define TAX_LEVEL3_RATE 0.25
#define BASE_HOUR 40
#define OVER_RATE 1.5
int main(void){
float num,wage,tax,real_wage,temp,real_hour;
wage = tax = real_wage = real_hour = 0.0;
printf("Please enter the number of hours you work a week:\n");
scanf("%f",&num); if (num > BASE_HOUR){
real_hour = num + (num - BASE_HOUR)*OVER_RATE;
} else {
real_hour = num;
}
wage = real_hour*BASE;
temp = wage - TAX_LEVEL1;
if (temp <= ){
tax += wage*TAX_LEVEL1_RATE;
} else {
tax +=TAX_LEVEL1*TAX_LEVEL1_RATE;
if (temp<= TAX_LEVEL2){
tax += temp*TAX_LEVEL2_RATE;
} else {
tax += TAX_LEVEL2*TAX_LEVEL2_RATE;
tax += (temp - TAX_LEVEL2) * TAX_LEVEL3_RATE;
}
}
real_wage = wage - tax;
printf("hour:%.2f wage:%.2f tax:%.2f real wage :%.2f",num,real_hour,wage,tax,real_wage);
return ;
}

8.修改练习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 LEVEL1 8.75
#define LEVEL2 9.33
#define LEVEL3 10.00
#define LEVEL4 11.20
#define TAX_LEVEL1 300
#define TAX_LEVEL2 150
#define TAX_LEVEL1_RATE 0.15
#define TAX_LEVEL2_RATE 0.2
#define TAX_LEVEL3_RATE 0.25
#define BASE_HOUR 40
#define OVER_RATE 1.5
int main(void){
int level;
float fee,num,wage,tax,real_wage,temp,real_hour;
wage = tax = real_wage = real_hour = fee = 0.0; 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");
while(scanf("%d",&level) == && level != ){ switch(level){
case :
fee = LEVEL1;
break;
case :
fee = LEVEL2;
break;
case :
fee = LEVEL3;
break;
case :
fee = LEVEL4;
break;
default:
printf("You should enter the number between 1 to 4 (5 to quit).\n");
printf("Please enter the right number: \n");
continue;
}
printf("Please enter the number of hours you work a week:\n");
scanf("%f",&num);
if (num > BASE_HOUR){
real_hour = num + (num - BASE_HOUR)*OVER_RATE;
} else {
real_hour = num;
}
wage = real_hour*fee;
temp = wage - TAX_LEVEL1;
if (temp <= ){
tax += wage*TAX_LEVEL1_RATE;
} else {
tax +=TAX_LEVEL1*TAX_LEVEL1_RATE;
if (temp<= TAX_LEVEL2){
tax += temp*TAX_LEVEL2_RATE;
} else {
tax += TAX_LEVEL2*TAX_LEVEL2_RATE;
tax += (temp - TAX_LEVEL2) * TAX_LEVEL3_RATE;
}
}
real_wage = wage - tax;
printf("hour:%.2f wage:%.2f tax:%.2f real wage :%.2f\n",real_hour,wage,tax,real_wage);
printf("Please enter next number:\n");
}
printf("exit!");
return ;
}

没有学透getchar和scanf的区别,一开始用getchar获取输入,结果出错了。这也告诉自己,对学习要有敬畏之心,看都教材不是看小说,要了解的是细节不是大概,马虎不得。

9.编写一个程序,接受一个整数输入,然后显示所有小于或等于该数的素数。

#include<stdio.h>
#include<stdbool.h>
int main(void){
int num,i,k;
bool isPrime;
printf("Enter int number:\n");
scanf("%d",&num); for(i=;i<=num;i++){
for(k=,isPrime = true;(k*k)<=i;k++){
if (i%k==){ isPrime = false;
}
}
if (isPrime){
printf("%lu ",i);
}
}
return ;
}

10.1988 年United States Federal Tax Schedule 是近期最基本的。它分为4 类,每类有两个等级。下面是其摘要;美元数为应征税的收入。

种类 税金
单身 前17,850 美元按15%,超出部分按28%
户主 前23,900 美元按15%,超出部分按28%
已婚,共有 前29,750 美元按15%,超出部分按28%
已婚,离异 前14,875 美元按15%,超出部分按28%

例如,有20 000 美元应征税收入的单身雇佣劳动者应缴税金0.15×17 850 美元+0.28×(20 000美元–17 850 美元)。编写一个程序,让用户指定税金种类和应征税收入,然后计算税金。使用循环以便用户可以多次输入。

#include<stdio.h>
#define TYPE1 1
#define TYPE2 2
#define TYPE3 3
#define TYPE4 4
#define TAX_RATE1 0.15
#define TAX_RATE2 0.28
#define TYPE1_BASE 17850
#define TYPE2_BASE 23900
#define TYPE3_BASE 29750
#define TYPE4_BASE 14875
int main(void){
double tax,income,base;
int type;
printf("请选择税金种类:\n");
printf("1)单身 2)户主 3)已婚,共有 4)已婚,离异 5)退出\n");
while(scanf("%d",&type) == && type != ){
switch(type){
case TYPE1:
base = TYPE1_BASE;
break;
case TYPE2:
base = TYPE2_BASE;
break;
case TYPE3:
base = TYPE3_BASE;
break;
case TYPE4:
base = TYPE4_BASE;
break;
default:
printf("请输入1到4之间的数字,或者输入5为退出\n");
continue;
}
printf("请输入您的应征税收入:\n");
scanf("%lf",&income);
if(income>base){
tax = base*TAX_RATE1+(income-base)*TAX_RATE2;
} else {
tax = income*TAX_RATE1;
}
printf("您共要缴纳%.2lf美元税金\n",tax);
printf("请输入您税金种类代码:\n");
}
printf("Exit.");
return ;
}

感觉和第七、八题一样,而且更没有难度。

11.ABC Mail Order Grocery 朝鲜蓟的售价是1.25 美元/磅,甜菜的售价是0.65 美元/磅,胡萝卜的售价是0.89 美元/磅。在添加运输费用之前,他们为100 美元的订单提供5%的打折优惠。对5磅或以下的定单收取3.50 美元的运输和装卸费用;超过5 磅而不足20 磅的定单收取10.00 美元的运输和装卸费用;20 磅或以上的运输,在8 美元基础上每磅加收0.1 美元。编写程序,在循环中使用switch 语句,以便对输入a 的响应是让用户输入所需的朝鲜蓟磅数,b 为甜菜的磅数,c 为胡萝卜的磅数,而q 允许用户退出订购过程。然后程序计算总费用、折扣和运输费用(如果有运输费的话),以及总数。随后程序应该显示所有的购买信息:每磅的费用、订购的磅数、该订单每种蔬菜的费用、订单的总费用、折扣,如果有的话加上运输费用,以及所有费用的总数。

#include<stdio.h>
#define ARTICHOKE 'a'
#define BEET 'b'
#define CARROT 'c'
#define ARTICHOKE_PRICE 1.25
#define BEET_PRICE 0.65
#define CARROT_PRICE 0.89
#define SHIP_FEE_LEVEL1 3.5
#define SHIP_FEE_LEVEL2 10.00
#define SHIP_FEE_LEVEL3 0.1
#define SHIP_FEE_LEVEL3_BASE 8.0
#define WEIGHT_LEVEL1 5
#define WEIGHT_LEVEL2 20
#define DISCOUNT 0.05
#define DISCOUNT_BASE 100
int main(void){
double fee_count,ship_fee,price,order_count,discount_count,
pound_count,pound,artichoke_pound,beet_pound,carrot_pound,artichoke_fee,beet_fee,carrot_fee;
char type;
pound_count = discount_count = fee_count = ship_fee = order_count = artichoke_pound = beet_pound = carrot_pound = 0.0;
artichoke_fee = beet_fee = carrot_fee = 0.0;
printf("请选择要订购的蔬菜:\n");
printf("a)朝鲜蓟 b)甜菜 c)胡萝卜 q)退出\n");
while(scanf("%c",&type) == && type != 'q'){
if( type != ARTICHOKE && type != BEET && type != CARROT ){
printf("请选择输入a到c之间的字母,或者输入q退出:\n");
continue;
}
printf("您输入你要订购的磅数:");
scanf("%lf",&pound);
pound_count += pound;
switch(type){
case ARTICHOKE:
artichoke_pound = pound;
artichoke_fee = pound*ARTICHOKE_PRICE;
break;
case BEET:
beet_pound = pound;
beet_fee = pound*BEET_PRICE;
break;
case CARROT:
carrot_pound = pound;
carrot_fee = pound*CARROT_PRICE;
break;
} }
if (pound_count <= WEIGHT_LEVEL1){
ship_fee = SHIP_FEE_LEVEL1;
} else if(pound_count > WEIGHT_LEVEL1 && pound_count < WEIGHT_LEVEL2){
ship_fee = SHIP_FEE_LEVEL2;
} else {
ship_fee = SHIP_FEE_LEVEL3_BASE+ (pound_count*0.1);
} fee_count = ship_fee+artichoke_fee+beet_fee+carrot_fee;
if (fee_count>DISCOUNT_BASE){
discount_count = DISCOUNT_BASE*DISCOUNT;
}
order_count = fee_count-discount_count+ship_fee; printf("你共订购了%.2f磅蔬菜,平均每磅%.2f美元 \n",pound_count,order_count/pound_count);
if (artichoke_fee>){
printf("订购了朝鲜蓟%.2f磅 共%.2f美元\n",artichoke_pound,artichoke_fee);
}
if (beet_fee>){
printf("订购了甜菜%.2f磅 共%.2f美元\n",beet_pound,beet_fee);
}
if (carrot_fee>){
printf("订购了胡萝卜%.2f磅 共%.2f美元\n",carrot_pound,carrot_fee);
}
printf("共%.2f美元 折扣优惠%.2f \n",fee_count,discount_count);
if (ship_fee>){
printf("运费共%.2f \n",ship_fee);
} printf("订单金额%.2f\n",order_count);
return ;
}

c primer plus(五版)编程练习-第七章编程练习的更多相关文章

  1. 实验楼课程管理程序-深入学习《C++ Primer第五版》实验报告&学习笔记1

    本片博客为实验楼的训练营课程深入学习<C++ Primer第五版>的实验报告和学习笔记. 原课程地址为:https://www.shiyanlou.com/courses/405# 原文出 ...

  2. C++ 11 从C++ primer第五版的学习笔记

    1. auto (page107) auto 推断会忽略const   const int ci = i, & cr = ci; auto b = ci; // b is an int (to ...

  3. 《C++Primer》第五版习题解答--第四章【学习笔记】

    [C++Primer]第五版习题解答--第四章[学习笔记] ps:答案是个人在学习过程中书写,可能存在错漏之处,仅作参考. 作者:cosefy Date: 2020/1/11 第四章:表达式 练习4. ...

  4. 《C++Primer》第五版习题答案--第六章【学习笔记】

    <C++Primer>第五版习题答案--第六章[学习笔记] ps:答案是个人在学习过程中书写,可能存在错漏之处,仅作参考. 作者:cosefy Date: 2020/1/16 第六章:函数 ...

  5. C++PRIMER第五版练习题答案第一章

    C++PRIMER第五版练习题答案第一章 应该有很多小伙伴和我一样,闲来无事买了本C++的书自己啃,课后的练习题做的很揪心,这里我分享下我写的答案,希望能帮助到你,提供源码,就不跑了哈,毕竟现在是第一 ...

  6. [书籍翻译] 《JavaScript并发编程》第七章 抽取并发逻辑

    本文是我翻译<JavaScript Concurrency>书籍的第七章 抽取并发逻辑,该书主要以Promises.Generator.Web workers等技术来讲解JavaScrip ...

  7. C++Primer第五版学习笔记

    <C++ Primer>Learning Note 程序实例下载地址:http://www.informit.com/title/0321714113 第一章            开始 ...

  8. 《C++Primer》第五版习题答案--第三章【学习笔记】

    [C++Primer]第五版[学习笔记]习题解答第三章 ps:答案是个人在学习过程中书写,可能存在错漏之处,仅作参考. 作者:cosefy Date: 2020/1/10 第三章:字符串,向量和数组 ...

  9. C++Primer第五版——习题答案和解析

    感谢原文博主的分享:https://blog.csdn.net/misayaaaaa/article/details/53786215 新手入门必看的书.知识是一个系统化并且相互关联的体系,零散的东西 ...

随机推荐

  1. NGUI之scroll view的制作和踩坑总结

    之前也看了不少童鞋谢了关于NGUI的scroll view的制作下面我写下自己的制作过程以及心得,希望对童鞋们有所帮助.1.首先建立一个960*640的背景参考http://game.ceeger.c ...

  2. MathType有哪些功能

    随着寒流呼呼来临,期末考也不放过我们,不知道你们是在题海里遨游,还是已做好了挑战准备呢.不管你是哪种情况,现在就有一款玩转理工科的强大编辑公式强悍来袭,不管你是学生.教师,还是理科专业工作者,Math ...

  3. java 正则表达式验证

    package com.fsti.icop.util.regexp; import java.util.regex.Matcher; import java.util.regex.Pattern; p ...

  4. 编写高性能的jQuery代码

    jQuery Optimization 现在jQuery已经出现在很多项目中,然而许多同学忽略了他的性能问题以及代码质量问题, 下面是我对jQuery的一些性能方面的学习. 选择器 选择器是jQuer ...

  5. ubuntu13.10更换源

    Ubuntu13.10更新源 不同的网络状况连接以下源的速度不同, 建议在添加前手动验证以下源的连接速度(ping下就行),选择最快的源可以节省大批下载时间. 首先备份源列表: sudo cp /et ...

  6. NHibernate初学五之关联一对多关系

    1:创建两张表T_Country.T_Person:其中T_Person表中有一个CountryID对应T_Country的ID,一个Country可以对应多个Person CREATE TABLE ...

  7. C#导出Excel按照指定格式设置单元格属性值

    最近项目中一直在写XML.Table.Excel之间的转化.之前一直都是不考虑格式的导出,今天给出一个格式,让按照格式导出,还真把我这新手为难了一翻,网上给出的资料基本一样.为了一个单元格文字变色纠结 ...

  8. 改善C#程序的建议5:引用类型赋值为null与加速垃圾回收

    http://www.cnblogs.com/luminji/archive/2011/04/07/2007205.html 在标准的Dispose模式中(见前一篇博客“C#中标准Dispose模式的 ...

  9. C#获取CPU处理器核心数量的方法_C#教程

    https://yq.aliyun.com/ziliao/89096 摘要: 本文讲的是C#获取CPU处理器核心数量的方法_C#教程, 有几条不同的处理器信息,您可以获得有关的信息:物理处理器数量.核 ...

  10. VS------修改项目命名空间

    1.以文本形式打开此文件 2.修改一下部分 3.vs会自动提示,选择“放弃”即可