c语言入门2,程序可以随便写吗?什么是函数?

上一节,我们搭建了c语言开发环境后,写了一个在控制台打印 "Hello world!"的程序,不过,对代码倒是并没有说很细。下面把上一节的代码再写一遍,详细说说。

#include <stdio.h>
#include "stdlib.h"
/* 打印 Hello world!  */
int main()
{
    printf("Hello world!\n");       // 打印语句
    return 0;
}

还记的在《》一节中,我们把编程语言划分到形式语言吗?形式语言对语法要求非常苛刻,这里说的语法严格,主要是指符号和结构要严格按照规则来。

  • xxx.h 在 c 语言中叫“头文件”,它是一个工具箱的目录,有了它,我们写的程序用到一些工具时,程序才知道从哪里找。
  • #include 负责将头文件导入,它要独立占一行,头文件要用 <> 或者 "" 包裹,关于 <> 和 "" 的区别,接下来会详细介绍
  • main 是一个 c 语言里的特殊符号,它是默认的入口函数。整个程序只能由一个入口函数,程序从这里开始执行。
  • 函数后面通常会有 (),紧接着是 {} 包裹属于本函数的代码。
  • 函数的语句要用 ; 结尾
  • 可以看出,函数里面的语句比 main 那一行都缩进了一些。在代码中,可以用若干个空格和 tab 缩进。不过这只是为了美观,让代码看着舒服一些。
c 程序写成 int main(){...return 0;} 也是可以的,但是这样写的可读性和美观度显然不如上面那种写法。

c 程序要严格按照语法规则来,否则在编译时就会报错。关于“编译”和“报错”可以参照我之前的文章。

C 语言中的函数

在数学中有各种各样的数学函数,比如 sin ln 等函数,sin(pi/2)=1,ln1 = 0 等等。在 C 语言中,我们当然也可以使用这些函数,请看如下代码:

#include <math.h>
#include <stdio.h>

int main()
{
    double pi = 3.1416;
    printf("sin(pi/2)=%f\nln1=%f\n", sin(pi/2), log(1.0));
    return 0;
}

math.h 中包含各种数学函数的目录,只要将其用 #include 导入,在 main 中使用 sin,log 函数时,程序才知道从哪里找这些函数。我们在 codeblocks 中执行它,输出如下:

关于如何安装和使用 codeblocks 可参照第一节。

在数学中,使用函数时可以省略括号,例如 sin pi/2,而 C 语言中的函数则一定要使用 (),例如 sin(pi/2)。在C语言的术语中,pi/2是参数,sin是函数,使用 sin(pi/2) 就是程序员常说的“函数调用”。

事实上,printf("...",...); 也是一种函数调用。但是 printf 感觉不像一个数学函数,为什么呢?因为像 sin 这种函数,传递一个参数给它,它会返回给我们一个计算后的值,我们调用 sin 函数就是为了得到它的返回值。至于 printf 函数,我们并不关心它的返回值,更关心的是它的“副作用”(计算返回值的过程中,往控制台打印的字符。)。事实上,printf 也有返回值,它返回的是实际打印的字符数。

C 语言函数可以有“副作用”,这是它与数学函数的根本区别。

最后要说一点

事实上,我的文章中有一些概念说的并不太专业,比如“头文件是一个工具箱的目录”,而没有说它是一系列“函数接口的声明”。这是因为我觉得一开始太专业,反而不利于理解。慢慢的介绍多了,我也尽量用一些比较专业的词。

阅读更多:   C语言
添加新评论

icon_redface.gificon_idea.gificon_cool.gif2016kuk.gificon_mrgreen.gif2016shuai.gif2016tp.gif2016db.gif2016ch.gificon_razz.gif2016zj.gificon_sad.gificon_cry.gif2016zhh.gificon_question.gif2016jk.gif2016bs.gificon_lol.gif2016qiao.gificon_surprised.gif2016fendou.gif2016ll.gif