2.1引例
程序的注释:注释内容必须包含在/和/之间,其内容可以是任何可显示字符(/和*之间不能有空格),注释必须成对出现,不能出现在语句的中间。
#include<stdio.h>是编译预处理命令,该函数是C语言提供的标准输出函数。注意:C语言有效的预命令总是以#开始的,预处理命令的末尾不加分号。
在一个C程序中有且仅有一个main()函数。
C语言中除复合语句外的所以语句都必须以分号结束。
/n是换行符,称为转义字符
2.2C语言的数据类型
C语言有四种数据类型:基本类型,构造类型,指针类型和空类型。
⑴基本类型可以分解为整形,字符型和实型(浮点型)。
⑵构造类型分为数组类型,结构体类型,共用体类型和枚举类型,它是根据已定义的一个或多个数据类型,用构造的方法来定义的。
⑶指针是C语言中一种特殊的,同时又具有重要作用的数据类型。
2.3 C语言的常量
常量是在程序执行过程中,其值不发生改变的量,分为直接常量和符号常量两种。
2.3.1直接常量
直接常量又分为整型常量、实型常量、字符型常量和字符串常量。
1.整型常量
整型常量即整数,包括正整数,负整数和零。C语言中,整型常量可以用十进制,八进制和十六进制表示。
十进制表示:由数字0~9,正,负号组成,如369.-663等
八进制表示:以0为前缀,其后由数字0~组成,如0163,036等:八进制数一般是无符号数。如0129,-011都是不合法的八进制常量。
十六进制表示:再0x或0X为前缀,其后由数字09和字母AF(大小写均可)组成,如0x12cd,0X6Fa等。十六进制一般是无符号数。
注意:⑴在一个整型常量后面加一个字母u或U,认为是unsigned int型,如246U。
⑵在一个整形常量后面加一个字母1或者L,认为是long int型,如12L。
2.实型常量
实型常量即实数,又称为浮点数。C语言中,实数只能用十进制形表示,其表达方式有小数形式和指数形式。
⑴小数形式:由整数部分,小数点和小数部分组成,当整数部分或者小数部分为0时,可以省略不写,但是小数点不可忽略。
⑵指数形式:由尾部部分,字母E或e和指数部分组成,格式为:±尾数E指数。
注意:⑴以小数形式表示实数时,必须有小数点,并且小数点的前、后至少一边要有数字。
⑵以指数形式表示实数时字母E(或e)的前后必须有数字,并且指数部分只能是整数。
3.字符型常量
字符常量指单个字符,用一对单引号及其括号所括起来的字符来表示。
特点:⑴字符常量只能用单括号括起来,不能用双引号或者其它括号。
⑵字符常量只能是单个字符,不能是字符串。⑶其字符可以是ASCII字符集中中的任意字符。
注意:使用字符常量时,每个字符在内存中占用一个字节,用于存储它的ASCII码值。
说明:转义字符形式上由多个字符组成,但它是一个字符常量,只代表一个字符。转义字符的使用方法与一般字符型常量的用法相同。
转义字符使用示例
4.字符串常量
字符串常量是由一对双引号“”括起来的零个或多个字符序列。
字符串常量在内存中占用一段连续的存储单元,系统自动在每个字符串的尾部加上’/0‘作为字符串的结束标志,n个字符组成的字符串,在内存中要占用n+1个字节空间。
注意:字符常量和字符串常量在内存中的存储情况是不同的。
2.3.2符号常量
在C语言中,可以用一个标识符来表示一个常量,称之为符号常量。符号常量在使用之前必须先定义,其一般形式为:
#define标识符 常量值
利用符号常量计算价格好处:⑴增加程序的可读性。
⑵提高程序的可维护性。
⑶简化程序代码。
⑷方便数组的定义。
2.4 C语言的变量
变量是指在程序运算期间其值可以发生变化的量。
2.4.1变量的定义与使用
在C 语言中,所以 的变量必须先定义后使用。
1.变量的定义
其定义格式:类型说明符 变量名表
其中:⑴类型说明符必须是C语言中的有效数据类型。
⑵变量名表可以由一个或多个变量名组成,各变量名之间用“,”分隔。变量名必须是合法的C语言标识符,变量名一般使用小写字母。
⑶变量的定义必须放在变量的使用之前,一般在函数体的开头部分进行定义。
2.变量的初始化
C语言允许在定义的同时对变量赋值,称为变量的初始化。
注意:⑴对一个变量赋初值之后,该值被存储在分配给该变量的内存空间中。
⑵不允许对多个未定义的同类型变量连续初始化。
⑶初始化时,一般应使“=”右边表达式的数据类型和“=”左边的变量的类型一致,如果不一致系统会进行自动赋值转换。
⑷没有进行初始化的变量,其值是由定义时所使用的存储类型决定的,全局变量和static型变量的值是0或‘\0’,其他存储类型的局部变量的值是未知的。
3.变量的使用
变量定义之后,就可以在程序中使用。在程序中使用变量,称为变量的引用,如进行数值计算、数据处理等,应该先赋值,后引用。
2.4.2 整型变量
一个整型变量用于保存整数。整型可以分为:短整型,整型,长整型,无符号整型,无符号短整型和无符号长整型六种。
关键字 类型 占用字节数 取值范围
short int 短整型 4 -32768~32767
int 短整 4 -21447483648~2147483647
long int 长整型 4 -2147483648~2147483647
unsigned short 无符号短整型 2 0~65535
unsigned int 无符号整型 4 0~4294967295
unsigned long 无符号长整型 4 0~4294967295
说明:⑴各种无符号整数所占的字节数与相应的有符号整数相同,但由于省去了符号位,故不能表示负数。
⑵有符号整数以二进制补码形式存储。最左边的第1位表示符号,该位为0,表示正数,该位为1,表示负数。
⑶无符号整数以二进制原码形式存储。
不同类型整型变量的定义和使用示例
短整型变量的溢出
2.4.3 实型变量
C语言中的实型变量分为单精度和双精度两类。
关键字 类型 占用字节数 取值范围
float 单精度型 4 3.4E-38~3.4E+38
double 双精度类型 8 1.7E-308~1.7E+308
单精度型数据能保留7位有效数字,双精度型数据能保留16位有效数字。
实型变量的使用示例
2.4.4 字符型变量
字符型变量的值是字符常量,即用单引号引起来的单个字符。其类型说明符是char,其类型说明的格式和规格与整型变量相同。
字符变量的使用示例
把大写字母转换为小写字母
2.5 运算符和表达式
2.5.1赋值运算符和赋值表达式
C语言中赋值运算符有=,+=,-=,=,/=和%=等。用赋值运算符将运算对象连接而成的表达式称为赋值表达式。
1.简单赋值运算符
最简单的负值运算符就是“=”,其作用是将一个数字赋给一个变量。
2.复合赋值运算符
运算符 应用举例 等价形式
+= a+=x a=a+(x)
-= a-=x a=a-(X)
= a=x a=a(x)
/= a/=x a=a/(x)
%= a%=x a=a%(x)
3.赋值表达式
在C语言中赋值语句属于表达式语句,赋值表达式是由赋值运算符将一个变量和一个表达式连接起来的式子所组成。它的一般形式为:
变量=表达式
注意:赋值运算符的左侧必须是一个变量
2.5.2 算术运算符和算数运算符
+加 -减 乘 /除 %求余
⑴+加法运算符,为双目运算符,其功能是求和。
⑵-作为单目运算符,是取负运算;作为双目运算符时,是进行求差运算。
⑶乘法运算符为双目运算符,其功能是进行求乘积运算。
⑷/除法运算符为双目运算符,其功能是进行求商运算。
⑸%求余运算符为双目运算符,其功能是进行求余数的运算。
2.自增、自减运算符
⑴++自增运算符,为单目运算符,其功能是使变量的值自加1。
其有两种使用形式
①前缀方式:用于变量前面,先计算,后使用,即先将X的值自加1,然后将X的值赋给变量a
②后缀方式:用于变量后面,先使用,后计算,即先将X的值赋给变量a,然后再将X的值自加1
⑵–自减运算符,为单目运算符,功能是使变量的值自减1
注意:自增和自减运算符的操作对象只能是一个简单变量,不能是常量或者是表达式
3.算术运算符的优先级和结合性
即单目运算符的优先级高于双目运算符,双目算数符中*,/,%的优先级高于±
4.算术表达式
算术表达式是由算术运算符、运算对象和括号连接起来的式子,运算对象可以是常量、变量和函数等。
输入一个3位的正整数,输出其反序数(如123反序数为321)
2.5.3逗号运算符和逗号表达式
C语言中逗号“,”也是一种运算符,称为逗号运算符,其功能是把多个表达式连接起来组成一个表达式,称为逗号表达式。逗号表达式的一般形式为:
即表达式1,表达式2……表达式n
⑴逗号表达式的执行顺序是:从左到右依次计算每个表达式的值,并把最后一个表达式的值作为整个逗号表达式的值。
⑵逗号运算符是双目运算符,其优先级最低,是左结合的。
⑶ 并非所有出现逗号的地方都为逗号表达式,如在变量说明语句中,以及函数参数表中逗号只是用作各变量之间的分隔符。
逗号表达式应用示例
2.5.4求字节数运算符
即sizeof(表达式)或sizeof表达式
sizeof(数据类型名)
不同数据类型字节数示例
求字节数运算符示例
2.6
2.6.1自动类型转换
不同类型的数据在一起运算时,编译系统会自动进行类型转换,其规则是:把占用内存空间少的(低级)类型向占用空间多的(高级)类型转换
2.6.2强制类型转换是采用强制类型转换运算符将某种数据类型强制转换成指定的数据类型其形式为:
(类型说明符)(表达式)
功能:把表达式的运算结果强制转换成类型说明符指定的类型。
注意:⑴需强制类型转换中的表达式一定要括起来,否则只对紧随括号后的量进行类型转换。
⑵强制转换类型是一种不安全的转换,如果是从高级类型转换成低级类型,则会损失数据的精度。
⑶强制类型转换并不改变表达式中变量的类型和值。