编译环境VS Code+WSL GCC 源码请到文末下载 。 我给第一题写了Linux shell脚本,感兴趣的同学可以尝试修改并运行一下。

/*第1题*************************/
#include<stdio.h>
int main(void)
{
int cnt = 0;
while (getchar() != EOF)
{
cnt++;
}
printf("总共读取了%d个字符\n",cnt);
return 0;
}
/*第2题*************************/
#include<stdio.h>
void format_print(int ch);
int main(void)
{
int cnt = 0,ch = 0;
while ((ch = getchar()) != EOF)
{
cnt++;
format_print(ch);
if(0 == cnt % 9)
putchar(10);
}
printf("\n总共读取了%d个字符\n",cnt);
return 0;
}
void format_print(int ch)
{
if(ch < 33)
{
printf("^%c:%-5d",ch+32,ch);
}
else if(ch < 127)
{
printf("%c:%-5d",ch,ch);
}
else
{
printf("END:%-5d",ch);
}
}
/*第3题*************************/
#include<stdio.h>
#include<ctype.h>
int main(void)
{
int cnt_lower = 0,cnt_upper = 0,ch = 0;
while ((ch = getchar()) != EOF)
{ if(islower(ch))
{
cnt_lower++;
}
else if (isupper(ch))
{
cnt_upper++;
}
}
printf("总共读取了%d个大写字母,%d个小写字母\n",cnt_upper,cnt_lower);
return 0;
}
/*第4题*************************/
#include<stdio.h>
#include<ctype.h>
#define YES -1
#define NO 0
int main(void)
{
int cnt_words = 0,cnt_alpha = 0,start_cnt = NO,ch = 0;
while ((ch = getchar()) != EOF)
{ if(isalpha(ch) && start_cnt == NO)
{ /*如果没有开始计数并且字符是个字母,则开始计数*/
start_cnt = YES;
}
else if (!isalpha(ch) && start_cnt == YES)
{ /*如果已经有开始计数并且字符不是个字母,则停止计数,单词数量+1*/
start_cnt = NO;
cnt_words++;
}
else if (isalpha(ch) && start_cnt == YES)
{ /*如果已经有开始计数并且字符是个字母,开始字母计数,字母数量+1*/
cnt_alpha++;
} }
printf("总共读取了%d单词,%d字母,平均每个单词%g个字母\n",cnt_words,cnt_alpha,1.0 * cnt_alpha / cnt_words);
return 0;
}
/*第5题*************************/
/* guess.c -- an inefficient and faulty number-guesser */
#include <stdio.h>
int main(void)
{
int guess_max = 100,guess_min = 0,guess = 50; printf("想一个1~100的整数,我会尝试猜出它!\n");
printf("如果我猜错了,请输入'n'\n如果我猜对了,请输入'y'\n");
printf("呃...你想的是 %d?\n", guess);
while (getchar() != 'y') /* get response, compare to y */
{
while (getchar() != '\n')/*清空stdin缓存*/
continue;
printf("你想的数比%d大吗?(y\\n)\n", guess);
if(getchar() == 'y')
{
guess_min = guess;
guess = (guess_max + guess_min) / 2;
}
else
{
guess_max = guess;
guess = (guess_max + guess_min) / 2;
}
while (getchar() != '\n')/*清空stdin缓存*/
continue;
printf("呃...你想的是 %d?\n", guess);
} printf("我就知道我能猜中!\n"); return 0;
} /*第6题*************************/
/* menuette.c -- menu techniques */
#include <stdio.h>
#include <ctype.h>
char get_choice(void);
char get_first(void);
int get_int(void);
void count(void);
int main(void)
{
int choice;
void count(void); while ( (choice = get_choice()) != 'q')
{
switch (choice)
{
case 'a' : printf("Buy low, sell high.\n");
break;
case 'b' : putchar('\a'); /* ANSI */
break;
case 'c' : count();
break;
default : printf("Program error!\n");
break;
}
}
printf("Bye.\n"); return 0;
} void count(void)
{
int n,i; printf("Count how far? Enter an integer:\n");
n = get_int();
for (i = 1; i <= n; i++)
printf("%d\n", i);
while ( getchar() != '\n')
continue;
} char get_choice(void)
{
int ch; printf("Enter the letter of your choice:\n");
printf("a. advice b. bell\n");
printf("c. count q. quit\n");
ch = get_first();
while ( (ch < 'a' || ch > 'c') && ch != 'q')
{
printf("Please respond with a, b, c, or q.\n");
ch = get_first();
} return ch;
} char get_first(void)
{
int ch;
while (isspace(ch = getchar()))
continue;
return ch;
} int get_int(void)
{
int input;
char ch; while (scanf("%d", &input) != 1)
{
while ((ch = getchar()) != '\n')
putchar(ch); // dispose of bad input
printf(" is not an integer.\nPlease enter an ");
printf("integer value, such as 25, -178, or 3: ");
} return input;
} /*第7题*************************/
#include<stdio.h>
#include<ctype.h>
//#define BASE_TIME 10
#define OVER_TIME (BASE_TIME * 1.5)
#define BASE_TAX 0.15
#define ADD_TAX 0.2
#define OTHER_TAX 0.25
int main()
{ //总工作时间,总工资,净工资,总税收
float work_times,all_salary,clear_salary,all_tax,BASE_TIME;
int case_num; while (1)
{
printf("*************************************\n\n");
printf("请输入数子对应的工资等级,输入q退出程序:\n");
printf("1) $8.75/hr 2) $9.33/hr\n");
printf("3) $10.0/hr 4) $11.2/hr\n");
printf("q) exit\n");
printf("*************************************\n");
if(!isalnum(case_num = getchar()))
{ //排除非数字和不在范围内
printf("输入错误,请重新输入!\n");
while (getchar() != '\n')
continue;//清理缓存
continue;//跳过下面的内容,重新开始循环
}
while (getchar() != '\n')
continue;//清理缓存
switch (case_num)
{
case '1':
BASE_TIME =8.75;
break;
case '2':
BASE_TIME =9.33;
break;
case '3':
BASE_TIME =10;
break;
case '4':
BASE_TIME =11.2;
break;
case 'q':
printf("程序退出!\n");
goto end;//跳出两重循环直接到程序结尾
default:
printf("输入错误,请重新输入!\n");
break;
}
}
printf("您一周工作了多少小时?\n");
scanf("%f",&work_times);
if(work_times > 40)
{
all_salary = (work_times * BASE_TIME) + (work_times - 40) * OVER_TIME;
}
else
{
all_salary = work_times * BASE_TIME;
} if(all_salary <= 300)
{
all_tax = all_salary * BASE_TAX;
}
else if(all_salary <= 450 && all_salary >300)
{
all_tax = 300 * BASE_TAX + (all_salary - 300) * ADD_TAX;
}
else
{
all_tax = 300 * BASE_TAX + 150 * ADD_TAX + (all_salary - 450) * OTHER_TAX;
}
clear_salary =all_salary - all_tax;
printf("总工作时间:%g\n总工资:%g\n净工资:%g\n总税收:%g\n",work_times,all_salary,clear_salary,all_tax);
end:return 0;
}
/*第8题*************************/
#include<stdio.h>
#include<ctype.h>
void calculator(int i);
int main()
{
int case_num;
while (1)
{
printf("*************************************\n\n");
printf("请选择计算符号,输入5退出程序:\n");
printf("1) + 2) -\n");
printf("3) * 4) /\n");
printf("5) exit\n");
printf("*************************************\n");
if(scanf("%d",&case_num) != 1 && case_num < 5 && case_num > 0)
{ //排除非数字和不在范围内
printf("输入错误,请重新输入!\n");
while (getchar() != '\n')
continue;//清理缓存
continue;//跳过下面的内容,重新开始循环
}
switch (case_num)
{
case 1:
calculator(case_num);
break;
case 2:
calculator(case_num);
break;
case 3:
calculator(case_num);
break;
case 4:
calculator(case_num);
break;
case 5: default:
printf("程序退出!\n");
return 0;
break;
}
}
}
void calculator(int i)
{
float l,r;
while (1)
{
printf("请输入两个数,例如2.1 3:\n");
if(scanf("%f %f",&l,&r) != 2)
{ //排除非数字和不在范围内
printf("输入错误,请重新输入!\n");
while (getchar() != '\n')
continue;//清理缓存
continue;//跳过下面的内容,重新开始循环
}
break;
}
switch (i)
{
case 1:
printf("%g + %g = %g\n",l,r,l+r);
break;
case 2:
printf("%g - %g = %g\n",l,r,l-r);
break;
case 3:
printf("%g * %g = %g\n",l,r,l*r);
break;
case 4:
printf("%g / %g = %g\n",l,r,l/r);
break;
default:
break;
}
}

