Closed UNIDY2002 closed 2 years ago
(本题是代码改错,目测难度不会大)
小明学习了oop的课程后,跃跃欲试,打算亲手实践一下。
小明希望实现的功能有:
……(见后面的main.cpp
)
然而,小明遇到了一些bug,怎么都de不掉。于是,他请你来帮他完善他的程序……
main.cpp
(小明希望实现的大致长这样)
#include "my_lib.h"
using namespace std;
int main() {
string hello = "Hello, world!";
print(hello);
print();
print(2333);
print(233 > 666);
print("================");
auto s = input();
print(s);
for (auto c:s) print(c);
print("================");
Array a;
a.add(4);
a.add(2);
a.add(7);
a.cut();
a.add(5);
print(a.getSize());
print(a);
return 0;
}
my_lib.h
(这道题暂时不想分离出my_lib.cpp
……)
解题者可以修改的部分是my_lib.h
。
会设置一些错误:
void print(std::string s = "")
(与void print()
冲突)void print(const char *s)
(这会让print("================")
产生意外结果)auto
用错一处Array::
或者std::
emm目前先想到这么些问题。
Json是一种……的语言,它广泛运用于……
学习了oop的基本知识后,请你也试着做一个 (简化版的) Json解析工具。
从输入得到一个Json字符串,解析得到相应的Json类后,会进一步进行一些查询,例如:
作为一次课后作业,必然无法要求真正地解析Json,而且才学了一点点类的知识 (况且重复造轮子也毫无意义) 。因此,对问题进行如下简化:
{
"animals" : {
"dog" : [
{
"name" : "Rufus" ,
"age" : "15"
} ,
{
"name" : "Marty" ,
"age" : "12"
}
]
}
}
main.cpp
(部分)Json o = getJson(); // Read from stdin
cout << o.getType() << endl;
assert(o.getType() == "object" && o.contains("animals"));
Json p = o.getObject("animals");
cout << p.getType() << endl;
assert(p.getType() == "object" && p.contains("dog"));
Json q = p.getObject("dog");
cout << q.getType() << endl;
cout << q.getLength() << endl;
assert(q.getType() == "array" && q.getLength() > 1);
Json r = q.getArray(1);
cout << r.getType() << endl;
assert(r.getType() == "object" && r.contains("age"));
Json s = r.getObject("age");
cout << s.getType() << endl;
assert(s.getType() == "string");
cout << s.getString() << endl;
第一题不错,后期需要明确题目中的考点。 第二题有一定的算法难度,会导致同学们关注于算法的设计而非OOP的基础知识。建议更换这一道题,可参考第一次作业电子签到统计系统的难度。 如果能合理修改或更换第二道题,可以替代作业。
(我后来也发现Json那题有点问题……[捂脸])
网络学堂在清华信息化进程中扮演着重要的角色,任何一位清华学子都离不开网络学堂。
学习了OOP的基础知识后,请你也设计一个简易的网络学堂,能够添加事项,并进行查找和输出等操作。
众所周知,网络学堂由多门课程组成,每门课又有作业、公告、文件、讨论和答疑等模块。
为简化问题,在本题中,你只需实现作业和文件两个模块。
我们认为,一个文件最关键的要素是名称和文件类型,而一项作业最关键的要素则就是名称和ddl。在本题中,我们用一个正整数来代替ddl。
(此处略去对需求的描述,可见后面的main.cpp
。)
main.cpp
(部分)Course oop;
oop.addHomework("hw1", 2);
oop.addFile("week1", "pptx");
oop.addHomework("hw2", 4);
cout << oop.findHomework("hw1") << endl;
oop.printHomework();
Course physics;
physics.addFile("syllabus", "pdf");
Learn learn;
learn.addCourse(oop);
learn.addCourse(physics);
learn.print();
(此处略)
修改后的两道题都不错,可以替代一次作业。 第一题最好能尽量地覆盖重要的知识点。 之后需要完成题面、数据、标答和judger。
如下。