顺序程序设计
常量和变量
常量
- 在程序运行过程中,其值不能被改变的量称为常量
常量的分类
-
整型常量 如 1000, 1234,0 ,-23 十进制 八进制(0) 十六进制(0x)
-
实型常量
- 十进制小数形式,由数字和小数点组成
- 指数形式 例如 12.34E3 数字e整数 输出 printf(“%e”, 1.5) 数字e+001
-
字符常量
- 普通字符 如: ‘a’ ascii 97、‘A’ ASCII 65、‘0’==>48 、 ‘#’
- 转义字符 如:\n 、 \t 八进制: \ddd 十六进制 : \xdd
-
字符串常量 如:“body”
-
符号常量。 用 #define PI 3.1415
注意:符号常量结尾不要用分号,符号常量不占内存,只是一个临时符号,代表一个值,在预编译后这个符号就不存在了,故不能对符号常量赋新值,一般符号常量名用大写字母表示。
变量
- 变量必须先定义,后使用
常变量
- 在定义变量的前面加一个关键字 const 如 const int a = 3; 在变量存在期间,其值不能改变。
符号常量和常变量的异同
-
常变量具有变量的基本属性:有类型,占存储单元,只是不允许改变其值,可以说,常变量是有名字的不变量,而符号常量是没有名字的不变量。有名字就便于在程序中引用。
#define PI 3.1415 //定义符号常量
const float pi = 3.1415 //定义常变量
符号常量PI 和 常变量 pi 都代表 3.1415 ,在程序中都能使用,但二者性质不同,定义符号常量用 #define 指令,它是预编译指令,它只是用符号常量代表一个字符串,在预编译时仅进行字符替换,在预编译后,符号常量就不存在了,(全部替换成3.1415了)对符号常量的名字是不分配存储单元的,而常变量要占用存储单元,有变量值,只是该值不改变而已,从使用的角度看,常变量具有符号常量的优点,而且使用更方便,有了常变量以后可以不必多用符号常量。
标识符
- 在计算机高级语言中,用来对变量、符号常量名、函数、数组、类型等命名的有效字符序列统称为标识符
- 标识符只能用字母、数字和下划线组成,其中数字不能用作开头
- 标识符区分大小写
数据类型
整型数据
字符型数据
-
字符数据存放在内存时,并不是字符本身,而是字符的代码,称之为 ASCII码。用 0~127的整数赋给一个字符变量
-
字母:大写字母A~Z 小写字母a~z
-
数字:0~9
-
专门符号:29个 !“ # & ‘ ( ) * + - , , / : ; < = > ? [ \ ] ^ _ ` { | } ~
-
空格符:空格、水平制表符(tab)、垂直制表符、换行、换页
-
不能显示的字符:空(null) 字符(以’\0‘表示),警告(以’\a’表示),退格(以’\b’表示)、回车(以’\r’表示)
-
常见的ASCII字符表
字符型数据的存储空间和值范围
浮点型数据
- **注意:**当输出float 和double类型的数据时,默认输出到小数点后 6 位,C编译系统把浮点型常量都按照双精度处理,分配8个字节,在使用 scanf 函数输入 double 类型数据时候格式声明必须是 %lf
C运算符
- 算术运算符 (+ - * / % ++ --)
- 关系运算符 (> < == >= <= !=)
- 逻辑运算符 (! && ||)
- 位运算符 (<< >> ~ | ^ &)
- 赋值运算符 (=)
- 条件运算符 ( ? : )
- 逗号运算符 ( , )
- 指针运算符 ( * 和 & )
- 求字节数运算符 ( sizeof )
- 强制类型转换运算符 ( (类型) )
- 成员运算符 ( . -> )
- 下表运算符 ( [] )
- 其他 ( 如函数调佣运算符() )
不同类型数据间的混合运算
- +、-、*、/运算的两个数中有一个数为float 或 double型,结果是double型,因为系统将所有的float型数据都先转换为double型,然后进行运算
- 如果int型和float或double型数据进行运算,先把int型和float型数据转换为double型,然后再进行运算,结果是double型
- 字符 char 型数据与整型数据进行运算,就是把字符 ASCII 代码与整型数据进行运算。如 :12 + ‘A’ 由于字符A的ASCII代码是65 相当于 12+65=77 ,如果字符型数据与实型数据进行运算,则将字符的ASCII代码转换为 double 型数据,再进行运算。
强制类型转换
格式:(类型名)(表达式)
赋值表达式中需要注意的事项
- 如果赋值运算符两侧的类型不一致,但都是基本类型时,在赋值时要进行类型转换。
- 将浮点型数据(包括单、双精度)赋值给整型变量时,先对浮点数取整,即舍弃小数部分,然后赋予整型变量
- 将整型数据赋值给单、双精度变量时,数值不变,但以浮点数形式存储到变量中
- 将一个double型数据赋值给float变量时,先将双精度数转换为单精度,即只取6~7位有效数字,存储到float型变量的4个字节中。应注意双精度数值大小不能超过 float型变量的数值范围,否则报错。
- 字符型数据赋给整型变量时,将ASCII代码赋给整型变量
- 将一个占字节多的整型数据赋给一个占字节少的整型变量或字符变量(例如把占4个字节的int型数据赋给占2个字节的short变量或占一个字节的char变量)时,只将其低字节原封不动地送到被赋值的变量(即发生“截断”)
printf函数
- 格式: printf(格式控制,输出列表)
格式字符
-
d 格式符:用来输出一个有符号的十进制整数
-
c 格式符:用来输出一个字符
-
s 格式符:用来输出一个字符串
-
f 格式符:用来输出实数(包括单、双精度、长双精度),以小数形式输出
-
基本型,用 %f 小数部分默认输出6位
-
指定数据宽度和小数位数,用%m.nf 一般不要轻易指定小数的位数为0 m 代表有效的输出位数(整数部分+小数点+小数位,但是如果指定了n 小数位按照n的个数显示),n代表小数点后面有几位,去掉的采用四舍五入(如果是用在输出字符串的时候n代表输出前几个字符串)
-
输出的数据向左对齐,用%-m.nf
在m,n的前面加一个负号,其作用与%m.nf形式作用基本相同,但当数据长度不超过m时数据向左靠,右端补空格(默认是左端补空格)
-
-
e 格式符:用格式声明%e指定以指数形式输出实数。
-
o 格式符:以八进制整数形式输出(输出的数值不带符号)
-
u 格式符:用来输出无符号型数据
-
h 格式符:十进制输出short
注意:如果要输出 %,则应使用 %% 才可以。
scanf函数
- 格式:scanf(格式控制,地址列表)
- 注意事项:
- scanf 函数中的格式控制后面应当是变量地址,而不是变量名(也就是 在变量名前面加 &)
- 如果在格式控制字符串中除了格式声明以外还有其他字符,则字输入数据时在对应的位置上应输入与这些字符相同的字符。例如:scanf(“a=%d”,&a); 则在输入的时候必须输入 a=2 才能赋值
- 在使用 %c 格式声明输入字符时。空格字符和转义字符 中的字符都作为有效字符输入
- 在输入数值数据时,如输入空格、回车。tab键或遇到非法字符(不属于数值的字符)认为该数据结束
字符的输入输出函数
- putchar 函数输出一个字符,例如:char a = ‘B’; putchar(a) 输出B 字符
- getchar 函数接受键盘输入的一个字符(控制字符也可以 如 enter tab 等)