【发布时间】:2014-03-04 06:51:57
【问题描述】:
我正在为我的 C++ 课程开发一个程序。指导方针是创建一个将整数转换为罗马数字的转换器,规范是我必须至少使用一个 while 语句、do while 语句和一个 switch。
我的代码大部分都在工作,但我不能涉及涉及 4 和 9 的特殊情况(例如 (4, 14, 24 34, etc) 40, (140, 240, etc) 400, (1400, 2400、3400 等)和(9、19、29、39 等)90、(190、290 等)900、9000))为我工作。这是我此时的代码:
#include <iostream>
#include <string>
using namespace std;
int main( )
{
cout << "Please enter an interger." << endl;
int num = 0;
cin >> num;
string rep = "";
switch(num)
{
case 40:
rep += "XL";
num -= 40;
break;
case 90:
rep += "XC";
num -= 90;
break;
}
if (num >= 1000){
rep += string(num / 1000,'M');
num %= 1000;
}
if (num >= 500){
rep += string(num / 500,'D');
num %= 500;
}
if (num >= 100){
rep += string(num / 100,'C');
num %= 100;
}
if (num >= 50){
rep += string(num / 50,'L');
num %= 50;
}
if (num >= 10){
rep += string(num / 10,'X');
num %= 10;
}
if (num >= 5){
rep += string(num / 5,'V');
num %= 5;
}
if (num >= 1){
rep += string(num,'I');
num %= 1;
}
cout << num << endl;
cout << rep << endl;
return 0;
}
【问题讨论】:
-
那些是一些相当愚蠢的规范。 (你的老师指定的)
-
@nhgrif:好吧,代码的表面目的是将整数转换为罗马数字,但即使它做了一些明显有建设性的事情,这个目标也完全没用。练习的真正目的是学习这三个控制结构,尽管它可能与代码的表面目的无关,但它非常有用。从根本上说,看起来真实的任务不一定是学习语法的最佳方式:-)
-
这就是为什么我认为规范是愚蠢的。学习语法应该在课堂讲座、测验或作为小家庭作业的一部分:“编写一个 for 循环”。例如。像这样的实际项目不应该有超出整个项目应该完成的要求,并且应该根据学生实施最佳控制结构的能力来评分。
-
@nhgrif:不幸的是,如果你这样做,就会有人抱怨小任务很无聊/抽象/不吸引人等等,甚至比你抱怨罗马数字项目愚蠢的声音还要大。就我个人而言,我喜欢对编程语言进行无聊、抽象、不吸引人的介绍,但我不正常。大多数人也没有达到合理的编程水平。入门练习并不适合他们。
-
在我的编程课上,我从来没有做过小项目。我们进行了涵盖基本语法的测验(我自己花了 15 分钟在线完成),并且我们的项目一次开放 2-3 周。
标签: c++ string while-loop switch-statement