W1 环境配置与课程要求
Visual Studio 配置
下载(或更改)Visual Studio Community(官网
安装 FileEncoding 插件。安装完成后,右下角会显示当前编码与行尾。
创新项目时新项目选择「空项目
源程序最后不要添加 system("pause");
或 getchar();
等语句暂停。
Dev-C++ 配置
使用定制版的 Bloodshed Dev-C++,编译选择 “TDM-GCC 9.2.0 32-bit Debug”
TIP
如果你不想用这么古早的 IDE,你也可以使用同为 Dev-C++ 二改的 小熊猫 C++,并搭配笔者的项目 RedpandaTjPatch 来注入同济高程专用的编译器版本。
作业要求
作业不是 OJ 判题,为人工 + 脚本辅助。严查严打抄袭,因此要保护好自己的代码。
编译平台与禁止使用的功能
使用 VS 调通之后再用 Dev-C++ 编译验证。
不允许使用 auto
关键字。
格式要求
纯唐诗吧
CAUTION
此要求仅为高程作业的提交要求,且并不合理。此处只是记录课程要求,本仓库内的代码不会遵守此要求(就算是与该课程相关的内容中的代码也不会遵守此要求
作业提交强制要求编码为 GBK,行尾为 CRLF,否则当次作业记零分。
码风上,强制规定:大括号前必须换行,逻辑分支必须换行,不允许任何形式的压行。违反格式规定的,该次作业分数 -20%。
标准示范:
#include<iostream>
using namespace std;
int main()
{
cout << "Hello, world." << endl;
return 0;
}
错误示范
#include<iostream>
using namespace std;
int main() {
cout << "Hello, world." << endl;
return 0;
}
#include<iostream>
using namespace std;
int main()
{ cout << "Hello, world." << endl; return 0; }
#include<iostream>
using namespace std;
int main()
{
cout
<<
"Hello, world."
<< endl;
return 0;
}
#include<iostream>
using namespace std;
int main()
{
cout \
<< \
"Hello, world." \
<< endl;
return 0;
}
标准示范:
int max (int x, int y)
{
int z;
if (x > y)
z = x;
else
z = y;
return z;
}
错误示范
int max (int x, int y)
{
int z;
if (x > y) z = x;
else z = y;
return z;
}
TIP
笔者的 Node 项目 TJgcPreprocessor 是专用于此课程的 C/C++ 代码预处理器,可以自动处理编码、行尾和码风要求(码风整理使用正则与 clang-format 实现cin
、cout
折行问题无法由格式化工具自动处理,下面的配置只能保证不额外折行。
下面给出适用上述要求的 .clang-format
配置:
---
BasedOnStyle: GNU
AccessModifierOffset: -4
AlignConsecutiveMacros:
PadOperators: true
AlignEscapedNewlines: Left
AllowAllArgumentsOnNextLine: false
AllowAllParametersOfDeclarationOnNextLine: false
AllowShortFunctionsOnASingleLine: None
AlwaysBreakAfterDefinitionReturnType: None
BinPackArguments: false
BinPackParameters: false
BreakBeforeBinaryOperators: NonAssignment
BreakBeforeBraces: Allman
ColumnLimit: 0
Cpp11BracedListStyle: true
IndentCaseLabels: true
IndentWidth: 4
SpaceBeforeParens: ControlStatements
Standard: c++11
Language: Cpp
AllowAllConstructorInitializersOnNextLine: false
AlwaysBreakAfterReturnType: None
KeepEmptyLinesAtTheStartOfBlocks: false
SpacesInParentheses: false