C语言入门与进阶
初识C语言
(一) 简介
C语言是一种通用的、面向过程的编程语言,具有高效、灵活、可移植性强等特点。它诞生于1972年的贝尔实验室,由 .c
结尾。
(二) 语言标准
1. K&R C
1978年,
2. ANSI C(又称 C89 或 C90)标准
1994年,ANSI/ISO联合委员会(C9X委员会)修订并发布了一套C标准。
3. ISO C(又称 C99)标准
1999年,ISO(国际标准化组织)发布了C99标准,并最终发布了C11标准。
(三) 程序设计步骤
相信有不少同学是第一次接触编程语言,所以我觉得还是有必要在这里大概描述一下基本的C语言编写步骤,以让大家对这门面向过程的语言有大致的理解。
1. 定义程序的目标
C语言是一种面向过程的编程语言。在编写代码时,通常按照解决问题的流程逐步编写代码,这与我们日常的思维方式相似。
在动手写程序之前,首先自己要明确自己想做什么,思考你的程序需要哪些东西,要进行哪些计算和控制,以及程序应该返回给你什么信息。
2. 设计程序
想清楚程序要做什么之后,就应该考虑如何用程序来完成它。设计程序时,需要考虑程序中需要哪些变量,以及这些变量需要如何存储和操作。
3. 编写代码
在设计好程序后,我们就可以编写代码来实现它。也就是把刚才的思路用C语言来实现。
在开始编写之前,确保你的输入法已经调到了英文模式,对人来说英文的标点符号可能和中文的大差不差,但是对于机器来说,英文标点和中文标点截然不同。
切记,程序最好要有必要的注释(必要的注释,而不是什么都加注释),否则可能会出现今天这堆代码只有你能看懂,明天一觉醒来这堆玩意你自己也看不懂的情况(尤其是代码很长或代码分成了多个文件的时候)。也有可能修改的时候动了这个忘了那个,改掉一个bug多了三个bug。
4. 编译
这一步是由我们的编译器自动完成的,我们只需要点击 编译
(有的编译器甚至没有这个按钮,直接点 运行
按钮就行了)
5. 运行程序
编译完成之后,我们就能获得一个可执行文件(.exe),可以在IDE中通过菜单中的选项来执行这个文件,也可以在命令行中使用指令或双击运行这个文件。
6. 测试和调试程序
正常情况下,程序能正常运行。但是,有时候,甚至是大多数情况下,程序会出现一些奇奇怪怪的问题(bug)。查找并修复程序错误的过程叫调试。逐行执行代码并查看你的变量的数值或者循环的次数,通过这种方式,我们能精确地发现问题在哪里。
试着建个文档,把自己犯过的错记下来,未来某天再看这个文档的时候,说不定会有意外的收获。(刚开始可能出现一些简单的错误,比如 main
写成 mian
,stdio
写成 studio
之类的,我们都犯过这样的错误。但是随着学习进度的推进,简单的错误就不会再出现了)
C语言概述
上一章我们对C语言的历史和设计思路有了大致的概念,这一章我们来聊聊C语言中的一些名词和基本概念。
(一) 第一个C语言程序
下面我们来看一个基础的C语言示例,看不懂也没关系,后面会拆分开详细讲解
#include <stdio.h>//引入名为stdio的文件的内容,stdio是C语言的标准库
int main(void)//main是主函数,也是我们程序的入口
{//函数体开始
//在两个斜杠//后面的字符都是注释,是给人看的,编译器编译的时候会跳过它
//每一行末尾记得加分号,表示这行代码已经写完了
//下面创建一个名为num的变量,这个变量是int(整数)类型
int num;
//给变量num赋值为1
num = 1;
//调用printf函数,输出 Hello World!
printf("Hello World!");
//返回0,程序结束
return 0;
}//main函数结束
(二). 细节剖析
看完上面那个程序,也许你有很多疑惑,下面我们把它拆分开细细说说:
1. #include <stdio.h>
#include <stdio.h>
这行代码是一条C预处理器指令,说白了就是编译器在处理代码之前,会先看一下这个命令指定的文件,这样引入的文件叫头文件。头文件里面放的是一些预先写好的函数和变量。这么说可能有点抽象,打个比方:我们看过元素周期表之后,才知道 #include
引入的文件之后,才知道 printf
是输出函数、scanf
是输入函数,以及你写这些函数的时候它要做什么(函数后面会详细讲,不用在这里纠结)。
2. 注释
在C语言中有两种注释,下面我举几个例子:
//这是一个注释,它只能这样写
//这里是注释部分
这里不是注释部分,因为它前面(指本行)没有双斜杠
//也就是说,这种注释只能写成一行
/* 这是另一种注释,它可以写成多行,
只要注释以斜杠加星号开头,以星号加斜杠结尾即可*/
/*
多行的注释也可以这样写
总之,在C语言中
被 斜杠加星号 和 星号加斜杠夹在中间的
都是注释部分
*/
3. main() 函数
C程序一定从 main()
函数开始执行,现阶段我们知道这一点就可以了,更多的东西会在后面的函数章节讲到。
4. 声明和初始化
你可能看到我上面用了 int num;
来创建一个 int
类型的变量(数据类型我们会在下章节详细讲,这里知道它是代表整数就行),变量的名字是 num
,这就叫声明了一个名为 num
的变量。
声明时,编译器在计算机内存中为变量预留了空间,然后在执行赋值语句时,把值储存在之前预留的位置。给变量赋一个初始值的过程称为初始化。
5. 变量命名规则
可以用小写字母、大写字母、数字和下划线(_)来命名。另外,名称的首字符必须是字符或下划线,不能是数字。操作系统和C的库经常使用以一个或两个下划线字符开始的标识符(如,_kcab
),所以我们最好不要在自己的程序中使用这种名称。
另外,变量的名字不要和C语言的关键字重名。比如 int
是C语言的一个关键字,表示一种C语言数据类型,给自己的变量和函数起名字的时候不能命名为 int
。
6. 提高程序可读性
什么是程序可读性?简单来说,就是你能不能轻松看懂这个程序。可读性高的程序更容易理解,以后也更容易修改和更正。提高程序的可读性也有助于我们理清思路。
如何提高程序可读性呢?方法有很多,我只提供三个最简单的建议供各位参考:
首先是使用
见名知意
的函数名和变量名,比如我这个变量存放的值代表成绩,我就把这个变量命名为Grades
。其次是在程序中加入适当的注释,以帮助我们快速理清思路。
最后,是适当地使用空行,将你的程序分成不同的部分,例如:
#include <stdio.h>
int main(void)
{
int kilograms;
int price;
int num;
num = 6;
price = 4;
kilograms = 7;
printf("%d",num * kilograms * price);
return 0;
}
这段代码使用了两个空行,把声明部分、赋值部分和输出部分分隔开来,我们实际编程中可以按照自己喜欢的方式使用空行,上面这个仅供参考。