内容纲要
运算符
算数运算符
常用运算符如下表
运算符 | 描述 |
---|---|
+ | 把两个操作数相加 |
– | 从第一个操作数中减去第二个操作数 |
* | 把两个操作数相乘 |
/ | 分子除以分母(整型整除后取整) |
% | 取模运算符,整除后的余数 |
++ | 自增运算符,整数值增加 1相当于+=1 |
— | 自减运算符,整数值减少 1相当于-=1 |
算术表达式:
用算术运算符和括号将操作数连接起来符合C语言语法的表达式,如a*b+c-a/6。
- 在表达式求值时,先按照运算符的优先级别高低次序执行,如果优先级别相同,则按照结合方向执行。
- 算术运算符的结合方向是“自左至右”,即先与左面的运算符结合的左结合性。
i++
与i--
先用值再操作,++i
与--i
先操作再用值,仅同行语句适用。- ++与–的结合方向是自右至左的右结合性,只能用于变量。
关系运算符
运算符 | 描述 |
---|---|
== | 检查两个操作数的值是否相等,如果相等则条件为真。 |
!= | 检查两个操作数的值是否相等,如果不相等则条件为真。 |
> | 检查左操作数的值是否大于右操作数的值,如果是则条件为真。 |
< | 检查左操作数的值是否小于右操作数的值,如果是则条件为真。 |
>= | 检查左操作数的值是否大于或等于右操作数的值,如果是则条件为真。 |
<= | 检查左操作数的值是否小于或等于右操作数的值,如果是则条件为真。 |
逻辑运算符
运算符 | 描述 |
---|---|
&& | 称为逻辑与运算符。如果两个操作数都非零,则条件为真。 |
|| | 称为逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真。 |
! | 称为逻辑非运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假。 |
位运算符
将数值的二进制数进行按位运算:
p | q | p & q | p | q | p ^ q |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 1 | 1 |
赋值运算符
运算符 | 描述 |
---|---|
= | 简单的赋值运算符,把右边操作数的值赋给左边操作数 |
+= | 加且赋值运算符,把右边操作数加上左边操作数的结果赋值给左边操作数 |
-= | 减且赋值运算符,把左边操作数减去右边操作数的结果赋值给左边操作数 |
*= | 乘且赋值运算符,把右边操作数乘以左边操作数的结果赋值给左边操作数 |
/= | 除且赋值运算符,把左边操作数除以右边操作数的结果赋值给左边操作数 |
%= | 求模且赋值运算符,求两个操作数的模赋值给左边操作数 |
<<= | 左移且赋值运算符 |
>>= | 右移且赋值运算符 |
&= | 按位与且赋值运算符 |
^= | 按位异或且赋值运算符 |
|= | 按位或且赋值运算符 |
- 在进行复合运算时,如
x*=y+1
相当于x=x*(y+1)
。 - 赋值运算符具有右结合性,
y=(x=(z=1))
赋值运算符可作为运算符。
三元运算符
格式:
表达式?值1 : 值2;
判断表达式,如果为真结果为值1,如果为假结果为值2。
逗号运算符
逗号运算符又称为"顺序求值运算符",用一个逗号将两个表达式连接起来。
格式:
表达式1,表达式2
将表达式1先进行求值,然后进行表达式2的求值,逗号表达式的值就是表达式2的值。
#include <stdio.h>
int main()
{
int a,b;
b=(a = 3*2,a*2);
printf("%d\n",a);
printf("%d",b);
return 0;
}
结果如下:
6
12
其他运算符
运算符 | 描述 |
---|---|
sizeof() | 返回变量所占的字节大小,也可直接传入数据类型。 |
& | 返回变量的地址。 |
* | 指向一个变量。 |
优先级与结合性
优先级 | 运算符 | 名称或含义 | 使用形式 | 结合方向 | 说明 |
---|---|---|---|---|---|
1 | [] | 数组下标 | 数组名[常量表达式] | 左到右 | |
() | 圆括号 | (表达式)/函数名(形参表) | |||
. | 成员选择(对象) | 对象.成员名 | |||
-> | 成员选择(指针) | 对象指针->成员名 | |||
++ | 后置自增运算符 | ++变量名 | 单目运算符 | ||
— | 后置自减运算符 | –变量名 | 单目运算符 | ||
2 | – | 负号运算符 | -表达式 | 右到左 | 单目运算符 |
(类型) | 强制类型转换 | (数据类型)表达式 | |||
++ | 前置自增运算符 | 变量名++ | 单目运算符 | ||
— | 前置自减运算符 | 变量名– | 单目运算符 | ||
* | 取值运算符 | *指针变量 | 单目运算符 | ||
& | 取地址运算符 | &变量名 | 单目运算符 | ||
! | 逻辑非运算符 | !表达式 | 单目运算符 | ||
~ | 按位取反运算符 | ~表达式 | 单目运算符 | ||
sizeof | 长度运算符 | sizeof(表达式) | |||
3 | / | 除 | 表达式/表达式 | 左到右 | 双目运算符 |
* | 乘 | 表达式*表达式 | 双目运算符 | ||
% | 余数(取模) | 整型表达式/整型表达式 | 双目运算符 | ||
4 | + | 加 | 表达式+表达式 | 左到右 | 双目运算符 |
– | 减 | 表达式-表达式 | 双目运算符 | ||
5 | << | 左移 | 变量<<表达式 | 左到右 | 双目运算符 |
>> | 右移 | 变量>>表达式 | 双目运算符 | ||
6 | > | 大于 | 表达式>表达式 | 左到右 | 双目运算符 |
>= | 大于等于 | 表达式>=表达式 | 双目运算符 | ||
< | 小于 | 表达式<表达式 | 双目运算符 | ||
<= | 小于等于 | 表达式<=表达式 | 双目运算符 | ||
7 | == | 等于 | 表达式==表达式 | 左到右 | 双目运算符 |
!= | 不等于 | 表达式!= 表达式 | 双目运算符 | ||
8 | & | 按位与 | 表达式&表达式 | 左到右 | 双目运算符 |
9 | ^ | 按位异或 | 表达式^表达式 | 左到右 | 双目运算符 |
10 | | | 按位或 | 表达式|表达式 | 左到右 | 双目运算符 |
11 | && | 逻辑与 | 表达式&&表达式 | 左到右 | 双目运算符 |
12 | || | 逻辑或 | 表达式||表达式 | 左到右 | 双目运算符 |
13 | ?: | 条件运算符 | 表达式1? 表达式2: 表达式3 | 右到左 | 三目运算符 |
14 | = | 赋值运算符 | 变量=表达式 | 右到左 | |
/= | 除后赋值 | 变量/=表达式 | |||
*= | 乘后赋值 | 变量*=表达式 | |||
%= | 取模后赋值 | 变量%=表达式 | |||
+= | 加后赋值 | 变量+=表达式 | |||
-= | 减后赋值 | 变量-=表达式 | |||
<<= | 左移后赋值 | 变量<<=表达式 | |||
>>= | 右移后赋值 | 变量>>=表达式 | |||
&= | 按位与后赋值 | 变量&=表达式 | |||
^= | 按位异或后赋值 | 变量^=表达式 | |||
|= | 按位或后赋值 | 变量|=表达式 | |||
15 | , | 逗号运算符 | 表达式,表达式,… | 左到右 | 从左向右顺序运算 |
输入与输出
C语言中的标准输入/输出库需要使用
stdio.h
文件,在使用输入\输出时必须使用预处理命令#include <stdio.h>
或#include "stdio.h"
。(printf
与scanf
函数使用频繁,允许在使用时不写预处理命令)
putchar
输出单个字符
格式:
putchar(字符变量);
getchar
从键盘输入一个字符,赋值给字符变量或整型变量。
格式:
char c = getchar();
gets
从键盘输入一行,直到遇到终止符或
EOF
为止。
格式:
char a[1024];
gets(a);
puts
将一个字符串输出
格式:
puts("HelloWorld!");
scanf
格式输入字符串,按指定的格式将数据输入
格式:
scanf("格式控制字符串",变量地址);
变量地址由地址运算符"&"后跟变量名组成
格式字符串格式:
%[*][输入数据宽度][长度]类型
*
符用来表示该输入项,读入数据后不赋予相应的变量,跳过输入值。- 输入宽度:用十进制整数指定输入宽度(字符数),超出了字符宽度,超出部分被截去。
- 长度:长度格式字符为
l
、h
,l
表示输入长整型数据如(“%ld”)双精度浮点数(“%lf”),h
表示输入短整型数据。 - 类型
格式字符 | 意义 |
---|---|
d | 输入十进制整数 |
o | 输入八进制整数 |
x | 输入十六进制整数 |
u | 输入无符号十进制整数 |
f或e | 输入浮点数 |
c | 输入单个字符 |
s | 输入字符串 |
printf
格式输出字符串,按指定的格式将数据输出
格式:
printf("格式控制字符串",变量);
格式字符串格式:
%[标志][输出最小宽度][.精度][长度]类型
[]为可选项
- 标志
标志 | 意义 |
---|---|
– | 结果左对齐,右边填空格 |
+ | 输出符号(正好或负号) |
空格 | 输出值为正时冠以空格,为负时冠以负号。 |
# | 对c,s,d,u类型无影响;对o类输出时加前缀o,对x类,在输出时加前缀0x,对e,g,f类,结果有小数时才给出小数点。 |
-
输出最小宽度:用十进制整数来表示输出的最小位数。实际位数多于定义的宽度,按实际位数输出。若实际位数少于定义的宽度,则补以空格或0。
-
精度:精度格式符以
.
开头,后跟十进制整数。如果输出数字,表示小数的位数。输出的为字符,表示输出字符的个数。若实际位数大于定义的精度,截去超过的部分。 -
长度:格式符为
h
、l
两种,h
表示按短整型量输出,l
表示按长整型量输出。 -
类型
类型格式字符 | 意义 |
---|---|
d | 以十进制形式输出带符号整数(整数不输出符号) |
o | 以八进制形式输出无符号整数(不输出前缀0) |
x,X | 以十六进制形式输出无符号整数(不输出前缀0x) |
u | 以十进制形式输出无符号整数 |
f | 以小数形式输出单、双精度浮点数 |
e,E | 以指数形式输出单、双精度浮点数 |
g,G | 以%f或%e中较短的输出宽度输出单、双精度浮点数 |
c | 输出单个字符 |
s | 输出字符串 |
留言