算术运算符和表达式
运算符 | 含义 | 操作数 | 结合性 |
---|---|---|---|
- | 取相反数 | 一元 | 从右向左 |
* | 乘 | 二元 | 从左向右 |
/ | 除 | 二元 | 从左向右 |
+ | 加 | 二元 | 从左向右 |
- | 减 | 二元 | 从左向右 |
注:1.求余运算限定两个操作数必须为整型;
2. 复合的赋值运算
3. 增1 和减1 运算符
例如:11%5=1 11%(-5)=1 (-11)%5= -1
【例题】计算并输出一个三位整数的个位、十位和百位数字之和。
# include<stdio.h>
int main()
{
int b0,b1,b2,sum;
int x;
printf("Please input x(100<=x<=999):\n");
scanf("%d",&x);
b0 = x/100;
b1 = (x/10)%10;
b2 = x%10;
sum = b2+b1+b0;
printf("个位数字为%d\n",b0);
printf("十位数字为%d\n",b1);
printf("百位数字为%d\n",b2);
printf("sum=%d\n",sum);
return 0;
}
逻辑运算符与表达式
逻辑运算符 | 运算数 | 含义 | 结合性 |
---|---|---|---|
! | 单目 | 非 | 从右向左 |
&& | 双目 | 与 | 从左向右 |
II | 双目 | 或 | 从左向右 |
注:
- 逻辑与:全为真则为真;
- 逻辑或:有真则真
- 逻辑非:真变假,假变真。
- 运算符&& 与运算符 || 都具有“短路”特性。
【题目】编程输入三角形的三条边a,b,c ,判断它们能否构成三角形。指出是何种三角形。
/*
题目:下面程序用于输入三角形的三条边a,b,c判断它们能否构成三角形,若能,则指出是何种三角形:
等腰三角形、直角三角形、等腰直角三角形,一般三角形。若不能,则输出“不是三角形\n”
*/
# include <stdio.h>
# include <math.h>
# define EPS 1e-1 //直接判断经计算得到的两个实型数是否相等的精度要求,不高时是可取10^(-1)
int main (void)
{
float a,b,c;
int flag = 1; //置标志变量flag为非0值
printf ("Input a,b,c:");
scanf ("%f,%f,%f",&a,&b,&c);
if (a+b>c && a+c>b && b+c>a) //判断是否满足三角形的基本要求,若是,进而判断三角形的类型;不是则执行else,输出“不是三角形”;
{
if (fabs(a-b)<=EPS || fabs(a-c)<=EPS || fabs(b-c)<=EPS)
{
printf ("等腰");
flag = 0;
}
else if (fabs(a-b)<=EPS && fabs(a-c)<=EPS && fabs(b-c)<=EPS)
{
printf ("等边");
flag = 0;
}
if (fabs(a*a+b*b-c*c) <= EPS || fabs(a*a+c*c-b*b) <= EPS || fabs(b*b+c*c-a*a) <= EPS) //等腰与直角不是非此即彼的关系,应当用并列的if来判断
{
printf ("直角");
flag = 0;
}
if (flag)
{
printf ("一般");
}
printf ("三角形\n"); //在类型后加“三角形”三个字,以便当是三角形是输出的字样为:**三角形。
}
else
{
printf ("不是三角形\n");
}
return 0;
}
位运算
位运算就是对字节或字内的二进制数位进行测试、抽取、设置或移位等操作。其操作对象只能是char与int类型。
运算符 | 含义 | 运算数 | 结合数 | 用途 |
---|---|---|---|---|
~ | 按位取反 | 单目 | 从右向左 | 使操作数的各位取反,即1变为0,0变为1 |
<< | 左移位 | 双目 | 从左向右 | x<<n,把x的每一位向左平移n位,右边空位补0 |
>> | 右移位 | 双目 | 从左向右 | x>>n,表示x的每一位向右平移n位 |
& | 按位与 | 双目 | 从左向右 | 用于对字节中的某位清0,即两个操作数中的任意一位为0,则对应为结果为0 |
^ | 按位异或 | 双目 | 从左向右 | 若两个操作数对应位不一样,则结果对应位为1 |
I | 按位或 | 双目 | 从左向右 | 使字节中的某位置为1,即两个操作数中的任意一位为1,则对应为结果为1 |
注:1. 无论是左移位还是右移位,从一端移走的位不移入另一端,移除的位信息都丢失了。