Bootstrap

如何让零编程基础的初中生听懂C语言?——C语言基础概念


背景

  人人都很向往暑假的生活,会有大量自己可支配的时间,可以睡懒觉,更不用担心期末考试,可谢小白并不这么想,作为一个考完期末的大一学生,在自己准备飞奔回家时却看到自己的亲戚让自己给他家一个准备上初二的表弟在暑假讲讲C语言,作为为数不多从他们老家考上的大学生,自然也不能拒绝,可谢小白毕竟也不是老师,虽然学的是计算机专业,且在学校学的还不错,但毕竟教的对象是初中生,该怎么让一个零编程基础的初中生能听懂C语言呢?这无疑是谢小白最困难的地方。但谢小白也还是十分期待,因为毕竟能够提升自我,所以便马不停蹄的开始准备了······


  经过了短暂的准备,谢小白开始了他的讲解之路。
  一来到亲戚家,就受到了亲戚的热情的招呼。

初中生:小白哥,好久不见啊。

谢小白: 你为什么想找我学C语言呢?

初中生:有一次我去同学家里,他给我炫耀他哥自己做的游戏,给我羡慕坏了,之前的我只会打游戏,一看到能自己做游戏,好奇心止不住,我问了他哥,他说是用C语言做的,我想着我也有个学计算机的哥啊,所以来找你帮忙教教我嘛。

谢小白:那你知道C语言是什么吗?

初中生:我只知道能做游戏…听起来很高级的东西。

谢小白:那你知道你为什么学英语吗?

初中生:学校要求的呗,中考要考的呀。

谢小白:英语在全球很流行,他是一个可以让你与外国人交流的工具,有了这个工具你就可以看国外网站,与外国人交流,难不成你比划手语去?

初中生:也不是不可以

谢小白:…e,那么C语言也一样,它是一种我们能和计算机对话的语言,写出对应的C语言代码,计算机处理后,计算机就会执行对应的命令,至于如何处理嘛,你可以先不用了解。当然计算机的语言有上千种呢,不过C语言学完其他的也就好理解了。

初中生:那我能在哪里写C语言呢?

谢小白:刚才提到写的C语言需要经过处理才能被计算机执行,那么你就需要在一些含有那些处理功能的软件上才能写代码,我用的是visual studio 2022,这个的功能很强大。

初中生:那小白哥你帮我直接安装吧。

经过谢小白的一同操作后,成功安装好了(重点不在安装,所以就不描述了)
想要看具体操作安装点我

Visual Studio 2022(之后简称vs)创建项目

谢小白:安装好之后我们来创建我们的一个项目吧!
在这里插入图片描述
谢小白:点击创建新项目
在这里插入图片描述
在这里插入图片描述
谢小白:写项目名称,然后确定项目存放路径,然后点创建。
在这里插入图片描述
谢小白:源文件是专门让我们写代码的文件。
在这里插入图片描述
在这里插入图片描述
谢小白:然后我们创建一个源文件,源文件是我们专门写我们代码的文件。
在这里插入图片描述
谢小白:创建好源文件后,我们只需要在该区域里写代码就行了。

谢小白:这个项目你可以每天都创建一个,并且以日期命名,然后放到同一路径里,这样你每天写的代码很好复习。

谢小白:有了能写C语言的工具,一切都美好了起来。

第一个C语言程序

main函数与数学函数

谢小白:让我们来看看世界上第一个C语言程序吧。
在这里插入图片描述
谢小白:世界上第一个C语言程序就长这个样子,我们运行一下它。
在这里插入图片描述
谢小白:发现我们打印了个 hello world!

初中生:我嘞个豆,一堆字母单词。
在这里插入图片描述

谢小白:放心,只要我们能把它分解来看,会发现其实它很简单的!我们先来看看这个。

在这里插入图片描述
谢小白:在C语言中我们叫这个为main函数,只不过这个main函数只有个壳子,没有内容。

谢小白:函数在C语言中你可以先理解成,就是只要有个英文加个小括号就是个函数,大括号里为main函数的内容,叫做函数体

谢小白:C语言中的函数是挺重要的部分,我们未来会有专门的时间去细讲它的。

谢小白:下面这个你熟悉不。
在这里插入图片描述
初中生:熟悉的不要不要的!一个被我狠狠拿捏的数学函数,然后呢?
在这里插入图片描述

谢小白:我令 x = 5 结

初中生:31呀!

谢小白:果是什么呢?!!

谢小白:算的真快呀,我们来慢动作演练一下你算的过程吧。

谢小白:首先我令 x = 5,光有个x不行呀,所以我得带进我所要的目标函数呀,你要带入的是f(x),可不是像g(x)或者别的函数,你找到你要带的函数后,你就看到了等号后面的内容,然后你把x的值代了进去,5*5+5+1等于31,所以你的大脑算完了最后给了我答案。

初中生:。。。你这虽然没毛病,但我可没想那么多啊。
在这里插入图片描述

谢小白:那让我们看看下面这个过程 。

在这里插入图片描述

谢小白:光有图还不行,我再来解释一下吧,想计算f(5)的值,就得用f(x)函数里的式子,然后进行运算,最后把结果表达出来

谢小白:重点在C语言环节,如果想执行一个C语言程序就必须写main函数,这才有了程序的入口。当然既然是入口,那么main函数必须只能有一个

谢小白:找到了入口之后,那我进去呗,这时就会执行我们main函数后面的大括号的内容,也就是函数体

return和返回类型

谢小白:在C语言中,函数也分有返回值无返回值两种。

谢小白:无返回值需要在函数开头写 **void **,代表空类型,有返回值则需要在开头写返回值的数据类型,并且用return返回与之对应数据类型的值。

谢小白:关于数据类型,我会在一会细讲的,不懂也没关系的。

谢小白:我们看到刚才第一个程序写的int,他代表整型类型,整型类型存的是整数,所以结尾就会有return 0,这个的意思是返回0这个整数的意思。
在这里插入图片描述

谢小白:虽然main函数是程序的入口,他或许不需要返回值,因为它执行完,程序就结束了。

初中生:那为什么要有返回值呢,而且为什么返回的是0,能返回别的数字吗?

谢小白:在大概很久很久以前,都是这么写main函数的
在这里插入图片描述
谢小白:这个时候就用到了我们的void空类型,代表没有返回值。

谢小白:只不过这种写法现在几乎没人写了。

谢小白:至于为什么返回的是0,这是一种约定俗成,相当于潜规则一样,你就记住按照下面这个模板无脑写就行了。

谢小白:暂时懵逼的话也没关系的,我在后面会展开细讲的。

在这里插入图片描述

printf函数与库函数

谢小白:现在我们再看这个C语言程序,就剩中间的我们没处理了。

在这里插入图片描述

初中生:刚才说了只要英文名加个括号就是个函数,这个printf也带括号,但是它没有大括号是怎么回事?这到底是不是函数嘞。

谢小白:它是函数,只不过函数不是每次都写大括号的。

谢小白:函数有个规矩就是在写了函数的内容之后(大括号里写的是函数的内容),之后用函数就写函数名加括号(括号里面放你需要的东西,也就是参数)就行了,比如我们在开头写了printf的内容之后,我们就可以直接在main函数里写printf函数,就不需要再次写printf函数的内容。

