二、C语言基础知识
声明
本文内容大多取自《高级语言程序设计一书》,为本人学习笔记记录,切勿用于商业用途。
第一节 C 语言发展和特点
C 语言是当今最流行的计算机语言之一,是一种结构化的高级语言。
一、C 语言发展
C 语言源于 ALGOL60 语言,于 20 世纪 60 年代初提出。
1963 年,英国剑桥大学将 ALGOL 60 语言发展成为组合程序设计语言(CPL)。 1967 年,英国剑桥大学的 Martin Richards 对 CPL 进行简化,开发出基本组合程序设计语言 (BCPL)。
1970 年,美国贝尔实验室的 Ken Thompson 以 BCPL 语言为基础,设计出很简单且很接近硬 件的 B 语言(取 BCPL 的首字母)。
1972 年,美国贝尔实验室的 D.M.Ritchie 在 B 语言的基础上最终设计出了一种新的语言,他取 了 BCPL 的第二个字母作为这种语言的名字,即 C 语言。
1975 年,UNIX 第六版发布后,C 语言终于获得了计算机专业人士的广泛支持。
1978 年,美国贝尔实验室正式推出了 C 语言。
1983 年,美国国家标准协会(ANSI)根据 C 语言问世以来的各种版本,对 C 语言发展和扩充 制定了第一个 C 语言标准草案,称为 83 ANSIC。
1989 年,ANSI 发布了一个完整的 C 语言标准 ANSI X3.159-1989,称为 ANSI C 或 C89。
1990 年,国际标准化组织(ISO)接受 C89 为 ISO 国际标准,也称为 C90。 1999 年,ISO 对 C 语言标准进行修订,发布了新的 C 语言国际标准——ISO/IEC9899:1999, 简称 C99。
二、C 语言特点
C 语言的主要特点可以概括如下:
1)结构化语言
2)运算能力强大
3)数据类型丰富
4)具有预处理能力
5)可移植性好
6)程序执行效率高
7)程序设计自由度大.
第二节 C 语言基本词法
—、字符集
字符是组成语言最基本的元素。C 语言中允许出现的所有字符的集合称为 C 语言的字符集,由 字母、数字、空格、标点和特殊字符组成。C 语言的字符集就是 ASCII 字符集,主要包括以下几种:
1)阿拉伯数字:0、1、2、…、9(共 10 个)。
2)大小写英文字母:A〜Z、a〜z(共 52 个)。
3)非字母、非数字的可显示字符(33 个)。
4)转义字符:ASCII 字符集中还有一些字符不能显示在显示器上,称为不可显示字符,例如回 车换行符、制表符等。转义字符是由反斜杠“\”后面跟单个字符或若干个字符组成,将在第三章第 二节介绍。
二、关键字
C 语言中具有特殊含义的单词称为“关键字”,又称“保留字”,主要用于构成语句。关键字 是由系统预先定义的,不能用于其他目的。 C 语言共有 32 个关键字,所有的关键字均由小写字母组成,其主要含义如表 2-2 所示。

三、标识符
标识符是字符的序列,除了库函数的函数名等由系统定义外,其余均由用户自行定义。用户根 据需要对 C 程序中用到的变量、符号常量、自定义函数等进行命名,形成用户标识符。
C 语言规定,用户标识符仅由大小写英文字母、数字和下画线组成,且第一个字符不能是数字。 下面给出一些正确和错误的标识符实例,如表 2-3 所示。

ANSI C 规定,标识符可以是任意长度。但由于 C 语言编译系统和机型的不同,可以识别的标 识符长度也不同。例如某些版本 C 语言规定标识符前 8 位有效,当两个标识符前 8 位相同时,则被 认为是同一个标识符。Microsoft Visual C++ 6.0 对此基本没有限制。
标识符中的英文字母是区分大小写的。
用户自定义的标识符既不能是 C 语言的关键字,也不能与用户已编写的函数或 C 语言的库函数 重名。
四、词汇分类
C 语言的词汇分为六类,即常量、标识符、关键字、运算符、注释符和分隔符。
(1)常量
C 程序运行中其值不发生变化的量,例如-1、5.6 等。
(2)标识符
C 程序中使用的变量名、函数名和标号等统称为标识符。
(3)关键字
关键字是由 C 语言规定的具有特定意义的字符串。
(4)运算符
C 语言中用于计算的符号,如+(加)、-(减)、*(乘)和/(除)等。
(5)注释符
C 语言的注释符有两种,一种是以“/*”开头,并以“*/”结尾的多行注释。在“/*”与“*/” 之间的内容即为注释;另一种是以“//”开头的单行注释,直接在需要注释的地方(行首)加上 即可。两 者的区别在于,第一种注释可以跨行,第二种注释不可以跨行。编译源程序时,不对注释进行任何 处理。注释可以出现在程序的任何位置,可有多行,但不可嵌套。注释的作用是为用户提示或解释 程序的意义。此外,在调试程序时对暂不使用的语句也可用注释符括起来,使翻译程序跳过而不作 处理,待调试结束后再去掉注释符。

