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)下编写调试***** 由于部分编译器对标准遵循的不同以及自身额外的扩展,本章书中的少数知识点与实际实现存在偏差 ...
随机推荐
- 通过iframe引入另外一个项目中的html片段到项目中,解决样式,高度,兼容等问题的策略
<!--尾部开始--> <iframe src="http://172.16.24.11:9000/cartoon-web/footer_new" m ...
- Universal-Image-Loader完全解析--从源代码分析Universal-Image-Loader中的线程池
一般来讲一个网络访问就需要App创建一个线程来执行,但是这也导致了当网络访问比较多的情况下,线程的数目可能积聚增多,虽然Android系统理论上说可以创建无数个线程,但是某一时间段,线程数的急剧增加可 ...
- cocos2d-x 游戏开发之有限状态机(FSM) (一)
cocos2d-x 游戏开发之有限状态机(FSM) (一) 参考:http://blog.csdn.net/mgphuang/article/details/5845252<Cocos2d-x游 ...
- OpenCV分通道显示图片,灰度,融合,直方图,彩色直方图
代码有参考跟整合:没有一一列出出处 // split_rgb.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <io ...
- linux文件查找及操作
在linux下查找文件的办法最常用的就是find指令,让我们来看一下find指令如何来使用吧: find find . -name txt //在当前目录查找名字为txt的文 ...
- LeetCode(33)-Pascal's Triangle II
题目: Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3, Return ...
- 如何在Eclipse CDT中编译含有多个main函数的项目
最近在杭电ACM上做题,使用的C++工具是Eclipse,但是Eclipse CDT不能同时存在多个main函数的文件,上网也搜了很多资料,但是按他们的步骤来,还是不能实现自己想要的效果.经过一下午的 ...
- LeetCode - 验证二叉搜索树
给定一个二叉树,判断其是否是一个有效的二叉搜索树. 一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数. 节点的右子树只包含大于当前节点的数. 所有左子树和右子树自身必须也是二叉搜索树. ...
- palindrome number(回文数)
Determine whether an integer is a palindrome. Do this without extra space. Some hints: Could negativ ...
- 北京一家JAVA开发公司面试题(留给后人)
1.jsp有哪些内置对象?作用分别是什么? 2.描述一下servlet的生命周期和基本架构. 3.多线程有几种实现方法,都是什么? 同步有几种实现方法,都是什么? 4.作用域public priv ...