C Primer Plus 第6版 第八章 编程练习参考答案的更多相关文章

  1. C Primer Plus 第六版—— 6.16 编程练习题(附代码)

    1.编写一个程序,创建一个包含26个元素的数组,并在其中存储26个小写字母.然后打印数组的所有内容. #include <stdio.h> int main(void) { int num ...

  2. c++ primer plus 第6版 部分二 5- 8章

    ---恢复内容开始--- c++ primer plus 第6版 部分二    5-  章 第五章 计算机除了存储外 还可以对数据进行分析.合并.重组.抽取.修改.推断.合成.以及其他操作 1.for ...

  3. C++ Primer Plus 第六版笔记

    C++ Primer Plus 第六版笔记 关于对象声明的思考 转自:http://www.cnblogs.com/weiqubo/archive/2009/11/02/1930042.html C+ ...

  4. C Primer Plus(第五版)1

    这是C Primer Plus(第五版)的第一章,上传上来主要是方便我进行做笔记,写注释,还有我会删掉一些“废话”等. 1.1 C语言的起源 贝尔实验室的 Dennis Ritchie 在1972年开 ...

  5. 【原创】一起学C++ 之指针、数组、指针算术 ---------C++ primer plus(第6版)

    C++ Primer Plus 第6版 指针和数组基本等价的原因在于指针算术! 一.指针 ⑴整数变量+1后,其值将增加1: ⑵指针变量+1后,增加的量等于它指向的类型的字节数: ⑶C++将数组名解析为 ...

  6. 推荐《C Primer Plus(第五版)中文版》【worldsing笔记】

      老外写的C书,看了你会有一种哇塞的感觉,这里提供PDF扫描版的下在,包含数内的例程,请大家支持原版!! C Primer Plus(第五版)中文版.pdf  下载地址:http://pan.bai ...

  7. 【原创】一起学C++ 之 字符串 ---------C++ primer plus(第6版)

    C++ Primer Plus 第6版 字符串:是存储在内存的连续字节中的一系列字符. C++处理字符串的方式有2种: 一.来自C语言.常被称为C-风格字符串(C-Style-string) 1)从字 ...

  8. C++ Primer中文版(第5版)

    <C++ Primer中文版(第5版)> 基本信息 作者: (美)Stanley B. Lippman(斯坦利 李普曼)    Josee Lajoie(约瑟 拉乔伊)    Barbar ...

  9. 《C++ Primer》 第四版 第7章 函数

    <C++ Primer> 第四版 第7章 函数 思维导图笔记 超级具体.很具体,图片版,有利于复习查看 http://download.csdn.net/detail/onlyshi/94 ...

  10. c++ primer plus 第6版 部分三 9章 - 章

    c++ primer plus 第6版                                               部分三 9章 - 章 第9章   内存模型和名称空间 1.单独编译 ...

