课堂笔记两次合集
3.运算符
目录
3.运算符
3.1.算术运算符
3.2.赋值运算符
3.3.增1、减1运算符
3.4.关系运算符
3.5.逻辑运算符
3.6.条件运算符
3.7.类型转换
3.8.基本输入、输出函数
3.8.1.字符输出函数putchar()
3.8.2.字符输入函数getchar()
3.8.3.格式化输入函数printf()
3.8.4.格式化输出函数scanf()
3.1.算术运算符
算术运算符及其含义
| 运算符 | 类型 | 运算 | 含义 | 
|---|---|---|---|
| - | 单目 | -x | 取负值 | 
| * | 双目 | x*y | 乘法运算 | 
| / | 双目 | x/y | 除法运算 | 
| % | 双目 | x%y | 求余(模)运算 | 
| - | 双目 | x-y | 减法运算 | 
| + | 双目 | x+y | 加法运算 | 
算术运算符使用时需要注意的点:
①两个整数做除法运算,结果会舍去小数部分。
#include <stdio.h>
#include <stdlib.h>
int main()
{
    printf("%d",6/4);
    return 0;
}
运行结果为:

结果果然只保留了整数部分的1。
BUT,当运算中有一个数为实型数据,则结果为double型。
#include <stdio.h>
#include <stdlib.h>
int main()
{
    printf("%d",6.0/4);
    return 0;
}
运行效果则变为:

②%求余运算限定参与运算的两个操作数为整数。左边叫被除数,右边叫除数。
运算时结果为余数,且余数的符号与被除数的符号相同。
#include <stdio.h>
#include <stdlib.h>
int main()
{
    printf("%d",-6%4);
    return 0;
}
运行效果为:

算术运算符的优先级与结合性
| 运算符 | 类型 | 优先级 | 结合性(运算方向) | 
|---|---|---|---|
| - | 单目 | 高 | 从右向左 | 
| */% | 双目 | 较高 | 从左向右 | 
| +- | 双目 | 最低 | 从左向右 | 
例子:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
    int a=1,b=-4,c=3;
    int x1,x2;
    x1=(-b+sqrt(b*b-4*a*c))/(2*a);
    x2=(-b-sqrt(b*b-4*a*c))/(2*a);
    printf("X1=%d\nX2=%d",x1,x2);
    return 0;
}运行可得:

该程序中sqrt为计算平方根的数学库函数。
sqrt需要在程序的开头加上编译预处理命令
3.2.赋值运算符
- 简单的赋值运算符“=” 变量名=表达式; “=”右边为任何合法的表达式,也可以是另一个赋值表达式,即“=”可以连用。 赋值只能左边是变量
- 复合赋值运算符 在简单赋值运算符=前加一个双目运算符,就构了复合赋值运算符。
变量名    复合赋值运算符    表达式例如:a+=3等价于a=a+3;
3.3.增1、减1运算符
i++与++i是有区别的。
i++是在使用变量i之后,再自身加1;
++i是在使用变量i之前自身加上1
※它们只能运用于简单的变量,常量和表达式是不能做这两种运算的,如8++和(m+n)++都是错的。运算方向是“自左向右”。例如:
int i = 3;
printf(“%d\n”,-i++);程序运行结果:-i++的值为-3,i的值为4。
3.4.关系运算符
关系运算符
| 运算符 | 运算 | 含义 | 
|---|---|---|
| < | x<y | 小于 | 
| > | x>y | 大于 | 
| <= | x<=y | 小于等于 | 
| >= | x>=y | 大于等于 | 
| == | x==y | 等于 | 
| != | x!=y | 不等于 | 
用于判别真假,用0表示假,用非0表示真。
计算关系表达式的值:成立是则运算结果为1,表示逻辑为真;反之,结果为0,表示逻辑为假。
判断关系表达式的值:用0表示假,用非0表示真。
3.5.逻辑运算符
| 运算符 | 类型 | 运算 | 含义 | 优先级 | 优先级 | 
|---|---|---|---|---|---|
| ! | 单目 | !x | 逻辑非 | 高 | 从右到左 | 
| && | 双目 | x&&y | 逻辑与 | 较高 | 从左到右 | 
| || | 双目 | x||y | 逻辑或 | 低 | 从左到右 | 
用逻辑运算符连接操作数组成的表达式称为逻辑表达式,逻辑表达式的值只有真假两值之分,用1表示真,用0表示假。
3.6.条件运算符
是C语言中唯一的一个三目运算符。格式如下:
表达式1?表达式2:表达式3在条件表达式中,第一个和第二个表达式用一个?分隔开,
第二个和第三个用:分隔开,
条件表达式执行过程如下:
- 求第一个表达式的值。
- 当第一个表达式的值不为0时,求第二个表达式的值;当第一个表达式的值为0时,求第三个表达式的值。
- 条件表达式的值是上步所求的第二个或第三个表达式的值。
例如:x>y?100:500
解析:如果x>y成立,则条件表达式的值为100;否则条件表达式的值为500.
3.7.类型转换
表达式中的类型自动转换规则

3.8.基本输入、输出函数
3.8.1.字符输出函数putchar()
putchar(ch);示例:
#include <stdio.h>
#include <stdlib.h>
int main()
{ 
    char a = 's';
    int i = 115;
    putchar(a);
    putchar('\n');
    putchar('s');
    putchar('\n');
    putchar(i);
    putchar('\n');
    putchar(115);
    putchar(10);
    return 0;
}运行效果:
 
由上可知,putchar是专门输出字符的输出函数。
3.8.2.字符输入函数getchar()
getchar(ch);示例:
#include <stdio.h>
#include <stdlib.h>
int main()
{
    char a,b,c;
    a=getchar();
    b=getchar();
    c=getchar();
    putchar(a);
    putchar(b);
    putchar(c);
    putchar('\n');
    return 0;
}运行效果:
当用户输入sun时,

当用户输入s u n时,

这说明,一个getchar只能接收一个字符,而且空格也算一个字符。
3.8.3.格式化输入函数printf()
printf("格式控制",输出值参数表);3.8.4.格式化输出函数scanf()
scanf("格式控制",参数地址表);&为取址符。
❤注意:
- 在输入多个整型数据或实型数据时,如果相邻的两个格式转换说明符之间不指定分隔符(如逗号、冒号等),则相应的两个输入数据之间可以用一个或若干个空格、Enter键、或制表符(Tab)作为间隔,但输入多个字符型数据时,数据之间的分隔符作为有效的输入字符。
例如:
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int a;
    char c;
    scanf("%d",&a);
    scanf("%c",&c);
    printf("a=%d\n",a);
    printf("c=%c\n",c);
    return 0;
}
当输入10a时,

当输入10 a时,

由此可以看出注意中所描述的要点。



















