“教小白精通编程”系列之“C语言教程” (版权所有,不得转载,擅自抄袭转载将承担法律责任)
1.第一个程序
最简单的C程序:下面的是最简单的C语言程序
void main()
{
}
任何C语言程序都是从一个叫做”main”的“函数”执行的,所谓函数就是一个命名的程序块(或者说一组语句)。一个函数由4个部分组成: 返回类型、函数名、参数列表、函数体。
返回类型 函数名 (参数列表)
{
函数体
}
比如上面的最简单程序中的函数名叫做”main”,其前面的void是这个函数的返回类型,表示函数不返回任何结果值。函数名后的圆括号()包含一些函数的”形式参数“,成为“参数列表”。以后我们会说明什么叫“形式参数”,目前这个函数的参数列表是空的,即没有任何形式参数。参数列表后面由花括号{}包围起来的叫做函数体。函数体中就是这个函数里面的程序语句。目前也是空的,表示这个函数里没有任何语句,也就是说这个函数什么也不做!
我们再看一个程序,请用任意一个文本编辑器编辑如下的内容:
#include < stdio.h>
void main(){
printf("\nHello World\n");
}
将上面内容保存到一个文件( 如 hello.c)中,然后在命令行中输入如下的命令编译Compile 该文件:
gcc hello.c
将在文件所在目录中生成一个叫做 a.out (Unix/Linux)或a.exe(windows系统)的可执行文件。可以执行该程序:
./a.out
或
a
这个程序会在控制台窗口里输出:1个空行、一行字符串、1个空行
Hello World
当然,我们也可以按照上一篇 “C语言介绍”中的说明或本文下面的视频链接在集成开发环境或sublime中编辑源程序代码、编译运行这个程序!
这个所谓的“hello world”程序在main函数的函数体中包含了一条程序语句
printf("\nHello World\n");
其中的printf又是一个函数,而这个函数是C语言实现者帮我已经写好在标准库中的一个函数,为了能是编译器知道printf是一个什么样的函数,我们就需要在main函数的前面包含一下这个函数的说明所在的头文件stdio.h,stdio.h中包含了所有标准输入输出(input/output,简称io。std是标准standard)函数的说明。
为了将这个stdio.h内容包含进我们的程序文件,需要用到一个预处理命令 #include:
#include < stdio.h>
编译工具在编译这个程序时,首先会使用一个“预处理器”对所有的预处理命令如#inlude进行相应的处理,对于#include,预处理器会用stdio.h的内容替换掉预处理语句”#include < stdio.h>”。然后编译器才对这个处理过的C源程序进行编译,因为stdio.h中已经对printf函数进行了说明,所以当在main函数中遇到printf时,就知道这是一个“函数调用”,即调用printf函数中的程序代码对圆括号()中的“实际参数”进行处理,即将两个双引号”“括起来的字符串中内容输出到屏幕窗口中。
C程序中双引号括起来的表示的是一个字符串(即一串字符)。字符有字母、数字、下划线_等可以在屏幕上直接看到的字符,还有一些不能看到的字符如回车、换行符等, C语言中一个字符用单引号表示,如’A’、’4’、’\n’。这个字符’\n’表示的是一个字符而不是2个字符\和n。当printf函数遇到这个特征的字符’\n’时会执行换行动作,因此上面的程序中输出时,先1个空行,最后又是1个空行。
这种’\n’用反斜杠表示不可打印的字符叫做转义字符。还有一些常用的转义字符如下:
'\t' 表示的是“制表符”,printf函数遇到这个字符会输出几个空格
'\\' 表示的是反斜杠字符\
'\'' 表示的是单引号字符'
再看下面的程序:
/* ------2017-10-30-----
这是第一个程序,
即著名的“hello world”程序
作者:hello world
*/
#include < stdio.h>
void main(){
printf("\nHello World\n");
}
在”#include”语句前面的以/*
开头和*/
结尾的,其中可能有多行文字的,称为“注释”。所谓“注释”就是用于对程序说明的文字,它们不是程序本身的语句,仅仅对程序做一下说明或解释。其目的是为了方便他人能阅读理解程序,也为了自己今后能回顾当时是怎么写这个程序的。如如同我们在一本书上做笔记注解一样,这些笔记注解不是程序的一部分,完全可以删除,不会影响程序的运行! 但“对程序进行注释”是一个良好的习惯!
2011年批准的C语言新标准C11,还允许所谓的“单行注释”,即 以2个斜杠 // 开头的这一行之后的文字都属于注释。如
// 这是第一个程序,
// 即著名的“hello world”程序
// 作者:hello world
// 2017-10-30
#include < stdio.h>
int main(){ // 返回类型int,表示返回一个int类型的整数值
printf("\nHello World\n"); // 用printf函数输出1个空行,1个字符串和另外1个空行
return 0; // 用关键字return返回int类型的整数值0给操作系统,表示成功,
// 如果返回不是0的值一般表示失败,不同整数值代表不同的错误
}
总结:
1) c程序执行的是一个名字叫做main的函数,该函数也称为主函数。
2) 函数是由“返回类型、函数名、参数列表、函数体”四部分组成的,由左右花括号包围的多个语句称为“程序块”或“复合语句”.一个函数中可以有调用其他函数的“函数调用”语句,比如main函数中的“printf(“\nHello World\n”)”调用了printf函数中的代码。C语言中的复合语句(或称语句块)的格式为:
{
语句1
语句2
...
}
3) printf是一个(标准库中的)函数, 标准库中别人已经写好了很多这样的标准函数,程序员就不要自己重新写这些代码了,直接拿来用就可以了,可以大大节省了时间、提高了编程的效率!这些函数如同别人已经加工好的标准件一样,不需要自己从头加工了。
因为printf这个函数的规范是在标准输入输出头文件 stdio.h 说明的,所以需要用预处理关键字#include将这个头文件包含进来,这样,编译器将来遇到这个标识符printf才能知道这是一个什么东东! (变量?函数?类型?)
4) C语言的每个东东如函数名、变量名、类型名等都是用一个标识符表示的,如上面程序的函数名main、printf,用来区别不同的东东。所谓标识符就是一串满足下列规定的字符串:
a) 只能以下划线_和字母开头,
b) 只能包含下划线_、字母和数字
c) 不能与C语言已经使用(保留的)名字相同
d) 标识符是区分大小写的,即 printf和Printf是不同的标识符!
5) 字符串是用双引号括起来,而字符则用单引号括起来.转义字符是以反斜杠\开头的表示一个单个的不可见的字符。
6) 以/*
开头和*/
结尾的之间的内容是程序注释,方便阅读理解,它们不属于程序代码的组成部分。
7) 程序语句是以分号 ; 结束的,因此上面程序也可以写成下面的样子:
#include <stdio.h> void main(){printf("\nHello World\n");}
虽然是一样的正确程序,但显然不如一开始的那样的格式更加具有可读性!我们习惯上每行写一个语句,而且不同程序块的语句要具有一定的缩进,这样的代码,自己和别人看起来都舒服!就像我们写文章,一般段落开头缩进2个字一样!
注意:预处理命令本质上不是C语言程序语句。
练习:
- 判断下面的程序输出是什么样的?
#include < stdio.h>
void main(){
printf("\n");
printf("Hello\tWorld");
printf("\n");
}
- 下面的程序定义了函数f,然后main函数调用它2次,请先判断函数运行结果,然后实际编译运行该程序看看是否符合你的预期 ```cpp void f(){ printf(“这是函数f\n”); }
int main(){ f(); //调用函数f
f(); //调用函数f
return 0; }
3. 请编程输出下面的图案.并想一想你还能用pritnf做一些什么工作呢?
```c
*
* *
* * *
* * * *
C语言程序的编译与运行,请查看微博的视频,如:
您的打赏是对我最大的鼓励!