C Primer Plus 第8章 字符输入/输出和验证输入 编程练习
1.
#include <stdio.h>
int main(){
char ch;
int ct = 0;
while ((ch=getchar()) != EOF)
ct++;
printf("%d characters read.", ct);
return 0;
}
2.
#include <stdio.h>
int main(){
char ch;
int ct = 0;
while ((ch = getchar()) != EOF)
{
if (ch >= 32){
putchar(ch);
printf("/%d ",ch);
ct++;
}
else if (ch == '\n'){
printf("\\n");
putchar(ch);
ct = 0; //因为要换新的一行了所以ct清0
}
else if (ch == '\t'){
printf("\\t");
ct++;
}
else //打印控制字符
{
putchar('^');
putchar(ch + 64);
printf("/%d ", ch);
}
if (ct == 10){
printf("\n");
ct = 0;
}
}
return 0;
}
3.
#include <stdio.h>
#include <ctype.h>
int main(){
char ch;
int a,b,c;
a = b = c = 0;
while ((ch = getchar()) != '#')
{
if (isupper(ch))
a++;
else if (islower(ch))
b++;
else c++;
}
printf("capital:%d lower case:%d other:%d", a, b, c);
return 0;
}
4.
#include <stdio.h>
#include <ctype.h> //用来区分字母和字母的大小写
#include <stdbool.h>
int main(){
char ch;
bool inword = false;
int n_chars = 0;
int n_words = 0;
int value;
while ((ch = getchar()) != '#')
{
if (isalpha(ch))
n_chars++;
if (!isspace(ch) && !inword)
{
inword = true; //开始一个新的单词
n_words++; //单词加1
}
if (isspace(ch) && inword)
inword = false; //单词结束
}
value = n_chars / n_words ;
printf("chars : %d\n", n_chars);
printf("words : %d\n", n_words);
printf("average value : %d", value);
return 0;
}
5.
#include <stdio.h>
//如果50太大,则50变为最大值。反之则为最小值。
int main(){
char ch;
int guess = 50, MAX = 100, MIN = 0;
printf("Uh...is your number is %d\n",guess);
while ((ch = getchar()) != 'y')
{
if (ch == 'b') {
MAX = guess;
guess = (guess + MIN) / 2;
printf("Well, then, is it %d\n",guess);
}
else if (ch == 'l') {
MIN = guess;
guess = (guess + MAX) / 2;
printf("Well, then, is it %d\n",guess);
}
else printf("Sorry, I understand only big , less , yes.\n");
while ((ch = getchar()) != '\n')
continue;
}
printf("I konw i could do it");
return 0;
}
6.
//重要!!
char get_first(void){
char ch;
while((ch = getchar()) == '\n')
continue;
while (getchar() != '\n')
continue;
return ch;
}
7.
#include <stdio.h>
char get_choice(void);
char get_first(void);
#define WORK_OVERTIME 40
#define RATE1 0.15
#define RATE2 0.20
#define RATE3 0.25
#define BREAK1 300.0
#define BREAK2 450.0
#define BASE1 (BREAK1 * RATE1)
#define BASE2 (BASE1 + ((BREAK2 - BREAK1) * RATE2))
int main(void) {
int hr;
char choice;
double wage,income,tax,wage2;
printf("------------------------------------------------------------------------\n");
printf("Enter the number number corresponding to the desired pay rate or action:\n");
printf("a) $8.15/hr b) $9.33/hr\n");
printf("c) $10.00/hr d) $11.20/hr\n");
printf("q) quit\n");
printf("------------------------------------------------------------------------\n");
printf("Please enter your choise:");
while (choice = get_choice() ){
if (choice == 'q')
break;
switch (choice){
case 'a': wage2 = 8.75;
break;
case 'b': wage2 = 9.33;
break;
case 'c': wage2 = 10.00;
break;
case 'd': wage2 = 11.20;
break;
}
printf("Please enter the hours:");
scanf("%d",&hr);
if (hr <= WORK_OVERTIME)
wage = hr * wage2;
else wage = WORK_OVERTIME * wage2 +((hr - WORK_OVERTIME) * wage2 * 1.5);
if (wage <= BREAK1){
tax = wage * RATE1;
}
else if (wage > 300 && wage <= 450 ){
tax = BASE1 + (wage - BREAK1) * RATE2;
}
else tax = BASE2 + (wage - BREAK2) * RATE3;
income = wage - tax;
printf("The wage: %.2f income:%.2lf tax:%.2lf\n", wage, income, tax);
printf("------------------------------------------------------------------------\n");
printf("Enter the number number corresponding to the desired pay rate or action:\n");
printf("1) $8.15/hr 2) $9.33/hr\n");
printf("3) $10.00/hr 4) $11.20/hr\n");
printf("5) quit\n");
printf("------------------------------------------------------------------------\n");
printf("Please enter your choise:");
}
return 0;
}
//get_choice 输入正确的符号
char get_choice(void){
char ch;
ch = get_first();
while (ch != 'q' && (ch < 'a' || ch > 'd')){
printf("Please enter the : a b c d q\n");
printf("Please enter your choise:");
ch = get_first();
}
return ch;
}
//get_first 读取第一个符号 扔掉其他符号
char get_first(void){
int ch;
ch = getchar();
while (getchar() != '\n')
continue;
return ch;
}
8.
#include <stdio.h>
char get_choice(void);
char get_first(void);
double get_number(void);
int main(void){
char choice;
double num1,num2,result;
while ((choice = get_choice()) != 'q'){
printf("Enter the first number:");
num1 = get_number();
printf("Enter the second number:");
num2 = get_number();
if (choice == 'a') {
result = num1 + num2;
printf("%.1lf + %.1lf = %.1lf\n", num1, num2, result);
}
if (choice == 's') {
result = num1 - num2;
printf("%.1f - %.1f = %.1f\n", num1, num2, result);
}
if (choice == 'm') {
result = num1 * num2;
printf("%.1f * %.1f = %.1f\n", num1, num2, result);
}
if (choice == 'd') {
if (num2 == 0) {
printf("Enter a number other than 0: ");
num2 = get_number();
result = num1 / num2;
printf("%.1f / %.1f = %.1f\n", num1, num2, result);
} else
printf("%.1f / %.1f = %.1f\n", num1, num2, result);
}
}
return 0;
}
char get_choice(void){
char ch;
printf("Enter the operation of your choice:\n");
printf("a. add s. subtract\n");
printf("m. multiply d. divide\n");
printf("q. quit\n");
ch = get_first();
while ((ch != 'a') && (ch != 's') && (ch != 'm') && (ch != 'd') && (ch != 'q')){
printf("Please choice such as a s m d q:");
ch = get_first();
}
return ch;
}
char get_first(void){
char ch;
while((ch = getchar()) == '\n')//ch = getchar();之前用的的是这个,结果总是把回车给ch
continue; //还总是检查不出来问题,终于找出来问题在哪里了。!!
while (getchar() != '\n')
continue;
return ch;
}
double get_number(void){
double num;
char ch;
while (scanf("%lf", &num) != 1){
while ((ch = getchar()) != '\n')
putchar(ch); //处理错误的输入。
printf("is not an number.\n");
printf("Please enter a number , such as 2.5, -1.78E8, or 3:");
}
return num;
}
C Primer Plus 第8章 字符输入/输出和验证输入 编程练习的更多相关文章
- 【C语言学习】《C Primer Plus》第8章 字符输入/输出和输入确认
学习总结 1.缓冲区分为完全缓冲区(fully buffered)I/O和行缓冲区(line-buffered)I/O.对完全缓冲输入来说,当缓冲区满的时候会被清空(缓冲区内容发送至其目的地).这类型 ...
- C Primer Plus_第10章_数组和指针_编程练习
1. /*rain.c 针对若干年的降水量数据,计算年降水总量.年降水平均量,以及月降水平均量*/ #include <stdio.h> #define MONTHS 12 #define ...
- C Primer Plus 第5章 运算符、表达式和语句 编程练习
1. #include <stdio.h> ; int main(void) { int min, hour, lmin; printf("请输入分钟数: \n"); ...
- C Primer Plus_第8章_字符输入输出和输入确认_编程练习
1.题略 #include <stdio.h> int main(void) { ; printf("Please enter text here(end with Ctrl + ...
- C Primer Plus_第6章_循环_编程练习
1.题略 #include int main(void) { int i; char ch[26]; for (i = 97; i <= (97+25); i++) { ch[i-97] = i ...
- C Primer Plus_第5章_运算符、表达式和语句_编程练习
Practice 1. 输入分钟输出对应的小时和分钟. #include #define MIN_PER_H 60 int main(void) { int mins, hours, minutes; ...
- C Primer Plus_第四章_字符串和格式化输入输出_编程练习
Practice 1.输入名字和姓氏,以"名字,姓氏"的格式输出打印. #include int main(void) { char name[20]; char family[2 ...
- Windows程序设计(第五版)学习:第四章 文本输出
第四章 文本输出 1,客户区:整个应用程序窗口中没有被标题栏.边框.菜单栏.工具栏.状态栏和滚动条占用的区域.简而言之,客户区就是窗口中程序可以在上面绘制并向用户传达可视化信息的区域. 2,大多数 ...
- C++ Primer 5th 第2章 变量和基本类型
*****代码在Debian g++ 5.3.1 / clang++ 3.8(C++11)下编写调试***** 由于部分编译器对标准遵循的不同以及自身额外的扩展,本章书中的少数知识点与实际实现存在偏差 ...
随机推荐
- 【嵌入式开发】C语言 命令行参数 函数指针 gdb调试
. 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/21551397 | http://www.hanshul ...
- 华为机试题【13】-wave数组找字母游戏
题目描述: Word Maze 是一个网络小游戏,你需要找到以字母标注的食物,但要求以给定单词字母的顺序吃掉.如上图,假设给定单词if,你必须先吃掉i然后才能吃掉f. 但现在你的任务可没有这么简单,你 ...
- mysql进阶(八)怎么对varchar类型排序问题
MySQL中怎么对varchar类型排序问题 asc 升级 desc降序 在mysql默认order by 只对数字与日期类型可以排序,但对于varchar字符型类型排序好像没有用了,下面我来给各位同 ...
- 《java入门第一季》之面向对象this关键字
/* 起名字要做到见名知意. this:是当前类的对象引用.简单的记,它就代表当前类的一个对象. 注意:谁调用这个方法,在该方法内部的this就代表谁. this的场景: 解决局部变量隐藏成员变量 * ...
- 仿百度壁纸客户端(五)——实现搜索动画GestureDetector手势识别,动态更新搜索关键字
仿百度壁纸客户端(五)--实现搜索动画GestureDetector手势识别,动态更新搜索关键字 百度壁纸系列 仿百度壁纸客户端(一)--主框架搭建,自定义Tab + ViewPager + Frag ...
- 【Android 应用开发】Android中的回调Callback
回调就是外部设置一个方法给一个对象, 这个对象可以执行外部设置的方法, 通常这个方法是定义在接口中的抽象方法, 外部设置的时候直接设置这个接口对象即可. 例如给安卓添加按钮点击事件, 我们创建了OnC ...
- 一键安装 redmine on rhel6.4
一键安装 redmine on rhel6.4 一键式安装redmine省去了大量不必要的时间.下载:bitnami-redmine-2.5.2-1-linux-x64-installer.run. ...
- Linux - 停机常用的anacron
什么是 anacron anacron 并不是用来取代 crontab 的,anacron 存在的目的就在於我们上头提到的,在处理非 24 小时一直启动的 Linux 系统的 crontab 的运行! ...
- Android绘图机制(四)——使用HelloCharts开源框架搭建一系列炫酷图表,柱形图,折线图,饼状图和动画特效,抽丝剥茧带你认识图表之美
Android绘图机制(四)--使用HelloCharts开源框架搭建一系列炫酷图表,柱形图,折线图,饼状图和动画特效,抽丝剥茧带你认识图表之美 这里为什么不继续把自定义View写下去呢,因为最近项目 ...
- 使用微服务架构思想,设计部署OAuth2.0授权认证框架
1,授权认证与微服务架构 1.1,由不同团队合作引发的授权认证问题 去年的时候,公司开发一款新产品,但人手不够,将B/S系统的Web开发外包,外包团队使用Vue.js框架,调用我们的WebAPI,但是 ...