编码规范
一、编码规范的意义:
好代码自己会说话,规范让BUG无处藏身!
二、必须遵守的编码规范(给学生的清单)**
1. 文件头注释(必须包含)
/*
题目:XXXX
作者:[你的名字]
日期:YYYY-MM-DD
算法:[简单描述]
关键点:[需要注意的地方]
*/
2. 变量命名规范
// 好的命名:
int studentCount; // 学生人数
int maxValue; // 最大值
bool isFound; // 是否找到
int arr[MAXN]; // 数组
// 不好的命名:
int n; // 意义不明
int a; // 太随意
int x1, x2, x3; // 序列号无意义
3. 缩进
// 正确缩进(4个空格或1个Tab)
for (int i = 0; i < n; i++)
{ // for后面有空格
if (a[i] > max)
{
max = a[i];
}
}
4. 花括号风格(统一使用Allman风格)
// Allman风格(推荐):括号单独一行,层次清晰
for (int i = 0; i < n; i++)
{
// 循环体
}
if (condition)
{
// 条件成立
}
else
{
// 条件不成立
}
优点:
- 缩进清晰,代码结构清晰,可读性强
- 是注释代码块时,不会影响括号
5. 常量定义
// 永远不要出现 magic number(魔法数字)
const int MAX_N = 100000; // 最大值
const int INF = 0x3f3f3f3f; // 无穷大(常用)
const double PI = 3.1415926; // 圆周率
三、C++编码规范基础版:
/*
题目:XXXX
作者:[你的名字]
日期:YYYY-MM-DD
思路:
1. [简要描述算法思路]
2. [可以分点说明]
3. [不需要太详细,但要清晰]
*/
#include <bits/stdc++.h>
using namespace std;
/*定义常量,明确数据规模,便于修改*/
/*定义数组*/
int main() {
//程序主体,要求:
// 1. 定义变量(一行一个,清晰),变量名最基本原则:
// + 循环变量用 i,j,k,l,m,n
// + 题目中提到的变量名,如"从a到b有多少偶数"中的a,b
// + 其它变量名去有意义的名字,可以是英语单词或拼音,一看变量名就知道什么意思。
// 2. **必须缩进**
// 3. 所有if/else/for 都带上括号,且左右括号都换行到行首
// 其它:
// + 最大值和最小值的初始值分别是 -0x3f3f3f3f 、0x3f3f3f3f,不要用 INT_MIN ,INT_MAX
// + 对于初学者,强烈建议下标从 1 开始用,直到 1 <= i <= n
// 这样能避免很多“少算一个”或“数组下标为负”的错误
for (int i = 1; i <= n; i++) {
...
}
return 0; //必须
}
四、具体示例:
例题:
最高分与最低分
Peter所在的班级是学校的信息学特长班,有n个学生,每个同学的信息学成绩都十分优秀。 今天所有同学完成了一场信息学模拟测试,现在老师请Peter帮忙按同学们的学号从小到大 的顺序录入所有同学的成绩。 现在老师想查询最高分跟最低分积极平均分,你能能帮帮他吗?
输入格式:
第1行:一个整数n(1 <= n <= 50);
第2行:n个数. 每个数的范围在-500到1000之间。
输出格式:
一行,三 个数:最高分,最低分,平均分(保留两位小数)
代码示范:
C++编码规范基础版示范
/*
题目:计算平均分
作者:孙铭鸿
日期:2024-10-24
思路:
1.读n,
2. 再循环n 遍: 读取成绩,累加和,同时用擂台法选出当前最大值和最小值,
3. 用总成绩再除以人数
* 需要注意最大值和最小值的初始值分别是 -0x3f3f3f3f 、0x3f3f3f3f
*/
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 55; //50个人的成绩,考虑5个冗余防止越界。
int main() {
int n; // 人数
int scores[MAXN]; // 成绩数组
int sum = 0; // 总分
int min_score = 0x3f3f3f3f; // 最小值的初始值
int max_score = -0x3f3f3f3f; // 最大值的初始值
cin >> n;
for (int i = 0; i < n; i++) {
cin >> scores[i];
sum += scores[i]; // 累加分数
if (scores[i] < min_score) {
min_score = scores[i];
}
if (scores[i] > max_score) {
max_score = scores[i];
}
}
double average = (double)sum / n; // 平均值,注意类型转换
// 5. 输出结果(保留2位小数)
printf("%d\n%d\n%.2f\n", average); // 使用printf控制格式
return 0;
}