随机推荐

  1. Vue绘制图片轮播组件【转载】

    基本要求:页面加载,自动播放.鼠标悬停,停止播放.鼠标离开,继续播放.点击左右箭头切换上一张,下一张图片.下方小圆点显示当前位第几张图片. 示例代码: 结构html: <template> ...

  2. 几张图带你了解.NET String

    String 字符串作为一种特殊的引用类型,是迄今为止.NET程序中使用最多的类型.可以说是万物皆可string 因此在分析dump的时候,大量字符串对象是很常见的现象 string的不可变性 str ...

  3. 顺序表(C语言)

    文章目录 1.定义顺序表结构体 2.初始化顺序表 3.插入元素 3.1顺序表头插 3.2 顺序表尾插 4.删除顺序表指定元素 5.查找元素 6.输出顺序表 7.销毁顺序表 在数据结构的世界里,顺序表是 ...

  4. Oracle-表分析和索引分析解读

    概述当表没有做分析的时候,Oracle 会使用动态采样来收集统计信息. 获取准确的段对象(表,表分区,索引等)的分析数据,是CBO存在的基石,CBO的机制就是收集尽可能多的对象信息和系统信息,通过对这 ...

  5. 题解:CF687C The Values You Can Make

    CF687C The Values You Can Make 题解 题目翻译感觉不明不白的(至少我看了几遍没看懂),这里给个较为清晰的题面. 题目描述 给你 \(n\) 个硬币,第 \(i\) 个硬币 ...

  6. Codeforces Round 987 (Div. 2)

    Codeforces Round 987 (Div. 2) 总结 A 常见的套路,将一个序列变为不下降序列所需要改变的值的最小数量,考虑最大能保留多少个,显然是求最长上升子序列,而这题给出的 \(a\ ...

  7. JVM中的Hello World是如何运行的?

    每一个Java开发者都是通过Hello World敲开面向对象世界的大门.但是在一开始,我们考虑的只是这个语言是什么样的,我们如何更好的编码,却很少有人关心他内部是怎么运行的.看下面一个简单的hell ...

  8. 抓包工具之MitmProxy

    官方文档: https://mitmproxy.org/ github:https://github.com/mitmproxy/mitmproxy 缘起: 之前使用过几个抓包工具, 例如fiddle ...

  9. FastExcel 合并单元格(相当的行数据,进行合并)

    目录 需求 思路 实现 Excel导出单元格全量合并策略 日期格式转换 接口代码 Service DTO 使用FastExcel数据导出:官网: https://idev.cn/fastexcel/z ...

  10. git gitignore文件不生效

    配置了 .gitigore 文件不生效,是刚开始将那些过滤的文件加到了版本控制.后续增加的,没有进入到版本控制 解决办法就是从版本控制移除,重新更新下gitignore文件 执行以下命令: 根据情况自 ...