Any fool can write code that a computer can understand.
Good programmers write code that humans can understand.
傻瓜写计算机能理解的代码。优秀的程序员写人类能读懂的代码。
在写代码的时候,养成良好的代码风格,可以避免很多bug。然后,我帮你们找bug的时候,也能更快的看懂代码。emmm,,,,
或者说以后,团队一起研发项目,你写的代码也不能太任性,要让团队里面其他人能看懂。
第一讲我就先讲一下良好的代码习惯
例如:
for(int i=1;i<=n;i++)
{
...
}
或者
for(int i=1;i<=n;i++){
...
}
个人推荐使用第一种,第一种方式更显而易见的排查出不小心漏掉的括号。
#include
using namespace std;
#include
#include
int main()
{
int a,b,c,d,p;
double s;
while(cin>>a>>b>>c)
{
p=(a+b+c)/2;
d=(double)p*(p-a)*(p-b)*(p-c);
s=sqrt(d);
cout<<setiosflags(ios::fixed)<<setprecision(2)<<s<<'\n';
}
return 0;
}
这串代码是我在oj上随便找的一题
①第10行和第15行的代码没对齐
②while里面内容,参差不齐,是很不友好的习惯
eg.:
int main()
{
int flag=1;
if(flag==1)
// {
cout<<"Yes";
// }
else
// {
cout<"nO";
// }
}
if语句,for语句里面只有一条语句的时候,花括号可以忽略,但是极度不推荐省略!~
例如
#define PI 3.1415926
const double E=2.71828;
const int N=1024;
名字能告诉我们它要做什么,为什么存在,以及是如何工作的。选择能够表达意图的名字,将更有利于自己或别人理解代码。
不要怕在选择名字上花时间。
例如表示时分秒,用hour,mintue,second,求和sum,平均数ave,最大值max,长度length 。。。
诸如此类,用英文单词;
求周长C,求面积S,求体积V,这类变量命名可以依照数学习惯,也可以用英文单词;
避免使用a,b,c,d,e,qq,aa,bb这种没有意义的变量名称(oj上敲题可以适当随意)
此外,有一些固定的搭配:
我觉得有必要说一下什么是标记变量。
eg.:
有一个数组a[10]={5,2,1,2,6,3,4,1,10,4},检查这个数组里面有没有4,可以这样写代码
int main()
{
int a[10]={5,2,1,2,6,3,4,1,10,5};
int flag=0;//在编程语言里面0是假,1是真;定义flag=0;意思等同于先假设数组里面没有4这个元素
for(int i=0;i<10;i++) //遍历数组
{
if(a[i]==4) //如果存在一个元素等于4,
{
flag=1; //让flag=1,
break; //如果flag=1,我们已经知道数组里面有4这个元素了,就没必要再去检测后面的元素了,加个brak语句,跳出循环。
}
}
if(flag==1) //flag=1,说明数组里面有4,输出Yes;
{
cout<<"Yes";
}
else //反之,如果数组里面没有4,输入No
{
cout<<"No";
}
}
这个例子中,flag起到了一个标记的作用,可以称做作标记变量。
标记变量,一般使用f或者flag命名。
临时变量,我们把为了做一件事而临时创建的一个变量叫做临时变量,一般用作临时的中间过渡。
eg.:
把a,b的值互相交换
int main()
{
int a=2,b=3; //随便定义两个变量a,b
int temp; //定义临时变量,不用初始化
temp=a; //把a赋值给temp
a=b;//把b赋值给a
b=temp;//把temp(其实里面是原来a的值)赋值给b
}
比如a杯子里装的苹果汁,b杯子里面装的醋,如果让苹果汁和醋交换。
我们需要拿一个c杯子,
先把a杯的苹果汁倒入c杯;
再把b杯的醋倒入a杯;
然后把c杯的苹果汁倒入a杯;
这里的c杯就和temp一样,起一个临时过渡的作用,temp我们就成为临时变量;
临时变量,一般用t,temp命名
eg.:
有一个数组a[10]={5,2,1,2,6,3,4,1,10,5},检查这个数组里面有几个4。
int main()
{
int a[10]={5,2,1,2,6,3,4,1,10,5};
int count=0; //计数器count初始化等于0
for(int i=0;i<10;i++) //遍历数组
{
if(a[i]==4) //每存在一个元素等于4,
{
count++; //count就加1,这里也可以写成++count
//有些同学可能对++count和count++有迷惑,这个我在后面解释一下
}
}
cout<<"4的个数有"<<count<<"个";
return 0;
}
或者oj做题经常遇到的
int main()
{
int id=1;
while(...)
{
.....
.....
cout<<"Case "<<id++<<":"endl //这里id++不成写成++id
}
return 0;
}
上面两个例题,id,count的作用就是加1,计数。我们称这样的变量为计数器。
计数器,一般用id,count命名
这个不用多说
for(int i=1;i<=m;i++)
{
for(int j=1;i<=n;j++)
{
....
}
}
i和j基本上就属于for,有时候i和j不够用了,可以用k,l,q,p,h等等
想到再补充
多个单词组成时第一个单词首字母小写,其他单词首字母大写,必要时使用下划线
例:
void work()
void print()
void sum()
int getTime()
void show_English_Score()
void showScore_Student()
这些函数的用途显而易见
不要像邓国烨那样sb(),aa(),bb()这样随便的定义函数名
首字母大写,例如class Student;
多个单词组成时所有单词首字母大写, 如class HelloWorld;
此外在写类中的成员函数时,有两种方式:
1,写在类外面
class Student
{
public:
Student(...)
{
...
}
void show(...);
private:
int score;
....
}
Student::show(...)
{
....
}
2,写在类里面
class Student
{
public:
Student(...)
{
...
}
void show(...)
{
...
}
private:
int score;
....
}
当然这两个方式都可以,我个人比较倾向于第二种,
写在里面我觉得更能凸显出类是一个整体,也便于排查;
我们C语言书,第24页最下面:
++是自增运算符,i++表示先取i的值,再将i的值加1;而++i是先把i的值加1,再使用。
所以,简单的说:
i++,是先引用再自加
++i,是先自加再引用
显然,上面一句话有两个关键字:引用 和 自加
看一个例子:
int main()
{
int id;
id=1;
cout<<"case "<<id++<<":"<<endl;//这个时候,id先输出出去,id再自加
//输出的时候,就是引用
cout<<endl;
id=1;
cout<<"case "<<++id<<":"<<endl;//这个时候,id先自加,然后再输出
}
int main()
{
int i=0,y;
for(int k=1;k<=5;k++) //循环5次
{
y=i++; //每次执行这一步是,i的值先赋给y,i再自加1
cout<<y<<" ";
}
}
int main()
{
int i=0,y;
for(int k=1;k<=5;k++) //循环5次
{
y=i++; //每次执行这一步是,i的值先自加1,再赋给y
cout<<y<<" ";
}
}
为什么这里count++和++count没有区别,以为它这里是个计数器啊,它有引用吗,没有啊。
++count的时候,先自加,再引用?没有引用
count++的时候,先引用?有引用吗?没有。那就自加
学会几个必备词汇(滑稽):
了解=听过名字;
熟悉=知道是啥
熟练=用过;
精通=做过东西。
讲几个关于程序员的段子:
问:程序员最讨厌康熙的哪个儿子。答:胤禩。因为他是八阿哥(bug)
程序员最憋屈的事情就是:你辛辛苦苦熬夜写了一个风格优雅的源文件,被一个代码风格极差的同事改了且没署名,以至于别人都以为你是写的。
C程序员看不起C++程序员, C++程序员看不起Java程序员,
Java程序员看不起C#程序员,C#程序员看不起美工,周末了,美工带着妹子出去约会了,一群程序员还在加班!
两程序员聊天,程序员甲抱怨:“做程序员太辛苦了,我想换行……我该怎么办?”程序员乙:“敲一下回车。”
程序员最讨厌的四件事:写注释、写文档、别人不写注释、别人不写文档……
女神:你能让这个论坛的人都吵起来,我今晚就跟你走。
程序猿:C++语言是最好的语言!
论坛炸锅了,各种吵架。
女神:服了你了,我们走吧,你想干啥都行。
程序猿:你走吧,我要让他们知道,C++才是最好的语言!