一、 scanf 函数:
scanf函数时,会等待用户的键盘输入,并不会往后执行代码。
数值之间的分隔符是任意的,不一定要用中划线-,可以是逗号、空格、星号*、井号#等等,甚至是英文字母
scanf("%d %d%d", &a, &b, &c);3个%d之间是用空格隔开的,我们在每输入一个整数后必须输入一个分隔符,分隔符可以是空格、tab、回车
注意scanf的第一个参数中不要包含\n,比如scanf(“%d\n”,&a); 这将导致scanf函数无法结束
二、 基本运算
1 类型转换
1> 自动类型转换
int a = 10.6;
int b = 10.5 + 1.7;
自动将大类型转换为了小类型,会丢失精度
2> 自动类型提升
int b = 10.5 + 10;
将右边的10提升为了double类型
double b = 1.0 / 2;
解决除法的精度问题
3> 强制类型转换
double a = (double)1 / 2;
double b = (double)(1 / 2);
2 赋值运算
“=” 不是等于 等于是“==” 等号左边不能是常量
a += 4 + 5; 等于 a = a + (4 + 5);
a++, ++a 都等价于 a = a + 1 不能 5++
++a 是 先a+1 然后 再用a的值进行运算 a++ 是 先 用a的值进行运算 再 a+1
3 关系运算符
关系运算符中==、!=的优先级相等,<、<=、>、>=的优先级相等,且前者的优先级低于后者:2==3>1
等价于 2== (3>1)
关系运算符的结合方向为“从左往右”: 4>3>2
关系运算符的优先级小于算术运算符:3+4>8-2 等价于 (3+4)>(8-2)
4 逻辑运算
1>逻辑与
使用格式 “ 条件 A && 条件 B ”
功能
条件A为假 那么 不会 执行条件 B
判断 a的值 在 (3, 5) 的正确 式子 是 (a>3) && (a<5) 条件A和 条件B都为真才对
2>逻辑或
使用格式 “ 条件 A || 条件 B ”
功能
条件 A 为 真 那么 不会执行 条件B
判断 a 的值 在 (-∞, 3) 或者 (5, +∞) 正确式子 (a<3) || (a>5)
3>逻辑非
使用格式: ! 条件A
功能
真的变假 假的变真!!
逻辑非的 结合方向 是 “ 自右至左 ” 比如 !(A>5) 先判断 A>5 的值 然后 才取反!
5 三目运算符条件运算符
是 C 语言 唯一的 三目运算符
使用格式
表达式 1? 表达式 2: 表达式3
1> 先求解 表达式1 如果为真 那么执行表达式 2,为零 执行表达式 3
2> 条件运算符 优先于 赋值运算 低于关系运算符 低于 算术运算符
3> 结合方向 自右 至左 a>b? a: c>d? c:d 相当于 a>b? a: (c>d? c: d)
4> 表达式 2和3 可以是 数值表达式 还可以是 赋值表达式 如 a>b? (a= 100):(b =100) 或a>b? printf("%d", a): printf("%d", b)
5> 表达式 2 和 3 的 类型可以不同 这时,表达式1 的值的类型为二者中较高的类型。
三、选择结构 switch
1 使用格式
swithc(表达式)
{ case 常量表达式 1: 语句 1
case 常量表达式 2: 语句 2
……
case 常量表达式 n: 语句 n
default : 语句 n+ 1
}
2 注意
1>括号中的表达式 ANSI标准允许它为任何类型
2> 当表达式的值与某一个case后面的常量表达式的值相等时,就执行此 case 后面的语句,否则执行 default 后面的语句。
3> 每一个 case 后面的值 必须互不相等
4> 各个 case 和 default 出现的次序不影响执行结果。可以先出现 default 再出现 case 'D'
5> 执行完一个 case 后面的语句 直接转移到下一个 case 直到 遇到 break
6> 多个 case 可以共用一组 执行语句
四、选择结构 if
1 if的使用格式
1.if的第1种结构
if(条件)
{
语句1;
语句2;
......
}
2.if的第2种结构
if(条件1)
{
语句1;
语句2;
......
}
else
{
}
3.if的第3种结构
if(条件1)
{
语句1;
语句2;
......
}
else if(条件2)
{
}
else if(条件3)
{
}
else if(条件4)
{
}
else
{
}
4.if的第4种结构
if (条件)
语句1;
2 if 的使用注意
注意 if和else 只在同一个大括号包括下配对。 else 是与最接近的if 且没有 else 的 语句 匹配
if (条件) 语句1;语句2; 语句2与if无关;if只控制是否执行语句1;
同一时刻,只有一个大括号里的代码会被执行
A、比较大小时,常量值放左边,变量放右边;
B、赋值运算符,不要写成两个=;
C、如果要在if后面的语句中定义新的变量,必须用大括号{};
3 if和switch的比较
1> if语句能完成的功能,switch并不一定能完成
int a = 10;
if (a>100)
{
}
2> 在有些情况下,if语句和switch语句可以互换
3> switch能完成的功能,if语句都能完成