C语言概述与基础【C语言从入门到精通系列(二)】

文章目录

  • 一、初识C语言
  • 二、 C 语言基本特点
    • 2.1 高级语言
    • 2.2 编译型语言
    • 2.3 可移植性
    • 2.4 简洁高效
  • 三、C语言的编译和执行过程
  • 四、数据的表现形式
    • 4.1 变量
    • 4.2 常量
    • 4.3 常变量
    • 4.4 关键字和标识符
  • 五、 输出"Hello, World!"
    • 六、 相关符号


一、初识C语言

①C语言由美国计算机科学家丹尼斯·里奇(Dennis Ritchie)在20世纪70年代初开发而成。起初,他为了研究和开发Unix操作系统而创建了C语言。

②C语言是由B语言发展而来的,B语言是由贝尔实验室的肯·汤普逊(Ken Thompson)于20世纪60年代开发的一种面向过程的编程语言。

③在1972年至1973年间,C语言被完善并重新实现,从而成为一个更加强大和通用的编程语言。
C语言的设计目标是提供一种能够方便地编写系统软件、具有高效性和可移植性的编程语言。


二、 C 语言基本特点

2.1 高级语言

C语言是一种高级计算机编程语言(高级语言),它于1972年由Dennis Ritchie在贝尔实验室开发。C语言具有高效、可移植、结构化等特点,被广泛用于系统软件、驱动程序、嵌入式系统和应用软件的开发中。

2.2 编译型语言

C语言是编译型语言,需要通过编译器将源代码转换成可执行的二进制机器码,然后再运行该程序。与解释性语言相比,C语言的优点是执行速度更快、可靠性更高,并且可以直接操作计算机硬件。

2.3 可移植性

C语言是可移植的语言,在一种系统中编写的C语言程序稍作修改或者不做修改就可以在其他系统运行。

2.4 简洁高效

C语言以其简洁和高效而闻名。它提供了一组简洁的关键字和语法规则,使程序员能够以最小的开销控制计算机硬件资源。


C语言有两个较为常用的语言标准,一个是C99,另一个是C11


三、C语言的编译和执行过程


C语言的编译和执行过程可以分为以下几个步骤:

(1)编写源代码:在开始编译和执行之前,首先需要编写C语言的源代码文件。源代码是由程序员使用C语言编写的文本文件,其中包含了程序的逻辑和功能。

