2019独角兽企业重金招聘Python工程师标准>>>

1、设计一个程序,统计从输入到文件结尾为止的字符数。

#include <stdio.h>int main(void)
{int i;for(i=0; getchar() != EOF; i++);printf("There are %d char",i);return 0;
}

2、编写一个程序,把输入作为字符流读取,直到遇到EOF。令该程序打印每个输入字符及其ASCII编码的十进制值。注意在ASCII序列中空格字符 前面的字符 是非打印字符,要特殊处理这些字符。如果非打印字符是换行符或制表符,则分别打印\n或\t。否则,使用控制字符符号。例如,ASCII 的1是ctrl+A,可以显示为^A。注意A的ASCII值是ctrl+A的值加64。对其他非打印字符也保持相似的关系。除每次遇到一个换行符时就开始一个新行之外,每行打印10对值。

#include <stdio.h>int main(void)
{char ch;int i;for(i=1; (ch=getchar()) != EOF; i++){if (ch >= ' ' || ch == '\n' || ch == '\t')printf("%-5c",ch);elseprintf("^%-4c",ch+64);printf("%-5d",ch);if(i%8 == 0) printf("\n");}return 0;
}

3、编写一个程序,把输入作为字符流读取,直到遇到EOF。令其报告输入中的大写字母个数和小写字母个数。假设小写字母 的数值是连续的,大写字母也是如此。或者你可以使用ctype.h库中合适的函数来区分大小写。

#include <stdio.h>
#include <ctype.h>
int main(void)
{char ch;int i,l=0,u=0;for (i=0;(ch=getchar())!='#';i++){if(islower(ch))l++;else if (isupper(ch))u++;else printf("%c is not a char !\n",ch);}printf("There are %d chars, lower is %d,upper is %d.\n",i,l,u);return 0;
}

4、 编写一个程序,把输入作为字符流读取,直到遇到EOF。令其报告每个单词的平均字母数。不要将空白字符记为单词中的字母。实际上标点符号也不应该计算,但现在不必考虑这一点(如果您想做的好一些,可以考虑使用ctype.h中的ispunct()函数)。

#include <stdio.h>
#include <ctype.h>
#include <stdbool.h>
#define STOP '|'
int main (void)
{char c;              //读入字符char prev;           //前一个读入字符long n_chars = 0L;   //字符数int n_lines = 0;     //行数int n_words = 0;     //单词数int p_lines = 0;     //不完整的行数bool inword = false; //标志:如果c在一个单词中,则inword等于trueprintf("Enter text to be analyzed (| to terminate): \n");prev='\n';           //用于识别完整的行while ((c=getchar())!=STOP){n_chars++;       //统计字符if (c=='\n')n_lines++;   //统计行数if(!isspace(c) && !inword)//如果c不是空白字符,且c不在一个单词里{inword = true;//开始一个新单词n_words++;    //统计单词}if(isspace(c) && inword)inword = false;//到达单词尾部prev = c;          //保存字符值}if(prev!='\n')p_lines = 1;printf("characters = %ld,words = %d,lines = %d ",n_chars,n_words,n_lines);printf("partial lines = %d\n",p_lines);return 0;
}

5、修改程序清单8.4中的猜测程序,使其使用更智能的猜测策略。例如,程序最初猜50,让其询问用户该猜测值是大是小还是正确。如果该猜测值小,则下一次猜测值为50和100的中值,即75.如果75大,则下一次猜测75和50的中值,等等。使用这种二分搜索策略。起码如果用户没有欺骗,该程序很快会获得正确答案。

#include <stdio.h>
int main (void)
{int guess,max=100,min=1;char response;printf("Pick an integer from 1 to 100.I will try to guess ");printf("it.\nRespond with a b if my guess is big and with");printf("\nan l if it is little.\n");printf("Also,Respond a y if it is right.\n");printf("Uh...is your number %d?\n", guess = ( max + min ) / 2 );while ((response=getchar())!='y'){if(response=='b'){max=guess-1;printf("Well,then,is it %d?\n",guess = ( max + min ) / 2 );}else if (response=='l'){min=guess+1;printf("Well,then,is it %d?\n",guess = ( max + min ) / 2 );}elseprintf("Sorry,I understand only y or n.\n");while(getchar() != '\n');}printf("I know I cloud do it.\n");return 0;
}

6、修改程序清单8.8中的get_first()函数,使其返回遇到的第一个非空白字符,在一个简单的程序中测试该函数。

