您的位置:首页 > 编程语言 > C语言/C++

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风格的代码不是不可以(这句话感觉多余了)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息