第三章 运算符和条件结构

运算符与表达式

  • 运算符

    • 赋值运算符、算术运算符、关系运算符、逻辑运算符
  • 表达式

    • 符号与操作数的组合

    • a = (b + 3) + (b - 1)

赋值运算符

  • 单等号 =

  • 计算顺序:从右往左

  • double salary = 3200.0;

    double total = salary * 2;

    char sex = ‘F’;

    int score = 98;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int main()
{
//复合赋值运算表示符
int x = 5;
x += 10; //等价 x = x + 10;
printf("%d\n",x);
x -= 10; //等价 x = x - 10;
printf("%d\n",x);
x *= 10; //等价 x = x * 10;
printf("%d\n",x);
x /= 10; //等价 x = x / 10;
printf("%d\n",x);
x %= 10; //等价 x = x % 10;
printf("%d\n",x);

return 0;
}

算数运算符

  • 算数运算符可以进行算术运算
    • 一元运算符:++、–
    • 二元运算符:+、-、*、/、%
1
2
3
4
5
6
7
8
9
10
11
12
//定义两个整型变量
int num1 = 5,num2 = 2;
//4个double整型变量用来存放计算结果
double result1,result2,result3,result4
result1 = num1 / num2; //除法
result2 = num1 % num2; //取余
result3 = num1++; //后置
result4 = --num2; //前置
printf("num1 / num2 = %lf\n",result1);
printf("num1 %% num2 = %lf\n",result2);
printf("num1++ = %lf\n",result3);
printf("--num2 = %lf\n",result4);

关系运算符

  • 关系运算符可以比较大小、高低、长短
    • >、<
    • >=、<=
    • ==、!=
1
2
3
printf("5 > 8吗? %d\n",5 > 8);  //输出结果为:5 > 8吗? 0
printf("6 < 9吗? %d\n",6 < 9); //输出结果为:6 < 9吗? 1
//c语言中,0表示假,1(非零)表示真

逻辑运算符

运算符 表达式 说明
&& 并且 条件1 && 条件2 两个条件同时为真时,结果为真
|| 或 条件1 || 条件2 两个条件有一个为真时,结果为真
! 条件 条件为真时,结果为假;条件为假时,结果为真。

位运算符

运算符 作用 示例
& 按位与 两个操作数同时为1结果为1
| 按位或 两个操作数只要有一个为1,结果为1
~ 按位非 操作数为1,结果为0;操作数为0,结果为1
^ 按位异或 两个操作数相同,结果为0;不相同结果为1
<< 左移 右侧空位补0
>> 右移 左侧空位补符号位
>>> 无符号右移 左侧空位补零

sizeof运算符

  • 使用sizeof运算符可以获得数据类型占用内存空间的大小
    • 基本用法:sizeof(type name);
    • 结果以字节为单位
1
2
3
4
5
6
7
8
9
10
int main()
{
printf("sizeof(int) = %d\n",sizeof(int)); //输出结果为:sizeof(int) = 4
printf("sizeof(long) = %d\n",sizeof(1000L)); //输出结果为:sizeof(long) = 4
printf("sizeof(float) = %d\n",sizeof(34.4f)); //输出结果为:sizeof(float) = 4
printf("sizeof(double) = %d\n",sizeof(34.4)); //输出结果为:sizeof(double) = 8
printf("sizeof(char) = %d\n",sizeof(char)); //输出结果为:sizeof(char) = 1

return 0;
}

运算符优先级

运算符
第一级 ()、sizeof、++、–
第二集
第三级 算术运算符
第四级 关系运算符
第五级 &&
第六级 ||
第七级 赋值运算符
  • 单目运算符包括!、~、++、–、sizeof,优先级别高
  • 优先级别最低的是赋值运算符
  • 可以通过()控制表达式的运算顺序,()优先级最高
  • 从右向左结合性的只有赋值运算符、三目运算符和单目运算符
  • 算术运算符 > 关系运算符 > 逻辑运算符

条件结构

if结构

  • 先判断后执行

  • if( 条件为真 ){ / * *代码块1 * */ } else{ / * *代码块2 * */ }

  • 多重if结构

    • if( 条件1 ){ / * *代码块1 * */ } else if( 条件2 ){ / * *代码块2 * */ } else { / * *代码块3 * */ }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int main()
{
printf("在一个月黑风高的夜晚,");
printf("一个小男生用自己的积蓄买了一束鲜花。\n");
printf("(以下是小女生问,男生答)\n");
printf("小女生:你这花多少钱一束啊?\n");
printf("小男生:");
double flowerPrice;//鲜花价格
scanf("%lf",&flowerPrice);
//小女生开始答小算盘了
printf("小女生:");
if(flowerPrice > 9999){
printf("明天结婚!\n");
}else if(flowerPrice > 1000 && flowerPrice <=9999){
printf("拉拉手吧!\n");
}else if(flowerPrice > 500 && flowerPrice <= 999){
printf("明天再约!\n");
}else{
printf("呸!\n");
}
return 0;
}

switch结构

  • switch(表达式){ case 常量1:语句1;break; case 常量2:语句2;break;…… default:语句;}
  • 使用switch结构时的注意点
    • switch后的表达式只能是整型或字符型
    • case后常量表达式的值不能相同
    • case后允许多条语句,不需要大括号
    • 如果不添加break语句,需要特别注意执行顺序
    • case和default子句的先后顺序可以自行变动
    • default子句可以省略

switch和多重if对比

  • 相同点

    • 都是用来处理多分支条件的结构
  • 不同点

    • switch:等值条件判断—条件是有限个的时候(杀鸡刀)
    • 多重if:判断某个连续区间时的情况(杀牛刀)