目录

  • 1 第一章  C语言概述
    • 1.1 第一节  C语言的产生和发展
    • 1.2 第二节  C语言的特点
    • 1.3 第三节  两个简单的C程序
    • 1.4 第四节  C程序的上机步骤
    • 1.5 第五节  Dev-C++介绍
    • 1.6 第六节  VC2010学习版介绍
    • 1.7 第七节  宏定义和文件包含
    • 1.8 本章小结
    • 1.9 本章单元测试
  • 2 第二章  基本数据类型与简单程序设计
    • 2.1 第一节  C语言的基本数据类型
    • 2.2 第二节  常量
    • 2.3 第三节  变量
    • 2.4 第四节  赋值语句
    • 2.5 第五节  数据输出
    • 2.6 第六节 数据输入
    • 2.7 第七节  运算符
    • 2.8 第八节  常用的数学函数
    • 2.9 第九节  顺序结构程序设计
    • 2.10 本章小结
    • 2.11 本章单元测试
  • 3 第三章  分支结构程序设计
    • 3.1 第一节  关系表达式和逻辑表达式
    • 3.2 第二节  if单分支语句
    • 3.3 第四节  if双分支语句
    • 3.4 第五节  if多分支语句
    • 3.5 第六节  case多分支语句
    • 3.6 第七节  分支结构程序设计实例
    • 3.7 本章小结
    • 3.8 本章单元测试
    • 3.9 书中本章习题答案
  • 4 第四章  循环结构程序设计
    • 4.1 第一节  While循环
    • 4.2 第二节  do ... while循环
    • 4.3 第三节  for循环
    • 4.4 第四节  多重循环
    • 4.5 第五节  break语句和continue语句
    • 4.6 第六节  循环结构程序设计实例
    • 4.7 本章小结
    • 4.8 书中本章习题答案
  • 5 第五章 数组
    • 5.1 第一节  一维数组的定义和使用
    • 5.2 第二节  二维数组的定义和使用
    • 5.3 第三节  字符数组的定义和使用
    • 5.4 第四节  数组的应用举例
    • 5.5 本章小节
    • 5.6 书中本章习题
  • 6 第六章  函数
    • 6.1 第一节  函数的定义
    • 6.2 第二节  函数的调用
    • 6.3 第三节 数组作为函数参数
    • 6.4 第四节  变量的作用域
    • 6.5 第五节 变量的存储类别
    • 6.6 第六节 函数应用实例
  • 7 第七章 结构体和共用体
    • 7.1 第一节  概述
    • 7.2 第二节  定义结构体变量的方法
    • 7.3 第三节 结构体变量的引用
    • 7.4 第四节 结构体数组
    • 7.5 第五节 共用体
    • 7.6 第六节  结构体和共用体应用实例
  • 8 第八章 指针
    • 8.1 第一节  指针的概念
    • 8.2 第二节  指向简单变量的指针
    • 8.3 第三节 指向数组的指针变量
    • 8.4 第四节  指向字符串的指针变量
    • 8.5 第五节 指针作为函数参数
    • 8.6 第六节  指向结构体的指针变量
    • 8.7 第七节 指针应用实例
  • 9 第九章  文件
    • 9.1 第一节  文件概述
    • 9.2 第二节  文件的打开和关闭
    • 9.3 第三节 文件的读/写函数
    • 9.4 第四节  文件定位函数
    • 9.5 第五节  文件应用实例
    • 9.6 本章小节
    • 9.7 本章习题
  • 10 附录
    • 10.1 附录A  基本字符ASCII码表(0~127)
    • 10.2 附录B  运算符优先级表
    • 10.3 附录C 常用C库函数表
    • 10.4 附录D  编译常见错误提示
    • 10.5 附录E  常见C语言英语单词
    • 10.6 附录F  如何从十进制转换为二进制
    • 10.7 附录G  如何把二进制数转化为十进制数
    • 10.8 附录H  什么是编译器
    • 10.9 附录I  与编译器相关的几个知识点
  • 11 数组
    • 11.1 一维数组
    • 11.2 二维数组
    • 11.3 字符数组
    • 11.4 常见问题集锦
    • 11.5 配套课件
    • 11.6 配套实训
  • 12 第一章 C语言程序设计基础
    • 12.1 程序设计语言的发展及其特点
      • 12.1.1 为什么要学习C语言
      • 12.1.2 什么是程序设计语言
      • 12.1.3 程序设计语言发展的三个阶段
    • 12.2 C语言的发展及其特点和应用
      • 12.2.1 C语言的发展史
      • 12.2.2 C语言的特点
      • 12.2.3 C语言的应用以及其他语言的关系
    • 12.3 C语言程序的基本结构
      • 12.3.1 最简单的C语言程序
      • 12.3.2 计算输入的两个整数的和
      • 12.3.3 练习:计算输入的两个整数的和
    • 12.4 编制C语言程序的基本步骤
      • 12.4.1 编写C程序的步骤
      • 12.4.2 VC6.0集成开发环境介绍
      • 12.4.3 建立工程操作演示
      • 12.4.4 练习:我们编的第一个程序
      • 12.4.5 程序调试
    • 12.5 习题
  • 13 基本数据类型、运算符与表达式
    • 13.1 预备知识
      • 13.1.1 计算机系统组成
      • 13.1.2 计算机中数的表示及进制转换
    • 13.2 C语言的数据类型
    • 13.3 常量、变量和标识符
      • 13.3.1 标识符
      • 13.3.2 常量
      • 13.3.3 变量
    • 13.4 简单数据类型与表示范围
      • 13.4.1 整型数据
      • 13.4.2 整数在内存中的表示
      • 13.4.3 整型变量
      • 13.4.4 整数常量的分类
      • 13.4.5 实型数据
      • 13.4.6 字符型数据和字符串常量
      • 13.4.7 简单数据类型的表示范围
      • 13.4.8 简单的数据输出
    • 13.5 运算符与表达式
      • 13.5.1 赋值运算符、赋值表达式
      • 13.5.2 强制类型转换符
      • 13.5.3 算术运算符、算术表达式
      • 13.5.4 自增自减运算符、符号运算符
      • 13.5.5 算术运算符中数据类型转换规则
      • 13.5.6 位运算符、位运算表达式
      • 13.5.7 逗号运算符、逗号表达式
      • 13.5.8 其他运算符:sizeof运算符
      • 13.5.9 关系运算符与表达式
      • 13.5.10 逻辑运算符与表达式
      • 13.5.11 条件运算符与表达式
    • 13.6 运算符的优先级和结合性
  • 14 基本输入输出和顺序程序设计
    • 14.1 程序的控制结构
    • 14.2 格式化输出printf
    • 14.3 格式化输入scanf
    • 14.4 字符数据的非格式化输入输出
    • 14.5 顺序程序设计举例
  • 15 选择结构程序设计
    • 15.1 C程序中语句的分类
    • 15.2 关系运算符、逻辑运算符、条件运算符
      • 15.2.1 关系运算符和关系表达式
      • 15.2.2 逻辑运算符和逻辑表达式
      • 15.2.3 条件运算符和条件表达式
    • 15.3 选择结构的程序设计
      • 15.3.1 if语句
      • 15.3.2 switch语句
    • 15.4 选择结构程序设计举例
      • 15.4.1 例1 计算员工当月薪水
      • 15.4.2 例2 判定闰年
      • 15.4.3 例3  简单表达式计算
  • 16 循环结构程序设计
    • 16.1 循环结构的程序设计
      • 16.1.1 while语句
      • 16.1.2 do-while语句
      • 16.1.3 for语句
      • 16.1.4 循环嵌套
      • 16.1.5 break与continue语句
      • 16.1.6 exit()函数
    • 16.2 循环结构类型的选择及转换
    • 16.3 循环结构程序设计举例
  • 17 数组
    • 17.1 一维数组
      • 17.1.1 一维数组的定义
      • 17.1.2 一维数组的引用
      • 17.1.3 一维数组的赋值
      • 17.1.4 应用实例1:字符统计
      • 17.1.5 应用实例2:冒泡排序
      • 17.1.6 应用实例3:选择排序
      • 17.1.7 应用实例4:斐波那契数列
    • 17.2 二维数组及多维数组
      • 17.2.1 二维数组的定义、引用和赋值
      • 17.2.2 二维数组的应用举例
    • 17.3 字符串与数组
      • 17.3.1 字符串的本质
      • 17.3.2 字符及字符串操作的常用函数
      • 17.3.3 字符串的应用举例
      • 17.3.4 字符串数组
      • 17.3.5 字符串数组的应用举例
    • 17.4 数组综合应用举例
  • 18 函数
    • 18.1 函数的概述
    • 18.2 函数的定义和调用
    • 18.3 函数参数的传递方式
    • 18.4 变量的作用域和生存期
    • 18.5 变量的存储类型
    • 18.6 函数的嵌套与递归调用
    • 18.7 函数的作用域
    • 18.8 函数的封装
    • 18.9 函数应用综合举例
    • 18.10 本章习题
  • 19 指针
    • 19.1 指针与指针变量的概念
    • 19.2 指针变量的定义和引用
    • 19.3 指针和地址运算
    • 19.4 指针与数组
      • 19.4.1 数组的指针和指向数组的指针变量
      • 19.4.2 指向多维数组的指针——数组指针
      • 19.4.3 元素为指针的数组——指针数组
    • 19.5 指针与字符串
    • 19.6 指针与动态内存分配
    • 19.7 多级指针
    • 19.8 指针作为函数参数
    • 19.9 指针作为函数的返回值——指针函数
    • 19.10 本章习题
  • 20 VC6  Debug
    • 20.1 VC6  Debug
