《面向对象程序设计》课程作业二

  • github链接

  • 作业链接

编写一个程序,要求根据给定的圆的半径求圆的面积,并将求得的结果打印出来。……建立一个工程,将程序写成两个.cpp和一个.h的形式。

这个问题倒是没什么难的,但对于同学们来说是一个上手模块化的好开端。从现在开始,不是只为了AC而写代码,而是要写“有质量的代码”、“让别人看得懂的代码”。在我看来,每行每业都有前人总结的“经验”。那“高内聚低耦合”、“模块化”,这两条就是编程中很重要的两条道理。第一个是问题的粒度,如果问题的规模很大,就应该将其分模块,然后逐个攻破。这样子做代码结构、脉络清晰,使得思路容易分析,然后方便debug、合作编程和迭代。电脑还是挺死板的,你怎么打代码它就按照你的代码做。但如果你只是为了AC写代码,写出来的代码杂乱、命名不规范、格式乱套、没有分模块……让别人想看的欲望都没有,那你就不适应合作编程的要求。巨大的工程很难由一个人单独完成,刷boss也得组几个队友对不对?

1092156-20170427153759678-242645583.png

我之前的计算器作业中是有分多个文件的。但我在一个 .h 头文件中同时包括了函数声明和定义。这次的作业让我学到了一个只将声明放在 .h 中,而定义全放到新的 .cpp 文件中去。这样子做,如果别人想看你的代码能做到什么功能,只需看 .h 中的所有函数声明即可。

cin输入检测

基于栋哥上课提出的问题:

int a, b;
cin >> a >> b;
cout<< a + b;/* 输入 3a5输出 3 (a = 3,b = 0) */

下面节选自 人民邮电出版社《C++ Primer Plus》 第六版 第755页内容:

不同版本抽取运算符查看输入流的方式是相同的。跳过空白(空格、换行、制表符),直到遇到非空白字符。…… >> 运算符将读取一个指定类型的数据。

在上面这个例子中,输入 3a5 那么 3 赋值给了变量a,输入中的字符a会留在输入流中等待下一条 cin 语句。输入时没有满足程序期望的情况,例如上面的变量b,这种情况下,将不会改变变量b的值(因此,如果b有初始化的话,那么b会保持初始化的值)。cin中有一些状态,会设置为false。这个false的返回值可以让ifwhile语句来判定输入是否满足要求。

C++ 的一个与 C 最大的区别就在于类。C语言中用 %dscanf 的返回值这样的东西来检测输入。而 C++ 将其封装成各种成员函数。详细可以看看这两篇博客:

  • cin.fail() 示例代码简洁易懂。

  • cin.get,cin.clear以及cin.sync 这篇比较详细。

Something else

这个例子(输入3a5)让我想到了我之前的程序。我之前是写了挺多的输入检测方面的函数,比方说输入题目数量时可以检测出输入字符串并报错然后提示用户重新输入一遍。然后我猛地一想到好像类似于 3a5 的我没办法检测出来。

如图所示,在输入题目数量时,输入3a5。程序会认为用户输入的题目数量为3,然后a5留在缓冲区中等待下一条输入,并被检测答案输入的有效性的函数给挡住,并输出错误提示。

1092156-20170427153818334-1732316399.png

这是我之前的检测代码:

    while (scanf_s("%d", &input) != 1)//输入的不是%d{while ((ch = getchar()) != '\n')putchar(ch);//如果用户输入了字符串,就显示这个字符串,并且在显示“不符合要求”}

在这段之后再加上这一条

    while((ch = getchar()) != '\n' && ch != EOF);//清空缓存区

1092156-20170427153822647-212991495.png

转载于:https://www.cnblogs.com/ZCplayground/p/6774555.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/488483.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

报告 | 超级智能城市2.0 – 人工智能引领新风尚(附下载)

