Skip to content
GitLab
菜单
项目
群组
代码片段
帮助
帮助
支持
社区论坛
快捷键
?
提交反馈
登录/注册
切换导航
菜单
打开侧边栏
魔法少女赵志辉
ap2021a-project
提交
a968bddf
提交
a968bddf
编辑于
8月 31, 2021
作者:
魔法少女赵志辉
🍊
浏览文件
Update
上级
eed31668
变更
2
Show whitespace changes
Inline
Side-by-side
.gitignore
浏览文件 @
a968bddf
...
...
@@ -2,6 +2,7 @@
*.log
*.out
*.synctex.gz
*.synctex(busy)
__latexindent_temp.tex
_minted-*/
*.pdf
\ No newline at end of file
project0/project0.tex
浏览文件 @
a968bddf
\documentclass
{
dreamClass
}
%\newcommand\CC{C\nolinebreak\hspace{-.05em}\raisebox{.4ex}{\relsize{-1}{\textbf{+}}}\nolinebreak\hspace{-.10em}\raisebox{.4ex}{\relsize{-1}{\textbf{+}}}}
\def\CC
{{
C
\nolinebreak
[4]
\hspace
{
-.05em
}
\raisebox
{
.4ex
}{
\small\bf
++
}}}
\def\CC
{
{
C
\nolinebreak
[4]
\hspace
{
-.05em
}
\raisebox
{
.4ex
}{
\small\bf
++
}}
}
\title
{
% \vspace{-30pt}
...
...
@@ -20,7 +20,7 @@
\section
{
课程项目
}
课程项目,或者说project,是《高级程序设计》课程任务的一部分,预计将构成课程成绩的20
\%
。
\subsection
{
要求与原则
}
课程项目将会是一个有足够规模的,能行使一定功能的,体现出面向对象和泛型程序设计思想的,带有GUI(
Graphics User I
nterface,图形界面)的,有趣的,
\CC
{}
程序。
课程项目将会是一个有足够规模的,能行使一定功能的,体现出面向对象和泛型程序设计思想的,带有GUI(
\textbf
{
G
}
raphics
\textbf
{
U
}
ser
\textbf
{
I
}
nterface,图形界面)的,有趣的,
\CC
{}
程序。
课程项目应当是从第一行代码开始独立完成的。如有必要,可以使用任何由
\CC
{}
语言写成的函数库。当然,恰好能直接完成课程项目要求的或许不能用:我们希望各位同学自己动手,实现它们。
\subsection
{
日程安排
}
...
...
@@ -30,7 +30,7 @@
各位同学被期望在每个阶段完成一定的任务,通过分步走的方式,逐步完善自己的课程项目。
\subsection
{
验收与评分标准
}
助教将一对一验收每位同学的课程项目的每个阶段。因此,各位同学需要给出:
\begin{
itemiz
e}
\begin{
enumerat
e}
\item
课程项目的源代码。
\begin{itemize}
\item
在验收时,助教将就代码中自己感兴趣的点进行提问。各位同学被期望可以回答出这些问题。
...
...
@@ -52,11 +52,11 @@
\item
项目中有趣的地方,
\item
和完成项目时遇到的问题。
\end{itemize}
\end{itemize}
\item
助教可能就项目的整体设计进行提问。各位同学被期望能让助教理解自己的课程项目是如何被构建的。
\end{itemize}
\end{itemize}
\end{enumerate}
验收时助教将对课程项目进行评分,评分标准包括:
验收时
,
助教将对课程项目进行评分,评分标准包括:
\begin{itemize}
\item
是否实现了指定的功能,
\item
是否有一个
\emph
{
好用的
}
(而不关心
\emph
{
好看的
}
)界面,
...
...
@@ -90,32 +90,45 @@
我们强烈建议,没有经验的同学在第一时间下载、安装这些库并且实际体验。安装过程可能会极端地痛苦和使人困惑,尤其是对于没有经验的同学来说。如果你遇到这方面的问题,欢迎向助教寻求帮助。
\section
{
关于开发环境
}
课程项目本身并不限定开发环境。但是考虑到课程OJ的情况,我们建议使用gcc或者clang,及其附属的工具链来编译课程项目。
\subsection
{
OJ
}
《高级程序设计》的OJ的评分服务器运行Linux操作系统,使用gcc 4.9.2作为编译器套件,使用
\CC
{}
11作为
\CC
{}
语言的标准。这一点是无法更改的。
\subsection
{
Visual Studio
}
Visual Studio是Windows上非常流行的集成开发环境,它可以用来开发
\CC
{}
程序。不过它默认使用的编译器,MSVC,和gcc/clang的行为存在一定差异(尽管我们可以通过设置项目的编译选项让MSVC的行为和标准尽可能一致,或者在稍新一些的Visual Studio中选择使用clang作为编译器)。总之,如果对自己写的程序是否符合
\CC
{}
标准没有信心,我们建议不要使用Visual Studio作为课程的主力开发环境,这可能会对OJ的分数造成不利影响(比如在本地写的程序可以欢乐地跑起来,但是一传到OJ上就不能正常工作)。
\subsection
{
Windows
}
Windows是非常流行的操作系统,传统上它对开发者不是很友好。
课程项目本身并不限定开发环境。但是《高级程序设计》的OJ的评分服务器运行Linux操作系统,使用gcc 4.9.2作为编译器套件,使用
\CC
{}
11作为
\CC
{}
语言的标准。这一点是无法更改的。
好消息是,新一些的Windows 10中包含了一个名为WSL(Windows Subsystem for Linux,适用于Windows的Linux子系统)的组件。第二代的WSL,被称为WSL2,可以被视作一个轻量化的Linux虚拟机。在Windows 11中,微软为WSL加入了官方的图形界面支持,即为WSLg。
考虑到课程OJ的情况,我们建议使用gcc或者clang,及其附属的工具链来编译课程项目。
\subsection
{
操作系统
}
\subsubsection
{
Windows
}
Windows是非常流行的操作系统,传统上它对开发者不是很友好。
或者,按照传统上的解决方式,可以使用VMware Player、Virtual Box、Hyper-V之类的虚拟机
。
好消息是,新一些的Windows 10中包含了一个名为WSL(
\textbf
{
W
}
indows
\textbf
{
S
}
ubsystem for
\textbf
{
L
}
inux,适用于Windows的Linux子系统)的组件。第二代的WSL,被称为WSL2,可以被视作一个轻量化的Linux虚拟机。在Windows 11中,微软为WSL加入了官方的图形界面支持,即为WSLg
。
再或者,MinGW项目将gcc套件移植到了Windows上。MSYS2是一个这类软件的集合,可以考虑使用这一套工具来在Windows下使用gcc/clang编译器套件。
\subsection
{
Visual Studio Code / Qt Creator
}
\subsubsection
{
Linux
}
如果机器上装有Linux,或者,按照传统上的解决方式,虽然机器上运行的是Windows,但是使用了WSL/Hyper-V、VMware Player、VirtualBox之类的虚拟机,
那么应当可以期望正常地进行编程。
\subsubsection
{
macOS
}
如果机器是搭载Intel处理器的MacBook,并且运行的是macOS,应当也不会存在问题。
搭载Apple M1处理器的MacBook的情况未经考察,如果遇到问题,请及时和助教取得联系。
\subsection
{
集成开发环境
}
\subsubsection
{
Visual Studio
}
Visual Studio是Windows上非常流行的IDE(
\textbf
{
I
}
ntegrated
\textbf
{
D
}
evelopment
\textbf
{
E
}
nvironment,集成开发环境),它可以用来开发
\CC
{}
程序。不过它默认使用的编译器,MSVC,和gcc/clang的行为存在一定差异(尽管我们可以通过设置项目的编译选项让MSVC的行为和标准尽可能一致,或者在稍新一些的Visual Studio中选择使用clang作为编译器)。总之,如果对自己写的程序是否符合
\CC
{}
标准没有信心,我们建议不要使用Visual Studio作为课程的主力开发环境,这可能会损害各位同学的OJ体验(比如在本地写的程序可以欢乐地跑起来,但是一传到OJ上就不能正常工作)。
\subsubsection
{
Visual Studio Code
}
Visual Studio Code是非常流行的代码编辑器。通过加入一些插件,它可以很好地胜任《高级程序设计》课程中的开发工作。
\subsubsection
{
Qt Creator
}
Qt Creator本来是为开发使用Qt库的
\CC
{}
程序而设计(在这门课里让我们忽略QML吧)。但它也可以被当作是通常的
\CC
{}
的IDE来使用,或许有些同学会喜欢它。
\subsubsection
{
CLion
}
CLion也是可用的
\CC
{}
IDE。
\subsection
{
其他有用的工具
}
\begin{description}
\item
[Address Sanitizer]
是一个开箱即用的内存安全错误检查工具。它对于找出
\CC
{}
程序中的内存错误很有帮助。
\item
[clang-format]
是一个代码排版工具。可以使用它把
\CC
{}
代码排版成自己喜欢的样式。
\item
[clang-tidy]
是一个代码风格检查工具。它可以就代码的不良风格给出警告。
\item
[\texttt{-Wall}]
是gcc/clang编译器的编译选项。开启它将得到更多来自编译器的警告,这有助于在编写代码的过程中尽早发现问题。类似的选项还有很多。
\end{description}
Qt Creator本来是为开发使用Qt库的
\CC
{}
程序而设计(在这门课里让我们忽略QML吧)。但它也可以被当作是通常的
\CC
{}
的集成开发环境来使用,或许有些同学会喜欢它。
\subsection
{
Address Sanitizer / clang-format / clang-tidy / -Wall
}
Address Sanitizer是一个开箱即用的内存安全错误检查工具。它对于找出
\CC
{}
程序中的内存错误很有帮助。
clang-format是一个代码排版工具。可以使用它把
\CC
{}
代码排版成自己喜欢的样式。
clang-tidy是一个代码风格检查工具。它可以就代码的不良风格给出警告。
-Wall和-Wextra等是gcc/clang编译器的编译选项。开启这些选项将得到更多的警告,这有助于在编写代码的过程中尽早发现问题。
\section
{
关于
\CC
{}}
如果觉得有必要的话,可以找一些经典的
\CC
{}
教材作为自己的参考书。在这里我们推荐
\emph
{
A Tour of
\CC
{}}
、
\emph
{
Programming -- Principles and Practice Using
\CC
{}}
和
\emph
{
\CC
{}
Primer
}
。
如果觉得有必要的话,可以找一些经典的
\CC
{}
教材作为自己的参考书。这里我们姑且推荐一些:
\begin{description}
\item
[\emph{A Tour of \CC{}}]
适合熟练掌握一门其他程序设计语言的同学。这本书相对比较薄,可以以相对快的速度总览现代
\CC
{}
的精髓。
\item
[\emph{Programming -- Principles and Practice Using \CC{}}]
适合编程基础薄弱的同学。这本书的优势在于,它以FLTK为基础,介绍了图形库的基本思想。
\item
[\emph{\CC{} Primer}]
适合基础相对薄弱的同学。这本书写得很详细,适合作为入门读物。
\end{description}
除此之外,也可以参考互联网上的一些资料,比如
\emph
{
\CC
{}
Core Guidelines
}
。
\end{document}
编辑
预览
Supports
Markdown
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录