谢小白:当然我们的main函数可不能没有大括号,大括号里是整个程序的内容。

初中生:但是没看见printf函数写在哪里了呀。

谢小白:所以就要用到接下来的知识,库函数

谢小白:在最初,没有库函数的时候,有一些简单但必须需要的操作需要每一次都编写相同的代码,很浪费时间

谢小白:所以C语言官方专门写了一些函数供咱们使用,是人家直接写好的,但是使用人家的函数就必须有个规矩。

谢小白:就是必须包含对应的头文件

初中生:头文件又是啥啊。

谢小白:头文件具体是什么你可以不用知道,你就先理解成C语言官方把库函数的代码内容写到了很多头文件里(为了好理解,其实不是的)。

谢小白:你只有知道你写的库函数在哪个头文件里,然后包含它,你才有了函数的内容,你才能用那个函数。

初中生:那printf函数的头文件是什么呢?

谢小白:你看看我敲的这个东西。
在这里插入图片描述
谢小白:头文件都是以.h为后缀

谢小白:include好理解吧,就是包含的意思,如果不理解也没关系,记住用printf的时候写这句代码就行了

初中生:这句代码我看你写在了开头第一行,写在main函数里可以吗?

谢小白:不可以的哦,你就写在开头就行了,如果你想试试你可以自己写代码试一下就知道可以不可以哦

谢小白:现在我们再来看这个printf的功能,在刚才最初我们运行了代码发现,我们在屏幕上打印了hello world!

在这里插入图片描述
谢小白:你先可以这么记住,就是写完我写的第一句话后,在双引号里写你所要打印的内容就行。

谢小白:比如我想打印谢小白最帅,那么我就写这个。
在这里插入图片描述
在这里插入图片描述
初中生:嗯嗯,了解了呢(最帅个辣子)。

总结与注意事项

谢小白:现在你应该了解了第一个C语言的基本框架了吧.

初中生:感觉要长脑子了。。。
在这里插入图片描述

谢小白:实在记不住你就无脑每次写C语言写以下模板

谢小白:我只是简单给你介绍一下哦,后面我们再展开讲解

在这里插入图片描述

谢小白:还有就是别给我把main写成mian!!!

初中生:写成mian不是纯搞笑呢,我肯定不可能。

谢小白:
在这里插入图片描述

谢小白:还有就是C语言中所有的符号(比如括号、逗号等等)都是英文的符号,记得切换输入法。

初中生:嗯了解了,毕竟老外发明的。

语句

谢小白:再给你简单提一下语句的概念。

谢小白:无论在你平时写中文句子时,还是写英文句子时,都会在写完一句话后写上句号,在C语言中亦是如此,每写一个操作也要加,只不过加的是不是句号,而是分号罢了。

谢小白:例如我们刚才的printf打印操作和return 0他都是一个语句。

初中生:了解了,就是每一个操作无脑加个分号。

谢小白:当然没有任何操作也可以加分号,此时我们叫他空语句
在这里插入图片描述
谢小白:这就是两条空语句。

谢小白:一般我们在写语句时,为了好看,我们都是一条语句占一行的。

谢小白:除了空语句,我们还有一种语句叫做复合语句。

谢小白:复合语句很简单,说白了就是大括号包起来就叫做复合语句
在这里插入图片描述

谢小白:复合语句在后面我们的分支与循环里用的比较多,这里你先知道就行。

谢小白:在经历了第一个C语言程序时,也许你可能会懵逼很大一会,因为你突然接收到了很多像英语单词的东西,不要慌张,因为这些其实都是C语言中的关键字。

关键字

谢小白:所以我们接下来来了解一下关键字,关键字的本质是什么呢?

谢小白:其实就是有着特殊含义和功能的英文名字

初中生:关键字应该不能自己创造吧?

谢小白:不可以的哦,C语言所有的关键字由官方规定,一切解释归C语言官方所有。

谢小白:我们来看看C语言官方规定的一些常见的关键字
在这里插入图片描述
初中生:
在这里插入图片描述

谢小白:只是让你见一下哈,不用反应那么大,我会在未来逐步给你讲的,你能找找我们写的第一个程序中都有哪些关键字吗,我们先来看看它们。

初中生:有个int,这个…main应该不是吧。

谢小白:main是函数,函数不是关键字。

初中生:那就还有return。

谢小白:嗯,之前我们大概说了一下,它是返回的意思。

初中生:对还有个void,之前提到过,是空类型的意思吧

谢小白:是的,其中void和int都是数据类型

谢小白:数据类型是包含于关键字的,关键字这个不可能一次性学完的,我们会逐步在未来使用的时候逐渐遇到的,而数据类型在开始就被需要。

谢小白:所以接下来我们就一起来见见数据类型有哪些吧

C语言数据类型

谢小白:平常的你肯定经常点快递,外卖吧。

初中生:嗯,现在外卖、快递是真方便,小手一点,等着就行了。

谢小白:快递员和外卖员会根据送的物品的大小来用不同大小的盒子或袋子装你所要的东西。

谢小白:他们就是为了不浪费包装的材料

谢小白:而C语言为了在存储一些变量(变量就是可以变化的值)时能够不浪费且管理好内存空间,所以就规定了几种数据类型,用于存放不同大小和不同类型的数据。

谢小白:当然数据类型也分内置类型和自定义类型。

谢小白:自定义类型,字面意思,就是可以自己定义的类型,这个我们暂时还不会讲。

谢小白:我们今天主要讲的是内置类型,内置的意思就是C语言自带的数据类型。

谢小白:这些数据类型是固定的,我们来看看有哪些内置数据类型

谢小白:他们分别有以下这些类型
在这里插入图片描述
谢小白:至于每个类型怎么存储的,存储大小是多少,我们会在未来循序渐进的给你讲解。

谢小白:主要先记住上边三个蓝的类型,代表三个大类

unsigned和signed

谢小白:在数学上我们知道数字分正负。

谢小白:C语言存储数据的时候也是分正负的。

谢小白:但是有的时候数据不需要分正负,也就不需要存储符号的信息,所以C语言就有了这两个类型,叫做无符号类型和有符号类型,他们不能单独使用,需要与整型或字符型结合。

谢小白:无符号类型因为不需要存储符号,所以存储的数的上限比有符号要高,至于各个数据类型存储的大小,等我们在后面讲了sizeof操作符我们会细讲的。

谢小白:有了数据类型的基础,现在我们来看看如何创建一个变量呢?

变量的创建

谢小白:我们来看看这个
在这里插入图片描述
谢小白:为了更好理解,我们假设你有这么一块内存(内存就是用于存储数据的空间)
在这里插入图片描述

谢小白:我们再回头看看这个代码
在这里插入图片描述
谢小白:在这里,圈2代表我要创建变量的名称,圈1则代表这个变量存储什么类型的值。

