运算符与表达式
算术运算符及算数表达式
%:取模运算符,返回值是余数而不是商。
关系运算符与关系表达式
1.关系表达式的值只有真和假。
2.0值代表假,非0值即为真。
3.关系运算符的优先级低于算术运算符。
#include <stdio.h>
int main() {
int a;
while (scanf("%d",&a)){
if(3<a && a<10){//不可以写成3<a<10
printf("a is between 3 and 10 \n");
}else{
printf("a is not between 3 and 10 \n");
}
}
return 0;
}
逻辑运算符与逻辑表达式
! | 逻辑非 |
&& | 逻辑与 |
|| | 逻辑或 |
💦 逻辑非的优先级高于算术运算符,逻辑与与逻辑或的优先级低于关系运算符。
#include <stdio.h>
//判断闰年
int main() {
int year;
int i =1,j = 7;
while (scanf("%d",&year)){
if(year%4==0 && year%100!=0 || year%400==0){
printf("%d is leap year\n",year);
}else{
printf("%d is not leap year\n",year);
}
}
i =!! j;
printf("i value = %d\n",i);
}
//输出
2024
2024 is leap year
2089
2089 is not leap year
m
i value = 1
短路运算
#include <st0000000000dio.h>
//逻辑与 逻辑或 短路运算
int main() {
int i = 0;
i && printf("you can't see me!\n");//当i为假时,不会执行逻辑与后的表达式,成为短路运算
i= 1;
i || printf("you can't see me\n");//当i为假时,执行逻辑与后的表达式
return 0;
}
赋值运算符
- 左值:能够出现在赋值符号左边的东西。右值反之。a = b + 16
- 复合赋值运算符 a += 3;
求字节运算符(sizeof)
用于求常量或变量所占空间大小。
!不是函数
选择、循环
关系表达式与逻辑表达式
👩💻 算术运算符的优先级高于关系运算符,关系运算符的优先级高于逻辑与、逻辑或运算符
双目运算符:左操作数+右操作数
单目运算符:!操作数
❓ 5 > 3 && 8 < 4 - ! 0
✅ (自左向右运算考虑短路运算) 5>3逻辑值为1 → !0逻辑值为1 → 4-1值为3 → 8<3逻辑值为0 → 1&&0逻辑值为0 (表达式值为0)
if-else语句
🥕 在if语句中的语句列表前后加上花括号,可以防止不小心加了一句代码后,使实际未被包含的语句被包含在某个if语句中的错误。
循环while\for,continue、break
while循环
“当型”循环结构。先判断表达式,后执行语句。
#include <stdio.h>
//计算1到100的和
int main() {
int i = 1,total =0;
while(i<=100){
total += i;
i++;
}
printf("total = %d\n",total);
}
for循环
for(表达式1;表达式2;表达式3) 语句;
⚠️ for循环中必须且只能有两个分号
continue语句
#include <stdio.h>
//计算1到100的和,只求奇数
int main() {
int i,total;
for (i = 1,total = 0;i<=100;i++) {
if(i % 2 == 0){
continue;//直接执行i++,后面语句不执行
}
total += i;
}
printf("total = %d\n",total);
}
在while循环中要谨慎使用continue。
break语句
#include <stdio.h>
//计算1到100的和
int main() {
int i,total;
for (i = 1,total = 0;i<=100;i++) {
if(total > 2000){
break;
}
total += i;
}
printf("total = %d,i = %d\n",total,i);
}
//输出
total = 2016,i = 64