零基础通关C语言——chapter3——C语言数据类型和变量下

开头声明(超小声)

 

个人觉得,进入本篇,难度比前两篇又更上一个台阶。所以在讲解之外,会附上一些题目当作巩固训练。

废话不多说,直接开始我们今天的内容!

 

 

一.操作符(运算符)

0.操作符的分类

主要的操作符有以下几类

算术操作符

赋值操作符

单目操作符

关系操作符

逻辑操作符

条件操作符

移位操作符

位操作符

 

作为初步学习的我们,今天先学习前三者即算术操作符,赋值操作符和单目操作符

 

1.算术操作符

 

a.  +  和  -

额,这个就不用解释了。。。

b.   * 

注意,在计算机中打不出我们在数学中写的乘号,所以用*表示

c.    /

在C语言中 ,整数除法是整除,只会返回整数部分,会丢弃小数部分

比如,看以下代码

eeac6319ea9a45ae9204b905d2be3c93.png

这里我们验证了整数的除法确实是整数

再看以下代码,看我们把整数改为浮点数的结果

87af64b4a99f43f188858662826ccce4.png

我们发现此时进行了浮点数除法

大家下去可以试一下将前面的数改成浮点数或者两个都改成浮点数,看看结果是否还会一致

 

d.  %

这个运算符表示的是取模运算,且这个运算符只能用于整数!不能用于浮点数

tip:

负数取模的规则是:结果的正负号又第一个运算符的正负号决定

比如看下面这个代码

68a9e588586049459d857d01743192e3.png

 

示例中,第一个数的正负号就决定了结果的正负号。

 

重点:1.除了%操作符以外,其他几个操作符可以作用于整数和浮点数

            2.%操作符的两操作数必须是整数,返回的是整除之后的余数


           3.对于 /  操作符,如果两个操作数都为整数,执行整数除法。但是只要有浮点数执行的就是浮点数除法

          4.这些操作符都是双目操作符(涉及两个对象的操作符)

 

2.赋值操作符

这个比较简单,简单来说,就是可以对变量进行赋值

 

除此之外,赋值操作符可以连续使用,比如:

03aa13b1016c4465b059ec88c5985122.png

不过,我们一般还是尽量拆开来写,这种连续赋值的写法不方便观察代码的执行细节,容易出错

 

下面再讲一个复合赋值符

 

在我们写代码的时候,我们经常可能对一个数进行自增,自减的操作

而C语言提供了复合赋值符,包括:

+=  -=   *=    /=   %= 

 >>=   <<=   &=   |= 

这里的前五个比较号理解,比如a+=3就是a=a+3的意思,另外四个同理

至于下面的四个,留到后面的博客再去说吧

 

 

3.单目操作符:++,--,+,-

 

我们在前面介绍的操作符都是双目操作符,它们是有两个操作数的

C语言中还有一些操作符只有一个操作数,它们就被称为单目操作符

++  --  +(正) -(负)就是单目操作符

其中++ --又分为前置++,后置++ 以及前置--和后置--

a.前置++,前置--

口诀:先+1,后使用/先-1,后使用

代码示例如下0df21de5515e46c2823f5463fe1cf123.png

前置与后置原理一致,理解其中一个另一个也一定能理解

 

b.后置++,后置--

 

先使用,后+1/先使用,后-1

代码示例如下

f2f36a5f4ddc4d7c99017bfcdfbfcaa2.png

 

c.+和-

注意:这里的+是正号,-是负号,它们都是单目操作符

+号对正负值没有影响,是一个完全可以省略的运算符

而运算符-用于改变一个值的正负号

代码示例如下

e568592a3dc14469b95b76b8a30b249d.png

 

 

 

二.强制类型转换

在操作符中还有一类特殊的操作符是强制类型转换,语法很简单,形式如下

(类型)

 

下面是代码示例

913ce455e68a41bc833c6adb6606e662.png

俗话说,强扭的瓜不甜,所以我们使用强制类型转换也是在万不得已的时候使用

 

三.scanf 和 printf介绍(重点)

 

1.printf

a.printf()是在标准库的头文件stdio.h定义的

所以使用这个函数之前,必须引入这个头文件

 

b.占位符

printf()可以在输出文本中指定占位符

 

所谓占位符,就是这个位置可以用其他值代入

代码示例如下

e9bc0286531a4c5b8c8c0034215ef224.png

解释:在上述示例中,””内的是输出文本

里面的%d就是占位符,表示这个位置要用其他值代替

占位符的第一个字符一律用%

               第二个字符表示占位符的类型

 

常见的占位符除了%d,还有%s表示代入的是字符串

 

printf()参数与占位符是一一对应的关系,如果有n个占位符,printf()的参数就应该有n+1个

如果参数的 个数少于对于的占位符

printf()可能会输出内存中的任意值

 

c.输出格式限定宽度

printf()允许限定占位符的最小宽度

请看如下示例

