C语言运算符(4.22)
2015-05-01 18:25
106 查看
一 输入和输出
1.整数 [%d]
<1>输入整数
int data;
scanf("%d",data);//错误
scanf("%d",地址值);
scanf("%d",&data);
注意:在C源中获取变量的地址 : &变量名
int data1,data2;
scanf("%d",&data1);
scanf("%d",&data2);
或
scanf("%d%d",&data1,&data2);
例如:
100200回车键 => 错误
=======================================
100 200回车键 => 正确
或
100回车
200回车
<2>输出整数
printf("用户的内容%d\n",变量名);
printf("The data is %d\n",data); "\n:输出结束后,换行"
printf("The data is d% /n",data);//错误
printf("The data is %d \n",&data);//错误
printf("The data is %d %d\n",data1,data2);
练习:
int a,b,c;给三个变量输入值 100 200 300
最后输出a,b,c的值,输出的格式=> a:100 b:200 c:300
点击(此处)折叠或打开
#include <stdio.h>
int main()
{
int a = 100,b = 200,c = 300;
printf("a = %d\n",a);
printf("b = %x\n",b);
printf("c = %o\n",c);
printf("-------------------------------\n");
printf("b = %#x\n",b);
printf("c = %#o\n",c);
return 0;
}
2.浮点数 [%f]
float a;
scanf("%f",&a);
printf("a = %f",a);
printf("a = %.1f",a);//精确到小数点后面1bit
printf("a = %.2f",a);//精确到小数点后面2bit
注意:输入的时候,空格或回车符作为分格符号
练习:
float a,b,c;
输入的值:0.5 0.3 1.4
输出的格式:a = 0.5,b = 0.3,c = 1.4
点击(此处)折叠或打开
#include <stdio.h>
int main()
{
float a,b,c;
scanf("%f%f%f",&a,&b,&c);
printf("a = %.1f,b = %.2f ,c = %.3f\n",a,b,c);
return 0;
}
3.字符[8bit] [%c]
=================================================================================
C语言中的数据:整数 ,小数,字符,字符串
字符: '字母' a(不是字符) 'a'(字符)
注意:
字符实际在内存中存储的时候,是以ASCII碼(整数)
(对字符的编码[0-255]: 0-127 标准的ASCII碼 128-255:IBM公司扩展)的形式存储
Linux 通过man ascii 查看ASCII碼表
需要记住:
'\0'->0 'a'->97 'A'->65 '0':48
'A' + 32 ---> 'a' 'a'- 32-->'A'
'0' - ('0')[48] --> 0 '1' - '0'[48] ---> 1
================================================================================
<1>输入
scanf("%c",&a);
scanf("%c%c",&a,&b);
注意:此时连续读入字符(空格和回车符不作为输入的分割符);
<2>输出
printf("a = %c\n",a);
练习:
char a,b,c,d;
输出的结果a=3 b=a c=4 d=f
练习:
输入整数 200 250 300 给变量 a b c,然后输出
输入字符 '3' '5' 'f' 给变量 d e f,然后输出
输入小数 1.34 5.67 8.12 给变量h i j,然后输出
点击(此处)折叠或打开
#include <stdio.h>
int main()
{
int a,b,c;
char d,e,f;
float h,i,j;
char x;
scanf("%d%d%d",&a,&b,&c);
//读取'\n'
scanf("%c",&x);
scanf("%c%c%c",&d,&e,&f);
scanf("%f%f%f",&h,&i,&j);
printf("a = %d,b = %d,c = %d\n",a,b,c);
printf("d = %c,e = %c,f = %c\n",d,e,f);
printf("h = %.2f,i = %.2f,j = %.2f\n",h,i,j);
return 0;
}
二 C语言运算符
1.自增加[++] ,自减少[--];
int a = 100;
a --; //a = a - 1
a ++; //a = a + 1
注意:
如果自增加/减少 前置的时候,先操作,然后拿值
如果自增加/减少 后置的时候,先拿值,然后操作
b = a --; // b = a, a = a -1
b = --a; // a = a - 1,b = a
练习:
给变量a,b,c输入值100,200,300
然后让a自增加1,赋值给c ,让 b 的值赋值给c,然后自减1 ,最后输出a,b,c的值
2.算术运算符
加 + ,减 - ,乘 * ,除 / , 求余 %
注意:
<1> “/” 如果计算的两个数是整数,则为整除 10 / 3 = 3 , 3 / 10 = 0
<2> "%" 要求计算的两个数必须是整数 10 % 3 = 1 , 3 % 10 = 3
练习:
输入两个数,将计算结果输出
点击(此处)折叠或打开
#include <stdio.h>
int main()
{
int data;
int c = 20;
int b = 7;
data = c + b;
printf("data = %d\n",data);
data = c - b;
printf("data = %d\n",data);
data = c * b;
printf("data = %d\n",data);
data = c / b;
printf("data = %d\n",data);//2
data = c % b;
printf("data = %d\n",data);//6
return 0;
}
3.关系运算符
大于 > , 小于 < ,大于等于 >= ,小于等于 <= ,等于 == ,不等于 !=
注意:
<1>关系运算符运算的结果 : 0[关系不成立] 1[关系成立]
<2>在C语言中非0即为真
4.逻辑运算符
逻辑与 && (且的关系) ,逻辑或 || (或的关系) , 逻辑非 !(假->真,真->假)
注意:
<1>&& 它的两个表达式的值,只要有一个为假,则运算结果为假 (一假必假)
特点[短路]:当第一个表达式计算结果为假的时候,第二个表达式将不会计算
<2>|| 它的两个表达式的值,只要有一个运算结果为真,则最终运算的结果为真(一真必真)
特点[短路]:当第一个表达式计算结果为真的时候,第二个表达式将不会计算
练习:
int a = 'a', b = 'b';
将a和b的值做减法,结果赋值给a,
a = a - b; //a = -1,b = 98
value = a ++ && b --;
printf("value = %d ,a = %d,b = %d\n",value,a,b);//value = 1,a = 0,b = 97
value = a || b ++;
printf("value = %d ,a = %d,b = %d\n",value,a,b);//value = 1,a = 0,b = 98
value = (a > b) || (a <= b);
printf("value = %d ,a = %d,b = %d\n",value,a,b);//value = 1,a = 0,b = 98
value = !a && !b;
printf("value = %d ,a = %d,b = %d\n",value,a,b);//value = 0,a = 0,b = 98
点击(此处)折叠或打开
#include <stdio.h>
int main(int argc, const char *argv[])
{
int value;
int a = 'c';
int b = 100;
value = a++;
printf("value = %d\n",value);//99
value = ++b;
printf("value = %d\n",value);//101
////a = 100,b = 101
value = a > b;
printf("value = %d\n",value);//0
value = a <= b;
printf("value = %d\n",value);//1
value = a != b;
printf("value = %d\n",value);//1
value = a == b;
printf("value = %d\n",value);//0
return 0;
}
5.位运算符
按位与 & , 按位 |, 按位异或 ^,按位反 ~ , 左移 << , 右移 >>
10101
& 01010
--------------------- 有0则为0
00000
10101
| 01010
-------------------- 有1则为1
11111
10101
~
------------------- 0变1,1变0
01010
10101
^ 00110
-------------------- 相同为0,不同为1
10011
<1>思考:如何判断两个数是否相等(不用关系运算符)?
用 "^",如果两个数相等,异或的结果必定是0,否则不为1
10101
^ 10101
--------------
00000
<2>思考:有个data值,我想将它的[0-3]bit变成1010,其它位不变?
data = data & ~0xf
data = data | 0xa
例如:
data = 45;
1 1 1 0 1
~0xf
1 0 0 0 0
&
-----------------------------
1 0 0 0 0
0xa
0 1 0 1 0
|
--------------------------------
1 1 0 1 0
//1 1 1 1 1 1 1
练习:把这个data值[0-6]位变成0100100,其它位不变
data = data & ~0x7f;
data = data | 0x24
===============================================================
逻辑移位[无符号类型变量]:
左移的时候,右边补0
右移的时候,左边补0
算术移位[有符号类型变量]:
正数
左移的时候,右边补0
右移的时候,左边补0
负数
左移的时候,右边补0
右移的时候,左边补1
===============================================================
练习:
char c;
unsigned char a = 0xfd;
char b = 0xfd;
c = a << 3;
c = a >> 3;
c = b >> 3;
c = b << 3;
6.赋值运算符号
= , += , -= ,*= ,/= , %=
a += 3 ;// a = a + 3
a *= 3 ;// a = a * 3
7.三目运算符
表达式1 ? 表达式2 : 表达式3;
结果:
如果表达式1的值为真,则计算结果为表达式2计算的结果,否则为表达式3计算的结果
练习:
1.输入一个数,将这个数[0-3]位变成0101 ,[5-6]变成 00,其它位不变
点击(此处)折叠或打开
#include <stdio.h>
int main()
{
int data;
printf("Input a data : ");
scanf("%d",&data);
data = data & ~0xf;
data = data | 0x5;
//data = data & ~0x60
data = data & ~(0x3 << 5);
printf("data = %#x\n",data);
return 0;
}
2.输入两个数,将这两个数的值交换 [思考:如何不引入第三个变量,完成交换]
a = 3
b = 4
3.输入三个数,将三个数,从小到大,排列,然后输出 [不允许使用if语句]
a = 3;
b = 2;
c = 5;
=>
a = 2;
b = 3;
c = 5;
点击(此处)折叠或打开
#include <stdio.h>
int main()
{
int x;
int t;
int a,b,c;
//20 10 30
printf("Input data : ");
scanf("%d%d%d",&a,&b,&c);
x = a < b ? a : (t = a, a = b, b = t);
printf("x = %d\n",x);
a < c ? a : (t = a, a = c, c = t);
b < c ? b : (t = b, b = c, c = t);
printf("a = %d,b = %d,c = %d\n",a,b,c);
return 0;
}
1.整数 [%d]
<1>输入整数
int data;
scanf("%d",data);//错误
scanf("%d",地址值);
scanf("%d",&data);
注意:在C源中获取变量的地址 : &变量名
int data1,data2;
scanf("%d",&data1);
scanf("%d",&data2);
或
scanf("%d%d",&data1,&data2);
例如:
100200回车键 => 错误
=======================================
100 200回车键 => 正确
或
100回车
200回车
<2>输出整数
printf("用户的内容%d\n",变量名);
printf("The data is %d\n",data); "\n:输出结束后,换行"
printf("The data is d% /n",data);//错误
printf("The data is %d \n",&data);//错误
printf("The data is %d %d\n",data1,data2);
练习:
int a,b,c;给三个变量输入值 100 200 300
最后输出a,b,c的值,输出的格式=> a:100 b:200 c:300
点击(此处)折叠或打开
#include <stdio.h>
int main()
{
int a = 100,b = 200,c = 300;
printf("a = %d\n",a);
printf("b = %x\n",b);
printf("c = %o\n",c);
printf("-------------------------------\n");
printf("b = %#x\n",b);
printf("c = %#o\n",c);
return 0;
}
2.浮点数 [%f]
float a;
scanf("%f",&a);
printf("a = %f",a);
printf("a = %.1f",a);//精确到小数点后面1bit
printf("a = %.2f",a);//精确到小数点后面2bit
注意:输入的时候,空格或回车符作为分格符号
练习:
float a,b,c;
输入的值:0.5 0.3 1.4
输出的格式:a = 0.5,b = 0.3,c = 1.4
点击(此处)折叠或打开
#include <stdio.h>
int main()
{
float a,b,c;
scanf("%f%f%f",&a,&b,&c);
printf("a = %.1f,b = %.2f ,c = %.3f\n",a,b,c);
return 0;
}
3.字符[8bit] [%c]
=================================================================================
C语言中的数据:整数 ,小数,字符,字符串
字符: '字母' a(不是字符) 'a'(字符)
注意:
字符实际在内存中存储的时候,是以ASCII碼(整数)
(对字符的编码[0-255]: 0-127 标准的ASCII碼 128-255:IBM公司扩展)的形式存储
Linux 通过man ascii 查看ASCII碼表
需要记住:
'\0'->0 'a'->97 'A'->65 '0':48
'A' + 32 ---> 'a' 'a'- 32-->'A'
'0' - ('0')[48] --> 0 '1' - '0'[48] ---> 1
================================================================================
<1>输入
scanf("%c",&a);
scanf("%c%c",&a,&b);
注意:此时连续读入字符(空格和回车符不作为输入的分割符);
<2>输出
printf("a = %c\n",a);
练习:
char a,b,c,d;
输出的结果a=3 b=a c=4 d=f
练习:
输入整数 200 250 300 给变量 a b c,然后输出
输入字符 '3' '5' 'f' 给变量 d e f,然后输出
输入小数 1.34 5.67 8.12 给变量h i j,然后输出
点击(此处)折叠或打开
#include <stdio.h>
int main()
{
int a,b,c;
char d,e,f;
float h,i,j;
char x;
scanf("%d%d%d",&a,&b,&c);
//读取'\n'
scanf("%c",&x);
scanf("%c%c%c",&d,&e,&f);
scanf("%f%f%f",&h,&i,&j);
printf("a = %d,b = %d,c = %d\n",a,b,c);
printf("d = %c,e = %c,f = %c\n",d,e,f);
printf("h = %.2f,i = %.2f,j = %.2f\n",h,i,j);
return 0;
}
二 C语言运算符
1.自增加[++] ,自减少[--];
int a = 100;
a --; //a = a - 1
a ++; //a = a + 1
注意:
如果自增加/减少 前置的时候,先操作,然后拿值
如果自增加/减少 后置的时候,先拿值,然后操作
b = a --; // b = a, a = a -1
b = --a; // a = a - 1,b = a
练习:
给变量a,b,c输入值100,200,300
然后让a自增加1,赋值给c ,让 b 的值赋值给c,然后自减1 ,最后输出a,b,c的值
2.算术运算符
加 + ,减 - ,乘 * ,除 / , 求余 %
注意:
<1> “/” 如果计算的两个数是整数,则为整除 10 / 3 = 3 , 3 / 10 = 0
<2> "%" 要求计算的两个数必须是整数 10 % 3 = 1 , 3 % 10 = 3
练习:
输入两个数,将计算结果输出
点击(此处)折叠或打开
#include <stdio.h>
int main()
{
int data;
int c = 20;
int b = 7;
data = c + b;
printf("data = %d\n",data);
data = c - b;
printf("data = %d\n",data);
data = c * b;
printf("data = %d\n",data);
data = c / b;
printf("data = %d\n",data);//2
data = c % b;
printf("data = %d\n",data);//6
return 0;
}
3.关系运算符
大于 > , 小于 < ,大于等于 >= ,小于等于 <= ,等于 == ,不等于 !=
注意:
<1>关系运算符运算的结果 : 0[关系不成立] 1[关系成立]
<2>在C语言中非0即为真
4.逻辑运算符
逻辑与 && (且的关系) ,逻辑或 || (或的关系) , 逻辑非 !(假->真,真->假)
注意:
<1>&& 它的两个表达式的值,只要有一个为假,则运算结果为假 (一假必假)
特点[短路]:当第一个表达式计算结果为假的时候,第二个表达式将不会计算
<2>|| 它的两个表达式的值,只要有一个运算结果为真,则最终运算的结果为真(一真必真)
特点[短路]:当第一个表达式计算结果为真的时候,第二个表达式将不会计算
练习:
int a = 'a', b = 'b';
将a和b的值做减法,结果赋值给a,
a = a - b; //a = -1,b = 98
value = a ++ && b --;
printf("value = %d ,a = %d,b = %d\n",value,a,b);//value = 1,a = 0,b = 97
value = a || b ++;
printf("value = %d ,a = %d,b = %d\n",value,a,b);//value = 1,a = 0,b = 98
value = (a > b) || (a <= b);
printf("value = %d ,a = %d,b = %d\n",value,a,b);//value = 1,a = 0,b = 98
value = !a && !b;
printf("value = %d ,a = %d,b = %d\n",value,a,b);//value = 0,a = 0,b = 98
点击(此处)折叠或打开
#include <stdio.h>
int main(int argc, const char *argv[])
{
int value;
int a = 'c';
int b = 100;
value = a++;
printf("value = %d\n",value);//99
value = ++b;
printf("value = %d\n",value);//101
////a = 100,b = 101
value = a > b;
printf("value = %d\n",value);//0
value = a <= b;
printf("value = %d\n",value);//1
value = a != b;
printf("value = %d\n",value);//1
value = a == b;
printf("value = %d\n",value);//0
return 0;
}
5.位运算符
按位与 & , 按位 |, 按位异或 ^,按位反 ~ , 左移 << , 右移 >>
10101
& 01010
--------------------- 有0则为0
00000
10101
| 01010
-------------------- 有1则为1
11111
10101
~
------------------- 0变1,1变0
01010
10101
^ 00110
-------------------- 相同为0,不同为1
10011
<1>思考:如何判断两个数是否相等(不用关系运算符)?
用 "^",如果两个数相等,异或的结果必定是0,否则不为1
10101
^ 10101
--------------
00000
<2>思考:有个data值,我想将它的[0-3]bit变成1010,其它位不变?
data = data & ~0xf
data = data | 0xa
例如:
data = 45;
1 1 1 0 1
~0xf
1 0 0 0 0
&
-----------------------------
1 0 0 0 0
0xa
0 1 0 1 0
|
--------------------------------
1 1 0 1 0
//1 1 1 1 1 1 1
练习:把这个data值[0-6]位变成0100100,其它位不变
data = data & ~0x7f;
data = data | 0x24
===============================================================
逻辑移位[无符号类型变量]:
左移的时候,右边补0
右移的时候,左边补0
算术移位[有符号类型变量]:
正数
左移的时候,右边补0
右移的时候,左边补0
负数
左移的时候,右边补0
右移的时候,左边补1
===============================================================
练习:
char c;
unsigned char a = 0xfd;
char b = 0xfd;
c = a << 3;
c = a >> 3;
c = b >> 3;
c = b << 3;
6.赋值运算符号
= , += , -= ,*= ,/= , %=
a += 3 ;// a = a + 3
a *= 3 ;// a = a * 3
7.三目运算符
表达式1 ? 表达式2 : 表达式3;
结果:
如果表达式1的值为真,则计算结果为表达式2计算的结果,否则为表达式3计算的结果
练习:
1.输入一个数,将这个数[0-3]位变成0101 ,[5-6]变成 00,其它位不变
点击(此处)折叠或打开
#include <stdio.h>
int main()
{
int data;
printf("Input a data : ");
scanf("%d",&data);
data = data & ~0xf;
data = data | 0x5;
//data = data & ~0x60
data = data & ~(0x3 << 5);
printf("data = %#x\n",data);
return 0;
}
2.输入两个数,将这两个数的值交换 [思考:如何不引入第三个变量,完成交换]
a = 3
b = 4
3.输入三个数,将三个数,从小到大,排列,然后输出 [不允许使用if语句]
a = 3;
b = 2;
c = 5;
=>
a = 2;
b = 3;
c = 5;
点击(此处)折叠或打开
#include <stdio.h>
int main()
{
int x;
int t;
int a,b,c;
//20 10 30
printf("Input data : ");
scanf("%d%d%d",&a,&b,&c);
x = a < b ? a : (t = a, a = b, b = t);
printf("x = %d\n",x);
a < c ? a : (t = a, a = c, c = t);
b < c ? b : (t = b, b = c, c = t);
printf("a = %d,b = %d,c = %d\n",a,b,c);
return 0;
}
相关文章推荐
- C语言运算符的优先级表
- C语言运算符练习
- C语言运算符优先级顺口溜
- C语言运算符优先级
- C语言运算符优先级 详细列表
- C语言运算符优先级 详细列表
- C语言运算符优先级
- C语言运算符
- C语言运算符的“优先级口决”
- c语言运算符优先级
- KeilMDK4.22 编译STM32工程警告:warning: #223-D: function " *** " declared implicitly
- C语言运算符优先级
- [转]说说C语言运算符的“优先级”与“结合性”
- C语言运算符优先级
- c语言运算符优先级(记忆口诀)
- C语言运算符优先级和口诀 (转)
- C语言运算符优先级
- C语言运算符优先级 详细列表
- C语言运算符及其优先级汇总表口诀
- C语言运算符优先级列表