(6)分隔符
C 语言的分隔符包括逗号和空格两种。逗号主要用在类型说明和函数参数表中,分隔各个变量; 空格多用于语句各单词之间,作为间隔符。需要注意的是,在关键字和标识符之间必须要有一个以 上的空格进行间隔,否则将会出现语法错误。例如把“int a;”写成“inta;”,则 C 语言的编译程序 会把 inta 当成一个标识符处理,其结果必然出错。
第三节 C 语言基本语句分类
按照语句功能或构成的不同,可将 C 语言的语句分为数据定义语句、赋值语句、函数调用语句、 表达式语句、流程控制语句、复合语句和空语句等等,C 语言的每个语句都以分号“;”结束。
(1)数据定义语句
用于定义 C 程序中使用的各种能存放数据的对象的名称和属性。
(2)赋值语句
形如“变量=表达式;”的语句,其功能是计算表达式的值并赋予变量。
(3)函数调用语句
形如“函数名(实际参数表);”的语句,其功能是调用指定的函数。
(4)表达式语句
形如“表达式;”的语句,仅由表达式加上分号“;”组成,执行表达式语句就是计算表达式的值, 例如 y+z;。C 语言中,赋值和函数调用都是表达式,所以赋值语句和函数调用语句都是特殊的表达 式语句。
(5)流程控制语句
用于控制程序执行的流程,以实现程序的各种结构,它们由特定的语句关键字组成。C 语言有 九种控制语句,可分为以下三类。 1)选择控制语句:if 语句和 switch 语句。 2)循环控制语句:while 语句、do-while 语句和 for 语句。 3)转移语句:goto 语句、break 语句、continue 语句和 return 语句。
(6)复合语句
把多个语句用一对花括号{ }括起来组成的一个语句称为复合语句。在程序中应把复合语句看成 是单条语句,而不是多条语句。需要注意的是,复合语句内部的每条语句都必须以分号结尾,而在 花括号外不能加分号。 例如,
{
int a,b;
a=a+b;
printf("%d%d\n",a,b);
}
(7)空语句
无任何操作的语句,即只由分号组成的语句,一般在程序中用作空循环体。 例如,
while( (c=getchar()) != '\n' );
这里的循环体为空语句,表示循环体什么都不做。
(8)其他
包括编译预处理命令、自定义类型语句等。 上述各种语句的格式和功能将在后续章节详细介绍。
第四节 C 程序基本组成
C 程序是由语句组成的,通常包括一个或多个函数,其中有且只有一个函数称为主函数,其函 数名为 main。
下面给出几个简单的 C 程序例子。
【例 2-1】从键盘输入两个整数,计算其乘积。
程序代码如下:
/*【例 2-1】从键盘输入两个整数,计算其乘积。*/
#include<stdio.h>
int main(void) //主函数
{
int n1,n2,result; /*定义保存两个整数及其乘积的变量*/
printf("请输入两个整数,以回车或空格键键隔开:");
scanf("%d%d",&n1,&n2); /*从键盘输入两个整数并分别保存到变量 n1 和 n2*/
result=n1*n2; /*计算整数 n1 和 n2 的乘积并保存到变量 result*/
printf("乘积结果是:%d\n",result); /*输出变量 result 中的两个整数的乘积*/
return 0;
}
}
`运行结果如下:
请输入两个整数,以回车或空格键键隔开:1 3
乘积结果是:3
Press any key to continue
【例 2-2】从键盘输入两个整数,计算其乘积(利用用户自定义函数实现)。
/*【例 2-2】从键盘输入两个整数,计算其乘积(利用用户自定义函数实现)。*/
#include<stdio.h>
int mul(int a,int b) /*定义一个函数 mul*/
{
int c; /*定义一个整型变量 c*/
c=a*b; /*计算两个整数的乘积并保存到变量 c*/
return c; /*返回变量 c 中的两个整数的乘积*/
}
int main(void) /*主函数*/
{
int n1,n2,result; /*定义保存两个整数及其乘积的变量*/
printf("请输入两个整数:以空格或回车间隔:");
scanf("%d%d",&n1,&n2); /*从键盘输入两个整数并分别保存到变量 n1 和 n2*/
result=mul(n1,n2); /*调用函数 mul 计算整数 n1 和 n2 的乘积并赋值给变量 result*/
printf("乘积结果为:%d\n",result); /*输出变量 result 中的两个整数的乘积*/
return 0;
}
运行结果如下:
请输入两个整数:以空格或回车间隔:1 5
乘积结果为:5
Press any key to continue
综上所述,C 程序的组成特点如下:
1)每个 C 程序由一个或多个函数组成。
每个 C 程序有且仅有一个主函数,除主函数外,可以没有其他函数;也可以有一个或多个其他 函数。
2)函数是 C 程序的基本单位。每个函数(包括主函数)是由函数首部和函数体两部分组成, 即:
函数首部 返回值类型 函数名(类型 形式参数名,...)
函数体 {
数据定义部分
实现函数功能的语句序列
}
其中,函数名后面的一对圆括号( )中写出函数要用到的形式参数,当没有形式参数时写 void; 一对花括号{ }是函数体的界定符,其中的内容称为函数体。
3)C 程序中每一语句后面都以分号“;”作为语句的结束,但预处理命令、函数首部和右花括 号之后不能加分号。
4)C 语言本身没有输入/输出语句,而是通过调用库函数 scanf( )、printf( )、getchar( )和 putchar( )实现的。
5)C 程序的任意位置都可以加注释/…/,注释可有多行,但不可嵌套。
6)C 程序的书写格式灵活,一行内可书写多条语句,一条语句也可以写在多行上,可以任意插 入空格和回车。
7)C 程序的执行总是从主函数开始,并在主函数结束。主函数和其他函数的位置是任意的,其 他函数总是通过函数调用语句被执行。
8)C 程序中可以有预处理命令(例如 include 命令),通常预处理命令应放在程序的最前面。
9)主函数可以调用任何其他函数,任何其他函数之间可以互相调用,但不能调用主函数。
为了便于阅读、理解和维护 C 程序,在书写程序时应遵循以下规则:
- 一个说明或一条语句占一行。
- 用一对花括号{ }括起来的部分,通常表示程序的某一层次结构。{ }一般与该结构语句的第一个 字母对齐,并单独占一行。
- 低一层次的语句或说明可比高一层次的语句或说明缩进若干个空格后书写。以便层次更加清晰, 增加程序的可读性。
编程时应力求遵循上述规则,以养成良好的编程风格。
第五节 C 程序开发环境
一、C 程序的运行步骤
C 程序在计算机上的运行步骤如图 2-1 所示。

1)编辑:进入 C 语言编译系统,建立源程序文件,扩展名为“c”或“cpp”,编辑并修改、 保存源程序。
2)编译:计算机不能识别和执行高级语言编写的源程序,必须经过编译程序对源程序进行编译。
3)链接:经过编译生成的目标程序还无法在计算机上直接运行,因为源程序中输入、输出以及 常用的函数运算是直接调用函数库中的库函数,因此必须把库函数的处理过程链接到经编译生成的 目标程序中,生成可执行文件,其扩展名为“exe”。
4)运行:一个 C 源程序经过编译、链接后生成可执行文件,可在编译系统或操作系统中运行。
C 语言的编译系统很多,常用的是集成开发环境,即源程序的编辑、编译、链接和运行都在同 一环境下完成,便于操作。
Microsoft VisualC++6.0 不仅支持 C+十语言的编程,也兼容 C 语言的编程。本书的上机环境 是 Microsoft VisualC++6.0。
二、C 程序的运行
在 Microsoft Visual C++ 6.0 环境下运行 C 程序的主要过程如下:
1. 启动 Microsoft VisualC++6.0
双击 Microsoft Visual C++ 6.0 的图标,启动 Microsoft Visual C++ 6.0。
2. 新建项目
1)在主窗口的主菜单栏中选择“File”菜单项,在弹出的子菜单中选择“New”命令。
2)弹出的“New”对话框中,切换到“Projects”选项卡,在左侧列表框中选择“Win32 Console Application”项,然后在右侧的“Project name”文本框中输入新建工程的名称,如 HelloWorld, 在“Location”文本框中输入工程的存储路径。
3)如图 2-5 所示,在弹出的“Win32 Console Application”对话框中选中“An empty project” 单选按钮,单击“Finish”按钮。
4)在弹出的“New Project Information”对话框中单击“OK”按钮,项目工作区中显示新 建的空工程“HelloWorld”。
3. 新建源程序
1)在主窗口的主菜单栏中选择“File”菜单项,在弹出的子菜单中选择“New”命令。
2)在弹出的“New”对话框中,切换到“Files”选项卡,在左侧的列表框中选择“C++ Source File”项,表示要新建一个 C/C++源程序文件,勾选右侧的“Add to project”复选框,并选择刚 刚创建的空工程“HelloWorld”,在“File”文本框中输入新建源程序文件的名称,如“hello.c”。
3)单击“OK”按钮,可以看到程序编辑窗格即可编辑程序,如图 2-8 所示。
4. 编译源程序
在主菜单栏中选择“Build”菜单项,在弹出的子菜单中选择“Compile hello.c”命令,或者 单击工具栏中的“Compile”按钮在编译过程中,主窗口下方会弹出调试信息窗格,此窗格会输出 编译的信息。如果无错误,输出“0 error(s), 0 warning(s)”;如果有错误,则输出相关的错误信 息。
5.链接源程序
编译成功之后进行链接操作。在主菜单栏中选择“Build”菜单项,在弹出的子菜单中选择“Build HelloWorldexe”命令,或者单击工具栏中的“Build”按钮。
6. 运行程序
链接成功之后即可运行程序。在主菜单栏中选择“Build”菜单项,在弹出的子菜单中选择 “Execute HelloWorld.exe”命令,或者单击工具栏中的“Execute Program”按钮。

下图少了个分号,请忽略代码。



三、C 程序的调试
在 Microsoft Visual C++ 6.0 环境下调试 C 程序的主要过程如下:
1. 设置断点
调试 C 程序时,首先需要判断程序可能从哪条语句开始出现错误,将光标移动到该语句所在行, 然后单击“InsertRemove Breakpoint”按钮或按〈F9〉键或者点击Edit菜单下边的InsertRemove Breakpoint”,此时若在语句行左侧出现一个红点, 则表示断点设置成功。

通过设置断点,检查运行到断点处某些表达式的值,以确定错误的大致位置;通过核对某些表 达式的值,以确定错误的原因。
2. 调试界面
断点设置成功后,单击“Go”或者按“F5”按钮,程序开始运行。运行到断点所在语句时,程序将自动暂停 执行,进入调试状态,代码行左侧的黄色小箭头指示程序当前的执行位置。界面下方出现两个窗格, 左侧窗格为自动变量框,可以看到各变量的当前值,右侧窗格为观察框,在“Name”列输入变量 名称后,“Value”列将显示该变量的当前值。在观察框中可以输入多个变量名以方便检测程序。
到断点处停止运行


我们也可以在 VC“Build”(组建)菜单下的“Start Debug”(开始调试)中点击 Go(F5)命令进入调试状态,Build 菜单自动变成 Debug 菜单,提供以下专用的调试命令:
Go(F5) 从当前语句开始运行程序,直到程序结束或断点处。
Step Into(F11) 单步执行下条语句,并跟踪遇到的函数。
Step Over(F10) 单步执行(跳过所调用的函数)
Run to Cursor(Ctrl+F10) 运行程序到光标所在的代码行。
Step out(Shift+F11) 执行函数调用外的语句,并终止在函数调用语句处。
Stop Debugging(Shift+F5) 停止调试,返回正常的编辑状态

喜欢网络安全与编程的兄弟可以关注下我的公众号

二、C语言基础知识的更多相关文章
- OC语言基础知识
OC语言基础知识 一.面向对象 OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能 ...
- 李洪强iOS开发之OC语言基础知识
OC语言基础知识 一.面向对象 OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能 ...
- C语言基础知识-数组和字符串
C语言基础知识-数组和字符串 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数组概述 在程序设计中,为了方便处理数据把具有相同类型的若干变量按有序形式组织起来的方式我们称为数组 ...
- C语言基础知识-程序流程结构
C语言基础知识-程序流程结构 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.概述 C语言支持最基本的三种程序运行结构:顺序结构,选择结构,循环结构. 顺序结构:程序按顺序执行, ...
- C语言基础知识-运算符与表达式
C语言基础知识-运算符与表达式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.常用运算符分类 1>.算术运算符 用于处理四则运算. 2>.赋值运算符 用于将表达式的 ...
- C语言基础知识-数据类型
C语言基础知识-数据类型 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.常量与变量 1>.关键字 C的关键字共有32个. >.数据类型关键字(12个) char,s ...
- Golang 入门系列(三)Go语言基础知识汇总
前面已经了 Go 环境的配置和初学Go时,容易遇到的坑,大家可以请查看前面的文章 https://www.cnblogs.com/zhangweizhong/category/1275863.html ...
- ios开发学习笔记001-C语言基础知识
先来学习一下C语言基础知识,总结如下: 在xcode下编写代码. 1.编写代码 2.编译:cc –c 文件名.c 编译成功会生成一个 .o的目标文件 3.链接:把目标文件.o和系统自带的库合并在一起, ...
- 【转载】salesforce 零基础开发入门学习(二)变量基础知识,集合,表达式,流程控制语句
salesforce 零基础开发入门学习(二)变量基础知识,集合,表达式,流程控制语句 salesforce如果简单的说可以大概分成两个部分:Apex,VisualForce Page. 其中Apex ...
- 重拾C语言基础知识
从实习到工作两年多的时间了,虽然感觉学到了很多知识,但是事实上却将立足之本的基础知识给忘了个精光.也许跟自己没有出去找工作有关,没有好好的将C语言的基础牢牢掌握. 从现在开始吧!好好的重温基础,做一名 ...
随机推荐
- 正式发布!《ICPMM行业云平台运营管理能力成熟度》系列标准来了!
近日,由中国信息通信研究院(简称中国信通院)主办的企业上云用云专项行动会在北京举行.在"行业云平台研讨会暨年度成果发布会"专题会议中,中国信通院携手天翼云与业界多家头部机构发布&l ...
- java中线程的创建方式-休眠-生命周期-工作方式
进程 进程的定义:进程是操作系统分配资源的基本单位.每个进程都有自己独立的内存空间和系统资源. 进程的独立性:进程之间是相互独立的,一个进程的崩溃不会影响到其他进程. java中的体现:在Java中, ...
- DBeaver连接PostgreSQL后只有默认数据库“postgres”不显示其他数据库的问题解决办法
我们在使用DBeaver连接PostgreSQL后,发现数据库中只有"postgres"默认数据库,不显示我们自己创建的数据库. 1.问题描述 我们在使用DBeaver连接Post ...
- mac 安装vue
1.git clone https://github.com/vuejs/vue-devtools.git 切换master分支 cd vue-devtools npm install --regis ...
- Codeforces 1536B Prinzessin der Verurteilung 题解 [ 紫 ] [ 后缀自动机 ] [ 动态规划 ] [ 拓扑排序 ]
Prinzessin der Verurteilung:最短未出现字符串的板子. 思路 考虑在 SAM 上 dp,定义 \(dp_i\) 表示从 \(i\) 节点走到 NULL 节点所花费的最少步数. ...
- acwing329 围栏障碍训练场 题解
考试压轴题,意识到这题是线段树优化 \(dp\) 时追悔莫及. 为了简化题目,我将从起点到原点变成了从原点到起点(这样就可以省去两个数组的空间). 想到设 \(dp_{i,j}\) 表示在第 \(i\ ...
- 简单编写Makefile与使用make工具
简单编写Makefile与使用make工具 在不使用make工具下对c文件的编译 gcc main.c -o out gcc <目标文件> -o <生成执行文件> 编译到执行文 ...
- MOS管的寄生电容
我们经常看到,在电源电路中,功率MOS管的G极经常会串联一个小电阻,几欧姆到几十欧姆不等,那么这个电阻用什么作用呢? 这个电阻的作用有2个作用:限制G极电流,抑制振荡. 限制G极电流MOS管是由电压驱 ...
- Jsmoke-一款强大的js检测工具,浏览器部署即用,使用方便且高效
Jsmoke by Yn8rt 该插件由 Yn8rt师傅 开发,插件可以理解为主动版的hae和apifinder,因为其中的大多数规则我都引用了,当你认为当前页面,以及其调用的js文件存在敏感信息 ...
- Windows 提权-RunAs
本文通过 Google 翻译 RunAs – Windows Privilege Escalation 这篇文章所产生,本人仅是对机器翻译中部分表达别扭的字词进行了校正及个别注释补充. 导航 0 前言 ...