开头声明(超小声)
个人觉得,进入本篇,难度比前两篇又更上一个台阶。所以在讲解之外,会附上一些题目当作巩固训练。
废话不多说,直接开始我们今天的内容!
一.操作符(运算符)
0.操作符的分类
主要的操作符有以下几类
算术操作符
赋值操作符
单目操作符
关系操作符
逻辑操作符
条件操作符
移位操作符
位操作符
作为初步学习的我们,今天先学习前三者即算术操作符,赋值操作符和单目操作符
1.算术操作符
a. + 和 -
额,这个就不用解释了。。。
b. *
注意,在计算机中打不出我们在数学中写的乘号,所以用*表示
c. /
在C语言中 ,整数除法是整除,只会返回整数部分,会丢弃小数部分
比如,看以下代码
这里我们验证了整数的除法确实是整数
再看以下代码,看我们把整数改为浮点数的结果
我们发现此时进行了浮点数除法
大家下去可以试一下将前面的数改成浮点数或者两个都改成浮点数,看看结果是否还会一致
d. %
这个运算符表示的是取模运算,且这个运算符只能用于整数!不能用于浮点数
tip:
负数取模的规则是:结果的正负号又第一个运算符的正负号决定
比如看下面这个代码
示例中,第一个数的正负号就决定了结果的正负号。
重点:1.除了%操作符以外,其他几个操作符可以作用于整数和浮点数
2.%操作符的两操作数必须是整数,返回的是整除之后的余数
3.对于 / 操作符,如果两个操作数都为整数,执行整数除法。但是只要有浮点数执行的就是浮点数除法
4.这些操作符都是双目操作符(涉及两个对象的操作符)
2.赋值操作符
这个比较简单,简单来说,就是可以对变量进行赋值
除此之外,赋值操作符可以连续使用,比如:
不过,我们一般还是尽量拆开来写,这种连续赋值的写法不方便观察代码的执行细节,容易出错
下面再讲一个复合赋值符
在我们写代码的时候,我们经常可能对一个数进行自增,自减的操作
而C语言提供了复合赋值符,包括:
+= -= *= /= %=
>>= <<= &= |=
这里的前五个比较号理解,比如a+=3就是a=a+3的意思,另外四个同理
至于下面的四个,留到后面的博客再去说吧
3.单目操作符:++,--,+,-
我们在前面介绍的操作符都是双目操作符,它们是有两个操作数的
C语言中还有一些操作符只有一个操作数,它们就被称为单目操作符
++ -- +(正) -(负)就是单目操作符
其中++ --又分为前置++,后置++ 以及前置--和后置--
a.前置++,前置--
口诀:先+1,后使用/先-1,后使用
代码示例如下
前置与后置原理一致,理解其中一个另一个也一定能理解
b.后置++,后置--
先使用,后+1/先使用,后-1
代码示例如下
c.+和-
注意:这里的+是正号,-是负号,它们都是单目操作符
+号对正负值没有影响,是一个完全可以省略的运算符
而运算符-用于改变一个值的正负号
代码示例如下
二.强制类型转换
在操作符中还有一类特殊的操作符是强制类型转换,语法很简单,形式如下
(类型)
下面是代码示例
俗话说,强扭的瓜不甜,所以我们使用强制类型转换也是在万不得已的时候使用
三.scanf 和 printf介绍(重点)
1.printf
a.printf()是在标准库的头文件stdio.h定义的
所以使用这个函数之前,必须引入这个头文件
b.占位符
printf()可以在输出文本中指定占位符
所谓占位符,就是这个位置可以用其他值代入
代码示例如下
解释:在上述示例中,””内的是输出文本
里面的%d就是占位符,表示这个位置要用其他值代替
占位符的第一个字符一律用%
第二个字符表示占位符的类型
常见的占位符除了%d,还有%s表示代入的是字符串
printf()参数与占位符是一一对应的关系,如果有n个占位符,printf()的参数就应该有n+1个
如果参数的 个数少于对于的占位符
printf()可能会输出内存中的任意值
c.输出格式限定宽度
printf()允许限定占位符的最小宽度
请看如下示例
在上述示例中,%5d表示这个占位符的宽度至少为5位,如果不满5位,对应的值会添加空格
默认是输出内容前面会有空格,即输出内容默认是右对齐
如果我们希望改成左对齐,即想在输出内容后面添加空格,则可以在占位符的 %后面插入一个-号
比如
这个示例中,输出内容123的后面添加了空格
而对于小数,会限制所有数字的最小显示宽度
请看下面的示例
这里在123.45的输出结果头部会添加两个空格来保证输出的浮点数占据了12位
d.输出格式限定小数宽度
输出小数时,有时希望限定小数的位数
举例来说,比如希望小数点后保留两位
占位符可以写成 %.2f
这种写法也可以与限定宽度占位符结合使用‘
比如
%6.2f 表示输出数的最小宽度为6,小数位数为2
e.输出部分字符串
%s占位符是用来输出字符串的,默认是全部输出
但如果我们只想取开头的部分,可以用%.一个数字s来指定输出的长度
比如下面这个示例
上面示例中,占位符%.5s表示只输出字符串hello world的前5个字符即 hello
2.scanf
当我们有了变量,我们需要给变量输入值就可以使用scanf函数
那接下来我们来介绍一下scanf函数
a.基本用法
注:标准输入一般指的是键盘,标准输出一般指的就是显示屏幕
scanf()函数用于读取用户的键盘输入
它的语法与printf()类似,都需要引用头文件stdio.h
下面我们看一个代码
来分析一下,,它的前面与printf()一样,放置占位符,
而第二个参数,这里用&i表示,表示将从键盘输入的数存到变量i中
注意:我们目前学的变量前必须加上&运算符
为什么呢?
因为scanf()传递的不是值而是地址,而这个&就是取地址符号
当然,我们的scanf()也可以一次读入多个变量,这个就留给大家自行探索了
b.
在scanf()处理占位符时,会自动过滤空白字符,包括空格,制表符,换行符
所以,在我们输入的数据之间,有一个或多个空格不影响scanf()解读数据。
或者,我们使用回车键,将输入分成几行,也不影响解读。
让我们看一下下面的例子
scanf()读取时,读到-13就结束了,因为后面的.不属于整数的有效字符
再次读取时,就会从上一次停止解读的地方继续,这一次会读到.45e12(e12表示10的12次方,是科学计数法的浮点数格式)后面的#不属于浮点数的有效字符,所以就在这之前结束了
c. scanf()的返回值
scanf()的返回值是一个整数,表示成功读取的变量个数
而如果没有读取到,或者匹配失败,则返回 0
如果在成功读取任何数据之前发生了读取错误或者读取到文件末尾,则返回常量EOF,即-1
请看下面的代码
而如果我们输入两个数后,提前结束
根据我们上面提到的知识,f的值会为0
我们看一下代码
结果确实如我们所想
而如果我们一个数也不输入,看看r的值是否为EOF即-1呢
我们发现是的!
(注:在VS编译器中,按三下ctrl+z才结束输入)
d.占位符
scanf()占位符与printf的占位符基本一致
这里特别讲一下%和%s
在scanf()常用的占位符中,除了%c,都会自动忽略起首的空白字符。%c不忽略空白字符,总是返回当前的的第一个字符,无论是否为空格
下面说一下%s,scanf将字符串读入字符数组时,不会检测字符串是否超过数组长度,所以很容易造成越界的问题,为了 防止 这种情况,就应该写成%[ m ]s
这里了[ m ]是一个整数,表示读取字符串的最大长度
请看下面的代码示例
上面示例中,name是一个长度为11的字符数组,在scanf()中的占位符表示最多读取10个字符,这样就不会有风险了233
四.课后习题
结语
好了,今天的内容就先到这里了
哦,对了,如果大家觉得博客在哪里需要改正,可以在评论区留言哦。多谢多谢
也希望大家给这个萌新博主多多点赞,感谢感谢
让我们在接下来的时间里一起进步吧!