一、运算符
- 算术运算符
+、-、*、/、%、++(自加1)、–(自减1)等等
%:求余、取模(操作数必须为整数)
++:分两种情况。
1、++a
2、a++
例:
下面程序中,后++表示先将a的值打印出来,再令a的值+1存进a中;前++则表示先让a的值+1再将a值打印出来。
#include <stdio.h>
int main(void)
{
int a = 0;
printf("%d\n", a++);
int b = 0;
printf("%d\n", ++b);
return 0;
}
- 再举个例子:
#include <stdio.h>
int main(void)
{
int i = 5;
while (i++ < 10)
{
printf("%d\n", i);
}
return 0;
}
条件:i++ < 10 按照运算优先级 ++ 大于 < ,但是在运算过程中还是按照后++的运算规则,先使用i值,再将i=i+1传递下去。所以运算结果为:6,7,8,9,10。
-
关系运算符
<=、>=、>、<、(==、!=运算等级小于前面的4个运算符
前4个运算符运算顺序为:从左到右 -
逻辑运算符
!、&&、||
运算顺序为:!> && > ||
&&:(表达式1) && (表达式2)
只有表达式1和表达2 都为真,整个式子的值真;如果表达式1的值为假,表达式2不再计算
|| :(表达式1) || (表达式2)
只要有一个表达式的值为真,整个式子的值就为真;两个式子都为假,整个式子才为假;
如果表达式1的值为真,表达式2不再计算
! :!(表达式)
如果表达式为真,结果为假;如果表达式为假,结果为真
- 位运算符
&、|、~、^、<<、>>
&:对应位进行与运算,全1为1,有0为0;
| :对应位进行或运算,全0为0,有1为1;
~:按位取反;
^:对应位进行异或运算,相同为0,不同为1;
<<:有符号数:符号位不变,左边移出的位舍弃,右边空出的位补0;
无符号数:左边移出的位舍弃,右边空出的位补0;
左移n位,相当于乘2的n次方;
>>:有符号数:符号位不变,右边边移出的位舍弃,左边空出的位补符号位;
无符号数:右边边移出的位舍弃,左边空出的位补0;
右移n位,相当于除以2的n次方; - 利用位运算符举个例子:
输入两个整数保存到两个变量,交换两个变量的值,不能用中间变量
(还可以用算术运算符解决)
#include <stdio.h>
int main(void)
{
int x=3, y=4;
x = x ^ y;
y = x ^ y;//x^y^y
x = y ^ x;//x^y^x
printf("%d\n%d\n", x, y);
return 0;
}
- 其他运算符
赋值
= 、+= 、-= 、*= 、/= 、%=
例:a+=1等价于a=a+1;
逗号:,
(式子1),(式子2),(式子3)
运算顺序为:从左往右
#include <stdio.h>
int main(void)
{
int a = 3;
a = ((a + 3), (a++), (a + 5));
printf("%d\n", a);
return 0;
}
- sizeof():长度运算符
当sizeof后接的是变量或者常数时,可以省去括号;当sizeof后接的是数据类型(int或char等等)则必须加上括号。 - ?:(三目运算符)
先计算表达式1,如果结果为真,表达式2的值就是整个式子的值;否则(表达式1为假),表达式3的值就是整个式子的值。
二、控制流
- 循环控制
循环控制分三种,while、do…while、和for
讨论其中一种:while
#include <stdio.h>
int main(void)
{
int i;
while (i++ < 100)//入口条件
{
printf("%d\n", i);//打印出每次循环的i值
if (i == 5)//如果i=5,跳出while循环
break;
}
return 0;
}
- 其中for(;;)等价于while(1)
- 分支
重点讨论一下:switch-case
switch(变量或表达式) //表达式或变量必须是整型
{
case 整型常量1:
语句1;
语句2;…
break;
case 整型常量2:
语句3;
语句4;…
break;
case 整型常量3:
语句5;
语句6;…
break;
default:
语句n;
} - 举个例子:打印输出如下图形(利用循环控制语句完成)
#include <stdio.h>
int main(void)
{
char x = 65;
int i, j;
for (i = 0; i < 6; i++) //控制行数
{
for (j = 0; j < 5 - i; j++) //控制空格
{
printf(" ");
}
for (j = 0; j < (2*i-1)/2; j++) //控制字符
{
printf("%c", x++);
}
for (j = (2*i-1)/2; j < 2*i-1; j++) //控制字符
{
printf("%c", x--);
}
x = 65;
printf("\n");
}
return 0;
}
- 以上内容都是自己的理解,如有错误,还望指出