C语言的组成及数据
一、C语言的组成
组成:若干文件
文件:若干函数
函数:函数头 + 函数尾
函数头:四部分 -> (返回值)+ 函数名 + ()+ (小括号内的参数列表)
函数体:{}+语句
语句:三类语句
类型1 -> /* */,// -> 注释语句
类型2 -> 定义语句; -> 前有数据类型,以分号结尾,定义语句一般在程序的前面,定义在前执行在后。
类型3 -> 执行语句;
单框架:只有一个main函数
复合框架:一个main函数+若干函数
二、C语言的数据与数据类型
数据四类:常量、变量、表达式、函数
常量:值不发生变化的量
【整型常量】:十进制、八进制(以数字0开关的一串连续合法八进制)、十六进制(用0x或0X开头的一边串连续合法的十六进制)
若表示长整型常量由必须后加字母L或l,如 34l,012l, oX123L
【实型常量】:
小数形式:由数字和小数点组成。 如:123.45, .123,0.456
指数形式:用 E 或 e 后紧跟一个整数表示以10为底的幂数 如:123E-5, 452e3
注意:(1)字母 E 或 e之前之后必须都有数字,且后必是整数。
(2)字母 E 或 e 的前后及各数字之间不能有空格。
【字符型常量】四种形式
1、常规形式:一对单引号括一个字符。如 'a', 'B', '@', '9'
2、转义字符常量:必须以一个反斜杠 “\”开头
3、常用的转义字符:
转义字符 意义 ASCII码值(十进制)
\a 响铃(BEL) 007
\b 退格(BS) ,将当前位置移到前一列 008
\f 换页(FF),将当前位置移到下页开头 012
\n 换行(LF) ,将当前位置移到下一行开头 010
\r 回车(CR) ,将当前位置移到本行开头 013
\t 水平制表(HT) (跳到下一个TAB位置) 009
\v 垂直制表(VT) 011
\\ 代表一个反斜线字符''\' 092
\' 代表一个单引号(撇号)字符 039
\" 代表一个双引号字符 034
\0 空字符(NULL) 000
\ddd 1到3位八进制数所代表的任意字符 三位八进制
\xhh 1到2位十六进制所代表的任意字符 二位十六进制
从表中可以看出,在C语言中有三种转义字符,它们是:一般转义字符、八进制转义字符和十六进制转义字符。
1. 一般转义字符
这种转义字符,虽然在形式上由两个字符组成,但只代表一个字符。常用的一般转义字符为:
\a \n \t \v \b \r \f \\ \’ \"
细心的读者可能已经发现,转义字符'\\'代表的反斜杠"\"、转义字符’\’’代表的字符"'"和转义字符'\"'代表的字符""",其本身就是可显示字符,为什么还要对它转义呢?
这是因为它们的原有的字符形式已作它用,其中,单引号用作区分字符常量的括号,双引号用作区分字符串(下面将要介绍字符串)的括号,而反斜杠本身已用来表示转义字符的开头,因此必须对它们用转义字符重新声明。
2. 八进制转义字符
它是由反斜杠'\'和随后的1~3个八进制数字构成的字符序列。例如,'\60'、'\101'、'\141'分别表示字符'0'、'A'和'a'。因为字符'0'、'A'和'a'的ASCII码的八进制值分别为60、101和141。
字符集中的所有字符都可以用八进制转义字符表示。
如果你愿意,可以在八进制数字前面加上一个0来表示八进制转移字符。
3. 十六进制转义字符
它是由反斜杠'\'和字母x(或X)及随后的1~2个十六进制数字构成的字符序列。例如,'\x30'、'\x41'、'\X61'分别表示字符'0'、'A'和'a'。因为字符'0'、'A'和'a'的ASCII码的十六进制值分别为0x30、0x41和0x61。
可见,字符集中的所有字符都可以用十六进制转义字符表示。
由上可知,使用八进制转义字符和十六进制转义字符,不仅可以表示控制字符,而且也可以表示可显示字符。但由于不同的计算机系统上采用的字符集可能不同,因此,为了能使所编写的程序可以方便地移植到其他的计算机系统上运行,程序中应少用这种形式的转义字符。
使用转义字符时需要注意以下问题:
1)转义字符中只能使用小写字母,每个转义字符只能看作一个字符。
2)/v垂直制表和/f换页符对屏幕没有任何影响,但会影响打印机执行响应操作。
3)在C程序中,使用不可打印字符时,通常用转义字符表示。
4)转义字符’/0’表示空字符NULL,它的值是0。而字符'0'的ASCII码值是48。因此,空字符’/0’不是字符0。另外,空字符不等于空格字符,空格字符的ASCII码值为32而不是0。编程序时,读者应当区别清楚。
5) 如果反斜线之后的字符和它不构成转义字符,则’/’不起转义作用将被忽略。
【字符串型常量】:用一对双引号“”括起来的若干字符。如:"abcdef", "123478"
注:(1)每一个字符串尾都有一个字符串结束符 '\0'。
(2)c语言中没有字符串变量,一定要区分字符常量和字符串常量,区别是结束符'\0'
数据类型四大类:基本类型(内置类型)、构造类型、指针类型、空类型
1、基本类型:整型 int、字符型 char、浮点型(单精度 float 双精度 double)、枚举类型 enum
2、构造类型:数组型、结构体类型 struct、共用体类型 union
3、指针类型
4、空类型 void
【标识符(三类)】
1、保留字(关键字)
C语言32个关键字(基础)只能是小写
第一类:数 据类型关键 字
A基本数据类 型(5个):
void: 声明函数无返回值或无参数,声明无类型指针,显式丢弃运算结果。
char: 字符型类型数据,属于整型数据的一种。
int: 整型数据,通常为编译器指定的机器字长。
float: 单精度浮点型数据,属于浮点数据的一种,小数点后保存6位。
double: 双精度浮点型数据,属于浮点数据的一种,比float保存的精度高,小数点后保存15/16位。
B类型修饰关 键字(4个):
short :修饰int,短整型数据,可省略被修饰的int。
long :修饰int,长整形数据,可省略被修饰的int。
signed :修饰整型数据,有符号数据类型。
unsigned: 修饰整型数据,无符号数据类型。
C复杂类型关 键字(5个):
struct :结构体声明。
union :共用体声明。
enum :枚举声明。
typedef :声明类型别名。
sizeof :得到特定类型或特定类型变量的大小。
D存储级别关 键字(6个):
auto :指定为自动变量,由编译器自动分配及释放。通常在栈上分配。
static :指定为静态变量,分配在静态变量区,修饰函数时,指定函数作用域为文件内部。
register :指定为寄存器变量,建议编译器将变量存储到寄存器中使用,也可以修饰函数形参,建议编译器通 过寄存器而不是堆栈传递参数。
extern :指定对应变量为外部变量,即在另外的目标文件中定义,可以认为是约定由另外文件声明的。
const :与volatile合称“cv特性”,指定变量不可被当前线程/进程改变(但有可能被系统或其他线程/进程改
volatile :与const合称“cv特性”,指定变量的值有可能会被系统或其他进程/线程改变,强制编译器每次从内存 中取得该变量的值。
第二类:流 程控制关键 字
A跳转结构(4 个):
return :用在函数体中,返回特定值(或者是void值,即不返回值)。
continue: 结束当前循环,开始下一轮循环。
break :跳出当前循环或switch结构。
goto :无条件跳转语句。
B分支结构(5 个):
if :条件语句。
else: 条件语句否定分支(与if连用)。
switch: 开关语句(多重分支语句)。
case :开关语句中的分支标记。
default: 开关语句中的“其他”分治,可选。
C循环结构(3 个):
for :for循环结构,for(1;2;3)4;的执行顺序为1->2->4->3->2...循环,其中2为循环条件。
do:do循环结构,do 1 while(2);的执行顺序是1->2->1...循环,2为循环条件。
while: while循环结构,while(1) 2;的执行顺序是1->2->1...循环,1为循环条件, 以上循环语句,当循环条件 表达式为真则继续循环,为假则跳出循环。
2、预定义标识符:预先定义并具有特定含义的标识符
是C语言中系统预先定义的标识符,如系统类库名、系统常量名、系统函数名。预定义标识符具有见字明义的特点,如函数“格式输出”(英语全称加缩写:printf)、“格式输入”(英语全称加缩写:scanf)、sin、isalnum等等。预定义标识符可以作为用户标识符使用,只是这样会失去系统规定的原意,使用不当还会使程序出错。
3、用户自定义标识符:由用户根据需要定义的标识符
如:变量名、数组名、函数名等
注:(1)自定义标识符,第一个字符必须是字母或下划线,后面由字母、数字、下划线组成。
(2)大小写区分
变量:值随时随地改变的量。
使用规则:1、先定义后使用 定义格式:数据类型名 变量名列表;
2、同一函数体{}中不能定义同名变量。
3、同时定义多变量,必用逗号分隔。
4、变量可赋初值(初始化),无初始值的是随机值。
表达式:用运算符将数据连接起来的合法式子
1.运算符:三个属性->功能、优先级、结合性(运算方向)
(1)单独的常量、变量或函数调用都是C语言合法表达式。
(2)凡是表达式都有一个确定的值。
2、赋值运算符:=
格式: 变量名 = 表达式;
优先级等级口诀
圆方括号、箭头一句号, 自增自减非反负、针强地址长度,
乘除,加减,再移位,
小等大等、等等不等,
八位与,七位异,六位或,五与,四或,三疑,二赋,一真逗。
其中“,”号为一个等级分段。
优先级等级注释
“圆方括号、箭头一句号”指的是第1级的运算符。其中圆方括号很明显“()、[]”,箭头 指的是指向结构体成员运算符“->”,句号 指的是结构体成员运算符“.” ;
“自增自减非反负、针强地址长度”指的是第2级的运算符。其中 非 指的是逻辑运算符“!”,反 指的是按位取反运算符“~”,负 指的是负号运算符“-”,针 指的是指针运算符“*”,强 指的是强制类型转换运算符,地址 指的是地址运算符“&”,长度 指的是长度运算符“sizeof ”;
“乘除,加减,再移位”移位指的是左移运算符“<<”和右移运算符“>>”,其中除法还包括了 取余运算符“%”;
“小等大等、等等不等” 指的是第6级到第7级的运算符:<、<=、>和>=,等等指的是等于运算符==,不等指的是不等于运算符!=
“八位与,七位异,六位或”其中 八位与 指的是第8级的 按位与 运算符“&”,七位异 指的是第9级的按位异或运算符“^”,六位或 指的是第10级的按位或运算符“|”;
“五与,四或”指的是第11级、第12级的逻辑与运算符“&&”和逻辑或运算符“||”;
“三疑,二赋,一真逗”指的是第13级到第15级的运算符。其中,三疑指的是条件运算符“?:” (三有双重含义:即指优先级别是三,它的运算符类型也是三目,疑也取“?”之意),二赋 指的是赋值运算符=、+=、-=、*=、/=、%=、>>=、<<=、&=、^=和|= ,一真逗 指的是第15级的“,”运算符,真字只是为了语句需要罢了。
取模运算:1.左右要求都是整型,2.余数符号与被除数一样 如:17%-3=2,-17%3=-2,-17%-3=-2。
函数:调用具有一定功能的函数作为运算量
标准函数、自定义函数