来源&#xff1a;智慧城市决策参考未来智能实验室是人工智能学家与科学院相关机构联合成立的人工智能&#xff0c;互联网和脑科学交叉研究机构。未来智能实验室的主要工作包括&#xff1a;建立AI智能系统智商评测体系&#xff0c;开展世界人工智能智商评测&#xff1b;开展互联…

icmp协议_ICMP协议【41】

1、回顾TCP/IP协议栈为了更有效地转发IP数据报和提高交付成功的机会......2、ICMP协议的简介(1)ICMP&#xff0c;全称为Internet Control Message Protocol&#xff0c;即网际控制报文协议、网际控制消息协议。(2)它是TCP/IP协议族的一个子协议&#xff0c;用于在IP主机、路由器…

java的字节码无法显示_【java】查看Java字节码文件内容的方法+使用javap找不到类 解决方法...

研究synchronized底层实现&#xff0c;涉及到查看java字节码的需要前提是&#xff0c;你的PC已经成功安装了JDK并别配置了环境变量。查看方法一.javap查看简约字节码方式1.准备一个java文件例如&#xff0c;文件所在目录在此处Student.java文件内容如下&#xff1a;packagecom.…

SparkR

SparkR 支持原创&#xff1a;http://blog.csdn.net/dr_guo/article/details/51377784 突然有个想法&#xff0c;R只能处理百万级别的数据&#xff0c;如果R能运行在Spark上多好&#xff01;搜了下发现13年SparkR这个项目就启动了&#xff0c;感谢美帝&#xff01; 1.你肯定得先…

彻底颠覆神经科学?神经信号可能不是电信号,而是机械波?!

来源&#xff1a;环球科学就职于哥本哈根尼尔斯玻尔研究所的托马斯亨伯格&#xff08;Thomas Heimburg&#xff09;&#xff0c;是一位研究量子力学和生物物理的物理学家。然而&#xff0c;他却希望推翻很多神经科学教科书上的内容。在亨伯格看来&#xff0c;神经元之间通过类似…

java可视化压缩_25个小众的Java库

25年前&#xff0c;James Gosling创建了Java&#xff0c;并永远地改变了编程语言的版图。与许多其他编程语言不同&#xff0c;Java在整个生命周期中都受到业界的高度欢迎和需求。Java具有非常优秀的Core库&#xff0c;提供了许多基本功能。 基于其高度流行性&#xff0c;因此也…

java 线程变量put_Java线程(篇外篇):线程本地变量ThreadLocal

首先说明ThreadLocal存放的值是线程内共享的&#xff0c;线程间互斥的&#xff0c;主要用于线程内共享一些数据&#xff0c;避免通过参数来传递&#xff0c;这样处理后&#xff0c;能够优雅的解决一些实际问题&#xff0c;比如hibernate中的OpenSessionInView&#xff0c;就是使…

深度解读:人体防御病毒的免疫力究竟是什么?

来源&#xff1a;国际仿生工程学会“免疫力作为机体免除瘟疫的一种能力&#xff0c;已被广大民众广泛使用&#xff0c;特别是本次新型冠状病毒的暴发&#xff0c;更是使得免疫力在新闻媒体中广泛传播。对于这样一个极其抽象模糊的术语&#xff0c;我们需要理解其真实的含义是什…

洛谷 1087——FBI树

题目描述 我们可以把由“0”和“1”组成的字符串分为三类&#xff1a;全“0”串称为B串&#xff0c;全“1”串称为I串&#xff0c;既含“0”又含“1”的串则称为F串。 FBI树是一种二叉树&#xff0c;它的结点类型也包括F结点&#xff0c;B结点和I结点三种。由一个长度为2^N的“…

python开发web使用什么工具_常用的Python web开发工具盘点

www.oldboyedu.com老男孩IT教育&#xff0c;只培养技术精英常用的Python web开发工具盘点Python是一门动态、面向对象语言。其最初就是作为一门面向对象语言设计的&#xff0c;并且在后期又加入了一些更高级的特性。除了语言本身的设计目的之外&#xff0c;Python标准库也是值得…

