1.反斜杠\ 字符转义的含义
‘\’’表示单引号字符,单引号表示字符分界符,双引号表示字符串分界符
2.字符串以反斜杆0为结尾
“abc” ‘a’‘b’‘c’‘\0’
3.定义变量 数据类型 标识符=数值
标识符只能够由字母,数字,下划线组成,不能够由数字开头,不允许是关键字,同一作用与不允许重名
4.字节是内存的基本单位,一个字节是八位二进制
有符号整型 原码 -(2^31-1)-- 2^31-1 补码 -2^31--2^31-1
原码
1111 1111 1111 1111 1111 1111 1111 1111 -(2^31-1) min
- 1
=0111 1111 1111 1111 1111 1111 1111 1111 max
=2^31-1
补码 -2^31--2^31-1
1 0000 0000 0000 0000 0000 0000 0000 0000
-1
=1111 1111 1111 1111 1111 1111 1111 1111
无符号整型 0--2^32-1
5.= 赋值运算符的左边需要存储空间,不能是表达式
a-b=5 ✘
6. 8.666f表示的是单精度浮点型数字8.96e1f表示单精度浮点型的指数形式,默认是双精度 默认小数点后六位
7.数据溢出
int a=4.6 输出4,小数点儿之后丢失
8. <stdio.h>输入输出工具箱
%c 字符型占位符
9.scanf 以回车结束,%c占位符的数字以空格结束
ch=getchar() 输入一个字符
putchar(字符常变量)输出一个字符
10.符号常量 const 数据类型 变量名=数值(变量的值就不能改变)
11.(二进制转八进制)-三位二进制对应一位八进制
10111010(B) =
010 111 010 272(H)
11001111(B) =
011 001 111 317(H)
(八进制转十六进制)-先将八进制转换为二进制,再转换为十六进制
351(O) = 011 101 001(O)= E9
例题一
以下全部属于浮点型数据的选项是( )
A. 123e-2、.123、987.0f
B. 0x123.45、1.23e0f、0.0
C. 123f、0.001、987.
D. 1.2e1.2、0123.45、x123.45
- 答案解析:A
- B选项:实型只有十进制形式。0x123.45不合法
C选项:123f,f不能放在十进制的整数后。
D选项:1.2e1.2指数不能为小数,x123.45不合法
例题二
以下定义语句中正确的是( )
A. int a=b=0;
B. char a=65+1,b='b'; 正确答案
C. float a=1,b=a,a=c;
D. double a=0;b=1.1;
- 答案解析:B 字符型本质也是整型,储存的是ASCLL码值
- A选项:变量b需要先定义再使用。
C选项:变量c需要先定义再使用。
D选项:分号表示语句的结束,之后定义变量还需要重新以数据类型开始定义
(易错题)算术运算符
int a=10;
int b=a++;//b=10,a=11
printf("%d %d\n", a, ++b);//a=11,b=11
11 11
inta=10;
int b=--a;//a=9,b=9
printf("%d %dn", a, b--);//a=9,b=8,b--=9
9 9
12.关系运算符得到的是 0或1
int x=a==b x=0
13.逻辑运算符 :与 或 非 异或
异或:输入相同为0,输入不同为1
与的优先级高于或
int x=(1!=2)||(2==3)&&(3!=4);
但是左边已经为真,遇到或直接为真,所以计算机可能先计算优先级低的
14.条件运算符:表达式1?表达式2:表达式3
输出较大值
int max=(x>=y?x:y);
printf("%d",max)
15.位运算符
左移a<<n =a*2^n 10(D)=1010(B) n=3 1010000=10*2^3=80 乘n个2
右移a>>n =a/2^n 除n个2
按位取反~ 0变1,1变0
(反码:由原码符号位不变,其他0变1,1变0;补码=反码+1)
~3
0000 0000 0000 0000 0000 0000 0000 0011 3的补码
1111 1111 1111 1111 1111 1111 1111 1100 取反后补码-1
1111 1111 1111 1111 1111 1111 1111 1011 反码
1000 0000 0000 0000 0000 0000 0000 0100 -4 原码
按位与& 操作数1&操作数2 全1为1,有0为0
(&变量名 取地址)
按位或| 操作数1|操作数2 全0为0,有1为1
13|10
1101 1010 1111=15
按位异或^ 操作数1^操作数2 相同为0,不同为1
可以使用按位异或交换两个整数的值
int a=14,b=69;
a=a^b;
b=a^b;
a=a^b;
16.隐式转换(要注意在运算时使用数字的要求,否则可能得不到想要结果)
17.强制转换
float score=89.5f;
int grade=(int)(score);
printf("%d",grade);//89
printf("%lf",1/2*3+4.5);//4.500000
注意grade的类型还是float,但要考虑有数据丢失的后果
18.空语句
;(让计算机什么都不做)
19.复合语句
{}
(易错点)赋值运算符与关系运算符
a=0(把0赋给a)赋值号的左边需要存储空间,不能是表达式
a==0(判断a是否为0)
例题一
若所有变量已正确定义并赋值,则以下正确的C语言表达式是( ) 。
A. 12.5%3
B. a=b=c*2
C. ++i++
D. a+=b+c=2*3
答案解析:B
A选项:%作为求余运算符两边的操作数必须是整数。
C选项:++作为自增运算符,优先级是二级,在优先级相同的情况下结合性是从右到左,所以++i++会先计算i++,但是++的操作数是变量(存储单元)。而i++是一个有运算符的表达式,i++表示的是一个表达式的结果而不是一个变量(存储单元),所以计算机不能对i++做自增运算。++i++也就是++(i++)不合法。
D选项:赋值号(=)的左边必须是一个 一个变量(存储单元),不能是有运算符的表达式,b+c不能在赋值号的左边。
例题二
以下程序的运行结果为( ) 。
#include<stdio.h>
int main()
{
int a = 1, b = 6, c = 2,d = 5;
float e;
e = (a + b) / c + (float)(d/c);
printf("%f\n", e);
return 0;
}
A. 6
B. 5.5
C. 5
D. 5.000000
答案解析:D
表达式的运算规则:隐式转换(char->int->float->double、short->int->float->double)
(a+b)/c是整型除以整型,所以该表达式的结果是整型;
(float)(d/c)表达式:先算圆括号中的d/c,再将d/c表达式的结果强制转换成float类型。
所以,e的值是5.0f。使用%f默认输出小数点后六位。