2.1 C语言的构成
2.1.1 C语言的构成
(1)源程序由函数构成,每个函数完成相对独立的功能。
(2)每个源程序中必须有且只能有一个主函数,可以放在任何位置,但程序总是从主函数
开始执行。
(3)函数体:在函数后面用一对花括号括起来的部分。
(4)每个语句以分号结束,但预处理命令、函数头之后不能加分号。
(5)注释:括在“/*”与“*/”之间,没有空格,允许出现在程序的任何位置。
(5)预处理命令:以“#”开头的语句。
2.1.2 C语言的生成过程
(1)C程序是先由源文件经编译生成目标文件,然后经过连接生成可执行文件。
(2)源程序的扩展名为.c,目标程序的扩展名为.obj,可执行程序的扩展名为.exe。
2.2 常量、变量和数据类型
2.2.1 标识符
1.标识符的命名规则
·只能由字母、数字或下划线组成。
·第一个字符必须是字母或下划线,不能是数字。
·区分字母的大小写
2.标识符的分类
(1)关键字
(2)预定义标识符
(3)用户标识符
2.2.2 常量
定义:在程序运行中,其值不能被改变的量。
常量的类型:整型常量、实型常量、字符常量、字符常量、字符串常量和符号常量。
1.整型常量
表现形式:十进制整型常量、八进制整型常量和十六进制整型常量。
2.实型常量
(1)表现形式:小数形式和指数形式。
(2)书写形式:
·十进制小数形式:小数点两边必须要有数字。
·指数形式:e前必须有数字,e后必须为整数。
3.字符常量
一个字符常量代表ASCII码字符集里的一个字符,在程序中用单撇号括起来,区分大小写。
特殊的字符常量:即转义字符。其中“\”是转义的意思,后面跟不同的字符表示不同的意思。
·\n:换行
·\\:反斜杠字符“\”
·\ddd:1~3位八进制所代表的一个ASCII字符。
·\xhh:1~2位十六进制所代表的一个ASCII字符。
4.字符串常量
字符串常量是用双撇号括起来的一个或一串字符。
5.符号常量
符号常量是由预处理命令“#define”定义的常量,在C程序中可用标识符代表一个常量。
2.2.3 变量
定义:值可以改变的量。
·变量要有变量名,在使用前必须先定义。
·在内存中占据一定的存储单元,不同类型的变量其存储单元的大小不同。
·存储单元里存放的是该变量的值。
变量的类型:整型变量、实型变量、字符变量。
1.整型变量
(1)分类:基本型(int)、短整型(short int 或 short)、长整型(long int 或 long)和无符号型(unsigned int ,unsigned short,unsigned long).
(2)数值范围
·整型[signed]int:占16位
·短整型[signed]short[int]:占16位
·长整型[signed]long int:占32位
·无符号整型[unsigned]int:占16位
·无符号短整型[unsigned]short[int]:占16位
·无符号长整型[unsigned]long int:占32位
2.实型变量
(1)分类:单精度类型(float)和双精度类型(double).
(2)定义方法:float a;double m.
3.字符变量
(1)作用:用来存放字符常量。
(2)定义:用关键字char定义,每个字符变量中只能存放一个字符。
(3)定义形式:char cr1,cr2.
(4)赋值:crl = ‘m’,cr2 = ‘n’.
2.2.4 类型的自动转换和强制转换
1.类型的自动转化
(1)当同一表达式中各数据的类型不同时,编译程序会自动把它们转换成同一类型后在计算。
(2)转换优先级:char<int<float<double.
2.类型的强制类型转换
表示形式:(类型)表达式;
3.1运算符与表达式
3.1.1 C运算符的简介
·算术运算符:+,-,*,/,%
·关系运算符:>,>=,==,!=,<,<=
·位运算符:>>,<<,~,&,|,^
·逻辑运算符:!,||,&&
·条件运算符:?:
·指针运算符:&,*
·赋值运算符:=
·逗号运算符:,
·字节运算符:sizeof
·强制运算符:(类型名)(表达式)
·其他:下标,分量,函数
3.1.2 运算符的结合性和优先级
1.结合性
所有的单目运算符、条件运算符、赋值运算符及其扩展运算符,结合方向都是从右向左,其余运算符的结合方向都是从左向右。
2.优先级比较
初等运算符>单目运算符>算术运算符(先乘除再加减)>关系运算符>逻辑运算符(不包括“!”)>条件运算符>赋值运算符>逗号运算符。
初等运算符包括:圆括号(),下标运算符:[]和结构体成员运算符->.
3.1.3 强制类型转换运算符
1.可以利用强制运算符将一个表达式转换成所需类型。
2.一般形式:(类型名)(表达式)
3.1.4 逗号运算符和逗号表达式
1.逗号表达式:用逗号运算符将几个表达式连接起来。
2.一般形式:表达式1,表达式2,…,表达式3.
3.求解过程:先求解表达式1,然后依次求解表达式2,直到表达式n的值。表达式n的值就是整个逗号表达式的值。
3.2 算术运算符和算术表达式
3.2.1 基本的算术运算符
1.分类:+(加法运算符或正值运算符)、—(减法运算符或负值运算符)、*(乘)、/(除)和%(求余)。
其中%两端必须是整型,其余的运算对象都可以是整型或者实型。
2.双目运算符两边的数值类型必须一致才能进行运算,如果不一致,系统先进行一致性转换。
转换规则:char->short->int->unsigned->long->double->float.
3.如果实数的运算都是以双精度方式进行的,若是单精度数值,则需要在尾数后面补0转换为双精度数。
3.2.2 算术表达式和运算符的优先级与结合性
1.定义:用算术运算符和括号将运算量连接起来、符合C语言语法规则的表达式。
2.运算对象:函数、常量和变量等。
3.运算规则
·可使用多层圆括号,但括号必须配对。运算时由内向外依次计算各表达式的值。
·对于不同优先级的运算符,按运算符的优先级由高到低进行运算,若优先级相同,则按结
合方向进行运算。
·若运算符两侧的操作数类型不同,则先利用自动转换或强制类型转换,然后进行运算。
3.2.3 自加、自减运算符
1.作用:自加运算符“++”使运算变量的值增1,自减运算符“——”使运算变量的值减1.
2.均是单目运算符。运算对象可以是整型或实型变量,但不可以是常量和表达式。
3.均可作为前缀运算符,也可作为后缀运算符构成一个表达式。
·++i,--i:在使用i之前的值加1或者减1,再使用此时的表达式的值参与运算。
·i++,i--:在使用i之后,使i的值加1或者减1,再使用此时的表达式的值参与运算。
4.结合方向:自右向左。
3.3 赋值运算符和赋值表达式
3.3.1 赋值运算符和赋值表达式
1.“=”称做赋值运算符,作用是将一个数值赋值给一个变量或将一个变量的值赋给另一个变量,由赋值运算符数组成的表达式称为赋值表达式。
2.一般形式:变量名 = 表达式
·赋值运算符的优先级别高于逗号运算符。
·赋值运算符“=”和等于运算符“==”有很大差别。
·赋值运算符的左侧只能是变量,而不能是常量或者表达式。右侧可以是表达式,包括赋值
表达式。
·规定最左边变量所得到的新值就是整个赋值表达式的值。
3.3.2 复合的赋值运算符
在赋值运算符之前加上其他运算符可以构成复合赋值运算符。例如:+=、-=、*=、/=、%=等。
·两个符号之间不能有空格。
·复合赋值运算符的优先级与赋值运算符相同。
3.4 位运算
1.C语言提供6种位运算符
·按位与“&”
·按位或“|”
·按位异或“^”
·按位求反“~”
·左移“<<”
·右移“>>”
2.说明
·位运算中除“~”以外,均为双目运算符,要求两侧各有一个运算量。
·运算量只能是整型或字符型数据,不能为实型数据。
4.1 单个字符的输入输出
4.1.1 字符输出函数putchar()
putchar()函数的作用是向终端输出一个字符。
4.1.2 字符输入函数getchar()
·getchar()函数的作用是从终端输入一个字符。
·getchar()函数没有参数,函数值就是从输入设备得到的字符。
4.2 数据格式的输入与输出
4.2.1 格式化输出函数printf()
printf()函数是C语言提供的标准输出函数,它的作用是向终端按指定格式输出若干个数
据。
1.printf()函数的一般形式
格式控制:用双引号括起来的字符串是“格式控制”字符串,它包括两种信息
·格式转换说明,由%和格式字符组成。
·需要原样输出的字符也写在格式控制内。
2.格式字符
可在“%”与格式字符之间插入“宽度说明”、左对齐符号“-”、前导零符号“0”等。
·d格式符:用来对十进制数进行输入输出
·o格式符:以八进制数形式输出整数
·x格式符:以十六进制数形式输出整数
·u格式符:用来输出unsigned型数据,即输出无符号的十进制
·c格式符:用来输出一个字符
·s格式符:用来输出一个字符串
·f格式符:用来输出实数(包括单、双精度),以小数形式输出,使整数部分全部输出
·e格式符:以指数形式输出实数
·g格式符:用来输出实数
4.2.2 格式化输入函数scanf()
1.scanf()函数的一般形式
scanf(格式控制,地址表列);
2.格式说明
scanf()函数中的格式说明也是以%开始,以一个格式字符结束,中间可以加入附加的字符。
·对unsigned型变量的数据,可以用%d,%o,%x格式输入
·在scanf()函数中格式字符前可以用一个整数指定输入数据所占宽度,但对于输入实型数则不能指定其小数位的宽度。
·在格式控制串中,格式说明的个数应该与输入项的个数相等,且要类型匹配。
5.1 关系运算符与关系表达式
5.1.1 关系运算符及其优先次序
C语言提供了6种关系运算符:小于(<),小于等于(<=),大于等于(>=),大于(>),等于(==),不等于(!=)。
1.结合性:自左向右
2.优先级:
·前4种关系运算符(<,<=,>=,>)的优先级别相同,后两种(==、!=)优先级相同。
·前4种优先级高于后两种
·关系运算符的优先级低于算术运算符,高于赋值运算符
5.2 逻辑运算符和逻辑表达式
C语言提供3种逻辑运算符:逻辑与(&&)、逻辑或(||)、逻辑非(!)。
1.结合性:自左向右
2.优先级:“!”>“&&”>“||”
5.3 switch语句
switch语句是C语言提供的多分支选择语句,用来实现多分支选择结构。
一般形式:
switch(表达式)
{
case 常量表达式1:语句1
case 常量表达式2:语句2
……
case 常量表达式n:语句n
default:语句n+1
}
·switch后面用花括号括起来的部分是switch语句体。
·switch后面括号内的“表达式”,可以是C语言中任意合法表达式,但表达式两侧的括号
不能省略。
·case与其后面的常量表达式合称case语句标号,常量表达式的类型必须与switch后面的
表达式的类型相匹配,且各case语句标号的值各不相同,不能重复。
·default也是关键字,起标号作用,代表除了以上所有case标号之外的那些标号。
6.1 break语句与continue语句
6.1.1 break 语句
1.在break后面加上分号就可以构成break语句,break语句还可以用于从循环体中跳出,即提前结束循环。
2.说明
·break语句只能出现在循环体内及switch语句内,不能用于其他语句。
·当break出现在循环体中的switch语句体内时,其作用只是跳出该switch语句体。当break出现在循环体中,并不在switch语句中时,则在执行break后,跳出本层循环,当然也不再去进行条件判断。
6.1.2 continue语句
1.一般形式:continue
2.作用:结束本次循环,即跳过循环体中下面尚未执行的语句,而转去重新判定循环条件是否成立,从而确定下一次循环是否继续执行。