(2)预处理:在编译阶段之前,源代码会经过预处理器的处理。预处理器会根据源代码中的预处理指令(以#开头)对源代码进行处理。常见的预处理指令包括宏定义、条件编译等。

(3)编译:在编译阶段,将经过预处理的源代码转换为机器可执行的形式。这个过程是由编译器完成的。编译器会将源代码转换为汇编代码,即一系列低级的机器指令,以便计算机能够理解和执行。

(4)汇编:汇编是将汇编代码转化为机器码的过程。在这个阶段,汇编器将编译得到的汇编代码转换为机器码或可重定位的二进制代码。

(5)链接:链接是将多个源代码文件及相关的库函数合并成最终可执行文件的过程。链接器会将编译生成的目标文件链接起来,并且解决所有的符号引用,生成可执行文件。

(6)执行:最后,生成的可执行文件可以被计算机加载和执行。当运行程序时,操作系统会负责将可执行文件加载到内存中,并按照指令逐条执行。

总结起来,C语言的编译和执行过程包括预处理、编译、汇编、链接和执行几个不同的阶段。在这个过程中,源代码会被转换为机器可执行的形式,并最终在计算机上执行。这样的分步过程使得开发人员能够更好地理解程序的构建过程,方便调试和优化。


四、数据的表现形式

C语言中数据的表现形式可以分为以下几种:


4.1 变量

变量在运行过程中,其值可以发生改变。

且变量必须先定义后使用。

变量定义的格式为:

数据类型 变量名 = 变量值;

这个过程也可以分成两步来,先声明变量类型,再赋值。

数据类型 变量名;
变量名 = 变量值;

具体后边的文章再详说。

4.2 常量

C语言中的数据可以分成常量变量,常量在运行过程中,其值不能发生改变。
常量可以分为直接常量符号常量


直接常量是不需要定义,直接就可以使用的常量,具体又可以分为整型常量浮点型常量字符型常量字符串常量
如1,1.2,‘h’,"abc"这样的常量。

其中,字符型常量有且只能有一个字符,且必须使用单引号括起来。
字符串常量必须用双引号括起来,并以空字符(‘\0’)结尾。这个空字符也被称为字符串的“结束符”。

当我们定义一个字符串常量时,编译器会自动在字符串末尾添加一个空字符。所以在定义的时候,这个空字符是不需要我们手动添加的。但是在使用字符串常量时,通常不可以忽视该空字符的影响。不然可能导致程序出错。

如,3个字符组成的字符串实际大小为4个字节,四个字符组成的字符串实际大小为5个字节


与直接常量相对应的是符号常量。符号常量需要先定义,然后才能拿来使用。
如a=1,b=2.2,c=‘m’,d=“abc”。需要先事先把某个固定的值赋给某个字符来表示,且后边不可再做更改。

符号常量是不占用内存空间的。因为符号常量的值是在预处理阶段就被替换成了其对应的字面常量或表达式,它们在程序编译后就不存在了。使用符号常量的好处是可以增加程序的可读性和可维护性,方便我们在程序中引用常用的数值或字符串,减少代码中的重复定义和修改。


在C语言中,常量通常使用#define指令进行定义。

以定义符号常量为例,代码示例如下:

#include 
//定义符号常量
#define c1 5
#define c2 3+2
#define c3 2.2
#define c4 3e3
#define c5 3e-3
#define c6 'M'
#define c7 "abc"


int main() {
    printf("constant c1: %d\n",c1);
    printf("c2*3: %d\n",c2*3);
    printf("constant c3: %f\n",c3);
    printf("constant c4: %f\n",c4);
    printf("constant c5: %f\n",c5);
    printf("constant c6: %c\n",c6);
    printf("constant c7: %s\n",c7);
    printf("size of c7: %d\n",sizeof(c7));
    return 0;
}

程序输出结果如下:
            C语言概述与基础【C语言从入门到精通系列(二)】_第1张图片

由输出结果可知,当符号常量是一个表达式时,如c2为3+2,而c2乘3的结果为9,即3+2*3,是先计算乘法,再计算加法的结果。即相当于将c2照搬进c2*3中,得到3+2*3,再做计算。


除了使用#define指令定义常量,在函数只能怪使用const关键字来定义常变量也可以实现类似常量的效果。


4.3 常变量

常变量是指在运行过程中,其值不会发生改变 的 变量

因此常变量可以理解为变量,也可以理解为是常量。使用const关键字来定义,具体的定义方式如下:

const 数据类型 变量名=变量值

下边定义一些常变量(符号常量),代码示例如下:

#include 

int main() {
    const int c1 = 5;
    const int c2 = 3+2;
    const float c3 = 2.2;
    const float c4 = 3e3;
    const float c5 = 3e-3;
    const char c6 = 'M';
    const char* c7 = "abc";
    printf("constant c1: %d\n",c1);
    printf("c2*3: %d\n",c2*3);
    printf("constant c3: %f\n",c3);
    printf("constant c4: %f\n",c4);
    printf("constant c5: %f\n",c5);
    printf("constant c6: %c\n",c6);
    printf("constant c7: %s\n",c7);
    printf("size of c7: %d\n",sizeof(c7));
    return 0;
}

程序输出结果如下:
         C语言概述与基础【C语言从入门到精通系列(二)】_第2张图片

由输出结果可知,相比使用#define定义出的符号常量,使用const关键字定义出的常变量存在一定的不同之处。

在使用#define指令时,可以直接将一个常量c2的表达式3+2插入到另一个表达式c2*3中再行计算。
但是使用关键字const,定义的常变量没有该 “照搬” 的特点。而是会先对3+2做计算。即(3+2)*3得到值为15。而不是3+2*3得到的9。

(定义常变量字符串时,需要使用char*符号。)


4.4 关键字和标识符

关键字是C语言中规定具有特殊意义的单词,也称为保留字。
if else while const int break等。


变量名,常量名,函数名,数组名等表示名字的有效字符序列统称为标识符

除了库函数的函数名由系统定义,其他的标识符都由用户自己定义。

标识符命名规范:
①只能由字母,数字,下划线组成。
②第一个字符可以是字母或下划线,但是不能是数字。
③字母区分大小写。即大写字母和对应的小写字母表示的不是同一个字母。
④做到见名识意。即标识符的名称不建议随意定义,最好能体现出其所表示的信息。


五、 输出"Hello, World!"

C语言程序由头文件和函数组成。

以使用C语言实现输出"Hello, World!"为例,创建代码如下。

#include 

//输出"Hello, World!"
int main() {
    printf("Hello, World!\n");
    return 0;
}

其中,#include 表示对头文件的声明。具体的,stdio即standard input output.header,也就是声明“标准输入、输出"头文件,,具体包含如scanf()和printf()两个函数。只有先声明了,才能使用之。

main()即为主函数,return后边表示返回值。
执行C程序时,执行的即为主函数中的代码。

主函数的类型需要与return后边的返回值相对应。如这里其中int表示了主函数的类型是int类型,则定义函数的过程中需要保证主函数的返回值是一个整数,即保证return后边为整数。
   C语言概述与基础【C语言从入门到精通系列(二)】_第3张图片


六、 相关符号

符号 描述 含义
; 每行代码末尾的引号 标着一行代码的结束
// 双斜杠 单行注释
/* */ / 代码的功能是xxxxxxxx/ 多行注释
\ 反斜杠 转义字符
\n 反斜杠与n 换行符
\b 反斜杠与b 退格
\ 反斜杠加反斜杠 表示一个反斜杠字符

你可能感兴趣的:(C语言从入门到精通,c语言,开发语言)