谢小白:而圈3我们看到,在创建变量b时就让b等于5,这就叫做变量的初始化,即在创建变量时,就先让它里面存放一个5,。
谢小白:当创建了变量后,我们来看看你的内存现在是什么情况。
在这里插入图片描述
谢小白:我们发现内存给a和b都开辟了一份空间,其中在开辟空间是b就已经存入了5,而a里面其实也不是没有值,只不过这里面的值谁都不知道,是个随机值

谢小白:当然我们再来看看创建其他类型的变量。
在这里插入图片描述
谢小白:我们创建了一个名为d的无符号整型变量并且将50存储到了d中。

谢小白:我们创建了一个名为e的无符号字符变量并且将字符c存储到了e中。

谢小白:我们创建了一个名为ch的字符类型变量并且将字符a存储到了ch当中。

谢小白:我们创建了一个名为c的浮点型变量并将3.14存储到了c当中。(最好在小数数字后面加个f,代表这是float类型的)

谢小白:在我们创建了这些变量后,我们之后如果想改变他们的值就可以直接写它的变量名字等于多少就可以了。
在这里插入图片描述

谢小白:这样子我们就将这些变量进行了修改

标识符

谢小白:在创建变量时,变量名字的书写也是有讲究的。

谢小白:C语言中规定,变量名字必须是由字母、下划线和数字构成,其中数字不能放在开头。
谢小白:比如我们创建一个0a变量,vs就会给我们报错。
在这里插入图片描述
谢小白:vs能给我们排查出一些相对简单的错误,当发现有错误时就会有红色波浪线。

谢小白:当我们将鼠标放到错误信息初时,就可以查看错误的原因。

谢小白:我们来一起看看。
在这里插入图片描述
谢小白:我们发现他让我们应该输入标识符。

初中生:标识符?

