一、输入输出函数
1、输出函数
可以取man手册查看printf函数的原型
man 3 printf
函数原型: int printf(const char *format, ...);
printf("格式符",输出表象); ---->一个格式符对应一个输出表象
"":可以放格式符,转义字符(\n···),字符串(直接输出)

2、输出函数
函数原型: int scanf(const char *format, ...);
scanf("格式符",变量的地址); ---->有几个格式符就要跟几个变量的地址,scanf()的""内一般不放\n &a; ----->取变量的地址 scanf输入结束时,直接按回车
scanf是一个严格控制格式的函数: 双引号内写了什么,用户终端输入就输入什么
(1)scanf函数获取数据的特点
scanf在获取多个数据时,以空格、tab键和回车作为数据分隔的标志
回车在每一个格式符都获取到数据后,回车作为scanf结束的标志,如果有格式符没有获取到数据,回车作为数据分隔的标志。
(2)scanf吸收垃圾字符的问题
在使用scanf获取字符类型数据时,存在需要吸收垃圾字符的问题
因为空格、tab键和回车都是一个字符,会被%c获取到

(3) 字符类型的输出函数
char c1 = 'h';
putchar(c1); //输出h字符
putchar(10); //10是\n的ascii码值,输出换行
putchar('\n'); //输出字符'\n',就是换行
(4)字符类型的输入函数
char c1;
c1 = getchar();
putchar(c1); //输出h字符
putchar(10); //10是\n的ascii码值,输出换行
二、运算符
1、算数运算符
格式:a#b (#表示运算符)
+、-、* 和数学中的运算完全一致
/ 如果a和b都是整形,结果为除法取整数部分的结果只要a和b 中有一个是浮点型,结果为带小数的整除结果(除数不能为0)
% a和b必须都是整数(除数不能为0)
2、自增自减运算符
++i、i++、--i、i--
++i:获取到的是i自增1后的值,i本身发生改变
i++:获取到的是i自增前的值,i本身也发生了改变
--i:获取到的是i自减1后的值,i本身发生改变
i--:获取到的是i自减前的值,i本身发生改变
(如果运算符在前面就获取运算后的结果,如果运算符在后面就获取运算前的结果。)
3、赋值运算符
a=b; --->将b的值赋值给a
a+=2; --->a=a+2;
a-=2; --->a=a-2;
a*=2; --->a=a*2;
a/=2; --->a=a/2;
a%=2; --->a=a%2;
·····
4、关系运算符
关系运算的结果是一个固定的值,真值/假值,1/0
计算机中非0为真,0为假
0.1(真值)
a>b
a<b
a>=b
a<=b
a!=b 判断a和b不相等
a==b 判断a和b相等,一个=是赋值,两个==是判断
5、条件运算符
是C语言中的唯一一个三目运算符
表达式1?表达式2:表达式3
逻辑: 如果表达式1成立,执行表达式2,否则执行表达式3
int i=9,j=4;
printf("%d\n",i<j?i++:++j); //5 ++j执行
printf("%d\n",j==i?j++:--i); //8 --i执行
printf("%d\n",--i?i>j:j); //1 ,--i是7 真值表达式成立,执行i>j
printf("i=%d\n",i); //7
printf("j=%d\n",j); //5
6、逻辑运算符
逻辑运算的结果是真值/假值, 1/0
|
&&(逻辑与) |
表达式1&&表达式2 |
两个表达式同时为真,结果为真 |
|
||(逻辑或) |
表达式1||表达式2 |
只要有一个表达式为真,结果为真 |
|
!(逻辑非) |
!表达式 |
非真即假,非假即真 |
逻辑运算存在逻辑短路现象:
逻辑与运算时,如果运算符左侧的表达式结果为0,右侧的表达式不会执行
逻辑或运算时,如果运算符左侧的表达式结果为1,右侧的表达式不会执行
7、逗号运算符
格式: (表达式1,表达式2,表达式3,表达式4,····表达式n)
执行逻辑: 逗号运算符的每一个表达式都会执行,取最右侧表达式的结果
8、sizeof()运算符
sizeof说是C中的一个关键字也可以,sizeof的使用类似于函数调用的格式
格式: sizeof(数据); --->数据可以是数据类型也可以是变量名也可以是常量
功能: 求()内内容所占的内存大小,以字节为单位
9、位运算符
对二进制位进行运算,bit位如果没有特殊说明,默认从最右侧一位开始是第0位
右移n位,表示除2^n
左移n位,表示乘2^n
|
>>(右移运算符) | a>>n |
a向右移动n个bit位,高位补符号位 |
| <<(左移运算符) |
a<<n |
a向左移动n个bit位,低位补符号位 |
|
^(异或) |
a^b |
a和b按位异或 (同0异1) |
|
~(取反) |
~a |
每一个bit位按位取反 |
|
&(按位与) |
a&b |
两个bit位有一个0结果为0 两个都为1结果为1 |
|
|(按位或) |
a|b |
两个bit位只要有一个为1结果为1 两个都是0结果为0 |
位运算进场用来执行对某一位置0和置1的操作
eg:已知一个数a,想要给a的第13个bit置0,给a的第5个bit置1,要求操作不能修改其他bit位的值
a&=~(0x1a|=(0x1
按位与运算可以实现对bit位置0的操作
按位或运算可以实现对bit位置1的操作
10、运算符优先级
单算移关与,异或逻条赋
如果不想记优先级顺序,加括号
后缀自增和后缀自减的优先级更高

作业:
1、已知变量a,给a的第6个bit位置0,给a的第4个bit位置1,给a的第5个bit位取反(异或)。

2、 终端输入学生成绩,判断成绩等级[100,90]A,(90,80]B,(80,70]C,(70,60]D,(60,0]不及格,需要对成绩合理性进行判断,如果成绩大于100或者小于0成绩不合理。

414

被折叠的 条评论
为什么被折叠?



