第 2章 C程序的基本组成
2.1 简单的 C语言程序
2.2 基本数据类型变量的定义与宏定义
2.3 数据的输入与输出
2.4 数据的处理
2.5 宏 定 义
2.1 简单的 C语言程序
例 2.1 编写一个 C程序, 其功能是显示字符串, How do
you do!”。
其 C程序如下:
#include "stdio.h"
main()
{
printf("How do you do!\n");
}
下面针对一般的 C程序作几点说明:
( 1) 一个完整的 C语言程序可以由多个函数组成, 但必须
包含一个且只能包含一个名为 main的函数 ( 主函数 ) 。 程
序总是从 main函数开始执行 。
( 2) 在一个 C函数模块中, 由左右花括号 { }括起来的部分
是函数体, 其中的语句系列实现函数的预定功能 。
( 3) C程序中的每一个语句必须以, ;, 结束,但书写格
式是自由的。
( 4) #include是编译预处理命令,其作用是将双引号或尖
括号括起来的文件内容读到该命令的位置处。
( 5) 在 C程序的任何位置处都可以用 /*,....,*/作注释, 以
提高程序的可读性 。
2.2 基本数据类型变量的定义与宏定义
2.2.1 整型常量及其变量的定义
1,整型常量
在 C语言中,有 3种类型的整型常量:基本整型常量、
长整型常量、无符号整型常量。
在 C语言中, 不管是哪种类型的整型常量, 都可以用 3
种数制表示 。
( 1)十进制整型常量。
( 2)十六进制整型常量。
( 3)八进制整型常量。
2.整型变量的定义
在 C程序中, 用于存放整型数据的变量称为整型变量 。
在 C语言中,可以定义基本整型、长整型、短整型
和无符号整型等 4种类型的整型变量。它们的定义方式
如下。
( 1)基本整型变量
定义基本整型变量的形式如下:
int 变量表列;
( 2) 长整型
定义长整型变量的形式如下:
long [int] 变量表列;
( 3)短整型
定义短整型变量的形式如下:
short [int] 变量表列;
( 4) 无符号整型
定义无符号基本整型变量的形式如下:
unsigned [int] 变量表列;
① 一个类型说明语句可以同时定义多个同类型的
变量,各变量之间用逗号,,, 分隔。
② 用类型说明语句定义的变量只是说明了为这些
变量分配了存储空间,以便用于存放与之相同类型的数
据,在未对这些变量赋值前,这些变量中(即存储空间
中)的值是随机的。
③ C语言允许在定义变量的同时为变量赋初值。
④ 在为整型变量初始化或赋值时,C编译系统自动
将被赋数据转换成与相应变量的类型一致。
⑤ 由于各种整型变量所占的字节数有限,因此,
它们所能存放的整数有一定的范围。
2.2.2 实型常量及其变量的定义
1,实型 ( 浮点型 ) 常量
( 1) 十进制数形式
( 2) 指数形式 ( 科学记数法 )
2,实型变量的定义
在 C程序中, 用于存放实型数据的变量称为实型变量 。
在 C语言中,实型变量有单精度与双精度两种。
2.2.3 字符型常量及其变量的定义
1,字符型常量
' \n' 换行
' \r' 回车
' \b' 退格
' \t' 制表 ( 横向跳格 )
' \'' 单引号 ( 单撇号 )
' \"' 双引号 ( 双撇号 )
' \ddd' 1~ 3位八进制数所代表的 ASCII码字符
' \xhh' 1~ 2位十六进制数所代表的 ASCII码字符
' \f' 走纸换页
‘ \\’ 反斜杠字符
2,字符型变量的定义
字符型变量的定义方式如下:
char 变量表列;
2.3 数据的输入与输出
数据的输入与输出应包括以下几项:
① 输入 ( 出 ) 的设备
② 输入 ( 出 ) 的格式
③ 输入 ( 出 ) 的内容
2.3.1 格式输出函数
格式输出函数的一般形式如下:
printf(*“格式控制,, 输出表 );
其中格式控制部分要用一对双撇号括起来,它用于说
明输出项目所采用的格式。
1.整型格式说明符
( 1)十进制形式
( 2)八进制形式
( 3)十六进制形式
2.实型格式说明符
如果以十进制数形式输出实型数据,其格式说明符为
%f 或 %m.nf
如果以指数形式输出实型数据,其格式说明符为
%e 或 %m.ne
3,字符型格式说明符
字符型数据的格式说明符为
%c 或 %mc
( 1) 输出表中各输出项目之间要用,,, 分隔 。
( 2) 格式控制中的各格式说明符与输出表中的各输出
项目在个数, 次序, 类型等方面必须一一对应 。
( 3) 格式控制中除格式说明符外的其他字符将按原样
输出 。
( 4)在输出格式说明符中,如果带有宽度说明,则在
左边没有数字的位置上用空格填满(即输出的数字是右对
齐)。但如果在宽度说明前加一个负号(-),则输出为
左对齐,即在右边补空格。
2.3.2 格式输入函数
格式输入函数的一般形式如下:
scanf(, 格式控制,, 内存地址表 ) ;
1,整型格式说明符
( 1) 十进制形式
用于输入十进制形式的整型数据 。
( 2) 八进制形式
用于输入八进制形式的整型数据 。
( 3) 十六进制形式
用于输入十六进制形式的整型数据 。
2,实型格式说明符
用于输入的单精度实型格式说明符为
%f 或 %e
用于输入的双精度实型格式说明符为
%lf
3,字符型格式说明符
用于输入的字符型格式说明符为
%c 或 %mc
( 1)在格式输入中,内存地址表中必须是变量地址,不
能是变量名。
( 2)与格式输出一样,格式输入格式控制中的各格式说
明符与内存地址表中的变量地址在个数、次序、类型方面
必须一一对应。
( 3)当用于输入整型数据的格式说明符中没有宽度说明
时,则在具体输入数据时分以下两种情况:
① 如果各格式说明符之间没有其他字符,则在输入数据
时,两个数据之间用“空格”、或,Tab”、或“回车”来
分隔。
② 如果各格式说明符之间包含其他字符,则在输入数据
时,应输入与这些字符相同的字符作为间隔。
( 4)当整型或字符型格式说明符中有宽度说明时,按宽
度说明截取数据。
2.4 数据的处理
2.4.1 赋值运算
赋值运算符为, =, 。 赋值表达式为
变量名=表达式
( 1) 在 C语言中,, =, 为赋值运算符, 而不是等号;
( 2) 赋值运算符, =, 左边必须是变量名, 不能是表达式;
( 3) 赋值运算符, =, 两端的类型不一致时, 系统将自动进行
类型转换 。
2.4.2 算术运算
在 C语言中, 基本的算术运算符有以下几个:
+ 加法运算符 ( 双目运算符 ), 或正值运算符 (
单目运算符 ) 。 如 x+ y,+ x。
- 减法运算符 ( 双目运算符 ), 或负值运算符 (
单目运算符 ) 。 如 a- 3,- x。
* 乘法运算符 ( 双目运算符 ) 。 如 3*x。
/ 除法运算符 ( 双目运算符 ) 。 如 x/y。
% 模余运算符 ( 双目运算符 ) 。 只适用于整型数
据, 如 9%4的值为 1,11%3的值为 2等 。
2.4.3 关系运算
在 C语言中, 基本的关系运算符有以下 6个:
< 小于
<= 小于或等于
> 大于
>= 大于或等于
== 等于
!= 不等于
2.4.4 逻辑运算
在 C语言中, 逻辑常量只有两种:值非零表示, 真,
,值为零表示, 假, 。 其基本的逻辑运算符有以下 3个
:
&& ( 逻辑与 ) 两个量都为真时为真 ( 1), 否则
为假 ( 0)
| | ( 逻辑或 ) 两个量中只要有一个为真时为真
( 1), 只有都为假时为假 ( 0)
! ( 逻辑非 ) 一个量为真时为假 ( 0), 假时
为真 ( 1)
逻辑表达式中各种运算符的优先级顺序
如下:
!(逻辑非) ? 算术运算符 ?关系运算符
? && 与 | | ? 赋值运算符
2.4.5 增 1与减 1运算符
增 1运算符, ++, 和减 1运算符, --, 是两个
单目 ( 只有一个运算对象 ) 运算符, 它们的运算对象
只能是整型或字符型变量 。
增 1运算符是将运算对象的值增 1;减 1运算符是
将运算对象的值减 1。
2.4.6 sizeof运算符
sizeof运算符有以下两种用法:
( 1)用于求得表达式计算结果所占内存的字节数。其一
般形式为
sizeof 表达式
( 2)用于求得某种数据类型的量所占内存的字节数。其
一般形式为
sizeof(类型名)
2.4.7 逗号运算符
逗号,,, 是 C程序中常见的符号。
在 C语言中, 逗号除作为分隔符使用外, 还可以作为运算
符来使用, 称为逗号运算符 。
逗号表达式的一般形式为
子表达式 1,子表达式 2,…,子表达式 n
在使用逗号运算符(逗号表达式)时,要注意以下
几点:
( 1)逗号运算符是所有运算符中级别最低的一种运算
符。
( 2)一个逗号表达式又可以与另一个表达式(可以是
逗号表达式,也可以不是逗号表达式)连接成新的逗号
表达式。
( 3)在许多情况下,使用逗号表达式的目的仅仅是为
了得到各个子表达式的值,而并不一定要得到或使用整
个逗号表达式的值。
2.5 宏 定 义
C语言中的宏定义有两种形式:符号常量定义与带参数的
宏定义 。
2.5.1 符号常量定义
在 C语言中, 允许将程序中多处用到的, 字符串, 定义成
一个符号常量 。 在 C语言中定义符号常量的一般形式如下:
#define 符号常量名 字符串
① 由于 C语言中的所有变量名、函数名等都使用小写字
母,因此,符号常量名一般用大写字母表示,以便与 C语言
中的保留关键字相区别。
② C编译系统对定义的符号常量的处理只是进行简单的
替换,不作任何语法检查。
③ #define 是一个命令,而不是语句,因此在行末不能
加“;”,并且应独立占一行。
④ #define 命令一般应出现在程序中函数的外面,其作
用域范围是从
#define 符号常量名 字符串
到
#undef 符号常量名 (或文件末 )
2.5.2 带参数的宏定义
带参数的宏定义的一般形式为
#define 宏名 ( 参数表 ) 字符串
其中字符串中应包含在参数表中所指定的参数, 并且, 当
参数表中的参数多于一个时, 各参数之间要用逗号分隔 。
在使用带参数的宏定义时, 应注意以下两个问题 。
( 1)在使用带参数的宏定义时,一般应将宏定义字符串中的
参数都要用括号括起来,否则经过宏展开后,可能会出现意
想不到的错误。
( 2) 在使用带参数的宏定义时, 除了应将宏定义字符串中的
参数都要用括号括起来, 还需要将整个字符串部分也要用括
号括起来, 否则经过宏展开后, 还会可能出现意想不到的错
误 。
2.1 简单的 C语言程序
2.2 基本数据类型变量的定义与宏定义
2.3 数据的输入与输出
2.4 数据的处理
2.5 宏 定 义
2.1 简单的 C语言程序
例 2.1 编写一个 C程序, 其功能是显示字符串, How do
you do!”。
其 C程序如下:
#include "stdio.h"
main()
{
printf("How do you do!\n");
}
下面针对一般的 C程序作几点说明:
( 1) 一个完整的 C语言程序可以由多个函数组成, 但必须
包含一个且只能包含一个名为 main的函数 ( 主函数 ) 。 程
序总是从 main函数开始执行 。
( 2) 在一个 C函数模块中, 由左右花括号 { }括起来的部分
是函数体, 其中的语句系列实现函数的预定功能 。
( 3) C程序中的每一个语句必须以, ;, 结束,但书写格
式是自由的。
( 4) #include是编译预处理命令,其作用是将双引号或尖
括号括起来的文件内容读到该命令的位置处。
( 5) 在 C程序的任何位置处都可以用 /*,....,*/作注释, 以
提高程序的可读性 。
2.2 基本数据类型变量的定义与宏定义
2.2.1 整型常量及其变量的定义
1,整型常量
在 C语言中,有 3种类型的整型常量:基本整型常量、
长整型常量、无符号整型常量。
在 C语言中, 不管是哪种类型的整型常量, 都可以用 3
种数制表示 。
( 1)十进制整型常量。
( 2)十六进制整型常量。
( 3)八进制整型常量。
2.整型变量的定义
在 C程序中, 用于存放整型数据的变量称为整型变量 。
在 C语言中,可以定义基本整型、长整型、短整型
和无符号整型等 4种类型的整型变量。它们的定义方式
如下。
( 1)基本整型变量
定义基本整型变量的形式如下:
int 变量表列;
( 2) 长整型
定义长整型变量的形式如下:
long [int] 变量表列;
( 3)短整型
定义短整型变量的形式如下:
short [int] 变量表列;
( 4) 无符号整型
定义无符号基本整型变量的形式如下:
unsigned [int] 变量表列;
① 一个类型说明语句可以同时定义多个同类型的
变量,各变量之间用逗号,,, 分隔。
② 用类型说明语句定义的变量只是说明了为这些
变量分配了存储空间,以便用于存放与之相同类型的数
据,在未对这些变量赋值前,这些变量中(即存储空间
中)的值是随机的。
③ C语言允许在定义变量的同时为变量赋初值。
④ 在为整型变量初始化或赋值时,C编译系统自动
将被赋数据转换成与相应变量的类型一致。
⑤ 由于各种整型变量所占的字节数有限,因此,
它们所能存放的整数有一定的范围。
2.2.2 实型常量及其变量的定义
1,实型 ( 浮点型 ) 常量
( 1) 十进制数形式
( 2) 指数形式 ( 科学记数法 )
2,实型变量的定义
在 C程序中, 用于存放实型数据的变量称为实型变量 。
在 C语言中,实型变量有单精度与双精度两种。
2.2.3 字符型常量及其变量的定义
1,字符型常量
' \n' 换行
' \r' 回车
' \b' 退格
' \t' 制表 ( 横向跳格 )
' \'' 单引号 ( 单撇号 )
' \"' 双引号 ( 双撇号 )
' \ddd' 1~ 3位八进制数所代表的 ASCII码字符
' \xhh' 1~ 2位十六进制数所代表的 ASCII码字符
' \f' 走纸换页
‘ \\’ 反斜杠字符
2,字符型变量的定义
字符型变量的定义方式如下:
char 变量表列;
2.3 数据的输入与输出
数据的输入与输出应包括以下几项:
① 输入 ( 出 ) 的设备
② 输入 ( 出 ) 的格式
③ 输入 ( 出 ) 的内容
2.3.1 格式输出函数
格式输出函数的一般形式如下:
printf(*“格式控制,, 输出表 );
其中格式控制部分要用一对双撇号括起来,它用于说
明输出项目所采用的格式。
1.整型格式说明符
( 1)十进制形式
( 2)八进制形式
( 3)十六进制形式
2.实型格式说明符
如果以十进制数形式输出实型数据,其格式说明符为
%f 或 %m.nf
如果以指数形式输出实型数据,其格式说明符为
%e 或 %m.ne
3,字符型格式说明符
字符型数据的格式说明符为
%c 或 %mc
( 1) 输出表中各输出项目之间要用,,, 分隔 。
( 2) 格式控制中的各格式说明符与输出表中的各输出
项目在个数, 次序, 类型等方面必须一一对应 。
( 3) 格式控制中除格式说明符外的其他字符将按原样
输出 。
( 4)在输出格式说明符中,如果带有宽度说明,则在
左边没有数字的位置上用空格填满(即输出的数字是右对
齐)。但如果在宽度说明前加一个负号(-),则输出为
左对齐,即在右边补空格。
2.3.2 格式输入函数
格式输入函数的一般形式如下:
scanf(, 格式控制,, 内存地址表 ) ;
1,整型格式说明符
( 1) 十进制形式
用于输入十进制形式的整型数据 。
( 2) 八进制形式
用于输入八进制形式的整型数据 。
( 3) 十六进制形式
用于输入十六进制形式的整型数据 。
2,实型格式说明符
用于输入的单精度实型格式说明符为
%f 或 %e
用于输入的双精度实型格式说明符为
%lf
3,字符型格式说明符
用于输入的字符型格式说明符为
%c 或 %mc
( 1)在格式输入中,内存地址表中必须是变量地址,不
能是变量名。
( 2)与格式输出一样,格式输入格式控制中的各格式说
明符与内存地址表中的变量地址在个数、次序、类型方面
必须一一对应。
( 3)当用于输入整型数据的格式说明符中没有宽度说明
时,则在具体输入数据时分以下两种情况:
① 如果各格式说明符之间没有其他字符,则在输入数据
时,两个数据之间用“空格”、或,Tab”、或“回车”来
分隔。
② 如果各格式说明符之间包含其他字符,则在输入数据
时,应输入与这些字符相同的字符作为间隔。
( 4)当整型或字符型格式说明符中有宽度说明时,按宽
度说明截取数据。
2.4 数据的处理
2.4.1 赋值运算
赋值运算符为, =, 。 赋值表达式为
变量名=表达式
( 1) 在 C语言中,, =, 为赋值运算符, 而不是等号;
( 2) 赋值运算符, =, 左边必须是变量名, 不能是表达式;
( 3) 赋值运算符, =, 两端的类型不一致时, 系统将自动进行
类型转换 。
2.4.2 算术运算
在 C语言中, 基本的算术运算符有以下几个:
+ 加法运算符 ( 双目运算符 ), 或正值运算符 (
单目运算符 ) 。 如 x+ y,+ x。
- 减法运算符 ( 双目运算符 ), 或负值运算符 (
单目运算符 ) 。 如 a- 3,- x。
* 乘法运算符 ( 双目运算符 ) 。 如 3*x。
/ 除法运算符 ( 双目运算符 ) 。 如 x/y。
% 模余运算符 ( 双目运算符 ) 。 只适用于整型数
据, 如 9%4的值为 1,11%3的值为 2等 。
2.4.3 关系运算
在 C语言中, 基本的关系运算符有以下 6个:
< 小于
<= 小于或等于
> 大于
>= 大于或等于
== 等于
!= 不等于
2.4.4 逻辑运算
在 C语言中, 逻辑常量只有两种:值非零表示, 真,
,值为零表示, 假, 。 其基本的逻辑运算符有以下 3个
:
&& ( 逻辑与 ) 两个量都为真时为真 ( 1), 否则
为假 ( 0)
| | ( 逻辑或 ) 两个量中只要有一个为真时为真
( 1), 只有都为假时为假 ( 0)
! ( 逻辑非 ) 一个量为真时为假 ( 0), 假时
为真 ( 1)
逻辑表达式中各种运算符的优先级顺序
如下:
!(逻辑非) ? 算术运算符 ?关系运算符
? && 与 | | ? 赋值运算符
2.4.5 增 1与减 1运算符
增 1运算符, ++, 和减 1运算符, --, 是两个
单目 ( 只有一个运算对象 ) 运算符, 它们的运算对象
只能是整型或字符型变量 。
增 1运算符是将运算对象的值增 1;减 1运算符是
将运算对象的值减 1。
2.4.6 sizeof运算符
sizeof运算符有以下两种用法:
( 1)用于求得表达式计算结果所占内存的字节数。其一
般形式为
sizeof 表达式
( 2)用于求得某种数据类型的量所占内存的字节数。其
一般形式为
sizeof(类型名)
2.4.7 逗号运算符
逗号,,, 是 C程序中常见的符号。
在 C语言中, 逗号除作为分隔符使用外, 还可以作为运算
符来使用, 称为逗号运算符 。
逗号表达式的一般形式为
子表达式 1,子表达式 2,…,子表达式 n
在使用逗号运算符(逗号表达式)时,要注意以下
几点:
( 1)逗号运算符是所有运算符中级别最低的一种运算
符。
( 2)一个逗号表达式又可以与另一个表达式(可以是
逗号表达式,也可以不是逗号表达式)连接成新的逗号
表达式。
( 3)在许多情况下,使用逗号表达式的目的仅仅是为
了得到各个子表达式的值,而并不一定要得到或使用整
个逗号表达式的值。
2.5 宏 定 义
C语言中的宏定义有两种形式:符号常量定义与带参数的
宏定义 。
2.5.1 符号常量定义
在 C语言中, 允许将程序中多处用到的, 字符串, 定义成
一个符号常量 。 在 C语言中定义符号常量的一般形式如下:
#define 符号常量名 字符串
① 由于 C语言中的所有变量名、函数名等都使用小写字
母,因此,符号常量名一般用大写字母表示,以便与 C语言
中的保留关键字相区别。
② C编译系统对定义的符号常量的处理只是进行简单的
替换,不作任何语法检查。
③ #define 是一个命令,而不是语句,因此在行末不能
加“;”,并且应独立占一行。
④ #define 命令一般应出现在程序中函数的外面,其作
用域范围是从
#define 符号常量名 字符串
到
#undef 符号常量名 (或文件末 )
2.5.2 带参数的宏定义
带参数的宏定义的一般形式为
#define 宏名 ( 参数表 ) 字符串
其中字符串中应包含在参数表中所指定的参数, 并且, 当
参数表中的参数多于一个时, 各参数之间要用逗号分隔 。
在使用带参数的宏定义时, 应注意以下两个问题 。
( 1)在使用带参数的宏定义时,一般应将宏定义字符串中的
参数都要用括号括起来,否则经过宏展开后,可能会出现意
想不到的错误。
( 2) 在使用带参数的宏定义时, 除了应将宏定义字符串中的
参数都要用括号括起来, 还需要将整个字符串部分也要用括
号括起来, 否则经过宏展开后, 还会可能出现意想不到的错
误 。