一.基本字符,关键字和标识符
1.基本字符
基本字符分为源字符集和执行字符集。
源字符集就是数字,大小写字母,格式符,还有一些特殊字符,如!,+,-,*之类的。
格式符
字符 | 含义 |
---|---|
%a,%A | 读入一个浮点值(仅C99有效) |
%c | 读入一个字符 |
%d | 读入十进制整数 |
%i | 读入十进制,八进制,十六进制整数 |
%o | 读入八进制整数 |
%x,%X | 读入十六进制整数 |
%s | 读入一个字符串,遇空格、制表符或换行符结束。 |
%f,%F,%e,%E,%g,%G | 用来输入实数,可以用小数形式或指数形式输入。 |
%p | 读入一个指针 |
%u | 读入一个无符号十进制整数 |
%n | 至此已读入值的等价字符数 |
%[] | 扫描字符集合 |
%% | 读%符号 |
执行字符集就是程序执行期间解释的字符集,如,字符串终止符——null或者警报——alert,等等。
如果用到程序中用到警报,就需要用转义字符“/”来使用。
转义字符主要用来表示那些用一般字符不便于表示的控制代码。
下面是常用的转义字符及其含义
转义字符 | 含义 |
---|---|
\a | 鸣铃 |
\n | 回车换行 |
\t | 横向跳到下一制表位置 |
\v | 竖向跳格 |
\b | 退格 |
\r | 回车 |
\f | 换页 |
\\ | 反斜线符"\" |
\’ | 单引号符 |
\" | 双引号符 |
2. 关键字
关键字就是 int,float,if, do之类的
3.标识符
标识符就是名称,像sum,student,用来表示数组,函数,通常由字母数字或者下划线 _ 组成,但第一个字符只能是字母或者下划线
合法变量名:
add,sum,math
不合法
3a,#3A
注意
通常情况下,下划线是给系统使用,建议读者不以下划线开头。
严格区分大小写
二 数据的表现形式和基本数据类型
三 常量
1 整形常量
- 十进制与八进制的长整型都是数字序列后加L,如:123L,0L。
- 十六进制以0x或0X开头,数字1~ 9,字母a~f 或A ~ F
- 当表示机械码,都是无符号数。
2.实型常量
- 当小数部分或整数部分为零时,0可以省,但小数点不可以。
- 指数形式 e或E表示以十为底且前面必须有数字,如1E6=1*10^6,但E6为错误格式。
3.字符常量
- 26字母A~Z ASCII码为65 ~90,小写字母为97 ~ 122,差32位。
- 字符型常量用‘’括住。
4.字符串常量
- 由双引号括起
- 字符型常量只能由1个字符构成,字符串以由0个,1个,多个构成。
- 字符型占一个储存空间,字符串再加一字节,存放“\0”。
5.符号常量
用宏定义#define定义后使用
四.变量的定义和使用
- &为取地址
- 对于几个变量赋一个值
int m=5,n=5;
不能写为
int m=n=5;
可以写为
int n
int m=n=5;
五 变量的基本数据类型
1.整型变量
1.基本整形: int ,短整型:short int或short,长整型:long int或long,
无符号型 前面加unsigned(没有符号位,所以最大值绝对值大于有符号位。)如:unsigned int
unsigned short。(没有说明,默认有符号)
int为4字节,二进制32位
虽然c语言中表示整数时可以采用八进制,十进制和十六进制,但数据在内存中存放形式只有一种——二进制,并且是以二进制的补码形式存放的。
在计算机单位里,最基本的单位是bit 在bit位里存放的都是计算机能够识别的二进制数0和1, 而字节是单位byte,1 byte = 8 bit,所以8个框就是1个字节的大小。
注意:
一个类型说明符(int)可以定义多个变量(a,b,c),且用逗号隔开,int与变量至少一个空格隔开,以分号结尾。变量的定义放在函数体的开头部分(先定义后使用)
2.实型变量
数据类型 | 字节位数 | 有效数字位数 |
---|---|---|
单精度flooat | 4(32) | 6 |
双精度double | 8(64) | 15 |
符号位:第31位
指数部分:第30位到第23位,共8位,存储科学计数法中的指数数据。
尾数部分:第22位到第0位,23位。
3.字符型变量
字符型变量在内存中一ASCII的二进制形式,对于字符‘a’,储存的十97 01100001,但字符型数据占1字节。 因此在ASCII范围内可以通用(就看是%的%d,还是%c)
编程实现大小写字母之间的转换。
# include < stdio . h >
int main ()
{
char ch1,ch2;
chl =' a ';
printf (" 小写字符 :\ n ");
printf ("% c \ n ",ch1);
ch2=ch1-32;
printf (" 大写字符 :\ n ");
printf ("% c \ n ",ch2);
return 0;
}
程序运行结果如下:
小写字符 a
大写字符 A
编程实现字母和数字之间的转换。
# include < stdio . h >
int main ()
char chl ,ch2;
{
chl =' a ';
printf (" 之前 :\ n ");
printf ("% c \ n ",ch1);
ch2= chl ;
printf (" 之后 :\ n ");
printf ("%d \ n ",ch2);
return 0;
}
程序运行结果如下:
之前 :
a
之后 :
97
注意%d与%c。凭借这个相互转化。
六.运算中数据类型的转换
100+‘b‘*10/2+3.1415这个表达式涉及整型,字符和实型,需要对类型进行转换
1.隐式自动转换
当运算类型不同时,系统会自动转换。char型,short int转换成int,float型转换成double型为必定转换。
???????
(有低精度,小范围直接转换为高精度,大范围)
2.强制转换
在使用%时,double型%int型,系统编译错误,所以可以在数字前转换int型(%两边必须为整数)
如double a=3.14
int b=2
c=a/b,(编译错误)
c=(int)/b
c=1
注意
- 强制转换后面要加(),否则只对相邻的转换。
- 会导致精度降低
- 强制转换是值得转换,不改变原来的值,只是产生一个新的值。
七.运算符和表达式
- 算术运算符
+,-,*,/,%(求余),++(自增),–(自减)。
2.关系运算符
<,><,==,>=,<=和!=(不等于)。
3.逻辑运算符
&&,||,!。
4.赋值运算符
简单赋值(=),复合算数赋值(+=,-=,*=,/=,%=),复合位运算赋值(&=,|=,>>=,<<=)
5.条件运算符
“?:”,唯一的三目运算符
- c=(a>b)?a:b;
a是否大于b,若a大于b,则输出a,否则输出b
a>b?a:b<c?b;c; 等于a>b?a:(b<c?b;c);
6.逗号运算符
就是逗号“,”
7.指针运算符
间接访问 “*” 和取地址“&”。
8.求字节数运算符
用于计算各数据类型所占的字节数 (sizeof)。
9.位操作运算符
用于二进制位运算,后面会详细介绍。
10.强制类型转换符
前面已经讲过,可以多看看。
11.成员运算符
([ ], 下标 . ,->),在后面的数组指针会予以详解。
1.基本算数运算符
(1)“/”,当除数与被除数都是整型,那么结果一定为整数(舍去小数部分),有一个为实型,结果为double型,当有负数,结果采取向0取整,例如:-8/7=-1,-5/2=-2。
(2)“%”,要求运算对象必须为整型,余数的符号与被除数的符号相同。
(3)运算符+ - * /都是两个数计算,叫作双目运算符,像求负(-),只有一个数叫单目运算符,
“ ?:”是唯一的三目运算符
2.优先级和结合性
“++”,“–”(右结合)优先级高于“+,-,,/,%”。
3.自增自减运算符
++i,–i 在使用i之前,先使i加1或减1。
i++,i-- 使用i之后,使i加1或减1。
注意
1.无论是前缀还是后缀,若独立出现,都等价于i=i+1或i=i-1。
2.只能用于变量,不能用于常量或表达式。
3. -i++=-(i++),若i=5,则(i++)=5,i=6。-(i++)=-5,i=6(先用后加)。
4. 当遇见多个运算符,i+++j,可以理解为(i++)+j。
2.赋值预算符和赋值表达式
复合算术运算符:+=,-=,=,/=,%=:
复合位运算赋值运算符:&=,|=,^=,>>=,<<=。(后面会详细介绍)
i+=5 等于 i=i+5
ij+5 等于 i=i(j+5)
i%=k 等于 i=i%k
3.关系运算符式和表达式
1.运算符
<,<=,>,>=的优先级相同,高于==,!=。
算术运算符>关系运算符>赋值运算符
4.逻辑运算符和逻辑表达式
1.逻辑运算符
与&&,或||,非!
优先级:
!>&&>||
!>算术运算符>关系运算符>&&>||>赋值运算符
2.逻辑表达式
<表达式><逻辑运算符><表达式>
例如:能被四整除,但不能被100整除
year%4==0&&year%100!=0
((year%4)==0)&&((year%100)!=0)
5.逗号运算符和表达式
逗号可以将两个表达式连接在一起。如::a+5,3+8"不是两个表达式而是一个。
逗号运算符优先级最低。
并不是所有的逗号都是运算符,在printf(“%d”,(a,b))中,第一个逗号作为分隔符,第二个逗号作为运算符。
八.其他运算符
“ &”与“*”
&单目运算符的功能为取地址运算,&变量名,运算对象只能能是变量
*双目运算符的功能为返回地址的变量