edfa7d40c8c94649a13f3118257c702d.png

在上述示例中,%5d表示这个占位符的宽度至少为5位,如果不满5位,对应的值会添加空格

默认是输出内容前面会有空格,即输出内容默认是右对齐

如果我们希望改成左对齐,即想在输出内容后面添加空格,则可以在占位符的 %后面插入一个-号

比如

9b33f1a6ed084d10ad6ca521d8494530.png

这个示例中,输出内容123的后面添加了空格

 

而对于小数,会限制所有数字的最小显示宽度

 

请看下面的示例

b04377b863794dcab6df6a8facac8f2b.png

这里在123.45的输出结果头部会添加两个空格来保证输出的浮点数占据了12位

 

d.输出格式限定小数宽度

 

输出小数时,有时希望限定小数的位数

举例来说,比如希望小数点后保留两位

占位符可以写成  %.2f

这种写法也可以与限定宽度占位符结合使用‘

比如

%6.2f 表示输出数的最小宽度为6,小数位数为2

e.输出部分字符串

%s占位符是用来输出字符串的,默认是全部输出

但如果我们只想取开头的部分,可以用%.一个数字s来指定输出的长度

比如下面这个示例

fbec8d0bd46844ce9c2082f1955aec29.png

上面示例中,占位符%.5s表示只输出字符串hello world的前5个字符即 hello

 

 

2.scanf

当我们有了变量,我们需要给变量输入值就可以使用scanf函数

那接下来我们来介绍一下scanf函数

 

a.基本用法

注:标准输入一般指的是键盘,标准输出一般指的就是显示屏幕

scanf()函数用于读取用户的键盘输入

它的语法与printf()类似,都需要引用头文件stdio.h

 

下面我们看一个代码d0a6c437f74a4446b04d5f1da391b2c4.png

来分析一下,,它的前面与printf()一样,放置占位符,

而第二个参数,这里用&i表示,表示将从键盘输入的数存到变量i中

注意:我们目前学的变量前必须加上&运算符

 

为什么呢?

因为scanf()传递的不是值而是地址,而这个&就是取地址符号

当然,我们的scanf()也可以一次读入多个变量,这个就留给大家自行探索了

 

 

 

b.

在scanf()处理占位符时,会自动过滤空白字符,包括空格,制表符,换行符

所以,在我们输入的数据之间,有一个或多个空格不影响scanf()解读数据。

或者,我们使用回车键,将输入分成几行,也不影响解读。

让我们看一下下面的例子

a3fbbaf1ec634f85958831e64f64551b.png

 

scanf()读取时,读到-13就结束了,因为后面的.不属于整数的有效字符

再次读取时,就会从上一次停止解读的地方继续,这一次会读到.45e12(e12表示10的12次方,是科学计数法的浮点数格式)后面的#不属于浮点数的有效字符,所以就在这之前结束了

 

c.  scanf()的返回值

 

scanf()的返回值是一个整数,表示成功读取的变量个数

而如果没有读取到,或者匹配失败,则返回 0

如果在成功读取任何数据之前发生了读取错误或者读取到文件末尾,则返回常量EOF,即-1

请看下面的代码

b8fb25baea254d12aedd874532fab3f3.png

而如果我们输入两个数后,提前结束

根据我们上面提到的知识,f的值会为0

我们看一下代码

60b9691fbc73484597659792d84905ef.png

结果确实如我们所想

 

而如果我们一个数也不输入,看看r的值是否为EOF即-1呢

d0567cff8e54468997990db3a91e5d55.png

我们发现是的!

(注:在VS编译器中,按三下ctrl+z才结束输入)

 

d.占位符

scanf()占位符与printf的占位符基本一致

 

这里特别讲一下%和%s 

在scanf()常用的占位符中,除了%c,都会自动忽略起首的空白字符。%c不忽略空白字符,总是返回当前的的第一个字符,无论是否为空格

下面说一下%s,scanf将字符串读入字符数组时,不会检测字符串是否超过数组长度,所以很容易造成越界的问题,为了 防止 这种情况,就应该写成%[ m ]s 

这里了[ m ]是一个整数,表示读取字符串的最大长度

请看下面的代码示例

78499e326318433faf785f37b0795bcb.png

上面示例中,name是一个长度为11的字符数组,在scanf()中的占位符表示最多读取10个字符,这样就不会有风险了233

 

 

四.课后习题

计算带余除法_牛客题霸_牛客网

你是天才吗?_牛客题霸_牛客网

判断两个数的大小关系_牛客题霸_牛客网

线段图案_牛客题霸_牛客网

结语

好了,今天的内容就先到这里了

哦,对了,如果大家觉得博客在哪里需要改正,可以在评论区留言哦。多谢多谢

也希望大家给这个萌新博主多多点赞,感谢感谢

让我们在接下来的时间里一起进步吧!

0eb88582c7784d51af7edfd74bf9fe80.png

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不吃肉的Humble

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值