谢小白:C语言标识符是用于标识变量、函数、数据类型、标签等在程序中命名的名称。(标识符区分字母大小写

谢小白:说白了就是你创建的名字。

谢小白:所以刚才我们说的变量名字的规则其实就是标识符的规则,你还记得是啥不?

初中生:只能由字母、下划线和数字组成,而且数字不能放在开头

谢小白:嗯,记忆力不错的。

初中生:被语文老师练出来的…

谢小白:在生活中,你爸妈给你取名字,别人一叫你的名字,你就知道他在叫你。所以你的名字可以相当于标识符。

谢小白:你管键盘叫键盘,怎么不管键盘叫鼠标,把鼠标叫键盘嘞,就是因为我们把那个东西相当于取了个名字,标识了一下。

谢小白:在C语言中,我们刚才创建的这些变量的名字都是标识符。
在这里插入图片描述
谢小白:比如这里的a、b、d、e、ch、c这些名字

谢小白:所以说白了就是有含义的名称

谢小白:但是我们自己创建标识符的时候,例如创建变量的名字的时候,是不能用跟C语言的关键字的名称相同的名字的

谢小白:比如你想创建一个int类型叫char的变量,vs就会直接给你报错,因为这是不允许的操作,实在想用,那就写成大写的,C语言中大小写是不一样的

谢小白:当然除了硬性的规定,我们在创建标识符时也要保证创建的标识符的名称要有意义,比如之后计数的时候,我们可以创建一个名为count的变量。

谢小白:别整个拼音jishu作为变量,这样别人一看你代码显得你很low。

初中生:哈哈,想到未来后的我了。

相关细节

谢小白:其实在创建变量的时候,也可以出现省略的情况

谢小白:其中在创建变量时,int 是默认是有符号型的,默认是signed int(有符号整形)。

谢小白:我们在创建无符号整形unsigned int时可以将int省略。
在这里插入图片描述
谢小白:在这里默认a是整形变量。

全局变量和局部变量

谢小白:其实我们在创建变量之后 ,变量也是有它的作用范围的。

谢小白:变量分为两种,分为全局变量和局部变量

谢小白:全局变量作用于整个程序,而局部变量只作用于包含它的大括号内部。

谢小白:因为全局变量作用于整个程序,所以它没有被任何的大括号括起来。

谢小白:让我们来看看下面这个代码。
在这里插入图片描述
谢小白:其中的printf我们还没学到过这种用法,总之这是能够打印num1和num2的值,这里不用过多纠结。

谢小白:最上面这个的num1在整个程序中,它在所有(一个)大括号的外边,所以这个num1是全局变量。
(这里只有一个大括号,未来学了函数就会有多个大括号的情况)
谢小白:而里面的num2被我们main函数的括号里括起来了,所以里面的num2只能在main函数内部使用

谢小白:我们运行一下
在这里插入图片描述
谢小白:我们再来看看这个代码
在这里插入图片描述
谢小白:当全局变量与局部变量名字相同时,首先是允许这样子写的,这时局部变量优先,所以打印出来num = 100。
在这里插入图片描述

谢小白:我们再来看看这段代码。
在这里插入图片描述
谢小白:我们运行一下。
在这里插入图片描述
谢小白:在这段程序中第一个printf打印的是30的num,因为30的num比20的num更局部一点。

谢小白:第二个printf打印的是20的num。

谢小白:所以说明大括号内部的变量对于大括号内部使用来说叫做“局部变量”。

谢小白:大括号外部的变量对于大括号内部使用来说叫“全局变量”。


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
谢小白:所以按我的理解就是,被越少的大括号围住的变量就越全局,被越多的大括号围住的变量就越局部

谢小白:不过正常情况下不会创建相同的变量名字分别在局部和全局,总之就一句话,局部优先。

字符和ASCII码表

谢小白:或许你会发现我们在创建字符变量,然后将字符赋值给我们创建的变量时,我们的字符都是带单引号的。

谢小白:这是因为C语言中规定在表示字符时,必须用单引号引起来,因为如果不引起来,就会被认为,它可能是个变量,因为字母也可以被当做名字来使用,就好比我们刚才写 int a;如果我们写 ch = a;就会被认为将变量a的值赋给ch,这与我们的原意不符

谢小白:字符有很多,我们能再键盘上打的#,@,!,%等等等等都是字符,为了能够方便计算机储存并使用这些字符,C语言官方就给他们统统编了个号,这个号其实就是就是整数,也就是说字符存储在内存当中其实存的是它的ASCII码值,我们来看下面这个ASCII表。

在这里插入图片描述
(图片来源于官网)
谢小白:其中除了前31个打印不出来的字符,其他的字符按顺序打印为下表。
在这里插入图片描述

谢小白:这里你只看看十进制的就行,八进制和十六进制我们会在讲后面的内容中提到。

初中生:也就是说其实字符计算机存的都是整数是吧。

谢小白:是的,就比如说小写a的存储存的是97这个十进制值,所以字符和整型他俩其实都是属于整型家族。

字符串和\0

谢小白:既然了解了字符,C语言也有一个东西叫字符串的,刚才我们讲了只有用单引号引起来的才叫作字符。

谢小白:而用双引号引起来的则是字符串

初中生:哦?也就是说当时printf里放的其实是个字符串是吧。

谢小白:是的,printf我们会在一会后再给你细讲。

谢小白:其中在写字符串时,计算机执行你写的C语言时会默认在字符串后加个\0,这是字符串的结束标志,其中\0是个转义字符,那么转义字符又是什么呢?

转义字符

谢小白:接下来我们再了解一下转义字符。

谢小白:为了实现某些功能C语言设计了一种叫做转义字符的东西,他们有着一些特殊的功能,其中的 \ 这个字符便是我们的主角,只要在一些字符前加个 \ ,那么他就会被转义,先让我们看看都有哪些转义字符吧
在这里插入图片描述
在这里插入图片描述

初中生:这些不会全都要记住吧

谢小白:不用不用,这里只是给你看一下大概有哪些,后面我们多用就很容易记住的。

谢小白:为了我们就能很好理解转义字符,接下来我们来看看printf库函数的详细用法。

printf函数详细用法

谢小白:首先printf函数的功能是将信息输出到标准输出设备(一般是屏幕)上。

谢小白:之前我们也粗略地讲过printf,双引号里面写什么就会打印出来什么。

谢小白:然而在printf函数中,这种说法不准确,不准确的原因就是因为printf中一种东西叫做占位符。

占位符

谢小白:那么占位符是干什么的呢,让我们来看看下面这个例子。
在这里插入图片描述

谢小白:我们来看看它的执行结果。
在这里插入图片描述
谢小白:我们先不管这个\n,一会我会把转义字符全部讲一遍。

谢小白:你们现在应该吃饭的地点都在食堂吧中午

初中生:是的,饭是真难吃,还居然收我十几块一顿,成天就豆芽豆芽…有的时候还清水煮白菜,要不是为了生存,我才不吃呢…

谢小白:哈哈,都是这么过来的,等你上大学了,饭菜就可以了,到时候直接食堂吃个遍。

谢小白:你们在食堂有没有人插队呀。

初中生:肯定呀,就是有一个人先排着队,然后他朋友过会再来直接往那里一插队。

谢小白:这就跟我们的占位符很像,占位符就是一个先占一个位子然后再被其他值替换的符号,当printf函数识别到占位符时,他就需要一个对应的值去替换他,当然占位符占的位子只有对应类型的值才能被替换,我们来看看下面这些不同类型的占位符,他们都是以%为开头的。
在这里插入图片描述
谢小白:我们可以拿printf实验一下
在这里插入图片描述
谢小白:我先解释一下这个\n吧,因为用的挺多的。

谢小白:当printf识别到\n时就会跳到下一行,我们来看下面这个例子。
在这里插入图片描述
谢小白:没有\n时打印出来是这个
在这里插入图片描述
谢小白:我们再回头看看这个。
在这里插入图片描述
谢小白:当然这些后面的值也可以是变量,我们再来看看下面这个
在这里插入图片描述

谢小白:接下来我们看看有多个占位符的情况。
在这里插入图片描述
初中生:悟了,多个占位符和后面匹配的值是一一对应的,并且从前往后。

谢小白:那你告诉我下面这个打印出来什么呢?
在这里插入图片描述
初中生:
在这里插入图片描述
初中生:第一个不是%c吗,按理不是给的是个字符嘛,怎么给的是个整形变量a啊,第二个整形又给的是字符型变量ch,我懵逼了。。。

谢小白:那让我们来慢慢看吧,我们刚才列举的占位符的类型中我们列举到了这个东西%%,我们先来看下面这个例子。
在这里插入图片描述
谢小白:我们发现光打印%是打印不出来的,C语言规定了打印%需要写两个%,我们再来看看这个。
在这里插入图片描述
谢小白:当%遇见下一个%时,就会组成我们刚才说的那个类型%%,第一个%会将第二个%变成纯正的%,这个%就不能和其他的字母组成%d,%c,%s等组合,所以就跟后面的c没有关系了,所以%%打印出来是%,c单独打出来就是字符c,所以打印的就是%c。

谢小白:所以我们再来看看这个例子
在这里插入图片描述
谢小白:第一个%将第二个%变成了真正没有任何含义的%,所以打印出来%,剩下的一个%与c结合形成占位符,所以把后面的字符a拿过来,所以打印了a,所以打印%a。

谢小白:现在我们再回头看看这个题
在这里插入图片描述
初中生:我懂了,前两个%打印%,所以单独的字符c打印c,%d是个需要整形的占位符,拿走a,也就是5,后面又是两个%所以打印%,之后%c打印ch的值,也就还是%,最后%f打印f里的值所以打印3.14,。
在这里插入图片描述
初中生:所以打印的就是 %c5%%3.14

printf中占位符的细节

谢小白:可惜了,差一个一个小细节,就是%f默认打印的六个小数点。

初中生:no~

谢小白:这个小细节是因为我还没给你讲过呢。

谢小白:如果想打印几个小数点,我们可以这么写。
在这里插入图片描述

谢小白:打印%.几f就代表打印几位小数点。

初中生:那刚才因为没写所以默认六位小数点打印的是3.140000是吧。

谢小白:是的。

谢小白:接下来我们再看一些关于占位符的细节。

谢小白:我们直接上例子。
在这里插入图片描述
谢小白:%4d的意思是这个整数至少占4个格子,如果不够4位的数字用空格在左边补齐

初中生:如果想空格在右边补齐可以吗?

谢小白:可以的,我们来看下面这个例子
在这里插入图片描述
谢小白:为了能够看到右边的空格,我们在最后加了个H

初中生:那如果我写的数字比里面的数字大呢?比如%4d打印12345呢

谢小白:%4d的意思是至少占四个格子如果五个格子的话就打印他就行了,就不用补齐空格了。
在这里插入图片描述
谢小白:我们再看下面这个
在这里插入图片描述
初中生:加了0,就是用0补齐对吧。

谢小白:嗯,聪明,那我们再看看这个
在这里插入图片描述

谢小白:%+d的意思就是在正数前加一个正号。

初中生:这个好像没什么用吧。

谢小白:有个印象就行,确实没什么用,万一以后做题能遇到。

printf中的转义字符

谢小白:接下来我们来看看转义字符用printf打印是什么样子的。

谢小白:我们来看下面这个,其中我在每一句打印后面都加了\n,这是为了方便查看打印出来的东西,你就不看\n就行了,每一行就是每一次打印的结果。
在这里插入图片描述
初中生:怎么还有警报声?

谢小白:当printf打印\a就会发出一声警报,这个你记住就好啦

谢小白:然后我们再看那个有\b的,也就是第二个。

初中生:这个\b能吃掉它左边的一个字母?

谢小白:其实当遇到\b时,就会回退一格,然后继续打印,我们来看下面这个例子
在这里插入图片描述
谢小白:你看上边的,\b的作用只是回退一格,后面没有打印内容的话还是无事发生。

谢小白:但是你看下面这个,有两个\b,那么就会回退到a后面的那一个格子,然后继续打印YY,就会覆盖掉bc.

初中生:哦~~~原来是这样子啊

谢小白:接下来我们来看第三到五个。在这里插入图片描述
谢小白:如果我想在printf中打印双引号就发现遇到了下面的问题
在这里插入图片描述
谢小白:我们发现有警告出现。

谢小白:仔细观察后我们发现,原来我的中间的双引号与前一个双引号进行了匹配,形成了字符串,从而导致最后一个双引号孤单了。

初中生:所以要用转义字符把它变成纯正的无含义的双引号是吧

谢小白:真聪明啊,就跟我们刚才讲的%%一样。

谢小白:所以打印 \ 和单引号 ’ 也是一样,需要在 \ 和 ’ 的前面再加一个 \ 。

初中生:嗯,了解了,挺简单的。

谢小白:那我们继续了解一下\t,\t你就可以把它暂时理解为与\b相反的操作就行,就是退的不是一格,而是多格,具体跳几个格子看情况,后面遇到实际用的再给你讲细节。

谢小白:接下来我们看最后两个\加数字的这个两个。

谢小白:说到这个就必须来讲一下二进制和一些常用的其他进制了。

二进制

谢小白:对于我们熟知的十进制,我们知道逢十进一,也就是只有0~9这十个数字。

谢小白:再比如7进制就只有0 ~6,逢七进一。

谢小白:所以对于我们的二进制就只有0和1

谢小白:接下来我们看看二进制与十进制的相互转换,以后数字大点你就用计算机,数字小了就自己算。

初中生:嗯,了解了。

二进制转换成十进制

谢小白:我们先来看看如何将二进制转换成十进制。

谢小白:我们来看这个二进制数。
在这里插入图片描述
谢小白:为了好理解我们先看一下下面这个。
在这里插入图片描述

谢小白:二进制也是一样的规则哦,来看刚才那个二进制数。
在这里插入图片描述
谢小白:所以将1011100这个二进制数转换成十进制数就是92。

初中生:嗯懂了,庆幸在初中数学还行。

十进制转换成二进制

谢小白:接下来我们在讲一下如何将十进制转换成二进制,我们以100为十进制例子来将它转换成二进制、

谢小白:我们先来看第一种方法
在这里插入图片描述
谢小白:这种方法就是一直除以二,只计算商,将余数保留,直到商的结果为1。

谢小白:你可以这么想,在十进制中我们来看下面这个例子
在这里插入图片描述
谢小白:在十进制中,每次除以10的余数都是我的每一位的数字,直到除到1~9。那么二进制也一样每一次除2得到的余数也就是我的每一位的数字,直到除到1。

初中生:嗯了解了,也就是说在二进制中多一个位数,就相当于乘以2,十进制多一个位数乘以10,所以反过来除以2和10后得到的余数就是最低位的哪一位的数字,还好我数学还行。

谢小白:聪明的,我们再来看另一种方法。

谢小白:另一种方法其实就是一个字 凑,这种方法对于数字小的时候很好算。

初中生:怎么个凑法?

谢小白:我们来看下面这个例子
在这里插入图片描述
谢小白:我们慢慢看这个东西。

谢小白:首先你的脑子要对2的倍数很敏感,你现在要100转换成二进制数,100在128和64之间,你就想到100能凑个64,所以你就先写个1,然后把64减掉,然后继续再看能不能凑个32,刚好又能凑,所以再写1,然后继续看16,8,4,2,1能不能凑,能凑就写1,不能就写0,直到把100减到0为止。

初中生:这么算对于数字小确实快啊,最关键这个能口算。

谢小白:这个方法看似有点怪,但他是正着想的。写的数字是从左往右写的,就不需要你一直除二然后再返回来想,前面的那种的方法得到的数字是从右往左的。

初中生:对,这种方法一想数字顺着就出来了。

二进制转换成八进制

谢小白:接下来我们再来看看二进制如何转换成八进制。

谢小白:二进制与八进制的关系很微妙,我们来看看下面。
在这里插入图片描述

谢小白:将二进制转换成八进制可以说是非常简单,我们先讲讲方法。

谢小白:我们只需要先将所有的数字每三个分为一组(从右边开始将三个数组为一组),其中最左边的数字如果不够三个就补齐零(为了好理解)。

谢小白:然后我们再看每一组数字,将每一组数字按照之前我们将二进制转换成十进制的方法将每组的三个数字转换成一个0~7的数字,然后把每组数字放到一起就是我们八进制的数字了。

谢小白:二进制是有二则进一位,二进制进三位相当于八进制进一位。

谢小白:在十进制中,进一位就是乘以10,那么二进制进3位就是就是乘以2再乘以2再乘以2,不就相当于乘以8,相当于八进制进一位,你说是不是挺有道理的。

初中生:确实的,我去。

二进制转换成十六进制

谢小白:有了二进制转换成八进制这个例子,我们趁热再讲讲怎么讲二进制转换成16进制。

谢小白:首先八进制只有0~7,那十六进制也就有0 ~15,由于现实生活中我们用的是十进制,所以只有0 ~9这是个数字,但是10到15必须只能用一个位子来表示。

谢小白:所以计算机官方规定用字母a~f来表示10 ~15.

谢小白:在前面将二进制转换成八进制是将所有的数字三个三个分为一组。

谢小白:而转换成十六进制只需要改成将所有的数字分成四个四个为一组,我们来看下面这个例子。
在这里插入图片描述
谢小白:可以说是跟八进制就一样嘛,只不过四个数字为一组,10~15用a ~ f表示罢了。

谢小白:还有就是等你熟练了,就直接用64,32,16,8…2, 1。不用2的几次方。

八进制转换成十进制

谢小白:有了前面二进制转换成十进制的例子,我们来看看如何将八进制转换成十进制。
在这里插入图片描述
初中生:就是把2的几次方变成了8的几次方嘛

谢小白:是的,很简单的。

十六进制转换成十进制

谢小白:再来看看十六进制转换成十进制
在这里插入图片描述
谢小白:是不是越来越觉得简单了。

初中生:我不敢说简单,说了你肯定给我又上难度。

谢小白:
在这里插入图片描述

谢小白:上练习!!

二进制相关转换的练习

谢小白:既然知道怎么转换了我们来看看下面这些题看看你能不能做出来。

谢小白:将下列二进制分别转换成十进制,八进制,十六进制。
在这里插入图片描述
谢小白:将下列八进制数转换成十进制数
在这里插入图片描述
谢小白:将下列十六进制数转换成10进制数
在这里插入图片描述
谢小白:不准用计算机哦,明天给我,记得写,今天先讲知识。

转义字符中的\ddd和\xdd

谢小白:我们有了这些进制的知识后,我们再来看看我们刚才当时没讲的转义字符。
在这里插入图片描述
谢小白:我们再来看后面这两个。

谢小白:先说结论,转义字符长\ddd(d是数字)的样子,它的后面的三个数字代表的是八进制数。整个转义字符的意思是后面的对应的几进制数字作为ASCII码值所对应的字母。

谢小白:如果长\xdd(d是数字)这个样子的,它的后面的两个数字代表的是十六进制。

谢小白:我们再来看\141和\x62,其中141是八进制数,62是十六进制数,我们再来看之前看过的ASCII码.
在这里插入图片描述

谢小白:其中我们看oct那一列,找到141,发现对应的字母是a。

谢小白:我们再来看hex那一列,找到62,发现对应的字母是b.

初中生:所以打印出来就是a和b,原来如此。

谢小白:当然\ddd后面也不是必须跟三个数字,两个数字也可以。我们看这个
在这里插入图片描述
初中生:那我写三个以上的数字可以吗。

谢小白:我们通过ASCII码表可以知道,最高的字母对应的数字才三位数,写四位数就会没有对应的字母,所以vs都不会让你打印出来,会直接报错。

谢小白:这种问题之后你也可以自己敲一下看看,看看你能不能打印出来。

谢小白:我们最后再来看看这种情况。
在这里插入图片描述

谢小白:虽说写三个数字没毛病,但是由于他是八进制数,八进制数里只有0 ~ 7,所以vs自动默认就只算前面的两个数字加上\组成了转义字符。

一些简单的操作符

谢小白:接下来我们来了解一下简单的操作符。

谢小白:其中操作符又称运算符,我们先来看看赋值操作符。

赋值操作符

谢小白:在之前创建变量的时候我们当时用的等号其实就是赋值操作符。

谢小白:赋值操作符和你数学上用的等号还是有很大差距的。

谢小白:在C语言中,会把等号右边的值赋给左边的变量上,赋值按我的理解就是拿等号右边的值覆盖掉左边的变量的值。其中右边的值是不变的。

初中生:确实跟数学上不一样。
在这里插入图片描述

连续赋值

谢小白:C语言中也支持连续赋值。
在这里插入图片描述
谢小白:其中连续赋值是从右向左开始赋值的。

谢小白:也就是说,相当于下面这个
在这里插入图片描述
谢小白:不过不建议这么写代码,可读性太差。

初中生:确实,谁没事给自己增加难度呢。

算数操作符

谢小白:接下来我们来看看你最熟悉的算数操作符

谢小白:比如你在数学上见的加 + 减 - 乘 * 除 / 在C语言中都是操作符,只不过C语言中长的样子不同。

谢小白:其中加号和减号还是熟悉的老样子,但是我们的乘号可不是用×这个符号,而是*,并且不能省略,比如你们写的3a,在C语言中必须写成3*a。

谢小白:接下来我们来详细看看加减乘除。

加法与减法

谢小白:我们来看看下面
在这里插入图片描述
谢小白:其中的加号和减号,他们所操作的对象有两个,所以叫做双目操作符。

初中生:也就是说还有单目操作符是吧。

谢小白:是的我都会给你说的,单目操作符就是操作的对象只有一个。

乘法

谢小白:接下来我们来看看乘法。
在这里插入图片描述
谢小白:乘法最需要注意的就是星号不能省略,其他就没啥了,按正常乘法算就行了。

除法

谢小白:接下来我们来看看最容易出错的除号。

谢小白:下面的打印的结果是什么呢?
在这里插入图片描述

初中生:2.5呗。

谢小白:小伙子果然中计了。

初中生:?

谢小白:先说一个事情。那就是

谢小白:我们在加法、减法和乘法当中的变量都是整型,他没有涉及到小数。

谢小白:整型只能存储整数,他会把小数给直接丢掉的。

初中生:所以创建变量写成float c就行了是吧。

谢小白:又中套了,哈哈。

谢小白;在c = 5 / 2中,是先算5 / 2然后再将它的值赋给c。所以关键就在这个/的运算法则上面。

谢小白:C语言规定/ 的两边如果都是整形,那么得到的就是整型 。也就是5 / 2 = 2。

谢小白:如果/的两边至少有一个是浮点型,那么运算的时候就会按小数去计算,得到的结果也就是小数。

谢小白:所以如果是5 / 2,得到的值是2,你给他赋值给int还是float类型变量都是2。

初中生:那我怎么改嘞。

谢小白:首先你想得到的是个小数,所以你得拿float类型的变量存储,然后为了有浮点型,我们只需要5或者2至少有一个改成小数就行了也就是改成2.0和5.0

初中生:如果强行拿int类型存储呢?

谢小白:那么就会丢掉全部小数,留下整数位,比如我们看这个。
在这里插入图片描述
谢小白:我们再来看看这个,你知道问题出在哪里了吗
在这里插入图片描述
初中生:对呀,不应该是2.5吗

谢小白:printf打印float类型用什么占位符打印?

初中生:是是是,用%f打印,忘了,我去。

谢小白:在这里插入图片描述
谢小白:所以细节决定成败哦。

取模操作符

谢小白:C语言中除了加减乘除,还提供了一种可以取余数的操作符,那就是**%**。

谢小白:我们直接上例子。

在这里插入图片描述
谢小白:其中,%操作符的两边必须是整数才能取余。

初中生:那负数可以取模吗?

谢小白:可以的,只不过负数取模后的符号有一些规则。

谢小白:结果的正负号由第一个运算数(也就是%左边的数)的符号决定,上例子!
在这里插入图片描述
谢小白:看了这个例子,应该没问题吧。

初中生:这对比的例子,应该是个人都会吧。

谢小白:可以可以,继续!

复合赋值符

谢小白:在C语言中,也提供了一种更方便的复合赋值符,它是由一些操作符和等号组合而成的。

谢小白:我们来看下面的例子。

在这里插入图片描述

谢小白:a = a + 3 和 a += 3 的效果一样。都是让a自增3。

谢小白:我们刚才的加减乘除取模都可以写成复合赋值符。
在这里插入图片描述
谢小白:这些复合赋值符的计算跟我们刚才那个例子一模一样。就是换成了减法、乘法、除法、取模这些了而已。

谢小白:当然C语言中还有其他的复合操作符,我会在后面的操作符章节逐一给你讲的。

单目操作符

谢小白:前面的操作符都是双目操作符,接下来我们来看一些简单的单目操作符

谢小白:我们来先看看sizeof操作符。

sizeof 操作符

谢小白:再讲这个操作符之前我们先来问一个问题。

谢小白:你知道比GB低一个单位是什么吗?

初中生:MB呗

谢小白:再低一个单位呢?

初中生:KB呗

谢小白:再低呢?

初中生:还有更低的?!

谢小白:所以接下来我们就来讲讲比KB低的两个单位吧。

谢小白:他们分别是字节和比特。

字节和比特

谢小白:首先我们需要知道一个点,就是计算机的存储是以二进制来存储的。也就是说,你在计算机上所看到的东西其实本质都是用0和1组成的数字。

谢小白:我们来看下面这个东西。

在这里插入图片描述
谢小白:我们将可以存储一个0或1的大小叫做一个比特位。

谢小白:也就是说101占3个比特位,10010那就占5个比特位。

谢小白:每八个比特位是一个字节。

谢小白:1024个字节是1KB。
在这里插入图片描述
初中生:我还以为换算是1000呢,原来是1024.

谢小白:1024是2的十次方,所以又说明了计算机是以二进制存储的。

谢小白:有了这些知识我们再来看看sizeof操作符。

谢小白:sizeof操作符的功能就是计算被操作对象的数据类型的大小,单位是字节。

谢小白:我们来看下面的例子。
在这里插入图片描述

谢小白:其中,printf后面是可以直接放表达式的。比如
在这里插入图片描述

谢小白:不需要再把它放到一个变量再打印变量了。
在这里插入图片描述
谢小白:其中%zd是一种为sizeof专门设计的占位符,专门用来打印sizeof的值,记住就行了。

谢小白:sizeof的用法可以有两种。
在这里插入图片描述

谢小白:一种后面加的是数据类型,例如char,int ,float…,另一种是后面加表达式或者值。

谢小白:其中如果是一个值的话是可以省略括号的,比如这个样子。
在这里插入图片描述

谢小白:通过结果我们也知道了C语言给不同类型分配了不同的大小去存储数据

谢小白:其中整形int 是四个字节,也就是32个比特位。

谢小白:其中因为int默认是有符号型的,所以符号会占一个比特位,所以它最大能够存储2的31次方的数字,至于怎么存储符号,我会在未来后面的章节讲的。

谢小白:如果一个整形数据比较大,就可以换成long或者long long类型。

初中生:嗯,懂了。

++、–、+、-操作符

谢小白:接下来我们来看看下面这些单目操作符。

前置++和后置++

谢小白:我们来先讲讲前置++和后置++
在这里插入图片描述

谢小白:我们来看看这个。

谢小白:我们首先定义了两个名为a和b的变量并把它们初始化为1。

谢小白:我们发现无论是前置++ 还是后置++,他们都使a和b自增了1,也就是说相当于a = a + 1,b = b + 1。

谢小白:这个好理解,我们再来看看这个。
在这里插入图片描述
谢小白:现在我们来讲讲他俩的区别。

谢小白:这个操作跟前面不一样的点就是有了赋值操作,而不是单独的只写个a++或++b.

谢小白:我们先看c = a++,当使用前置++时,是先使用a,再++。

谢小白:什么叫做先使用呢?

谢小白:那就是在c = a++中,a先使用赋给了c,然后再++。

谢小白:想反,我们看d = ++b,后置++就是先让b++,然后在使用,也就是把b赋给d。

谢小白:也就是说,这两个式子相当于这样。
在这里插入图片描述

谢小白:所以c = 1,d = 2,而我们之前在没有赋值操作的时候,“先使用”这个“使用”二字没法使用,所以前置++和后置++一样。

谢小白:有了上边的知识,你看看这个结果是什么?
在这里插入图片描述

初中生:是不是b是2,c是1呀。

谢小白:我们执行看看。
在这里插入图片描述

谢小白:当b = a++时,a先使用赋给b,所以b等于1,然后a++就变成2了。

谢小白:c = ++a时,a先自增,然后再赋值给c,所以c等于3。

谢小白:现在你懂了嘛。

初中生:哎呀,刚才粗心了,a是连续的。

谢小白:那我们来看看这个。
在这里插入图片描述
初中生:
在这里插入图片描述
谢小白:这是今天作业当中的一道,别慌,今天晚上慢慢啃。
在这里插入图片描述

前置- -和后置- -

谢小白:有了前置++和后置–的讲解,前置–和后置–你应该差不多吧。

初中生:这个再不会我就埋了算了吧。就是+1换成-1嘛。

+和-

谢小白:嗯,接下来我们再来说一下+正号和-负号。

谢小白:来看看这个例子。
在这里插入图片描述
谢小白:其实这个正号没啥作用,前面加多少没啥用,就是提一嘴。

谢小白:负号嘛你也熟的很。

初中生:嗯,简单的很,继续继续!!

scanf函数

谢小白:接下来我们来看看scanf函数,这个函数还挺关键的。

谢小白:之前我们讲了printf函数,他是一个库函数,他的功能是将信息输出到表针输出设备(一般是屏幕)上。所以C语言中也自然得有输入的库函数,他就是我们的scanf,scanf函数就使得我们可以给变量自己输入值了。

谢小白:当然由于使用的是库函数,就必须包含对应的头文件。

谢小白:好消息是他和printf的头文件一样,我们只需要敲这个就行。
在这里插入图片描述
初中生:(真是老年人手速)

谢小白:有了头文件,我们才能正常使用库函数。

谢小白:接下来我们就看看他它的具体用法。

谢小白:和printf一样,scanf也有占位符,并且和printf基本一模一样。
在这里插入图片描述

谢小白:我们来看下面这个例子。
在这里插入图片描述
谢小白:这里1和2代表顺序。

谢小白:在printf中看到%d表示要一个整数去打印,在这里printf拿走了a.

谢小白:而在scanf有%d表示要输入一个整数,在这里将输入的值放到了a里面。

谢小白:至于这个&符号,它的意思是取地址,由于涉及地址,我们现在还不适合讲这个操作符。

谢小白:你就先记住每次输入值时,变量需要前面放取地址符号就行啦。

谢小白:在执行程序时,我们来看看是怎么输入的。
在这里插入图片描述
谢小白:当我们执行程序时,我们发现它在等我们输入值。

谢小白:这时我们输入一个值再按回车看看会发生什么。
在这里插入图片描述

谢小白:其中printf打印出来a的值为5,而最开始a的值是0;

谢小白:可见我们输入5成功了,a的值被我们改变成了5.

谢小白:当然scanf也肯定支持输入多个值到对应的变量,这个跟printf很相似。

谢小白:我们来看下面这个例子。
在这里插入图片描述
在这里插入图片描述
谢小白:在这里要输入空格的原因是因为将数字分割开,否则连在一起就是25了,所以得分割开来。

谢小白:我们再来看看这个例子。
在这里插入图片描述

谢小白:在这里我们来输入两个字符到字符变量ch1和变量ch2里。

谢小白:假设我们输入a和b。
在这里插入图片描述
初中生:ch2看样子没存进去。

谢小白:你有没有注意到我在a和b之前输了一个空格。

谢小白:所以ch2看似什么都没有其实是个空格,不信我们来看这个。
在这里插入图片描述
谢小白:我们拿两个大写I来做标识符,我们运行一下看看。
在这里插入图片描述
谢小白:会发现确实存了个空格

谢小白:所以接下来我们以他为例来讲讲scanf的原理。

谢小白:首先在我输入数据后,我们可以这样理解。

谢小白:我们以上面的例子为例。

谢小白:当我们输入a b,这些内容会被先存放在一个区域。
在这里插入图片描述
谢小白:每次scanf里有占位符时都会在此区域内找匹配的值。在这里插入图片描述
谢小白:第一个%c看到字符a,由于%c就是字符型,所以完美匹配,拿走了字符a。

谢小白:所以这里的占位符就决定了我去找什么类型的值
在这里插入图片描述

在这里插入图片描述
谢小白:由于空格也是字符,所以%c看到空格就会直接拿走他。

在这里插入图片描述
谢小白:然后将空格存储到ch2变量中。

在这里插入图片描述
谢小白:最后我们发现多了一个字符b。

谢小白:这个字符b会一直留在该区域内,当我们再次使用scanf时就会再次匹配该区域的值。

谢小白:我们来改改刚才的程序。
在这里插入图片描述
谢小白:我们在后面又加了个scanf。

谢小白:我们运行一下看看,我们这次再输入a b。
在这里插入图片描述
谢小白:由于我是先打印的,所以证明了b当时还是存在那个区域里的。

初中生:它要三个字符,那要是我只输入一个字符呢?

谢小白:那我们再来试验一下,这次我们只输入a。
在这里插入图片描述
谢小白:首先我们发现光标在闪,说明此时他让我们继续输入值。

谢小白:也就是说如果输入的东西不足以让他匹配的话,他就会继续让你输入。

初中生:但是上边的值打印的好怪呀。

谢小白:是的,你会发现我们明明输入了一个a,但是你会发现居然打印了出来,而且发现两个大写I怎么这么怪。

谢小白:理论上我只输入了一个值,应该让我继续输入呀。

谢小白:你有没有发现我们每次输入一个值都会按一下回车,也就是键盘上的enter键。

谢小白:每次按一次回车,会发现会自动换个行。

谢小白:所以问题就出现在这里。

谢小白:每次我输完值之后,按一下回车,都会默认我输了一个换行符。

谢小白:所以输完a应该是这样子的。
在这里插入图片描述
谢小白:所以在第二个%c时\n就被拿走了。
在这里插入图片描述
谢小白:所以在打印的时候就换行了,并且由于只输入了两个字符,所以光标还会闪,让我们继续输入值。
在这里插入图片描述
谢小白:所以在输入字符时要多加注意,但是在输入整数时不需要考虑这些。

谢小白:这是因为%d他在找整数时,会跳过空白字符(就是空格),换行符和制表符等等。

谢小白:我们看这个例子。
在这里插入图片描述
谢小白:我们以这个为例,在输入中,我们加入大量的空格与换行符。
在这里插入图片描述
谢小白:会发现打印出来没毛病,所以证明了确实会跳过。

谢小白:我们再来看看跳不过去的情况。

谢小白:我们这里输入1,2(1逗号2)看看。
在这里插入图片描述
谢小白:我们发现b打印出来是0,也就是说明2没有输进去。

谢小白:这是因为,当%d遇到除了空格,换行,制表符等其他可以跳过的字符时会直接按匹配错误算就不会继续往下读取了。

谢小白:比如我输入,1 2(逗号1空格2)。

在这里插入图片描述
谢小白:会发现a和b都没输进去。

谢小白:但是如果想输逗号也不是不可以。我们只需要在scanf中加入对应的,(逗号)就行了。

谢小白:例如写成这样。
在这里插入图片描述
谢小白:注意,这里的逗号分中英文,我这里输入的是英文的逗号,所以输入的也得是英文的

谢小白:讲了这么多,现在我们来看看一道题。
在这里插入图片描述
谢小白:刚好我们看看小数(浮点型)的输入,首先%d会跳过前面的空白字符。
在这里插入图片描述

谢小白:看似是个-13.45,但是由于是%d,只会拿走整数,所以会拿走-13
在这里插入图片描述
谢小白:然后根据%f继续找对应的值。
在这里插入图片描述
谢小白:这里的.45e12指的是科学计数法。意思是0.45乘以10的12次方,这里.45是默认前面有个0的。

谢小白:现在是不是觉得C语言也不过如此嘛。

初中生:又给我下套,难死啦,别给我出难题!

谢小白:哈哈,我们只讲了整形,字符型和浮点型,至于别的占位符,等我们讲到数组并且用到的时候再给你说,现在讲了也用不到的。

初中生:好好好,今天讲的够多了已经!

谢小白:那今天就到这里了。

初中生:好好好,太感谢小白哥了,小白哥你应该家里人快叫你吃饭了吧,今天讲的够多了小白哥,小白哥你要不先回去吧。
在这里插入图片描述

谢小白:我说的是scanf就到这里了,哈哈,等后面讲到数组了,scanf还会给你讲的。

谢小白:我可是个持久的男人,继续讲。

初中生:

在这里插入图片描述

注释

谢小白:在C语言中,提供了一种注释的功能, 注释不会影响程序的执行,执行程序时会自动跳过注释

谢小白:他既可以是我们不需要执行但需要留着保存的代码,也可以是写我们的思路。
在这里插入图片描述
谢小白:其中绿色的字体就是我们注释的信息。

怎么注释

谢小白:在C语言中有两种注释方式可以被我们使用。
在这里插入图片描述
谢小白:第一种是以/*为开头,以 */为结尾,中间的内容会被注释掉。
在这里插入图片描述
谢小白:但是这种方法有缺陷,我们来看看下面这个例子。
在这里插入图片描述
谢小白:为了诚实,我们将后面两句话注释掉,不打印到屏幕上。
在这里插入图片描述
谢小白:这时候我们如果整段代码都想注释呢?

谢小白:我们试着注释一下
在这里插入图片描述
谢小白:会发现本来左/ * 和右 * /是一对。但是最后一个 */却很孤独。

谢小白:这是因为/ *只找最近的 * /的匹配,所以这个注释方法有一定缺陷。

谢小白:接下来我们再来看看另一种注释方法。

谢小白:另一种就是我们开头见的那种,两个/的语法。

谢小白:这种注释方法一次只能弄一行,会注释掉两个 / 后一行的内容。

在这里插入图片描述
谢小白:在vs中也有快速注释的方法。
在这里插入图片描述
在这里插入图片描述

谢小白:在vs中选中之后也可以按快捷键。

谢小白:注释选中行的快捷键是Ctrl + k + c,取消注释是Ctrl + k + u。

注释有什么用

谢小白:注释在我们写代码的时候非常重要,他可以是我们对代码的解释,比如我们在未来写一些复杂的代码,就可以用注释解释代码的意思。

谢小白:万一你写完之后自己看不懂自己的代码了那就尴尬了。

初中生:还能看不懂自己写的代码?

谢小白:你之后就知道了,有的时候看不懂自己的代码之后就知道注释的重要性了。

谢小白:当然如果你未来有想法做程序员,在工作的时候注释也非常重要。

初中生:程序员不是容易秃头嘛,我有点不想当。

谢小白:造谣!绝对是造谣,网上只是胡说而已,不要相信哦,秃头的导致因素有很多,不是做程序员就得秃头。

初中生:哈哈,了解了。

刚开始写代码中的一些常见错误

谢小白:今天我们的主要内容就讲完了,我们来看一下我们在刚开始写代码时容易犯的错误。

初中生: 终于讲完了。 在这里插入图片描述

谢小白:main函数写成mian函数。在这里插入图片描述
谢小白:在main后面的括号里加了个分号
在这里插入图片描述
谢小白:创建变量未初始化就打印。
在这里插入图片描述
谢小白:scanf函数为加&(取地址)符号。

在这里插入图片描述
谢小白:以上为刚开始写代码犯得常见错误,你一定不要犯哦。

初中生:见过一遍了,我肯定不会犯的。

谢小白:嗯希望如此,那让我们来检测一下我们的成果吧。

练习测评

初中生:那就来吧!
点我进行答题

谢小白:除了以上的选择题。

谢小白:我们再来点编程题,毕竟不能只是“纸上谈兵“。
编程题1

编程题2

编程题3

编程题4

编程题5

编程题6

编程题7

编程题8

谢小白:今天你一做哈,明天我来给你讲,咱们以后就每两天一讲课,两天在一讲作业哈。

谢小白:好好写,之后你就能自己写个小游戏。

谢小白:这不得帅爆了。

初中生:
在这里插入图片描述
谢小白:fight!明天见

初中生:好的,谢谢小白哥今天的讲解。


;