#include <stdio.h>
char get_first(void);
int main (void)
{char ch;while ((ch=get_first())!=EOF){putchar(ch);}return 0;
}char get_first(void)
{int ch;while (isspace(ch=getchar())); /*获取一个字符并赋给ch,如果是空白字符则被丢弃*/while (getchar()!='\n');/*跳过本行剩余部分*/return ch;
}

7、修改第7单中的练习8,使菜单选项由字符代替数字进行标记。

#include<stdio.h>
#include<ctype.h>
char get_first(void);//b.加班
#define TIME 40  //加班(超过TIME小时) =
#define ADD  1.5  //ADD倍的时间
//c.税率
#define LIMIT1 300  //前LIMIT1美元为RATE1
#define RATE1 0.15
#define LIMIT2 150  //下一个LIMIT2美元为RATE2
#define RATE2 0.20
#define RATE3 0.25 //余下的位RATE3int main(void)
{double basic,hours,gross,tax;printf("Enter the number corresponding to the desired pay rate or action:\n");printf("1) $8.75/hr\t\t\t2) $9.33/hr\n");printf("3) $10.00/hr\t\t\t4) $11.20/hr\n");printf("5) quit\n");switch( get_first() ){case '1': basic = 8.75; break;case '2': basic = 9.33; break;case '3': basic = 10.00; break;case '4': basic = 11.20; break;default: printf("quit\n"); return(0); //退出程序}printf("you have select $%.2lf\n",basic);printf("input the work hours of a week:");scanf("%lf",&hours);if (hours > 40) hours = 40 + (hours - 40) * 1.5;gross = hours * basic;printf("gross income:\t\t%lf\n",gross);if (gross <= LIMIT1) tax = gross * RATE1;else if (gross <= LIMIT2) tax = LIMIT1 * RATE1 + (gross - LIMIT1) * RATE2;else tax = LIMIT1 * RATE1 + LIMIT2 * RATE2 + (gross - LIMIT1 - LIMIT2) * RATE3;printf("tax:\t\t\t%lf\n",tax);printf("net income:\t\t%lf\n",gross - tax);return(0);
}char get_first(void) //得到字符串中的第一个非空字符
{int ch;while( isspace( ch = getchar() ) );while ( getchar() != '\n');return ch;
}

8、编写一个程序,显示一个菜单,为您提供加法、减法、乘法或除法的选项。获得您的选择后,该程序请求两个数,然后执行您选择的操作。该程序应该只接受它所提供的菜单选项。它应该使用float类型的数,并且如果用户未能输入数字应允许其重新输入。在除法的情况中,如果用户输入0作为第二个数,该程序应该提示用户输入一个新的值。

#include <stdio.h>
char get_choice(void);
char get_first(void);
float get_float(void);
int main(void)
{char choice;float num1,num2;while((choice=get_choice())!='q'){printf("Enter first number:");num1 = get_float();printf("Enter second number:");num2 = get_float();while( choice == 'd' && num2 == 0){printf("Enter a number other than 0:");num2 = get_float();}switch (choice){case 'a': printf("%.2f + %.2f = %.2f\n",num1, num2, num1 + num2);break;case 's': printf("%.2f - %.2f = %.2f\n",num1, num2, num1 - num2);break;case 'm': printf("%.2f * %.2f = %.2f\n",num1, num2, num1 * num2);break;case 'd': printf("%.2f / %.2f = %.2f\n",num1, num2, num1 / num2);break;default: break;}}printf("Bye.\n");return 0;
}char get_choice(void)  /*显示选项,并返回选项*/
{char choice;printf("Enter the operation of your choice:\n");printf("a.add            s.subtract:\n");printf("m.multiply       d.divide\n");printf("q.quit\n");choice = get_first();while( choice != 'a' && choice != 's' && choice != 'm' && choice != 'd' && choice != 'q'){printf("Please respond with  a,s,m,d, or q.\n");choice=get_first();}return choice;
}char get_first(void)
{int ch;while( isspace( ch = getchar() ) );while ( getchar() != '\n');return ch;
}float get_float(void)
{float num;char str[40];while ((scanf("%f",&num))!=1){gets(str);printf("%s is not a number.\n",str);printf("Please enter a number such as 2.5, -1.78E8, or 3:");}while (getchar()!='\n');  /*不要忘记跳过多余的输入部分*/return num;
}

转载于:https://my.oschina.net/idreamo/blog/705971

C Primer Plus 第8章 字符输入/输出和输入确认 8.11 编程练习答案相关推荐

  1. C Primer Plus 第8章 字符输入/输出和输入确认 8.1 单字符I/O

    2019独角兽企业重金招聘Python工程师标准>>> 8.1  单字符I/O:getchar()和putchar() getchar()和putchar()每次输入和输出一个字符. ...

  2. C++为什么空格无法输出_C 语言 第8章-字符输入/输出和输入验证

    1. 缓存区 #include 大部分系统在用户按下 Enter 键之前不会重复打印刚输入的字符,这种输入叫缓冲输入.用户输入的字符被收集并存储在缓冲区(buffer). 把若干字符作为一个块进行传输 ...

  3. 【《C Primer Plus》读书笔记】第8章:字符输入/输出和输入验证

    [<C Primer Plus>读书笔记]第8章:字符输入/输出和输入验证 8.1 单字符I/O 8.2 缓冲区 概念 为什么要引入缓冲区? 缓冲区的类型 ANSI C 缓冲区的大小 缓冲 ...

  4. C Primer Plus 第13章 文件输入/输出 13.11 编程练习答案

    2019独角兽企业重金招聘Python工程师标准>>> 1.修改程序清单13.1中的程序,使之不采用命令行参数,而是请求用户输入文件名并读入用户的响应. (程序清单13.1示范了如何 ...

  5. 《C++ Primer》第9章 9.3节习题答案

    <C++ Primer>第9章 顺序容器 9.3节顺序容器操作习题答案 练习9.18:编写程序,从标准输入读取string序列,存入一个deque中.编写一个循环,用迭代器打印deque中 ...

  6. 《C++ Primer》第15章 15.4节习题答案

    <C++ Primer>第15章 面向对象程序设计 15.4节 抽象基类 习题答案 练习15.15:定义你自己的Disc_quote和Bulk_quote. [出题思路]本题练习实现不同折 ...

  7. 第4章 字符串和格式化输入/输出

    学习笔记--<C Primer Plus> 第4章 字符串和格式化输入/输出 4.1 前导程序 4.2 字符串简介 4.2.1 char 类型数组和 null 字符 4.2.2 使用字符串 ...

  8. C Primer Plus第三章总结

    C Primer Plus第三章总结 关于整数和浮点数 关于整数的常用的关键词有:char.int .long.longlong.unsigned-- 浮点数常用的关键词有:double.float ...

  9. c primer plus 第五章编程练习

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 目录 文章目录 前言 ##1.编写一个程序,把用分钟表示的时间转换成用小时和分钟表示的时间.使用#define或const创 ...

最新文章

  1. 小冰拉开人生第二幕:AI时代的“Office”问世,你的虚拟男友“复活”了
  2. DynamicPropertyAccessor Expression lambda
  3. MySQL源码学习:MySQL中禁止跨库访问的实现
  4. 为pc编译配置安装当前最新的内核
  5. mybatis中,collection配置后查询只显示一条记录
  6. matlab中求方差的,matlab中求方差为什么除以n-1?
  7. Delphi的Indy通信中发送流文件的注意事项
  8. android3.0新功能,PCWorld:Android 3.0最受期待的五大新功能
  9. ftp服务器的作用及意义,FTP服务器的作用
  10. 【Golang】JSON Marshal Unmarshal
  11. python中输入字符串_python如何输入字符串
  12. 个人博客建设——Hexo主题icarus的_config.icarus.yml配置参数注释
  13. Predicting microRNA–disease associations from lncRNA–microRNA interactions via Multiview Multitask
  14. C++程序设计课程设计报告——自助点餐系统
  15. 单片机交通灯数码管c语言程序,51单片机C语言实现交通灯(红绿灯)源程序.doc
  16. python-函数(function)
  17. 基于区块链技术nbsp;Bitt推出巴巴…
  18. 同志们,免费版的Ant Design Pro Vue3 来啦
  19. python外星人入侵游戏图片_Python外星人入侵游戏编程完整版
  20. Python项目实战学习 外星人入侵 创建外星人飞船并实现外星人动态移动效果

热门文章

  1. Linux 内核漏洞可用于逃逸 Kubernetes 容器
  2. 安卓修复已遭在野利用的内核 0day 漏洞
  3. 重磅|前浪、后浪 一起迎接风口! BCS 2020向全球发起议题征集
  4. 你必须知道的 SmartSql !
  5. Java多线程——带你看AQS框架源码
  6. AR VR或将彻底变革广告营销行业
  7. 云计算网络基础第一天
  8. ios沙盒查找图片展示
  9. Python的那些隐藏特性
  10. 验证码识别服务提供商