一、输入输出函数
1、标准输出函数
printf("格式符+转义字符",输出表象);
格式符:
%d,十进制输出有符号数
%ld,十进制输出有符号长整型
%f,输出float类型
%lf,输出double类型
%c,输出字符类型
%s,输出字符串
%u,无符号输出整形的十进制
%#X/x:输出十六进制(无符号) ----->#输出前导符
%#o:输出八进制(无符号)
%.nf:输出小数点后n位,不足补0
%-nd:以n个数据宽度靠左对齐的输出,不足补空格,超出全部输出(%nd:靠右对齐)
%p:输出内存地址
转义字符:
\n:换行
\t:制表符
\r:回车,回到当前行的首位进行输出
\b:后退一格,回到上一个位置进行输出
2、标准的输入函数
scanf("格式符",变量的地址);
注意事项:
1、逗号后面的内容,是变量的地址
2、scanf的双引号内不要加\n
3、scanf是严格控制格式的函数,终端输入的格式要和双引号内的格式严格一致
scanf连续获取字符时吸收垃圾字符的方法:
1*、使用scanf严格控制格式的特点吸收垃圾字符,包括"%c %c %c"在输入多个字符间加空格吸收垃圾字符,或者分开输入,依次在%c前加空格,本质相同
2、用%*c抑制字符吸收一个字符,不推荐使用是因为用%*c吸收字符后无法获取
3*、使用getchar()吸收,与抑制字符不同的是可以通过定义变量得到getchar吸收的字符
3、单个字符的输入函数getchar()
int getchar(void);
功能: 从终端获取单个字,并返回该字符ASCII码
4、单个字符的输出函数putchar()
int putchar(int c);
输出单个字符
二、运算符
1、算术运算符
+ - * / %
/:如果两边都是整形,则取整,如果两边都是浮点型,则整除
%:要求两边都是整形,
2、赋值运算符
= += -= *= ...
=:等号左边叫左值,右边叫右值,a=b就是把b的值赋给a
a+=b相当于a=a+b,把a+b的值赋给a,其余同理
3、自增自减运算符
a++ ++a a-- --a
++a和a++都可以实现a的自增,但步骤不同
++a是先自增,再把自增,再把自增后的值给b,所以++a和a都比原来+1
a++是先存原先a的值,再对a进行自增,最后把之前存的值给b,所以a++还是原来a的值,而a已经+1了
4、关系运算符
== != >、>= <、<=
==:两个等号是相等,=:一个等号是赋值
关系运算符通常用于有范围的关系大小判断
5、逻辑运算符
&& || !
&&:逻辑与,运算符两侧运算符都是真,结果才为真
||:逻辑或,都为假,才为假
!:a为0,则!a为1,非0即真
逻辑短路现象
逻辑与:左侧表达式为假,则结果为假,不再往右执行表达式
逻辑或:左侧表达式为真,则结果为真,不再往右执行表达式
6、条件运算符
表达式1?表达式2:表达式3
执行逻辑: 如果表达式1成立,执行表达式2,否则执行表达式3
a>b?a:b --->如果a>b,返回a,否则返回b
条件运算符是C语言中唯一一个三目运算符
7、逗号运算符
(表达式1,表达式2,表达式3,·····)
执行逻辑:
从左至右每一个表达式都会执行,取最右侧表达式的结果
8、sizeof运算符
sizeof,是C语言中的一个关键字,其求数据的大小,以字节为单位
sizeof()的结果,64位,unsigned long int; 32位,unsigned int;
求整形长度:sizeof(s)/sizeof(s[0])或sizeof(s)/sizeof(int)
求字符串长度,是计算整个字符串数组的长度,而不是到'\0'截止的长度
9、位运算符
>> << & | ^ ~
>>:右移运算符,高位补符号位
<<:左移运算符,低位补0
&、|:按位与或,逻辑与逻辑与或相同
^:a^b,a异或b
~:按位取反,对每个位置都取反
位运算的方法:
0与任何数都是0,与运算用于给某一位置0
1或任何数都是1,或运算用于给某一位置1
0异或任何数都数本身,1异或任何数都是取反
10、运算符的优先级
()优先级最高,逗号运算符优先级最低
单算移关与,异或逻条符
作业:
1.思维导图:有道云笔记
2-4有道云笔记
上课做练习的错误与总结:
1、做了前面带参宏定义带输入的简易计算器,
#define MUL(a,b) float(a/b)
这里用显性强转float应该是(float)a/b
2、做逻辑与或运算时应该按照与、或分块短路
3、!c不会改变c的值
4、预习时,遇到的“段错误,核心已转储”后面发现是"i = 0"
=是赋值,==才是相等,这样编译没有语法错误,把常量往前移可以避免。