java的add方法的使用_Java HashSet add()方法与示例

HashSet类add()方法add()方法在java.util包中可用。当尚不存在给定元素时&#xff0c;使用add()方法将其插入此HashSet中&#xff0c;否则它将忽略它并返回false。add()方法是一种非静态方法&#xff0c;只能通过类对象访问&#xff0c;如果尝试使用类名称访问该方法&#xff0…

国自然:信息科学部优先发展领域及主要研究方向(含跨科学部)

来源&#xff1a;科奖多媒体中心“十三五”期间&#xff0c;通过支持我国优势学科和交叉学科的重要前沿方向&#xff0c;以及从国家重大需求中凝练可望取得重大原始创新的研究方向&#xff0c;进一步提升我国主要学科的国际地位&#xff0c;提高科学技术满足国家重大需求的能力…

缓冲区不能为空。 参数名: buffer_Java Nio 之Buffer

了解历史在 java1.4之前java io ,最核心的点是在"流"上&#xff1b;java io 的两大基石InputStream和OutputStream 也就是大家耳熟能祥的输入流和输出流,通过这个两个基石可以实现从外界读取数据到内存&#xff0c;以及将内存中数据写到外界&#xff1b;但是输入流和…

怎样把java项目转换成web项目_Eclipse中将Java项目转换成Web项目的方法

注意&#xff1a;0.点击Further configuration available&#xff0c;修改eclipse默认的WebContent 并修改为WebRoot&#xff0c;勾选Generate web.xml deployment descriptor1.需要把web 工程的版本改成2.5本地项目&#xff1a;struts2-3其中的无需修改的文件&#xff1a;org.…

新增方法

//新增方法addRecord : function() {var me this;var height 500; //取得当前屏幕高度var width 500; //取得当前屏幕宽度var content Ext.create("BeidaSoft.SFJCGL.rcjwgl.bdgl.BdglAddPanel", {}); var win new Ext.Window({layout:fit,width:wi…

机器人行业疫情之下的“危”与“机”

来源&#xff1a;腾讯网口罩脱销令口罩生产线炙手可热&#xff0c;医护人士紧缺令送药机器人走俏&#xff0c;站场监控让自动测体温机器人成为网红&#xff0c;武汉街头配送出现物流机器人身影……新型冠状病毒感染肺炎疫情&#xff0c;给机器人和智能制造行业带来了意想不到的…

线性查找python_Python实现搜索算法的实例代码

将数据存储在不同的数据结构中时&#xff0c;搜索是非常基本的必需条件。最简单的方法是遍历数据结构中的每个元素&#xff0c;并将其与您正在搜索的值进行匹配。这就是所谓的线性搜索。它效率低下&#xff0c;很少使用&#xff0c;但为它创建一个程序给出了我们如何实现一些高…

mysql 二进制日志变化_MySQL运维之二进制日志

MySQL二进制日志里保存会造成或可能造成数据变化的SQL语句。通过二进制日志可以完成如实时异地容灾备份、读写分离、数据恢复等功能。下面&#xff0c;我们一起来看看Mysql二进制日志。开启bin-log日志Mysql默认是没有开启bin-log日志的&#xff0c;需要我们自己去添加配置。lo…

Python 模块(二)

1 logging 模块 logging有两种的配置的方式&#xff0c;configure、logger 1.1 config方式 import logging日志的配置&#xff1a;config模式 只能选择在屏幕或者在文件输出logging.basicConfig(levellogging.DEBUG,format%(asctime)s [%(lineno)s] %(message)s ,filenamelog.t…

影响和改变世界的50件发明专利,猜下中国有几个?

来源&#xff1a;国家知识产权局创新创造未来&#xff0c;专利改变世界。最近几十年究竟有哪些专利真正改变了世界呢&#xff1f;国家识产权局选取了一批具有历史意义的、促进社会经济发展的、对人类社会产生重要影响的中外专利。未来智能实验室的主要工作包括&#xff1a;建立…