天天看点

4.1 自定义函数和结构体

注意本随笔以及以后相关的随笔都是算法竞赛入门经典的笔记,因此会有部分内容直接从原文摘入,如有不合理的地方,请联系FlnButFly,我会马上删除

1.C语言中的数学函数可以定义成“返回类型 函数名(参数列表){函数体}”,其中函数体的最后一条语句应该是“return 表达式;”

eg:

<code>int add(int a, int b)</code>

<code>{</code>

<code>return a + b;</code>

<code>}</code>

如果自己定义的函数没有返回值,那么返回类型需要填为void,并且可以不需要使用ruturn语句,除非希望在某些地方退出函数

2.函数的参数和返回值最好是“一等公民”,如int或者double,也可以是char,其他的非一等公民作为参数和返回值要复杂一些,这里的return是一个动作,不是描述m3.如果在函数的运行过程中碰到了return语句,将直接退出这个函数,不去执行后面的语句,如果在执行的过程中始终没有return语句,则会返回一不确定的值,也就是说无论你有没有写下return语句,系统都会强制性返回相应数据类型的值,只不过我们如果没有写return的话,可能会使系统误判程序是否正常退出,-Wall可以捕捉到这一可疑情况并产生警告。

4.main函数是整个程序的入口,main函数的返回值0代表正常结束,其他的代表有些异常的退出了,注意在算法竞赛中,总是让main函数返回0

5.在自定义函数中,不要求函数一步得到结果,其中的代码规则等同于在main函数中写的一样

6.hypot函数实在math.h头文件中,同时该数学函数等价于sqrt(aa + bb);

7.

<code>double f(int x1, int y1, int x2, int y2)</code>

<code>int d1 = x1 - x2;</code>

<code>int d2 = y1 - y2;</code>

<code>return hypot(d1, d2);</code>

上述例子说明了一个函数里面可以调用其他函数,也就是自定义函数其实可以类比于一个新的main函数,在自定义函数中写代码和在main函数中写代码并没有什么区别

8.在C语言中,定义结构体的方法为"struct 结构体名称{域定义};",注意花括号后面还有一个分号,注意和自定义函数结构的区分

9.注意如果是通过struct定义出来的结构体定义相应数据类型的变量的时候一定要struct 结构体名称 变量名才可以使用,如果缺少了struct,好像在c++中编译并不会报错,可能在c语言中使用会报错发,对于c来说struct 结构体名称才是一个新的数据类型,所以在c语言中我们经常使用typedef struct来定义结构体,但是由于C++中struct也拥有了使用typestruct的便捷,所以也比较少用

10.为了使用方便,往往用typedef struct{域定义;}类型名;的方式定义一个新类型名,笔者试过在c++中编译typedef如果类型名在struct后面仍然能够通过编译,但是会报错,说typedef在申明中被忽视了,而按照上述的语法规则才能正常编译,当然使用了typedef struct就可以直接定义结构体变量而不用在前面再加上struct了

继续阅读