第二节  常量
  • 1 文字讲解
  • 2 视频讲解
  • 3 过关测试

一、常量和符号常量

1、常量

常量定义:

       在程序的运行过程中,其值保持不变的量称为常量

常量分类:

       基本数据类型常量有整型常量、实型常量、字符型常量、字符串常量。后面将详细学习。

2、符号常量

      符号常量:指常量可以用一个标识符来表示,称为符号常量。

      符号常量的定义格式:

              #define  标识符    字符串

      符号常量定义的位置:一般在程序开头#define命令来定义。

      例如:源程序如下

               #define   PI    3.1415926

               main(  )

               {        }

      此后,只要是在文件中出现的PI均可用3.1415926来代替。

       使用符号常量的意义:在于当符号常量被多次引用时,既可简化程序的数据输入,又可以在修改同一个常量时只需修改一处即可。若在程序中多次出现某个常量,且该常量的位数较多(如3.1415926),则使用符号常量会方便得多。

      符号常量的处理时间:预编译时,将符号常量替换成字符串

二、整型常量

       除了大家比较熟悉的整型常量(如100、0、-256)之外,C语言中还有其他形式的整型常量,如表2-2所示。

           表2-2整型常量

例子说明
-1234十进制整型常量(包含数字0~9)
01234八进制整型常量(以0开头,包含数字0~7)
0x1234十六进制整型常量(以0x或0X开头,包含数字0~9、字母A~F或a~f
0Llong型十进制整型常量(以l或L结尾)

       例如,0235等于十进制数157,即 。-0X23a等于十进制数-570。因为0X23a= 。

       任何类型的数据在计算机中都是以二进制补码形式存储的。 short型数据在内存中占16位,long int型数据在内存中占32位,其中最高位为符号位(无符号型除外),1表示负数,0表示正数。正数的补码等于其原码,而负数的补码等于其原码的反码加1。

例1、将十进制数 +83 或 +83L 转换为补码

        + 83 的16位原码 = 0000 0000 0101 0011

        + 83L 的32位原码 = 0000 0000 0000 0000 0000 0000 0101 0011

        + 83 的补码 = + 83 的反码 = + 83 的原码

       说明:① 在计算机中存放整型类型数据时,首先要分清是short类型或int(long)类型,分配的是2个字节或是4个字节;② 正数的原码 = 正数的反码 = 正数的原码。

例2、将十进制数 -83 或 -83L 转换为补码

         - 83 的16位原码 = 1000 0000 0101 0011

        - 83L 的32位原码 = 1000 0000 0000 0000 0000 0000 0101 0011

         - 83 的16位反码 = 1111 1111 1010 1100

         - 83 的16位补码 =  1111 1111 1010 1101

          - 83L 的32位反码 = 1111 1111 1111 1111 1111 1111 1010 1100

         - 83L 的32位补码 =  1111 1111 1111 1111 1111 1111 1010 1101

    说明:负数的补码等于反码加1,负数的反码等于原码的数值位按位取反,符号位不变。 

三、浮点型常量

C语言中的浮点类型主要分为单精度和双精度两种,一般以双精度为主。注意,在C语言数据中,1和1.0是两种不同类型的数,1是整数,而1.0则是双精度浮点数。

以下是合法的十进制浮点数表示:

       1234.56、-1.2、0.0、.5、6.、1000000.0 。

浮点数还可采用科学计数法,以下是合法的科学计数法表示:

       1.23456e2、0.345e-3、-765el2、-.5e-8、6.e-7、1.0e10 。

       必须说明的是,出现在字母e(或E)之前的小数点,其左边或右边至少应有一位数字,在字母e(或E)之后必须是整数,即1.34E1.2、.e2均是非法的浮点数。

       又如: 0.00013456=1.23456× ,可表示成1.23456e-4 或 0.123456e-3 。其中1.23456为尾数,10为底数,-4为指数。它在内存中的存放形式如图2-1所示。

        

      浮点数利用指数达到了浮动小数点的效果,从而可以灵活地表达更大范围的实数。提示: 尾数有时也称为有效数字(Significand),尾数实际上是有效数字的非正式说法。

底数是事先约定好的(常取2),在计算机中不出现。

在机器中表示一个浮点数时,注意以下三点:

        一是要给出尾数,用定点小数形式表示。尾数部分给出有效数字的位数,因而决定了浮点数的表示精度

       二是要给出阶码,用整数形式表示,阶码指明小数点在数据中的位置,因而决定了浮点数的表示范围

       三是浮点数也有符号位

       因此一个机器浮点数应当由阶码、尾数及其符号位组成:

       

      其中ES表示阶码的符号,占一位,E1~En为阶码值,占n位,尾符是数N的符号,也要占一位。当底数取2时,二进制数N的小数点每右移一位,阶码减小1,相应尾数右移一位;反之,小数点每左移一位,阶码加1,相应尾数左移一位。           

四、字符型常量

1、字符型常量的定义

      C语言的字符型常量是用单引号(即撇号)括起来的一个字符,'*'、'a'、'A'、'&'、'!'等都是字符常量。注意: 'a'和'A'是不同的字符常量

2、字符型常量的存储形式

     字符数据存放在内存中的,并不是字符本身,而是字符的代码,即ASCII码(美国标准信息交换码)。

注意: 字符 '1' 和整数 1 是不同的概念。

      字符 '1' 只是代表一个形状为 '1' 的符号,在需要时按原样输出,在内存中以ASCII码形式存储,占1个字节,如下图所示。

           

     整数1是以整数存储方式(二进制补码方式)存储的,占2个或4个字节,如下图所示。   

          

3、  ASCII码(美国标准信息交换码)表 

       ASCII标准字符集定义了128个字符,每个字符对应于一个ASCII码,编码值为0~127。表2-3列出了部分字符的ASCI码。

    表2-3部分字符的ASC码

字符ASCI码字符ASC码
回车13A65
空格32B66
*42C67
+43
048Z90
149a97
250b98
351c99
957z
122

从表2-3可以看出:

      ①数字字符'0'~'9'的ASCII码是连续的;

      ②大写字母'A'~'Z'的ASCII码是连续的;

      ③小写字母'a'~'z'的ASCII码也是连续的;

      ④小写字母的ASCII码比对应的大写字母的ASC码大32。

例如:

       0100 0001表示'A'或65。

       0110 0001表示'a'或97。

       可以看出,字符的存储形式与整数相似,不同的是,它在内存中仅占一个字节。C语言的字符型数据与整型数据之间可以通用。

       除了以上的字符常量外,一些不可显示的控制字符(比如回车符、制表符、退格键等)在程序中无法用一个一般形式的字符表示,C语言允许用一种特殊形式的字符常量来表示这些字符: 一个反斜杆“\”开头的字符,称为转义字符。如'\n'表示换行,它是将普通字符“转义”成特殊字符。常用的转义字符有:

       '\n'    换行符(将当前位置移到下一行开头)

       '\t'     水平制表符(跳到下一个<Tab>位置)

       '\b'    退格

       '\r'    回车(将当前位置移到本行开头)

       '\f'    走纸

       '\\'    反斜杠

       '\''    单引号

       '\"'    双引号

       转义字符看起来是两个字符,实际上只能算一个字符。

       也可以使用“\”加上一个1~3位的八进制数或“\x”加上一个1~2位的十六进制数表示的ASC码值来表示转义字符,例如:

       '\0'    表示空字符。

       '\33'或'\033'表示Esc键(27)。

       '\07'  表示响铃

       '\xA'  表示换行(10)

五、怎样确定常量的类型

       字符常量:由单撇号括起来的单个字符或转义字符。

      整型常量:不带小数点的数值, 系统根据数值的大小确定int型还是long型等。

       浮点型常量:凡以小数形式或指数形式出现的实数。C编译系统把浮点型常量都按双精度处理分配8个字节。