C++时钟面试题总结
2016-10-10 16:34
232 查看
Preface
刚刚在看到个C++的时钟面试题目,感觉挺简单的,写写玩玩儿吧,就当给自己复习。有C风格和C++风格两种。
时钟与角度问题分析
时钟样子
时针与分针
有以下的特点:- 1小时=60分钟
- 钟面有12格,每格角度:
360°÷12h=30°/h,即,每小时时针走过30°
- 60分钟走过一圈,每分钟角度:
360°÷60/m=6°/m,即,每小时分针走过6°
- 时针60分钟走一大格的时针,
30°÷60/m=0.5°/m,即,每分钟时针走0.5°
- 每分钟而言,分针比时针多走了
6°-0.5°=5.5°
C风格的代码
//文件名:CStyleClock.cpp #include <iostream> #include <iomanip> /* * ===================================================================================== * * Filename: another.cpp * * Description: * * Version: 1.0 * Created: 10/10/2016 02:44:39 PM * Revision: none * Compiler: clang++ * * Author: Gabriel (Gabirel), Gabrielf977q@gmail.com * Organization: * * ===================================================================================== */ using namespace std; //获得角度 double getAngle(int hour, int minute); int main(int argc, char *argv[]) { int hour, minute; double angle; while(cin >> hour >> minute) { hour = hour % 12; minute = minute % 60; if(hour < 0 || minute < 0) { break; } angle = getAngle(hour, minute); if (angle < 0) { angle = -angle; } //格式化输出 cout.fill('0'); cout << setw(2) << hour << ":"; cout << setw(2) << minute << "=" << angle << endl; } return 0; } double getAngle(int hour, int minute) { double result; result = (hour * 30 + minute * 0.5) - minute * 6; return result; }
以上是很清楚的,很清晰的代码。
以下是C++风格的代码。
C++风格代码
有三个文件,分别为:cppClock.h # 类声明文件
cppClock.cpp # 类定义文件
clock.cpp # 主函数
cppClock.h(类声明)
#ifndef __MY_CLOCK_H_ #define __MY_CLOCK_H_ #include <iostream> #include <iomanip> /* * ===================================================================================== * * Filename: cppClock.h * * Description: * * Version: 1.0 * Created: 10/10/2016 03:07:26 PM * Revision: none * Compiler: clang++ * * Author: Gabriel (Gabirel), Gabrielf977q@gmail.com * Organization: * * ===================================================================================== */ using namespace std; /* * ===================================================================================== * Class: Clock * Description: * ===================================================================================== */ class Clock { public: Clock (); /* constructor */ ~Clock (); /* destructor */ Clock& sethh(int hh); Clock& setmm(int mm); int gethh(); int getmm(); void getAngle(); void Show(); private: int m_mm, m_hh; double angle; }; /* ----- end of class Clock ----- */ #endif /* ifndef SYMBOL */
cppClock.cpp(类定义)
#include "cppClock.h" /* * ===================================================================================== * * Filename: cppClock.cpp * * Description: * * Version: 1.0 * Created: 10/10/2016 03:10:58 PM * Revision: none * Compiler: clang++ * * Author: Gabriel (Gabirel), Gabrielf977q@gmail.com * Organization: * * ===================================================================================== */ Clock::Clock() : m_mm(0), m_hh(0), angle(0.0) { } Clock::~Clock() { } Clock& Clock::sethh(int hh) { m_hh = hh % 12; return *this; } Clock& Clock::setmm(int mm) { m_mm = mm % 60; return *this; } int Clock::gethh() { return m_hh; } int Clock::getmm() { return m_mm; } void Clock::getAngle() { angle = ((m_hh * 30 + ((double)m_mm)/60.0 * 30) - (double)m_mm * 6); if(angle > 180) { angle = 360 - angle; } if(angle < 0) { angle = -angle; } } void Clock::Show() { cout.fill('0'); cout << setw(2) << m_hh << ":"; cout << setw(2) << m_mm << "="; cout << angle <<endl; }
clock.cpp(主函数)
#include "cppClock.h" /* * ===================================================================================== * * Filename: clock.cpp * * Description: * * Version: 1.0 * Created: 10/10/2016 03:59:23 PM * Revision: none * Compiler: clang++ * * Author: Gabriel (Gabirel), Gabrielf977q@gmail.com * Organization: * * ===================================================================================== */ int main(int argc, char *argv[]) { int hour, minute; Clock clock; cout << "请输入小时和时钟" << endl; while(cin >> hour >> minute) { clock.sethh(hour).setmm(minute).getAngle(); clock.Show(); } return 0; }
编译:
clang++ cppClock.cpp clock.cpp -o clock
执行即可
在后面
第一种风格的代码是C式,第二种是C++式;第一种简洁明了,但是重复利用性低,第二种看似复杂难懂,但是思路清晰,可重复利用;
第一种面试C的时候写,第二种面试C++的时候写,但是C风格的代码不是不可以(这句话感觉多余了)
相关文章推荐
- java c++数据结构面试题总结
- C++面试题的总结
- [积累]C++复习 海大2014硕士生面试题微信系统总结
- C++面试题答案总结
- 腾讯面试题总结,似乎是面试C++方向的(小巫总结)
- C/C++ 面试题总结
- C++面试题总结
- c++面试题总结(2)
- c++面试题总结(2)
- C/C++面试题总结(1)
- C++ 面试题总结
- C/C++经典面试题总结摘选 C/C++程序员面试宝典(三)
- C/C++经典面试题总结摘选 C/C++程序员面试宝典(二)
- c++面试题总结(4)
- c++面试题总结
- C++ 面试题总结
- C/C++经典面试题总结摘选 C/C++程序员面试宝典(一)
- C++的一些笔试面试题总结
- 总结手游客户端笔试面试题(Cocos2dx客户端、C/C++、lua、数据结构算法等)
- 面试题总结之C/C++