c 语言 sk 码讲解,刚入行的同学一定要收藏好暂停视频,先记住屏幕上的这句话,常用 sk 码表在这里给大家展示一下,这张表不需要记住,接下来上代码来演示一下。第三行到第六行都是定义了一个字符形变量, 并且都给了对应的字符值。第七行到第十行就是将这些字符用百分号地进行了输出。我们来看一下运行的结果吧,我们可以看到结尾都是数字。这四个 sk 码的值是需要记住的,计算机方面的考试可能会有考点空格的。 s k 码的实进制值就是三十二,数字零的实进制 s k 码值就是四十八。数字的 s k 是可以往后面推算的。比如一,这个 字符的 sk 码值其实就是四十九,二的 sk 码值就是五十。同理,大写字母 a 的 sk 码值是六十五,大写字母 b 的 sk 码值就是六十六。小写字母 a 的 sk 码值为九十七, 小写字母 b 的 sk 码之就是九十八。给大家看一个简单的用途,这个代码实现将大写字母转成小写字母。 第三行定义一个字符形变量 letter, 并复制了一个大写字符 a。 第四行用百字号肆意进行输出,输出的是 letter 的 sk 码值加三十二。我们知道大写字母的 a 的 sky 码值是六十五, 六十五加三十二等于九十七,刚好是小写字母 a 的值。相反,如果是小写字母,你再减去 三十二就是对应的大写字母了,这样就可以实现大小写字母相互转换了。最后别忘记把这四个特殊值记住好了,你又比昨天多学会了一样东西,别忘记给我点个关注。
粉丝6.4万获赞110.0万

同学们,好,我们来看一道程序设计题,从键盘上我输入任意一个字符,然后输出该字符的对应的二字码。好,那这里面比如说我录入一个 a, 那我输出这么一段话,然后他 a 的这个二字码表里面的这个值应该是六十五。 好,那这里面其实非常容易,只需要有三步就可以了。第一步,首先我要定一个变量,这是必须要有的,而且必须要定义成这样型的,因为我要录入一个字符。好, 都做完了以后,第二步干什么?第二步显然就是给这个字符进行一个副职了,那第二步我进行一个副职就行了,用最简单的 get 叉给他副一个职。 好,我录入这个值,给他付完了以后,下面最后一步就是一个输出了,也非常简单,我用这个普通的 f, 然后把这一段复制过 来,然后粘贴到这个地方。只不过我如果说输出的时候想用输出一个字符,那我就用百分号 c 的形式进行输出。如果说你要想输出对应的这个二字码,那我这里面就用这个百分号 d 的形式进行输出就可以了。所以说这道题非常非常容易,我们来验证一下。 b、 e 运行,我随便录入一个 a, 然后点回车对应的阿克斯玛表里面这个值应该是六十五。好,这是我们这一个例子。

接下来呢,我们来说一下制服和阿诗玛制服,我们都知道他在 c 源程序当中呢,是以阿斯克玛的方式进行存储的,每个制服呢通过一个单引号进行包裹。 阿斯卡马尔是什么呢?叫做美国七夕交换标准代码。阿斯卡马尔呢,其中包括了像英文字母,数字控制符号等制服,那我们怎么去理解它呢?也就是我们看一下自己的键盘,你键盘上的这些 啊符号呢,其实阿斯科马呢,都能够直接的就啊打印出来,或者是能打的就能打出来。阿斯科马呢总共占用七倍二分之一数,因此他的值域呢,应该为零到二的七次密减一 那二十个码呢,总共分为两类,第一类呢叫做控制制服,另外一个就是可打印制服,可打印制服呢,就是我刚才说的键盘上你能看到的这些东西,他都能打印出来, 当然这个可能并不是特别准确哈,我是啊,简单的就方方便大家去理解这个东西。当然呢,这个控制制服呢,其实就是我们之前所提到的,有啊,有一些是通过转移制服进行表示的, 比如说啊,这个转移制服呢,是以反斜杠作为开头的,比如说换行符 new, 那 就是反斜杠 n, 这个特别常用。杠 t 呢,其实它是 type, 即水平制表符啊,包括我之前说的这个 by space 配格键啊,它是杠 b, 当然当然呢,这个单引号呢,是可以通过反斜杠一个单引号进行表示,因为单引号这个符号它呢在 c 元当中呢,用于括一个字母,所以如果你想要去打印一个单引号的话, 就需要先加一个转移制服,再加个单单引号,哎,就可以,同理双引号也是一样,那双引号呢,是用于扩制服串的,那如果你要想在屏幕上打一个双引号,也需要加一个反斜杠,再加一个双引号 啊,那这个是单双引号,另外一个特别特别重要的叫做反斜杠零,反斜杠零呢,表示制服串结束的标志,这个一定要牢记,特别特别重要啊, 虽然他没有反斜杠 n 常用,但是这个杠零呢,作为我们去学习致富串相关的一些知识,还有包括致富数,如呢特别特别的重要, 我们重点需要记的一个是反斜杠 n, 另外一个是反斜杠零,这个反斜杠零呢,它的一个数值呢,实际上就是为零, 其他的我们了解即可。那在 c 元当中差的本质呢,其实就是整数的存储单元,我们也说了,标准规定差一定是为一个字节存的呢,就是阿斯卡玛值。 然后呢我们来看一下哈,这个阿斯卡玛值都有一些什么样的?呃,他的控制制服都有哪些呢?可以看一下, 当然这个东西不用记,我们仅做了解即可。第一个呢就是这个控制符,也就是反斜杠零,然后还有包括一些文本开始的,传输开始的,什么响铃的,退格的,换行的等等等等 啊,这些呢都是用做控制制服。第二类呢,其实就是可打印的制服,包括了像这种空格啊,我们键盘当中能看到叹号啊,双引号、井号、刀乐福,还有包括括号以及数字 啊,大于号,小于号、问号,还有包括 abcd 这些东西啊,也就是我们键盘上能看到的东西呢,其实都可以通过阿斯顿马表示,当然这个我没有考证这个是不是是不是正确的哈。 另外一个呢,我们需要去看一下这个阿斯卡马尔点 c, 阿斯卡马尔点 c 呢,这个程序当中呢,就是我们可以用 int 去接一个制服,当然我们也知道 制服制面值呢,它其实是一个整形,我们之前 size of 看了它一下,它 size of 的 结果是为四。 那接下来我们要做什么东西呢?我们打印按百分号 c 格式化输出,其实就是以制服的形式输出, 看一下他的制服是什么,他的以实景制的方式去查看一下他,以及以十六帧的方式查看他。另外一个呢, 作为一个整形,它是可以进行加减预算的,我们对这个 c h 进行加三的一个操作之后,再去看一下它打印什么制符,它的阿斯科马十进制的值是什么?以及十六进制的值是什么? 我们来编一下, g c c, 阿斯科点 c 杠 o, 阿斯科点杠阿斯科。 对于 a 来说呢,它的啊制服形式打印呢,就是 a, 它实际上存储的数值呢,因为作为 int 嘛,它就是为六十五,那么它采用十六进字的方式打印呢,就是四十一。同理,我对 a 加三之后,我们可以看一下这个阿斯克马饼, 阿斯卡马表呢,具有什么样的规律呢?呃,零到一二三四五六七八九,他是连续的,也就是零,他的阿斯卡马值为实际值为四十八,那九呢?实际上呢,也就是呃,四十八加九,也就是为五十七,那同理呢, a 呢, 就是他的实心值的这个值为六十五, b 呢为六十六。那 a 加三的一个结果呢?其实就是为 d, 也就是六十五加三等于六十八,他就是 d, 也就是呃,他的这个无论是数字还是他的一个英文字母呢,其实都是按照他的一个顺序进行排布的。 当然我们知道这个大写的这个阿斯科马值呢,要小于小写的阿斯科马值,然后他们这个阿斯科马值呢?其实二进这形式呢,我们观察他们只差了一位啊, 但是这些呢规律的话,我们没有必要去记啊,那我们只需要知道他们是连续存储的,可以通过一些差值进行计算即可。 当然呢,这个 a 加完三之后呢,我最终打印了 d, 他的二十克码值为六八,然后呃六十,呃十六斤的打印呢为四四。 当然呢,我这个地方我可以去稍微改一下哈,我这个地方我给他改为,比如说七零七零,他最后打印的一个结果应该为什么呢?有个 d 向后数两个 d, e、 f, 对 吧?他应该打印的是 f 以及 f 向后推三个的制服, 我们编辑执行,也就是说我们让这个 c、 h 呢,最开始等于七十七十数值,然后按照制服的形式打印呢,它就是打印它的符号,也就是 f, 然后数值呢,依旧为七十,它的十六净值数为四六。那 f 再向后推三个 f, g、 h、 i, 也就是 i, 它的数值为七三十六,净值值呢为四六。这个呢就是关于啊, 这个制服,他是以阿萨克玛值的方式进行存储的,那我们会发现一件事,就是对于制服来说,他究竟是以制服的形式输出,还是以 十进制的形式输出,还是以十六进制的形式输出?它其实是由这个 print f 的 这个控制格式、控制制数串所决定的,它的解释方式是由它所决定的,它们本质纯的内容实际上都是七十,这个呢也是我们需要 记住的一个结论。七十按照制服的方式解释就是 f, 按照时进制的方式解释就是七十,按照十六进制的解释方式呢就是四十六。对于这一点呢,我们一定要清楚。

注意刷视频暂停!先来三十分钟速成一下 c 语言, 这个表格里列出了所有重要知识点,咱们一个一个攻克。这是一段最简单的 c 语言程序,它能让计算机输出一句 have a word, 好 给大家十秒钟时间把蓝色部分背过,每个变成题都写上,至少能赚个步骤份。 基础知识这块主要考察选择题和填空题,咱们把常考题型一起来过一遍。题, c 语言是一种,记住是高级语言,答案,选 c。 题二,以下不是 c 语言的特点的是选四、 d, 这里错在了, c 语言不是面向对象的,它是面向过程的程序设计语言。题三,关于 c 语言的注视的描述,错误的是,这部分就是代码中的注视, 计算机不会运行注视的部分。双斜杠后边的是单行注视,单行注视不能跨行,斜杠加新号中间可以写多行注视,所以 a、 b、 c 三个选项都是正确的。 c、 d 是 错误的,工作中也是要写注视的。题四和题五都是考察的慢函数的相关知识。 题四,在 c 语言中,一个满整的 c 程序有且仅有一个慢函数,它是程序执行的入口。 题五, c 程序的执行是从慢函数开始的。题六, c 语言的基本单位是函数。题七, c 程序的三种基本结构,它们是顺序结构、选择结构,还有循环结构。 下面咱们来看算法部分。第八题, c 语言的算法的特性一共是五个,第一,有效性有穷性,确定性有零个或多个输入 有一个或多个输出。第九题, c 语言程序的执行顺序是变异链接运行,它呢会在后台生成三种对应的后缀名文件, 它们分别是点 c、 点 opg、 点 es, 大家注意,只有点 es 是 可以运行的。第十题,以下书中错误的是应该选 b, c 语言是必须经过变异才能被计算机识别的。 好,下面我们来到了禁止转换这一块的内容,我们首先要掌握十禁止和二禁止、八禁止、十六禁止之间的转化方法。这个方法想必大家应该都已经学过了啊,如果想听我讲的话,可以弹幕扣一个一,我专门出一期视频来给大家讲一讲。 那第二条 c 语言只有八、十、十六这三种禁止,它是没有二禁止的,但是呢,在程序运行的时候,所有的禁止都会转化成二禁止来进行处理。 第三,大家注意,八进制,它的开头是以零来开头的,而且在整个八进制数里是不能出现八的,因为逢八会进一,比如零幺七就是合法的,而零幺八就是非法的。 十六进制呢,它规定要以零 x 开头啊,这个 x 也可以写成大写 x, 如零 x 幺五 a 就是 合法的。第四,小数的合法写法。 c 语言小数点两边有一个是零的话,可以不用写, 什么意思呢?比如一点零可以写成一点啊,把这后边的零省略掉了啊,零点一呢,也可以写成点一,把前面的这个零省略掉了。 第五是科学计数法的合法形式,比如这个数就是一个合法的科学计数法, 这里有一个口诀,一前一后必有数,一后必有整数。大家可以看到这个一的后边是一个负一,是整数,所以他是合法的。假如啊,这个后边是一个零点一呢,他就是非法的。 假如 e 后边是空的,没有数字,它也是非法的,大家要记住好,咱们来做几道题练习一下。第十一题,这道题没有什么好讲的,简单粗暴的把所有禁制都转化成十禁制再进行比较,答案应该选 c。 第十二题,答案是 c, 只有 c 选项是合法的十六禁之数。第十三题, 以下选项中可作为 c 沿合法常量的是答案应该选 a, 它省略了后边的零。下面咱们来看 c 沿的第一种基本结构,顺序结构。大家来看这端代码,它的运行结果是让用户输入两个整数,输出两个整数之合。 程序呢,会从上向下依次执行每一行代码。我们先定义了两个变量 number 一、 number 二来储存用户输入的数据, 再定义一个变量 sum, 用于储存两个整数之合。这里的 number 一、 number 二还有 sum, 它们都是我们给变量起的名字,也就是 c 言中的标识符。关于标识符,我们要知道,标识符是由 字母、数字和下划线组成的,第一个字母必须是字母或下划线是不能是数字的,而且标识符不能使用关键字。 哪些是关键字呢?以下这个表格我为大家总结了所有常见的 c 语言中的关键字,特别是标红的这一些在考试中经常会用来混淆我们,大家一定要记住好,我们来做两道题。 题二,以下哪个是合法的 c 语言标志符?很明显答案选 a, b 错在哪?它的开头用了一个数字,这是错的。 c 和 d 呢?它们都出现了非法的符号。题三,同学们可以自己做一下,这些答案应该是 a。 刚才我们认识了标识符,下面咱们再来认识一下前面的 int, int 并引了。书籍类型是整形,也就是用来储存整数的书籍类型,它是最常用的一种书籍类型。 除了整形以外,还有很多比较常用的书籍类型,我都把它列到了表格里。这个表格需要同学们背过这几道题,大家可以试着自己做一下, 这也是答案,答错的同学请自觉往前翻,把表格里的内容背过。数据类型这块还有一个考点是阿斯卡玛和字母数字的对应关系,这里只要记住这个超级简化的对照表即可。那记住以后怎么用呢? 大家看,我们知道小写 a 对 应的阿斯卡玛是九十七,那么小写 b 是 九十八,小写 c 是 九十九,以此类推。大写 a 对 应的阿斯卡玛是六十六,大写 c 是 六十七,以此类推。 零对应的阿斯卡玛是四十八,一对应的是四十九,二对应的是五十,以此类推。好,是不是我们就能把所有的大小写字母和数字的阿斯卡玛和他们的对应关系都记住了呢?下面我们来做几道题, 这是题目的答案,下面咱们来学习输入语句,这里我们使用四杠 f 语句,连用户输入两个数字,写作四杠 f。 括号双引号里面这两个百分号 d, 它叫做占位符,中间用空格隔开, 然后是逗号。半的符号加上变量的名字,中间用逗号隔开。当用户输入一空格二的时候,这个一就会复制给 number 一, 这个二呢就会复制给 number 二。还有一点,经常考到输入的内容要和双引号里的内容完全一致, 比如这个语句四到 f, 大家可以看到双引号里边不是空格了,而是换成了逗号,这样我们在输入的时候也要把两个数字中间的空格换成逗号。 还有这句话,四个 f i, 双引号里边的内容有文字和冒号,这样我们在输入的时候也要把这些文字和冒号打全。第九题,正确的输入语句应该是什么呢?首先要把 a 和 d 排除,我们要使用四个 f 语句,它们的区别在哪?大家看这里的 i 的 符号一定不要忘记。 第十题,执行下面的程序时,将一二三分别赋给 abc。 正确的输入式,这里大家注意是有一个 a 等于号,千万不要落下,所以答案应该填, a 等于一, b 等于二, c 等于三。下面咱们来学习输出语句。 print f 语句可以直接输出双引号里边的内容,这里边呢,可以是普通的文本内容,也可以使用占位符输出一个整数或者是变量或者是小数字符,也可以输出表达式。 当他输出小数的时候,占位符变成了百分号, f 输出字母的时候,占位符变成了百分号。 c 必是一题。假定从键盘输入二三四五六回车,下面的程序输出的结果是什么?这里大家看百分号 d 中间多了一个二,这里多了一个三, 它是什么意思呢?它的意思就是第一次输入的是一个两位的整数,第二次输入的是一个三位的整数,所以我们就要把这个二三四五六进行一个拆分,把它们分别复制给 m 和 n, 那 么答案就显而易见了,应该选 c。 十二题是一道读程序题,比如这道题考察的就是占位符的使用, 占位符除了能够输出数据类型,也能输出禁止。比如这道题,占位符百位号 d 输出的是十禁止,整数百位号 o 呢,输出的是八禁止,百位号 s 输出的是十六禁止, 如果在中间加上一个井号的话,就是输出带前导的八禁止和十六禁止。这里呢,我给大家整理了所有考试中可能出现的占位符,如果遇到了,大家要清楚输出的内容是什么。刚才这道题考察的还有一点,就是这里的反斜杠 n, 它是什么意思呢?它是一个转译字母,代表回车换行,除了它以外呢,还有这些常见的转译字母,大家如果遇到了,要知道这是什么意思。再看这道题,已知 a 等于五, b 等于三,要算出 result 一 和 result 二的结果 好,是不是非常简单,只要把这两个变量带入这两个式子进行计算就可以了呢?没错,我们来看这里的加号、乘号,还有这小括号,他们呢,都叫做运算符,而这两个式子叫做表达式, 这个表格列出了所有我们常见的运算服务。这里优先级的意思是优先级靠前的要先计算,比如说如果式子里有括号的话,要先算括号里边的部分,这个顺序非常的重要,考试中经常会考到,大家一定要牢记,并且多做题。应用来看第十四题 第一个考察点,我们要知道乘法的优先级要比复制运算更高一些,所以要先算 c 乘以二,结果是十四, 那后边呢,就变成了一个复合复制计算。这里有一个易错点,复合复制计算符,它的计算顺序是从右到左进行结合。也就是说,我们要先算后边的这一部分,先算 b 减等于十四,也就是 b 等于 b 减十四等于负九, 再算 a 加等于负九,也就是 a 等于 a 加负九, a 等于负六,最后输出的结果就是负六。第十五题,我们来求这个表达式的结果。咱们先来分析一下,先算什么?是不是首先应该算括号里的式子呀?哎,没毛病。我们先来计算 a 加加乘以二,加上减减 b, a 加加,它是一个自增熵算,减减 b 是 一个自减熵算。大家注意,自增自减熵算加减号。如果在后面的话,要先把原值带入式子进行熵算,再进行加减 e。 如果说熵算符号在前面的话,要先进行自增自减, 再把结果带入式子进行计算。也就是说要把三带入进行计算。三乘以二加上这里的减减 b 呢?要先进行自减,再进行计算,也就是四减一等于三,它的结果一目了然,等于九, 九除以几呢?我们来看 c 减减减一,这里减减。在后面,要先把原值五带入式子进行计算。五减一等于四,也就是九除以四,它的结果是几呢? 是二。哎,有同学问,为什么不是二点二五呢?大家注意,它是一个 int 类型的数据,也就是整数类型,我们需要把结果里面的小数部分直接舍去,注意,不是四舍五入,是直接舍去 结果是二。好,下面看是六题,这里考察的是逻辑算符和加减法。运算符好,我们先来算加法,因为加法和减法它们的优先级要比逻辑算符更高。 b 加 c 带入进去等于七, b 减四等于零啊,这个式子就可以写成这样。我们先来看这一部分, 这个符号叫做逻辑语,逻辑语两边都不为零的时候,结果为真之为一,那我们看这一边的 a, 它是六,两边都为真,所以它的结果就是一, 那后边这个就变成了一或零,这个是逻辑或逻辑或两边只要有一个结果是非零数,还有的结果就是真,也就是一,最后的结果就是一。第十七题,这里考察的是关系预算符,不能写成这种连续的形式,而是要写成这样, s 大 于 y, 且 y 大 于 z, 答案选 b。 第十八题,这道题考察的是条件表达式,问号左边是需要判断的条件问号右边冒号的左边是,如果条件为真,那么结果就是它, 如果这个条件为假,那么结果就是它。我们来看这道题,当 x 小 于十, 来判断一下,当我们输入十二的时候,十二小于十显然是假的,所以结果是冒号右边的 x 减十二,代入算一下,结果就是零。 第二十题,乍一看这道题还是蛮复杂的,是多个条件表达式进行了嵌套。其实解这种题也有技巧,我们可以从右往左转括号。好,这里我们可以看到外层,这里的判断条件是 x 大 于四, 他是真的还是假的?五大于四显然是真的,所以这半拉都不用看了,只要看这部分,再看里边这一层, y 小 于五,真的还是假的。把三带入进来,明显是个真的,那只要看这个结果就可以了。 x 加 y, 答案非常简单,等于八。 这里记住这个小技巧表达是欠套,有诀窍。先从右往左转括号,还有三个支点需要补充一下。第一, get chair 这个函数,它的意思是输入一个字母。第二, put chair 这个函数是把这个字母输出到屏幕中。 第三,当 x y 需要进行数值交换的时候,不可以直接写成 s 等于 y, y 等于 x, 而是要使用中间变量,由这里设立一个中间变量, t, t 等于 s, s, y, y 等于 t。 来看下一种程序结构。选择结构这部分很简单,只要掌握两种语句就 ok 了。第一种 f 语句,咱们来看代码实力, 先输入一个数 if 如果这个数大于零, friend f 输出,这是一个正数。 else if 如果小于零,输出,这是一个负数 else 其他的情况呢?是不是就是等于零的情况,那就输出这是零。一共三个分支,对应三个结果 来看题, a 没有问题, b 错在哪了呢? a 大 于 b, 没有加括号,后面的冒号应该换成大括号。 c 错的比较隐蔽,这里少了分号。 d 选项也是一样,这里少了分号。 第二种选择结构,常用的语句是 switch 语句来看,这档代码输入一个一到三的数字,然后进行判断。第一种情况,当处死是一的时候,输出你选择了数字二。 第三种情况,当处词是三的时候,输出你选择了数字三, def 代表其他情况输出你输入的数字不在范围内。看这道题输出的是什么呢?我们给 grade 复制 a, 那 对应的是哪一种情况呢?对,是第一种输出优秀。 第三是一道程序填空题, e 耳在什么情况下是润年呢? e 耳对四取于等于零,并且 e 耳对一百取于不等于零,或者对四百取于等于零,这就是应该填写的条件。 这里有个易错点,等于是写作两个等号,一个等号的意思是负值不要写错了。其次是一道编程题,我们要根据题目要求把代码写出来,这里让我们根据学生的分数输出不同的内容。一看就是选择结构。那么咱们是用 if 还是用 switch 呢? 这里有个小技巧,判断连续的范围,用 if 判断离散的值。用 switch, 这里的分数是一个范围,那就用 if, 代码比较简单,这样写就可以了。 下面咱们来讲循环结构,这部分是考试的重点,占分比较多,大家一定要掌握。咱们先来看负循环, 这里咱们先定义了一个变量, i 等于一,当 i 小 于等于十的时候,就会执行后面大括号里的语句,然后 i 加加, 再判断一次爱是否还符合爱小于等于十的条件,循环运行,直到爱等于十一,不再满足条件,程序终止。下次一定就被输出了十次。我相信啊,在座的同学肯定不忍心让我看到这么多,下次一定都听到这了,还不安排一波一箭三连吗? 咱们来看提议,让你算执行次数。爱的出使值是零,每次加二,大家可以在草稿纸上写一写,所以循环了五次。这里有一个易错点,负循环的括号里是分号,不是逗号。第二,你可以暂停,自己算一算,正确答案是 b。 题三,这里多了一个 continue, 它的意思是跳过本次循环,继续下一轮循环。也就是说,在这轮循环中,循环体中,它后面的代码不管有啥都不继续运行了。 在本题中,当 i 等于三的时候, if 语句的条件成立到 continue 这里,后面这个 print f 语句就跳过了,直接跳到下一轮循环, i 等于四, 直到 i 等于六,循环终止。所以输出的结果是一二四五。大家记住 t 牛的用法,跳过本次循环的剩余部分。下面咱们来看第二种循环语句。 y 语句跟负循环不同, y 后面这个括号里是循环执行的条件,当 i 小 于等于五的时候,输出 i, i 加价呢,写到了循环体的里边,当 i 自加到六,循环就结束了运行结果如图。 题四,咱们还是在草稿纸上写一写,第一次循环 k 等于五,在这个范围内输出 k, k 等于 k 加二等于七,第二次输出七, k 等于 k 加二等于九, 第三次输出九, k 再加二就超过十了,不符合条件,循环结束。答案选 a t 五有两个知识点,当 y 后边的括号为一时,就进入了无限循环。 无限循环并不是不能出现,这里用到了第二个知识点, break 语句,当运行到 break 的 时候,直接结束循环。比如这道题,当 number 等于四的时候,直接结束循环,所以输出的结果是一二三。 下面是 do 循环,它跟 do 循环很像,区别是循环体挪到了前面, do 后面的大括号里就是循环体。 这个循环体不管满不满足条件,都至少会执行一次。所以这个程序虽然一上来 i 就是 六,不满足循环条件, i 小 于等于五分的 f 还是会运行一次,会输出一次。六、这里有一个易错点,大家要记住,我有后面的分号,一定不能丢掉, 大家可以自己做一下。第六题,这是答案。第七题考察的是无限循环,大家要记住,这三种都是无限循环的写法,答案选 d。 咱们再来一起做几道关于循环的编程题。提法要我们计算一到一百相加的和先定义变量 sum, 用于存放总和,每次循环 i 加一把 i 值加到 sum 里, 直到 i 等于一百,最后输出。三、第九题稍微复杂一些,要算从一到用户输入的正整数 i, 从一开始依次累加进 sum, 这回因为要的是正整数,就不能用 i 加加了,要用 i 加等于二,直到 i 不 满足条件。这里有个小技巧,知道循环的范围用负循环, 只知道循环结束的条件,用 y 循环,这里咱们知道结束条件是 i 小 于等于 n, 用 y 循环比较方便。第十题是一个很经典的题目,用循环语句反转整数一二三,大家可以直接把这段代码记住,经常会考到。 先设一个变量 reverse 等于零,用来输出每一位上的数 while。 当满足条件 number 不 等于零的时候,进行以下循环, reverse 等于 reverse 乘以十,加上 number 对 十,取于, 再让 number 除以十,也就是移除已处理的末位,最后用 print f 输出 reverse。 运行程序输出的结果就是三二一,成功完成了反转。这里有个小技巧,想要获取整数 x 的 个位,可以用 x 对 十取于 第十一题。一看到要打印金字塔,咱们就应该马上想到这里要用到一个负循环的嵌套,最外层的负循环,循环几次就是打印几行。 内层的第一个负循环,控制每行写明有多少个空格,每行都是 hit 减 i。 内层第二个负循环, 控制每行打印多少个星号,每行都是二乘以 i 减一个。下面咱们来学习数组题,让我们定义一个包含五个整数的数组。正确的写法是这样的,先写数据类型 int, 然后是数组名中括号 中,括号里写上数组中包含的元素个数。这里有三点要记住, d 数组储存相同类型的元素。 第二,数组中每个元素都有一个唯一的缩影。第三,缩影从零开始,通过锐棱可以获取到第一个元素的值。第二, 以下关于缩影描述正确的事, a 显然错了,所以应该从零开始。 b 也错了,所以必须是整数。 c 选项因为缩影是从零开始的,而锐五的最后一个元素应该是锐四也错了,所以答案应该选 d。 题三,题四考察的是数组始化。题三前三种写法都是 ok 的, a 选项是最标准的写法, b 选项后边控制的位置默认始化为零。 c 虽然重括号里是控制的,但根据后面列表中的元素个数、数族大小会自动定义为五。 d 选项错,在后面的列表中多了一个元素,跟前面中括号里的五不匹配。题四前三个都对,数组的中括号里可以是常量或者是常量表达式,但不能是变量,所以 d 错了。题五是考察咱们对所引的掌握。我们要知道 a 二、 a 五、 a 八分别对应的值是多少, 正确答案是 c。 提六这个程序其实在做的就是通过一个负循环找到数值中的最小元素,用 x 记录当前找到的最小元素,先复制为 a 零,然后变离数值,只要 a i 小 于 x, 就 把 a i 的 值复制给 x, 这样最后就得到了数值中的最小元素,结果就是 x 等于七。刚才咱们遇到的都是一维数值,你看这个数值不一样了, 他多了一个中括号,他是一个二维数组,二维数组中,第一个中括号代表了行数,第二个中括号代表了列数。比如这个例子,他有两行三列,第一行是一、二、三,第二行是四、五、六。提七 提七考察的是二维数组。出土话,刚才的例子中是写完整的,但有些元素是不可以省略的,咱们一起看一下。 选项 a 错了,这里是一个易错点,大家要记住,二维数字中,第一维可以省略,第二维是不能省略的。也像 b, 它是两行三列的数组,二乘以三等于六,可是右边却有七个元素,显然是不匹配的。 选项 c 没有问题,第一维可以省略,选项 d, 第二维省略了也是错误的,所以答案选 c。 提八很简单,元素有六个,有三列,那必然是两行,答案是 a。 题九,这里出现了一个二位缩写,咱们可以在草稿纸上画一下,就能很快找到一零的值。第一行是一、二、三,第二行是四、五六 a 一 零就是四。答案选 c 来看第十题,还是用画图法把这个三行三列的数组画出来, a 零二是三, a 一 一是五, a 二零是七, a 零零是一,代入算出来就是十五减七加一等于九。 好,下面我们来学习字母数组,当数组里储存的是字母的时候,我们这叫它字母数组,数据类型是叉,这两种写法储存的内容是一样的。这种双引号的写法是用字母串字面量来出示话字母数组,它自动在结束处加上了一个空字母。 第十一题,哈喽,后边还要加上一个空字母,所以这道题的答案是六。第十二题问,数组长度是多少?这里中括号里是五,所以数组的长度就是五。 字母串长度是看数组中空字母前一共有多少个字母,这个数组写全了,就是 abc。 空字母空字母,空字母前有三个字母,那么字母串的长度就是三。 size of 函数会返回变量所占的自结数,我们之前学过差儿类型通常占一个自结,所以 size of a 的 值为五。第十三题,字不出组,有五个元素不全的话,就加上三个空字副就可以了,答案选 a。 下面咱们来学习函数, 从这一张开始,难度又提高了一些,请大家一定注意听。函数是程序的基本组成部分,除了卖函数,我们还能自己定义一些函数。卖函数可以比作一家汽车工厂,咱们自己定义的函数就好比一些生产零件的分厂,我们可以让他们帮我们加工一些零件, 最后拿到卖函数工厂里组成汽车。我们先来看如何定义函数,这里我们举了一个例子,定义一个函数,功能是求出两个数中的较大的数, 先确定返回列型是 int, 函数名 max。 步号里面定义两个需要用到的形式参数, number 一 和 number 二。下面就是写函数体,最后把函数体运行的结果返回给这个函数来,咱们把代码补全。 在 max 函数里,我们创建了一个变量 is max, 让它等于 max 函数的返回值。 max 函数里的五和九就对应这里的 number 一 和 number 二,待入这段函数体运行后,结果是九,九就是 max 函数的返回值 is max 等于九,最后输出的结果就是最大值是九。来做几道题。 题一,函数定义的正确顺序应该选 a。 题二,答案选四, d, 这三种都可以作为函数的参数。题三,是错误的,函数不可以嵌套定义,就是说函数里定义函数是不允许的。 题四,也是错的,通过添加头文件,是可以调用其他文件中的函数的。题五,这道题大家自己算一下结果是十,是不是非常简单。 关于函数的返回值,咱们来做几道题。题六, a 选项是错的,函数可以没有返回值。 b 是 对的,函数可以没有参数。比如这个函数就没有参数,它每次调用都会打印一键三连。 c 是 错的,函数名可以和变量名相同,但是不建议可读性会变差。选项 d 也是错的,没有返回值的函数没有 return 语句。答案选 b。 第七题,注意,没有参数的函数,返回类型要用 with。 第八题,当返回类型是凹凸,会由变义器根据返回值自动推导。 第九题,大家要记住函数之间传递的是值,所以答案选 a。 咱们先定义了一个函数 at one, 可以让输入的参数四加一再输出出来。下面的外函数中我们定义了变量 a, 调用前 a 等于五,没有问题。调用函数,把 a 的 值传递给函数 x, 函数内输出 x 等于 s 加一,也就是 s 等于六。 函数调用后,这里就容易出错了,大家注意, x 是 行三, a 是 十三,行三的修改是不会影响十三的值。虽然刚才 x 加了个一,但是 a 只是把值传递给了 x, 它自身没有变化,所以调用后 a 还是等于五。第十一题, 这道题考察的是局部变量生命周期。我们先声明了一个函数 count, 在 函数 count 里声明了一个变量 c、 n、 t 数值值为零, c、 n、 t 加加再输出出来。那么函数里面用负循环调用了三次 count 函数, 因为这里有个 c、 n、 t 加加,那调用三次结果就是一二三吗?不是的, c、 n、 t, 它是一个局部变量,它只存在在 count 函数里外,函数是不能直接调用它的。每次调用 count 函数时, c、 n、 t 的 变量会被重新创建,并且初始化为零,所以最后输出的结果是一一一。 第十二题,这里多了一个 static, 别的跟上题一样,那这回答案还是一一一吗?不是了,因为多了 static, c、 n、 t 变成了一个静态局域变量,它的生命周期就变了,它只会在程序开始执行时触式化一次, 所以第一次调用是一,第二次是二,第三次是三,输出的结果就是一二三。这里 static 的 作用大家要了解,普通局域变量每次调用触式化 静态局部变量,每次调用只会保留下了 static, 把普通局部变量变成了静态局部变量。咱们一起来做两道编程题。第十三题,使用函数编写程序输出十的阶乘,先定义函数 factorio, 有 一个参数 n, 设一个局部变量 result, 从 e 到 n 进行循环,把每个数累积到 result 中,最后把 result 值返回给 factorio 函数,然后在 m 函数里面直接调用 factorio。 十三是十, 这样代码就写完整了。第十四题,咱们要判断一个数是不是质数,就要看它是否满足以下条件,大于一的自然数中质能被一和它自身整除的数就是质数。 先用 if 语句判断出所有小于等于一的数返回零,意味着不是质数,它用负循环变例二到二分之 a, 看有没有哪个数能整除 a, 能整除则返回零。不是质数都不能的话就返回一说明 a 是 质数。骂函数的内容就简单了,输入一个数字,直接调用 s prime 函数,返回值为一就是真的。打印此数是质数,否则为假。打印此数不是质数。这个表格里是常用函数,大家可以记一下,如果遇到了要知道是干什么的。另外有个易错点,使用时要把对应的头文件添加到代码的最前面。下面咱们来讲指真。咱们来看第一题, 已知有一个整形变量 a 等于十,然后我定义了一个整形变量屁,大家看这个屁前面多了一个信号,那这个屁就变成了时针变量。时针变量屁里面储存的是地址信号屁,叫做极易用操作,代表了这个地址对应的值。因为 int 信号屁等于 and a, 定义了时针变量 p, 并将变量 a 的 地址按 a 复制给 p, 此时 p 指向变量 a, 信号 p 就 代表了变量 a 的 值,也就是十。咱们可以直接把 p 输出出来, 看到结果确实是一串内存地址输出信号屁的话,结果是十。所以大家要理解,时针变量是用来存放地址的,一般变量用来存放数值。那大家看一下第二题会做了吗?时针变量怕指向变量 a, 那 它储存的就是 a 的 地址,按的 a, 四根 f 函数需要的正是变量的地址,所以四根 f 的 括号里可以直接填写,怕它能够正确地将用户输入的整数赋存到变量 a 中, 所以这里的答案选 a。 题三,时针变量可以指向哪些类型的数据呢?整型、浮点型、四浮型都是可以的,答案,选 d。 题四,以下说法错误的是 a、 b、 c 都是对的,是 d 错了。未触使化的时针不能进行仅引用操作,不然会报错。第五题,这题考察数足与时针的关系, 当时针 p 被出示化为 a, 这意味着 p 指向了数组 a 的 首元素 a 零,再执行两次 p 加加,也就是时针向后移动两位,此时时针指向了数组中的第三个元素三,所以这道题的答案就填三、 六题,时针变亮,屁指向了一个字母数组 c。 我 们可以先把字母数组里的元素都写出来。咱们首先要知道,屁加一表示将时针屁向后移动一个单位,屁初时指向数组 c 的 首元素 a 往右移动一位指着 b, 这里没错, 再移动一位是不是就指向了空字符啊?所以这道题是正确的。第七题,咱们一起来阅读一下这段代码先创建了一个数组,而锐数组有五个元素,一二三四、五创建时针变量屁指向数组,而锐的首元素地址。关键来了, 这个信号屁加加是什么意思?它的意思是 d 先进行且引用操作再加加,也就是字加一, 注意是时针 p 加加,此时 p 指向了锐一,也就是元素二。咱们再看下一步,括号信号 p 加加,这就不一样了,这个表达是,首先通过信号 p, 即引用时针 p, 或许它当前指向的值, 再对这个值执行后续的自增操作。加加,也就是锐一对应的值,二加 e 等于三,那输出的结果就是一和三。 第八题是一道编程题,让咱们边写一个函数,用来交换两个整数的值。有同学说,哎,那很简单呀,我定义一个函数,传入两个变量 a 和 b, 再设一个中间变量,这样导一下不就行了吗?运行看看。哎,没换过来。为什么呢? 之前咱们在函数传递那里讲过,局部变量的变化是无法传递回时差的。那怎么办呢?大家记住,在这种情况下,咱们需要使用指数作为函数参数,因为普通的传输方法无法改变时差的值,而传递值也就是使用指的方式, 可以让函数直接操作时差所在的内存位置。所以要像这样修改一下代码,此时函数能够直接操作时差所在的内存位置,反而实现了对时差数值的修改。恭喜你看到这里已经完成了 c 语言考试绝大部分常考知识的学习, 剩下的知识点在考试中占比较小,我带大家快速过一遍。先来看函数是干什么用的,一般会考察选择题或填空题,题题 用来比较两个字母串的函数是 string compare。 第二,连接两个字母串的函数是 string concatenate。 第三,用于获取字母串长度的函数是 string lags。 第四,可以将一个字母串复制到另一个字母串的函数是 string toppy。 第五,用于将字母串反转的函数是 string rewards。 下面咱们来认识一下结构体。结构体 struct 是 c 语言中的一种重要数据类型,它允许你将不同类型的数据组合在一起,形成一个新的复合数据类型,方便对相关联的数据进行统一管理。 先来看如何定义结构体,关键词, strict 结构名大括号,大括号里是成员列表,可以包括不同数据类型的成员。比如咱们举的这个例子,先定义一个结构体,收集学生的年龄、姓名和成绩。成员列表里就有整形变量年龄 h, 自负型变量名字 name, 还有实型变量 soccer 成绩。想要给成员赋值,可以使用点预算服务,像这样一条条进行赋值,也可以像这样使用带货号进行出场赋值。题六,大家试着做一下,正确答案是 b, a 容易混淆,它错在成员中间要用分号隔开,而不是逗号。题七,咱们要记住结构体指向以用成员变量的方式是使用箭头儿计算符选 b。 提八,这段代码先定义了一个结构体 person, 然后创建了一个数组 class。 十来储存这些结构体, 对数组的前四个元素进行了初步化,然后打印了 class。 数组中的第三个元素就是它,对吧?点内幕零,那就是内幕字母数组的第一位, 也就是这里的 m。 关于文件,咱们要掌握几个常用的函数,第一个是打开文件来看。题九,正确的打开文件的操作方法是选 a 等号,左边是一个 file 类型的至臻 f b 等号,右边是调用了 f。 open 函数 用止读模式打开了 date 点 t s t 文件,其实关闭文件的函数选 b, f close。 第十一下面函数能从文件格式化读取数据的是选 b, f 四杠 f。 第十二题在 c 语言中用于向文件中写入数据的函数是选 c, f 不 认得 f。 第十三题是考察打开文件的模式,这里允许追加的是 c 选项, 下面这个表格就是所有打开模式的说明。好,下面咱们来学习一下红定义,标红的这句话就是红定义,他的写法是井号底范红名红参数红体。例子中定义了一个红,用于计算两个数的平方和 可以在骂函数里像这样直接调用。第十四题关于红定义的说法,正确的是, a 是 对的,红定义是在编一阶段进行替换的红定义它可以没有参数,也可以嵌套使用,它不影响程序的运行效率。第十五题,请你先来做做看 是不是等于十八,哎,等于十八就错了,因为红利只是简单的文本替换,直接替换为三乘以二加四,算出来是十,答案选 d。 第十六题,他有两个红利,必须有些复杂,不用怕,咱们一步一步来 看,第一个红利说大写 n 可以 替换成三,那咱们就把第二个红利里的大写 n 替换成三,那这里的括号里就变成了四乘以 n。 然后咱们来看执行语句, 先把这里的大写 n 替换为三,再算出 y, 后面的括号里五加一等于六。根据第二个红利义,我们把六替换成四乘以六,那这个语句现在就变成了 z, 等于二乘以括号里的三加二十四 来算一下,结果是五十四。下面咱们来认识一下美举。首先要用这种格式定义一个美举类型名,然后是大括号里面来填写美举常量, 尾举常量中间用逗号隔开封明。尾举变量的方法是音纳尾举类型名。尾举变量等于尾举常量。使用的场景呢,一般是用于条件判断,比如随时一句, 咱们来做几道题, b。 十七题,以下关于尾举说法正确的是, a 是 错的。尾举类型的变量只能取尾举定义中列出的尾举常量所对应的值选项 b 是 对的。尾举常量的值不能修改 选项 c 是 错的。每举类型定义中可以指定常量的值,这选项说的也是错的。每举类型和整型是可以进行相互转换的。 第十八题,因为没有给每举常量指定值,所以默认第一个常量的值为零,后面依次递增一,所以答案选 b。 但来看第十九题, 咱们可以看到这段代码先创建了从周一到周日七个每举常量,然后判断给定的这一天是否为周末。 如果这个表达式的结果为真, return 一, 反之 return 零。在冒函数中将此 day 设为 saturday, 然后调用 is wicked 函数,用运符语句进行判断。如果 return 一 输出,今天是周末。如果 return 零输出,今天不是周末。这里的输出结果是今天是周末。 咱们来认识几种谓运算符,两个整数进行谓运算,都要先转化为二金之数,再逐位进行操作。先看第一种暗谓语, 需要主位进行逻辑与操作,只有当两个位上都为一时,结果才为一,否则为零。按位或主位进行逻辑或操作,只要有一个位上是一,结果就是一,否则为零。 按位亦或也是主位进行逻辑亦或操作,当两个位不同的时候,结果就是一,相同的时候,结果为零。下面是按位取反,主位进行逻辑取反操作,就是把一变成零,零变成一。 左移向左移动指定的位数,右边呢,用零来填充,右移就是向右移动指定的位数,左边的位数用零,或者是用符号位来填充。 咱们来做两道题。第二十题考察的是按位与运算符,咱们要把 a 和 b 写成二进制的形式,分别是 a 等于零零零一, b 等于零零一零。按位与运算的结果为零,那 if 后边的括号里就是零,条件不成立,运行 else 后面的语句输出这三个符号。 第二十一题, a 和 b 按位与计算的结果是只有第二位和第八位保留了,因为同一位只要有一个是零,按位与计算后的结果就是零。那么就说明 b 的 第二位和第八位是一,其他的位上是零,答案就是它。

感觉这个视频发出去会被别人嘲笑。肯定啊,呵呵呵。好吧,别人评论区都说街街都是这种对手,我真服了你了。第四题是吧?对, 它就只有一个字母,这个是那个编码存储的嘛?编码那个二十克码,二十克码呀,对吧? 你看吧,你们看一看它对应的是多少?它是零五五吗?嗯,你看它,它对应的它存入的符号是减号吗?零五五五。对, 就它加了个斜杠的嘛,那个就是 ask 码嘛,加斜杠就是 ask 码,就是它加了个斜杠呀,斜杠就是相当于告诉它这个是用 ask 码存储的。嗯, 哦,明白了。就相当于实际上正常来说,你的这个欠儿里面,你如果存的是一个 a 字母,它存的也是相应的字母嘛。比如说存的是幺零幺, 好,就他存的都是都是字母,都是数字嘛,一个斜杠幺零幺,所以说他会说这个制服串,嗯,制服串他是不是最后会存个零,对吧? 字母串最后会存个零,字母串不是最后一个位置存的是斜杠零吗?表示结束吗?对啊,它就是相对存的是一个空字母嘛。嗯,就结束了,它是这个意思。 ok, 你 其他的数字刚刚我们说的是多少来着?杠,零五十五。哦,五十五,五十五是七,对吧?相对实际上表示的是数字七啊。 然后我们比如说存的 a, 它就是存的是六十五,斜杠零六五。嗯, 比如说第六题,你看它存的是 hello, 对 不对?对,它 h 在 内存中它是存的什么呢?它就是,你看找吧,相应的 h, 它就是存的斜杠,一个斜杠幺零四, 然后在 e 又是多少斜杠多少数字这样的形式存出来的。嗯,好,看下这个哈, 先计算先。先计算。能计算的呀。那取余要对谁取余啊?对多少?哪个数字取余啊?对 x 取余啊。 x 对 x 取余是什么意思? 哦,对,那要对 y 加五,你比如说只能七对二取于,那就七除二。嗯,等于三于一嘛,所以等于一。嗯,它是这样的,它是先计算 y 加五加法的这个顺序是在这个前面的吗? 你看 y 加五七嘛,对吧?然后一对七除以还是一嘛?啊? k 为整数,除以十二,那十二,这,这个现在明白了吗? k 等于 a 对 k 除以 啊,十二除十二于几嘛?等于几于几等于零于零。 十二乘十二等于零等于零等于一于零。下一题哈, x 等于零 是直行,那 x x 现在等于八了吗?对,然后 x 乘五五八四十。那 x 还是等于八呀? 它乘五,它又没把这个值赋给 x, 哎,我搜一下,这个是三 x 点三加五, x 乘五, 对,就没,没人接受它,虽然这里是逗号。嗯,但是相对 x 是 等于八,然后逗号这里是四十吗? 对吧?它就没,没人去等于它,所以那个就不算。就是如果是这样,我不知道这个可可不可以啊。如果是这样的话, x x 就 等于八,然后 y 就 等于四十, 就是相对它是这个逗号的话,它就是这样,就是对应的。但是 c 的 话我我不太清楚。 非法那是报错了,非法的,相对于他就后面就就没,就那个就没用。逗号后面什么时候?逗号后的 x 乘八有用?乘五是吧?哦,只有在这这种情况下 for 里面的逗号可以多多几个其他条件或者这样你你 print 的 时候,然后他不是有好几个逗号吗?这样子, 所以,所以它没没用。对,就是它要比说这里如果是 a 的 话,先是 x 等于,比如说三加五是八,然后 x 再乘五,那 a 就是 等于的是第二个,嗯,第二个值就是相当于它需要有个括号, 对,就是相当于最后把它扩起来再赋给其他的,它就是等于逗号这个后面的值。嗯,如果没有的话,它那个逗号就是没用的。后面对, 这个不就是 int 八除四二嘛,二是应。这八和四都是 int 型的呀,它这个也是 int 型的嘛, 哦,对吧?就是因为它全部定义都是 int 型的,所以即使它有小数,它也会 强行变成引导型,这个是他定义的是 flow 型的二点五,嗯,但是他把它转成了引导型的,那他就变成二了。这些同时定义是 flow, 但是他, 你看这个括号计算完之后,他把它转成引导,嗯,然后就是引导。除引导,那还是引导。嗯,前面这个八和四,它就是个引导。嗯,前面这个八和四,它就是个引导。嗯,前面这个八和四,它会写八点零和四点零十二 t x, 那这不就是 int x 三点四吗?那 int 转了之后就是三了吗?三,然后啊,三乘零点五为一点五。哦,我没把它转直接乘的,这表达是 y 加等于,就 y 加 x 加加。它应该是这样的, 它先是 x 等于 x 加一,然后 y, 对 不对?这先先 y 等于 y 加加 x, 然后再 x 等于 x 加一, 是这样就加加,如果是加加 x 的 话,它就是先对 x 加一,然后再再来五对负三取于, 那不应该是负的,对,负的取。你要这样想,你看五对负三取于你看五,假设五对三取于哈,那是五除以三等于一 于二,对吧?对,余的这个他是要尽可能接近零的,对吧?对,但他不能小于零嘛。 那五对负三去一想,它是不是如果等于负一的话,它是不是余了个二 等于负一余二,如果它等于负一的话,是不是该余一个二?对, 好,如果他等于零的话,是不是应该是余的是一个五?对,如果是他等于一的话,那余的是一个八吗?对吧?那是不是这个二他是最接近零的?对,然后他又不能不能小于零吗?如果是这个负三, 如果是负二的话,负二的话,他就是余负一,这个肯定不是余了吗?就超出了吗?为什么不能小于零? 啥?为什么不能小于零?榆树就是不能小于零,所以它叫榆树,但是后面那个就可以小于零了。 哎,对,它后面那个答案是负二。哎,有道理,搜一下,呵呵。哎,博士翻车了。向零取整, 它是先计算出来,然后向零取整负一,然后再再这样来算,那除以负三,那就一点六,向零取整,那就是一。嗯,然后 再负五减负三乘一,就剩个负二做笔记吧, 把两个题的计算的这个过程也写上去,到时候你光有笔记也看不懂。我之前为啥为啥求余数的时候都没用这个公式啊。我好像直接就这样算出来了呀。因为之前是是正数除正数吗?嗯, 那不是一样的吗?来演算一下吗?假设是五除三,嗯,那你五除三是不是等于一点六几吗?那像取余,像零取整,是不是就是变成一了吗?对, 好,那你余数是不就等于被除数减去除数乘商等于二吗?那不就是五除三等于一于二吗? 被除数是负三,负三等于除数,负五被除数是负五,被除的那个谁是被除的?除号前面那个才是被除的。可是是五除三呀,五除负三呀。那除的不是被除的不应该是负三吗? 那个是除的呀,是用负三去除的。五三是除数,五是被除数。对啊,三三才是除数啊。 这个只能死记硬背下来。这这没法给你再再详细的给你讲。哎,我之前一直觉得我之前一直觉得除法的后面那个才是被除数,前面那个是除除数。 嗯,你看被除数位于除号的前面。我把那个除数被除数搞混了,所以我就我就有点这个公式对不上那个数字,现在明白了, 感觉这个视频发出去会被别人嘲笑。那肯定啊,别人评论区都说 j j 都是这种对手。 a a 是 零,我可以排除的啊。零就是 fos 吗? fos 就是 不执行吗?对啊, b 减 a, b 减 a 是 四嘛?四是是竖,竖的反义是 force。 那 它为什么能直行呢? 对啊,为什么呢? sorry, 因为这几个答案选 b。 啊。啊,这答案选 b 吗?对啊, a 不 等于 b 啊。关键是因为我红笔画在那里了。这是他答案的解析,他说这是赋值表达式,两个等号才是那个判断。 嗯,那那相当于就是让 a a 等于四了,然后四就是处,所以它可以执行。 a 是 不是变成四了?对,然后就可以执行, 只要不是零就是处,只要不是零就是真的,真的就可以执行。 ok ok, 明白了, x 等于一, y 等于零,如果 x 它是一嘛,那就是处,对吧?嗯, 感叹号是不是取反,它就是 false, 嗯,所以它就不执行,对吧?然后就跳到 else, 然后它就跳到 else else, 是 不是 x 是 不等于零呢?它不是。嗯,这个 if 应该是跟在这儿的, 应该是在它之它之间的嵌套吗?对,就是这个 e f 当中,它还有 e f。 又来判断刚刚说的 x 不 等于零吗?对 那,那这个它 e f 下面的所有语句就是这一坨都都不会直线啊。嗯,那,所以 y y 就 没变, y 还是零啊。哦, 明白了。嗯,好。如果 x 等于零,我们开一下 force 变为 true, 它就会执行这个执行,那 y 就 变成。对对对,就这样行嘛。 abc 二三幺,如果 a 大 于 b, 好 过了。 不满足不执行吗?嗯,对吧?它不满足啊,二不大于三嘛,那下面的全都不执行啊。那,那直接 print n 的 呀,它就 n 的 了呀。 哦哦,是直接分下 end 了?对啊,都做错了。执行语句后变量 m 的 值 好, m 一 二三好,执行到四嘛,四还是可以的。那就五。现在 m 等于五,它还是满,还是会进入循环。嗯,那就。然后 m 还加加了嘛?判断完之后它才加加嘛,对吧?嗯, 判断完之后加加,那不应该是一二三四五再加一六吗?就是它 m 现在假设等于五嘛,在这执行下面的时候, m 等于五嘛?嗯,对吧。执行完了之后它要来判断了, m 还是小于等于五的嘛,对,对吧?然后它要,然后再 m 加一嘛,就 m 等于六了嘛,就不满足了,对吧? m 等于六的时候执行下面的, 对吧?嗯,可是它不不满足小于等于五啊,不应该就不不执行停止了。 m 等于是先判断它小不小于等于五,判断完之后再对 m 加一啊。哦对,这个是加,加在后面 我总是。那相当于 m 等于五的时候,它还会执行吗?但判断完之后 m 现在变成六了。嗯,对吧。对, 好,六的话六它去执行它,它不满足了嘛。对对吧,但它还是要加嘛,它还会加。 m 等于七了嘛,就变。对啊,就变成七了嘛。 ok, 明白,是选 c 吗?是是选 c, 好 变量。哎,这这个不是一样的吗?这个也选 c 嘛。对,因为上一次说的也选 c 没错, 对吧?这 i i 等于假设 i 等于四的时候,他不满足了吗?一二三四对吧,然后再加一。还要再加一嘛。判断完之后再加一嘛,那就五嘛,最后, ok, 这个循环次数 等于零, y 等于零, y 不 等于一二三,并且 x 小 于四个 y 肯定你这个永远是正确的。 它怎么可能它就肯定不等于一二三呀, y 都不会改变值。对啊,那就 y 就 不管嘛,就是干扰式啊。那就看 x 嘛,牵涉 x 等于零的时候一次 对零一, x 等于二三四次四次嘛,选一嘛。 ok, 那 第一页就看它就定义了两个数。嗯, 循环题语句没有啊。它没有那个大括号吗?那就没有啊,空的呀,没有大括号就没有。 对啊,循环题语句是指大括号里面的吗?就每次循环要执行哪些语句?那 for 这行是是循环条件。哦,那就可以就粗俗化条件 迭代表达式和循环题啊。这个是粗死化条件语句 ok? 粗死化语句,条件语句迭代表达式语句循环题语句 ok。 哇,你给我买衣服 y 等于零。嗯,我买衣服好暖和, 谢谢。好, y 等于加加 i h, x 是 它的 i 等于零, x 大 于八,那就是十大于八嘛?嗯,先先 print print x 和 y, 那 就是十和十,然后现在 x 变成九了,对吧?嗯, 那你再再重复一遍,它不是先 print 的是 x y 吗? 对, x 减减, print 完再减减。啊?对,跟那个 x 加加一样了,对, 对吧?那像你 print 先 print 十和十嘛,对吧?然后再再再减一个一 x, x 就 变成九了嘛?对,对吧?九和十了。好,它会执行,执行一次,这个是不是第一次执行?对, y 等于加加 i 好,现在 y 变成几了吗?现在 y 变成了,呃,还是还是对十加一,这个是先先对 i 加一嘛? i 变成一了,然后不对,变成十一, y, y 是 变成一了。 哦哦,对对对,这是 i。 我 看错了,这是 y 等于不是 y 加等于。那 y 变成一了。嗯,好,它会再执行一遍。刚刚是九一,是不是九一,你看到吗?对,对吧?然后 x 变成八了, 但是执行完这一句, y 还要再执行一次嘛,对吧?嗯,循环嘛,循环了第二次它会再执行,那 x 不 满足了,它就退出了嘛。嗯, ok, ok, 然后是下一题,下一题有点长。 第一问是啥呀?第一问是输出结论啊。第一问,你做对了吗?对,我做对看一下啊。 i i 等于一,如果 i i 整 i 的 余, i 除二的余数现在是几啊? i 等于一,除二,余数等于一。一直行嘛,打一个这个对 ctrl 六,就相当于后面不执行了,直接回去。嗯, i 变成二了吧?对 零,然后现在余数零好,它就不执行这个就 print 这个星号。嗯,然后再回去啊。像你第一问是对的嘛?是你问你第二问怎么做的是吧?对, 输出这个。那就只让它循环两次不就得了。你这里 i 小 于三不就行了。哦对, 听君你肯定不可能去去去改下面的语句啊。它说循环条件,条件不就是这一块吗?忘记了吗?记起来了,你把把这个抄抄下来。抄下来这个这个哪一部分是什么?你把抄下来。好 for 说实话条件 表达式 ok? 嗯,那给还有最后一题这一张最后一题也是倒计算。 嗯, a 等于一, b 等于一, a 小 于等于一百 a 加加 如果相对于 b 大 于等于二十就 break break 是 不执行这个 four。 嗯, continue 是 继续要进入下一次循环哦 continue 是 进入下一次循环, break 直接结束。 欸,但是你这里它是写的停止循环吗?嗯,大差不差的意思。那我就算自己停止循环,那不就是 break 吗? continue 也是啊,只不过 break 是 直接终止,但 continue 是 结束。那你要写清楚啊,要写停止当前次循环。你这个有歧义的就要写清楚。好, 你又你让老师来拆,那老师就直接给。懒得给你拆,直接打个错,比拆要简单的多。 ok 停停止,你写清楚。停止当前次循环,直接进入下一次循环直接进入下一次循环。 那这个必须说清楚,你 break 你 可以直接写中止循环。那没啥问题, 就是你要描述清楚,它是这一次不执行了,循环结束然后下一次。好来看嘛。好, a 等于一, b 等于一哈,如果 b 余数是一, 现在 b 余数是一嘛,对吧?一除三的余数。一除三余数不是二吗? 不是吗?按照刚刚的方法自己算一下一除 三几啊。哦呃,它是等于零点三于一 是零于一啊。什么零点三于一都算出小数了就没余数了呀? 因为因为你那个 b 除 b 对 三取余数嘛,就是 b 除三啊。 b b 你 要么就三,三个整,三个整数, 你要么就三个整数余余一个整数,你要么就三个小数。你不能三个小数等于零点三,然后再余一啊。三个小数要干嘛?三个小?你刚刚说的你说等于零点三于一。 对啊, 你要么要么你就一 除三等于零点三三三。嗯,你要么就一除三等于零 于于一呀。你你这个一除三,你你等于零点三于一是个什么意思呀?那为什么它是可以直接于一啊?零于一 什么叫可以直接零于一?你上面写的呀?可以,要么就是你写等于零点三三三可以,也可以是等于零于一。我就说不能这样,不能这样。 我知道啊,但是为什么可以就是直接等于零于一?等于零于一是前提是这两个都是整数,你就可以,你肯定有除不尽的时候呀,所以会有余数呀。可是余的为什么是你都想 你按照这个方法计算呀? 余数,那你除是零点三嘛?向零取整,那商就是零嘛,对吧?对, 好,那你余数是不得被除数减,除数乘三。对,那你被除数是一减除数乘零三,一减三乘零,那不就还是一吗?嗯, ok ok ok, 我 感觉得给出一点那种小学加减乘法给你巩固一下。是不是 没有?我只是这里的时候有一点点搞不清。因为他有小数,然后他需要向向零什么取舍,然后会把我绕进去,但我现在现在明白了,小学的,呵呵,待待 于除法起步一百以内,不要给出答案,自己来做。 好,继续继续。这个怎么数都是十,都不是九。好,你先说你怎么数的? a b? 嗯,杠 n 打是这么数的,停停停停啊,这个,这个像不数吗?这个斜杠零,这个是那个啊?圈出来好, a b, 这是两个了,对不对?嗯? 斜杠 n 是 啥呀?那不是个换行符吗?应该算一个呀。我当时在在在纠结啊。我当时在想,但是,但是他又写在这中间,应该是他就算单个的吧。 他是说打印的时候他先打印他怎么打印?他先打印个 a b, 然后换行了,然后在这儿哒哒哒哒哒, 就在这儿第二行又又写,巴拉巴拉巴拉继续写后面的这些。那我自己再来数一遍。你让我再数一遍 a b 杠 n, 斜杠斜杠两个。好,错了, 为啥 a b 两个?这个斜杠实际上它是个转译符号。嗯, 还记得吗?你不说这是一个换行吗?这转 e 符号嘛?转 e, 如果没有这个斜杠 n 就是 n 嘛,转 e 了就是把 n 变成计算机默认的意思,就是换行。 ok, 同样这个也是转 e 符号嘛。嗯, 他原原本这个斜杠 n 是 个转转 e 符号,对不对?对,他对,他对这个斜杠 n 再转 e, 转 e, 不是斜杠,就是个斜杠。那你刚刚说斜杠 n, 哦,说错了,就这是转移符号。这个斜杠 n 对 谁转移了?对杠,对斜杠 n 转移啊。对斜杠转移, 只对斜杠转移。哦,它转移的意义是什么?就是说,那你想哈, 我如果不转移,我平时如果想打出 a b 斜杠这个斜杠我该怎么打出来啊?就直接打一个,直接打它会认为是转移符号呀,它会把后面和它后面这个结上面那个小逗号。 小逗号。这个对,也不行啊,他就只有转移,再转移就他把他自己给转移了。哦,就相当于这是两个,实际就一个, 其中有一个是转对,相对。这个第一个是转移嘛?你遇见的第一个斜杠肯定是转移。对,就连续的第一个是转移,他转移到谁?转移到他自己,嗯,相对,他把他自己转成了另外一个意思。另外一个意思是什么?就是正常的斜杠。对, 好,那所以它要存一个斜杠,对吧?对,这就四个了, a b 杠 n 斜杠,零一二 二零一二二八个呢?这个不又不又一个吗?两个斜杠,然后零,没有。哦,九个,对啊,九个,明白了,对啊, 明白了,你看哈。好,我们来来看一下, 把各种情况都那个一下。 哎,识别错, 两个杠,再开一把变电,还有一个杠,再来 看,现在是 a b, 再是斜杠 n。 对, 然后再是反斜杠本身。就是这两个嘛,再是零一二二,再是反斜杠本身。嗯,那我们再看一种情况,有这个只有一个斜杠,嗯,看它是怎么怎么存的, 它就会直接把它理解为转移吧。对啊,转移,那要看它怎么转,对吧?它就是。呃,零幺二 三位取三位。取三位是什么?是不是 ask 码?嗯,零一二找一二这个位置啊,它这里是换页键嘛?可能正常来说我们会取一个制服,比如说零五零这样子。对, 然后还有个二,是不是多了个二?对,然后再反斜杠本身,对吧?嗯 啊,那如果哈。嗯,如果没有这个斜杠啊,没有最后那个斜杠零,它是不是答案应该是一样的?对啊,那个斜杠零就等于说它其实不占那个直角,你不写的话它也会补充上去,对, 对吧?一样的。好。下一题还有哪个第九吗?到下一张了。 哎,不是,这只讲了一个题。啊,没讲完啊。对,我忘记了。还有一题。哪个题?十一吗?对,十一题。一样的吧,我自己来,这次我可以自己来了,上一个。好,你自己来, k u k e 四个,然后一个斜杠。嗯 嗯,一个 c h u a n, 十个,然后一个斜杠十一。嗯,一二三,一个斜杠十五个。嗯,对,明白了。 然后现在到下一章,下一章是函数。好,函数讲完就暂时没有了,因为指数的话我还没。我还没复习完,正在复习。好。

大家好,我是智能车老学长。接下来我们接着上一节课继续为大家讲解 c 语言入门教学。上一节课我们演示了,上一节课我们演示了 hello world 的 执行打印,那我们简单回顾一下这个代码,因为我们拿到一个 啊点 c 文件,我们要习惯性的去找它的一个 main 函数,因为所有的 c 语言程序都是从 main 函数开始执行。 然后大家可以看一下这边的话,总共就几行,我们一行一行看一下。首先是一个慢函数的一个入口,它有几个参数类型,这个是函数的返回值类型,说明说这个函数运行完,它会返回一个 int 类型的参数,然后这个是函数名, 主函数的函数名都是固定的,然后这边的话是主函数接收的一个行仓参数,这边为空的话就是 表示不接受任何参数。再往下看的话就是还有个大括号,大括号表示这个函数的一个作用域,然后这边的话是一个注视啊,这个注视的话实际的不影响我们代码的一个运行。 然后还有另外一种注示方式的话,是加两个斜杠,然后后面跟着一个注示内容。然后我们可以看一下这个是我们具体的日字输出函数,它会打印一个 hello world, 执行完这个打印之后,它这个函数就结束了,它这边运行到这个 return 零, 锐特零的话,跳出当前主函数的一个语句,然后他会返回 int 类型的参数零。当然如果说我们把这个地方改成一个 word, 这个给它注视掉, 那相当于我们这个主函数就就是一个无任何返回值的一个函数,那我们运行一下,其实他也是打印出 hello word, 如果说我们想改一下参数,把 w 去掉,那他打印出来也是少了一个 w。 上一节课的内容,嗯,接下来开始讲下一节课的内容, 我这边稍微跳一下,这边再一个章节是基础语法,但是我觉得要先给大家讲一下这个 数据类型。首先呢,数据类型,先简单介绍几个常见的 char 类型,制服串类型,它占用的大小一个字节啊,一个字节的话是我们巴比特,它的一个取值范围的话,正常来说写成 char 的 话应该是负幺二八到 幺幺二七,那这边或零到幺二五的话,应该是按 side chair 无符号的制服穿类型的 参数,那可它的取值范围是可以零到二五五。这两个其实是法应该是一样的,就是 chair 类型跟 side chair 都是代表有符号的,有符号的话就是负幺二八到幺二七的一个范围。然后我们比较常见的还有 int 类型,它们都可以跟那个 onside 的 搭配使用, onside 的 话,其实就是代表这个数肯定是个非零的数,从零开始算,所以说它对比同类型参数的话,它范围是要大一倍的。还有几个比较常见的类型,一般比较常用到的就是 float 类型跟 double 类型,它们主要的区别就是精度不一样,占用的内存 一个是四字节,一个是八字节。然后还有一个经典的 word, 就 刚才提到的就是为空快速过完这个数据类型,我们再回到基础语法的讲解,今天我着重给大家介绍一下这个预算符,这是他的一个视力, 待会我们也会一起看一下,跟我们的 hello world 的 小程序一样,它都有一个头文件的包含红定义,这个红定义的话其实就是给这个数起一个别名,在域编辑的时候后,后面下面的代码所有 有用到派这个参数,他都会替换成三点一、四一五九,但这边他只定义了红定义,实际上并没有使用。接下来是函数声明,函数声明的话,他一般是跟那个函数定义就是配套使用,定义一个函数,你都可以在那个 代码的前段先给他搞个声明,声明跟定义的那个格式,其实你看前面都是一样,声明函数的一个返回值类型,声明函数名 函数的一个行差的类型,然后就直接一个分号结束了,然后他的定义的话就是一个大括号,直接写一下他具体的一个实现,然后这个 a、 d、 d 的 这个函数的话,它的实现就是 呃把传进来的两个参数进行一个加法计算,然后返回他们的一个和。然后主函数的话,这个程序的话从主函数进来,他首先是定义了三个参数都没有赋值,然后他这个值是怎么来的, 可以看一下,这边会首先一个是打印提示用户输入两个参数,然后这边出现了一个新的函数 scanf, 它的作用呢就是获取终端的一个参数输入,然后我们可以在终端输入两个数,然后它会分别 去补货,然后赋值给 num 一 跟 num 二,然后这时候 num 一 跟 num 二就有一个实际的值,再去调用这个 a、 d、 d、 a、 d、 d 的 话,它是相当于就是把 num 一 跟 num 二传呃传给 a 跟 b, 用它们的值去进行一个相加,就 执行一下 number 一 加 number 二返回一个他们的和返回给 some, 然后这边再再将他们的一个结果打印出来,最后一个 return 语句表示当前的程序执行成功。然后我们简单的演示一下,这边提示我们输入两个参数,那比如说我输入 一空格一, ok, 他 就返回一个二,跟我们刚才推演的结果是一致的啊。我们接着往下看,其他大家可以过一下,就是这些场量啊,制服穿字面量啊,大家可以先过一下,然后今天 我们着重讲一下运算符的一个应用,他这边总共有几种,一个是算数运算符、逻辑运算符、位运算符、 复制计算符啊,还有一些其他计算符关系算数计算符的话,加减乘除就是我们数学里面的那些加减乘除,跟我们计算器上面的标识应该是一致的关系计算符的话就是比较两个数的一个关系是相等还是不相等,而大于小于, 或者说是大于等于,小于等于啊。逻辑运算符的话就是判断两个条件,总共就三种情况,语或非语的话,就是两个条件必须都为真,他返回一个真,如果有一个为假,那就返回假,或的话是任意一个为真就为真,否则全为假的话,那就是假。 飞的话就是一个取反的一个操作位计算符,这个比较关键一点,因为我们在那个人气啊,或者说大面积的应用中,有一些原理上都会呃,有一些位位位算符的一些操作, 大家待会可以认真听一下。复制运算符的话,待会我们结合实力来看,我们就比较直观一点,其他运算符也是一样,我们直接看一下我准备的一个直立教程,个点息文件呢, 我们也也是直接跳到 main 函数里面来看,它是调用了几个函数,然后这几个函数呢,我们可以就往 ctrl f, 在 这个 id 里面 ctrl f, 它就可以 解锁这个关键字,比如说我们往上找一下,它这边实际的定义是在这边,然后我们按顺序看吧,这边算术运算符的话,加减乘除,它这边是定义了呃两个局部变量 a、 b, 然后分别等于十根三,一个,呃,加减乘除的运算,特别提嘴是这个取模运算,取模运算的话就是就是取一数的一个操作,比如说这边,呃十除以三,他等于三于一,那他这个返回值就是就是一。接下来是关系计算符,关系计算符的话他定义了 x, y, x 等于五, y 等于七,他判断这这两个数相不相等。 b 大 小,那五等于七肯定是不成立的啊,等于零,返回一个零,那如果五不等于七,那就是成立的。返回一个一, 那五大于七,这些不成立,返回零小于小于七,成立返回一,大概就是这么一个情况。 ok, 那 我们接着看这个 啊,逻辑运算符,逻辑运符的话就三类啊,逻辑与逻辑或逻辑非语的话,刚才有提到,就是说两个条件都成立,然后他就成立,或的话是两个条件中任意有一个条件成立,他就成立。 a 的 话就是取反啊,他这边定义了呃,两个数,一个是一代表乘以,一个是零 force 代表一与一的话,那就是等于一,零零或零还是等于零啊?非一的话那就等于零,大家可以去想一下,就是说 一与零是不是等于多少?还有啊,一或零是等于多少,大家可以自己去敲一下,试一下。接下来重点讲一下这个谓运算符 啊,微计算符的话,可能要先给大家讲几个概念,就是我们的一个净净净值转换有二净值啊,十净值跟十六净值,我们平时的一二三四、五六七八九十就是 一个十净值数,就是。然后,呃,他在计算机里面的表现的话,就是比如说我们刚刚有提到的数据类型, 嗯,算法的查询型,它是一个一字节八位的一个数数据,那八位的话它其实表示的就是八八位。二进字它的写法的话可以写成零 b, 然后零零零零一一,零零一一,那它转换成十进字的话就是 啊,五十一,然后它这个计算的话就是个位数的,这个一就代表一,第二位一就是一乘以二, 一加二,以此类推,这个是二的一次方,二的三次方,这个是二的四次方,然后全部相加就会等于一个五十一。这样的话做了几个操作,一个是把这个五十一按照 十六帧制的格式给它输出打印出来,它会自己转换成十六帧打印出来,应该是零差三三,零差三三的话就是 啊,这边是三啊,这边是十三乘以十六,然后三乘以十六加三就是五十一遍。然后讲完这些换算的背景的话,我们再看一下下面的雨或飞,还有一或的一些预算规则,这边的话是做一个五十一跟零 x f 零的一个 雨操作。上面我们有有提到这个雨或飞的话,雨的话就是要多为一,呃, 逻辑语的话就要两边都为一,他才会输出一,那换换到谓语这边的逻辑也是一样,就是两个对应的 beat 都为一,那这个 beat 就是 就是一,那如果说有个 beat 是 一,有个 beat 是 零的话,那他语出来的话,那个 beat 对 应的就是零,那我们把这两个数全部换算成二进字,零叉 f 零的话,换算成二进字的话,就是四个一,四个零。然后跟这边的五十一去做一个谓语, 那谓语的话,他们后四位都是零,那输出出来后四位肯定都是零,前面的话他有两个一,两个零,那就是语下来的结果就是零零一,零零零,换算成十六进字的话,就是低四位为零,高四位 高四位的值是三,那他就是一加二等于三。然后这边的话也是一样的,就是如果进行一个啊未获的话,换算出来的二进制的结果应该是 啊,零零幺幺啊幺幺啊。因为这边货的话两个位,还有一个位是一,那那他这一位就就是直接输出为一,这边打错了,应该是前面四位为为 一,这后面两位为零啊。一货的运算的话,我们来举个例子看一下他换算出来,就比如说一货的话,是 啊零跟一组合两个位的状态不相等,一个是零,一个数数为一,如果两个位都为零,或者两个位都为一,那输出就为零,那我们这这这两个数一会一下,他是不是啊就会输出成零差? 首先高位啊,零跟一为一,零跟一为一,全都是一的话,两个都是一的话就是零零, 然后零零的话还是零零,然后零一的话它为一,所以说换换算出来就是零差。 c c 取反的话,那屏蔽幺幺零零,幺幺零零就是对对原先是一的那个 位进行一个取反,然后啊左移右移操作的话就是呃把像呃左移的话就是把这个 左边两个数去掉,后面后面的数依次往上顶,然后呃多出来的右边的值补零, 那写下来的话就是零 b, 把这两个零零移掉,那就是幺幺零零幺幺,后面补两个零,右移的话跟左移是相反,零 b 啊,右移的话最好是从右边开始写,这边两个两个一移除掉, 然后第两位就变成零零幺幺零零零零幺幺零零,然后剩下的用零补齐, 嗯,就变成这这个样子。 ok, 这个大家去熟悉一下那个二进字,然后呃十六进字,十进字的一个转换规律,然后再去带入他这些规则自己过一遍可能就好一点。 反正简单讲语的话就是呃帧与帧为帧,或的话是任意为呃,任意一个为帧的输出帧,然后一或的话就是要两一帧一讲啊,输出输出一, 然后取反的话就是字面意意义上的取反,然后左移,右移的话大家可以去熟悉一下,就是我们在单面机里面一些呃 led 矩阵啊,或者说计算器操作啊,都会经常用到这些 啊。 v 运算符,然后是一个负值运算符,负值运算符的话其实,嗯没什么东西,就是一个等于可能最基础的话就是一个等于嘛,初示化一个 n, 然后 n 等于十,这边加等于,减等于,乘等于除等于, 还有除以等于的话,我们把这个表达式猜出来就行了。就 n 等于 n 加五,那这样看的话是不是就很清晰了?那 n 原先等于十,十加五,再赋值给 n 啊,后面 n 运算,嗯, n 打印出来就是十五。如果 n 执行 呃减等于三,那就是 n 等于 n 减三, n 原先原先是等于,假设是等于十, 它十减三,那就等于七,但是我们这边已经执行过一次了,就是说我们运行完这一条之后,它 n 实际上是已经变成十五了,所以说十五减三,这边会输出一个十二,然后下面以此类推。嗯, n 等于 n 乘以 二,那就十二乘二嘛,二十四,然后这边是 n 等于 n 除以四,那二十四除以四,那就是六,然后 n 等于 n 除以 取于三,六六取于三,这余数是零啊,跟下面的结果都能对得上。 ok, 那 我们最后再来看一下这这几个其他运算符,其他运算符的话,这个视力里面它 出现了一个新的那个关键字啊,是 track 的,是 track 的 话是一个四元里面的一个结构体的一个声明,然后它的一个格式的话,就是两个是结构体的 类型的一个名称,然后它呃里面有两个成员,一个是 int, 那 int 类型的 x, 一个是 int 类型的 y, 然后它 他定用这个结构体类型定义了一个具体的结构体对象 p, 然后 p 的 两个成,呃, p, 他 也有 x, y 跟 x y 两个成员,他两个成员的值分别是十跟二十,然后他这边的话是,呃 定义了一个结构体的直角,结构体的直角的话指呃指向 p, ok, 那 我们接着看,首先的话,呃是 sizeof, sizeof 的 话是我们 啊, c 语言里面求字节大小的一个内置函数,刚才我们有了解到 int 类型占四个字节,所以说它这边打印出来会是四, 那如果我们把这个 int 换成 char 的 话,它打印出来就是一啊,因为 char 类型的话占一个字节。呃。大家重点看一下这个三元运算符,三元运算符的话,它的格式就是 呃问,呃判断语句问号,然后一个值冒号,另外一个值他的呃他,他是怎么看的呢?首先他是这样先看这个中间的这个判断语句,如果说呃 p 的 x 值大于五, 那他就返回一个真。如果说 p 的 x 值呃大于五不成立,那他就返回一个假, ok, 那, 那我们刚才看说 p 它有两个值,呃,十跟二十对应的,它 x 跟 y 嘛,那它 x 就是 等于十,那十大于五是为增的,那它就 啊,那他那,那这个判断条件就是为真啊成立,然后他就他就会把这个真这个字母啊复复,复制给 a, 也就是说这这里面的那个打印其实也是一个为真啊。那但是如果说我们把这个改成改成小于的话呢? 改成小于的话,那他就他就是为假, a 的 值就是等于假,就说他给 a 的 负值提供了两个选项,具体选哪一个取决于这个判断条件成立与否。成立的话取前面,这个,不成立的话取后面。接下来他演示的一个那个 成员的访问就结构体,成员的访问就是 point, 这个结构体有 x 跟 y 两个,两个值,然后 p 这个结构体对象的话,他他的 x 要访问他的 x, 那 就是 p 点 x, 他就会把这个他的 x 的 具体值十给打印出来。啊,普通的那个结构体类型的话,用点 就可以访问到,但是如果是指征类型的话,就刚才我们这边啊定义了一个结构体,指征啊,指指向这个 p, 那 指征类型的话,他要访问他的成员的话,就必须用这个形式去访问。他们两个 啊,是短效的,就是说一个是针对普通的那个结构体类型,一个是针对呃职称成员的一个访问。好,那这就是我们今天的全部内容,谢谢大家。

今天咱们来写一个程序,边写一个身体质量指数, 这里设置到一个机器知知识点,保留两位小数。小数变量怎么存储?用这个 float 四点形,这个就可以缩成小数,比如说,比如说啊,画这个 a 里面给它放个一点二,再输出一下, 如果你这里用的是 int, 没法封号啊,这里变异一下运行,它就没法输出来,哎,它就会出出来个 e, 这个时候就需要用到我们的 float, float 负点型啊,这是把百分号 d 改成百分号 f, 再输出一下, 你会说出小数,但是人家说保留两位小数,对不对?好,这时候把这里加上点二,再试一下。 好,这样就是两位小数 先放在这儿,那既然会保留两位小数了,这下就是计算,先用 scf 接收啊,记住这个是 scf 接收的意思, 输入的意思啊, scf 百分号 f 输入的给到这个 a 可以 吗? 可以的啊,接收到这个 a 了之后,我们来试一下,比如说我就输个一点二三, 这里为什么它没输出?因为这里啊,它没加地址符号,显 c f 就 要加地址符号啊,记住再翻译一下一点二三。 有的人可能就要说了,我输入的是两位小数,那如果我输个三位小数呢?我们来试一下,一点二三五,一点二四,那如果我输 一点二三四呢?他就会出来一点二三,他这个是四舍五入的, 那我们根据他给的这个公式,体重除以这个身高的平方,还有等于 b m i, 先给他输入,先给他提醒一下,说你该输入体重了。 加分号啊,一定要加这个分号,一定要是英文状态下的这个分号,英文状态下的这个分号它会亮红色,中文状态下它就会冒黑色, 再提醒他一下, 输入完体重之后,这里再介绍一下 这里应该给谁,是不?我们可以再借一个变量,叫它 b 给 b, 这个就可以给 b, 对身高啊,身,身高, 说完身高之后接受一下,接受完之后身高给 b, 先用 b, 这里其实再可以建个变量,用来存储我们这个计算后的这个就叫它 c, 将这个 c 复制为 b 乘 b 分 号。 体重呢?那就复制为 c, c, c 等于,这是复制的意思啊,体重,体重是在这 a, 对 不对?给 a 了 a。 如意, 身高,身高是身高乘身高,我们刚才是不给了 c, 这样一运算下来, 所以说最后输入的是什么?输入的 c, a, c 还是 a 还是 b? 输入就是 c, 输出是 c, 我 们来看一下运行,请输入体重, 我们数个十二身高 为啥没有出来?因为这里我没有加地址符号, 一定要加这地址符号啊,记住, 这里单位是米啊,这里单位是米一,米一, 它出的 bmi 是 九点九二十分之 p s 五二,可以用计算机来算一下 身高,体重是先算这个身高乘身高一点一乘一点一等于一点二一,再用十二 除以一点二一等于约等于就是九点二, 九点九二差,对不对?约等于九点九二。 挂机这道题就写出来了,也是十分多简单。

教大家一个 c 语言的放循环,新建就选这个圆代码。 放循环就是前期入门这个比较难的一个部分,今天我们来讲一下 放放循环的写法,是这样, 我们都知道 int i, 它是定义一个变量,我们这个是局部变量。什么是局部变量?我给你举个例子,比如说啊,我们把先把这个写完, 什么叫局部变量?局部变量就是我只能在这个放循环里使用,不能在外面使用。比如说啊,我这里想输出一下这个 i 变异,它就会报错,为什么不会报错?因为这个 i 它是个局部变量,我们可以把 i 定义到这里, 这样的话就可以打印 i 了,变异这样就成功了,来试一下, 打印出来它会打印十。接下来就是要我就是讲的这个放循环。放循环其实是一个比较难的一个部分,放循环是什么意思?就是定把 i 定义为零, 把 i 复制为零,就是把 i 这个盒子,盒子有个盒子,它叫 i, 就是 这个原本里面它放的是什么?不知道,今天就是这次重新给它定义成零,就这个意思。 当 i 小 于等于十, i 加加小于小于十的时候, i 加加,这里判断一下 i 它是不是小于十,小于十的话就先执行一遍这里的程序,然后再 i 加加, 然后这 i 加加百,之后这里再执行一遍 i, 这里不用执行,这里执执行一遍,然后 i 是 否小于十一,小于十对不对?小于十再执行一遍这里程序,这里程序再执行一遍之后再走这个 i 加加, 比如说我就在这里输入一下 i, 任意运行它就会出来零一二三四,零一二三, 就这么多,为什么?为什么它只输到九,它不输十,因为十它不小于十,所以它就不进这个程序里了,直接跳出来走这里程序。如果让它输十很简单,等于十 它就会出十。那为什么我刚才这里把它放在这里的时候, 它会就出十呢?为什么?因为如果这个小于了十,不满足这个条件,对不对?刚才是小于十,十不小于十,不满足这个条件,所以说它就走这个 i 加加, 就做这个 i 加加, i 加加,它是不是九九加一,它就是十。 i 加加是什么意思?就是 i 加加就是什么?注示一下, i 加加,它就等于是 i 加一, 这个就是放循环,放循环可以用来写写题。我们找一下,比如说我们注意道题啊,让它让我们先输入一个数字, 输入完这个数字之后啊 scanf, 比如说我就输入个数字,然后让它接收一下,定一个 a, 接收一下定,定两个吧,定两个 定两个这两个数。再就是我们输入它这个,它就是几,要加这个地址符号啊,一定要加这个地址符号。 我们又弄完这两个之后,我们想输入 a 到 s 之间的所有数,比如说我这儿我这么个输入 一十一到十,对不对?我想说出一到十里面包括一到十的所有数,比如说一二三四五六七八九十,怎么输? 有同学能知道?嗯?有同学能告诉我吗?对,就是把 i 等于 a 给它换一下 i 等于,当 i 小 于等于小于等于啊,因为我们还要输一遍,把 s 要输进去 s, i 加加,我们来试一下,比如说我就输入个一十,它就会给我输入到一二三四五六七八九十。但是我们这样不换行,它没有换行怎么办?我来教你一招,杠 n 是 换行的意思,记一下啊, 杠 n 十 换行的意思啊,记住啊,这刚才是换行, 再试一遍。比如说我就输个二到八, 他就会给我输二三四五六。很简单一道题。

同学们,你们在写 c 语言代码时,是不是经常遇到函数调用后翻译报错,却找不到原因?其实啊,很多时候问题就出在参数搭配上。今天咱们就用配钥匙开门这个生活例子,把这个知识点讲明白。 想象一下,你家的门锁就像函数定义里的行餐,有固定的形状和数量, 比如需要两把钥匙,一把长的开主锁,一把短的开副锁,顺序还不能错,那你手里的石扇呢?就好比你掏出来的钥匙串,如果钥匙数量不对或者长短顺序搞反了,是不是肯定打不开门? c 语言里的函数调用也是一个道理,时差的类型,个数顺序必须和行差完全匹配,少一个多一个或者类型对不上,翻译器就会像遇到错误钥匙的锁芯一样拒绝工作。 比如定义了一个计算面积的函数, interior int length, int width, 结果调用时写成 area 五四,把整数参数传成了小数。这就像拿圆形钥匙去开方形锁孔,肯定行不通。 更危险的是,有些情况翻译能通过,但运行时会出错,比如把地址当数值传。这就好比拿别人家的钥匙硬撬自家门,轻则打不开,重则把锁芯都弄坏。 所以记住,每次调用函数前,先检查实参与形参是不是配套钥匙。你们有没有遇到过因为参数搭配错误导致的 bug? 评论区,分享一下你的排错经历吧!

本视频耗时五个月,共计三十小时三十八分钟零基础自学 c 语言从入门到就业全套教学视频包括开发环境搭建、语法讲解、算法与数据结构等,共三百六十八集。 此视频内容敏感,很可能被下架,建议先收藏再观看。我这里整理了两百多节 c 语言学习教程和学习路线,可供大家学习,需要的三个七抱走。 好的, ok, 那 么我们接下来学习我们下一个我们的流程控制语句里面的什么叫做 switch case 语句啊?这个语句的话呢,在我们的一个呃编程当中呢,其实用的是比较多的啊,尤其是在以后大家开发当中呢,也用的比较多啊。 呃,这个 switch case 语句它的语法,首先大家看一下,首先关键字呢是 switch 啊,对吧? switch 后面跟一个小括号里面呢是我们这个算数表达式,明白吗?算数表达式后面呢,跟一个我们的小啊花框,对吧,就是我们的代码体,明白没有?然后呢, case 加上我们的值 啊,然后冒号跟我们的表达式,对不对?然后再跟 case 再跟一个值表达式啊,然后呢,可以以此类推到其他的表达式啊,什么意思呢?对吧,这个呢,教主还是用代码跟他解释呢, 大家可能会看的清晰一些啊,好不好?嗯,来,首先大家看啊,我们这里呢,呃,还是以什么呢这个成绩为例子吧,好不好?假如说我们这里有个成绩 对吧?啊?为什么呢?九十八分对不对?好,那么我们 switch 语句怎么用呢?首先 switch 关键是 switch 语句嘛,对不对也叫开关语句啊,好,那么呢,我这个 source 对 吧?分数呢? 来怎么样?除以一十吧,好吧,来除以一十对不对?嗯,是不是然后呢进行平分,那那么后面跟我们的 case, 懂了吗? switch 要跟 case 呢?两个一定都要存在啊,不能少,明白吧?因为呢啊, case 呢,后面要跟一个值,对不对?假如说,就是说这个表的是对应的 case 后面的值,什么意思呢?现在假如说为 九,可以吧?啊?为九,那么就啊,输出我们的平分为多少呢?为这个啊, a 吧,好不好?就 a 平分,对不对?就为 a 平分,如果说我这个值为多少呢?为这个,呃,六,对吧,那么就打印什么 b 平分, ok, 同学们看啊,那如果说我是四呢,那么就打印什么呢?我们的 c 平分,好吧,然后呢?其他的呢?对不对?这个其他啊,就执行什么?我们的 c 平分, ok, 好, 那么大家看啊,是不是也就是说我这个执行哪个语句呢?取决于什么 case 后面的值跟这个呢?匹不匹配?就比如说我现在数十为九十八,对吧?九十八除以十为多少呢?为九 对不对?好,那么他就会干嘛呢?这个里面的结果呢?对吧?这是算数表的式,对吧?这个值呢,会去匹配什么呢? 这些 case 后面的值,懂了没有?匹配成功了,就执行对应的 case 下面的这个语句就是说我 a 数是九十八分,那九十八除以十呢?结果为什么为九? a, 那 a 这里有九啊,对不对?跟这个怎么样?值呢?匹配了,懂了没有?所以执行的是这个代码, 明白吗?如果说我这个是多少?是六十六,对不对?那么六十六除以十呢?结果为六,对吧?那么就匹配什么 case 后面的这个值为六,执行的是这个语句,懂了吗?如果说我是四十一呢,对吧?那么四十一除以十呢?结果也是为十吗?对吧?后面会省略吗? 会丢弃吗?不管他,对吧?结果就是四,那么四呢?匹配,哎,这个语句执行的就这个语句了,那上面的就不会执行了,懂了吧?嗯,是不是?我们来运行看一下, 对吧?我现在分数为多少?为四十一,四十一除以十呢,结果为四,那么匹配呢? case 后面的这个四,这个语句看到没有,执行的是这行代码,明白吧?我们先看一下,打印的是不是 c 呢?对不对? a 跟 b 会打印吗? a 跟 b 没有打印,打印的是 c, 但是呢 d 他 也打印了,就是说,哎,我这个 case 啊,对吧?后面的值呢?跟这个算术表达式的结果匹配完了之后,对不对?他下面的语句呢?会执行,但是呢,这个也执行了,前面的没有执行,对吧?那么大家发现一个固定没有,也就是说,我现在假如说是九十八,那么我是不是就是说啊? 哎, 也就是说我现在是九十八,对吧?那么九十八除以十呢?结果要多少呢?为九,对吧?那么执行的是这个语句呢?那下面的是不是也会执行呢?上面的不会执行,对不对?好,来,我们用心看, 对吧,看到没有?哎,是不是啊?果然如我们所列所料,对吧?啊?这个,但是什么呢?我这个 case 跟这个值匹配完了之后,这个输出了,对吧?那么下面的也会执行,是不是?那这是什么原因呢?所以这里跟大家解释一下,就是说,当我们的这个算术表达式的值跟下面的 case 语句进行匹配之后, 明白吧?执行完了之后对不对?假如说我这个是九啊,那么跟什么 case 对 不对?九匹配成功之后呢?执行这个语句对,就不会跟下面的去匹配了,因为下面的匹配不了嘛,对吧?下面的不会匹配了,所以说这行代码执行之后呢,它也会执行, 也会执行下去,但是不会匹配的而已。但是下面的这些代码呢,一样还是会执行的,懂了吧。所以我们,哎,那这个时候我们不想他执行怎么办?所以说我们要加上什么呢?加上这个 break 语句,看见没?这就是我们的跳转语句,懂了吧?嗯,就是说 我们在什么后啊?这个 print 后面呢?加上一个 break, 对 吧?就是说我执行完这样代码之后,碰到的 break 直接跳转了,跳转出去了这个 switch 语句,这里就执行完结束了。下面的都不会执行的,明白?你看我们加上 break 之后,我们再去运行,对吧?那下面的 b、 c、 d 会执行吗?就不会执行的,看到没有,他就只会打印 a 了。明白,就只会打印 a 了,懂了吧?嗯,是不是?所以说我们一般写我们的 switch, 对 吧?对应的 case 后面都会跟什么呢?我们的 break, 对吧?都是都会跟我们的 break, 看到没有?你现在我们再改回什么呢?啊?四十一对吧?我四十一呢,除以十结果为四,对不对?所以是不是就只然后执行完这个之后呢?碰到的 break 直接跳转了,懂了吧?这个啊,下面这个代码就跳出了,不会去执行了,他只会打印 c 了,懂了没有? 好理解吧?看到没有,他就只会打印 c 了吗?对不对?是这样的一个逻辑,所以说我们的 c 位取一般的用法是用在于什么呢?就是说当我们 确定对不对,我们的算数表达式是为一个值的时候,对吧?需要执行对应的啊,这个值令对不对?就是用什么?用我们的 switch, 是 不是?如果说我们要表示一个区间呢?就像我们之前讲我们的分数,对不对?在一个区间啊?八十到九十分,是不是啊?我们就用什么,就用 if else 会比较好一点,懂了吧?因为我们的 case 语句呢?它是什么呢? switch? case 语句呢?它是用什么一个值?一个固定的值呢?它不是表示个区间呢, 对不对?所以说我们就用什么呢?用 switch 呢?用的比较多啊,表示区间 a, 用什么? if else 表示单个值,对不对?就是说我这个结果是某一个值才是会执行对应的语句的时候,是不是啊?并且有多条选择的时候 会用这个什么呢? switch, 明白吧?会用 switch 啊,这是第一种用法,第二种,对吧?我们在做一些人物移动判断的时候,我们以后做游戏个游戏开发,我们开发个游戏的时候,人物需要移动,对不对?那我们人去控制我们的人物移动,怎么控制啊?通过我们键盘上面的按键,对不对?是不是呢?因为我们的 switch 后面的这个什么, 这是表的是它并不是说一定是要得到一个什么整数或者说小数,它可以是什么呢?它可以是制服啊,是不是啊?来什么意思呢?我们这里把它先注视掉,对不对?我们可以注视掉啊,假如说我们有一个七二型的变量为 c, 是 吧?然后呢?手动输入, 手动输入百分号 c, ok, 然后呢?取地址,对吧?我们的 c 一个字节, 看到没有?我手中输入的,那我手中输的是什么呢?就是说我们的用户对不对?按键按的是什么呢?是不是?如果说我用户输入的是什么?输入的这个键呢?是什么呢?是我们的 w 键,对不对?我给是制服的 w, 看到没有?因为产量也是值吗?不是说只有数字才是值了,对不对?整数才是值了,产量也是值了,对吧?我们的制服也是产量的,明白没有?是不是?如果说哦 n 的是 w 输入的,用户输入的是 w 键,对不对?那么我就什么呢?这里写个代码什么代码呢啊?人物坐标对吧?往左 啊,往前坐标是往前移动,对吧?然后加上 break, 懂这意思吧?是不是我们这里写代码逻辑的,这里可以写代码的,对不对?这个代码逻辑呢?并不是我们一定要写写输出的,我们可以写什么?人物坐标往左移动呢? x 坐标,对不对啊?减多少减多少了,明白吧?啊,是不是?如果说我这个摁的是什么呢?我摁的是这个。假如说啊 a, 对 吧?摁的是 a, 那 么 a 怎么样?人物人物坐标是怎么样?往左移动吧,是不是?这个是往上的,对吧?我还有什么呢?往左吧, 对吧?那那我人物移人物坐标呢?就往左移动嘛,是吧?加上 break 了,懂了吧?啊?是不是啊?以及我们给复制一下了,对吧?如果说我摁的是什么,摁的是这个啊? d, 对 不对?那么人物坐标呢?就往右移动嘛, 是不是?如果说我问的是这个 s 呢?那人物左边呢?就什么呢?啊?往下移动吧,对不对啊?一,一定要加上不这个,不然说我这个 n 了 w 之后, 对吧?啊?这里是什么呢?人物啊,左边往上移动的一个代码逻辑对不对?我往上移动之后呢,又往左又往右又往下,不就回到了原位吗? 对吧?不就回到了原位吗?所以说要加上 break, 懂了没有?嗯,是不是明白这个意思吧?这是我们的一个 switch 语句呢,这这样的一个用法啊,对不对啊?那么同样又有一个情况,就是说我们用户在输入我们什么按键,在他,我们用户在按键的时候, 他可能不小心碰到了什么呢?这个大小写键,对吧?我,因为我们这里字母是大写吗?是吧?万一我这个是小写呢, 对不对啊?所以说我们用户也会怎么样?往往上移动呢?这个人物往上移动呢?你不能说我这个用户怎么样,不小心碰到他大小写键按到 w 对 不对?他就不动,没有反应,那肯定是不行的,是不是的,因为我们呢,这里还可以跟一个什么?跟一个 case, 是 吧?跟一个 case 看到没有?假如说我们这个小小写的 w, 对 吧?看到没有?他也是会执行的,明白这个意思吗?我们以上面的代码为例子了,这里先注视了,等一下我们来进行验证了, 好,大家看,对吧?啊?我现在假如说我这个 case 一 十,对不对?哎?看到没有?我两个 case 看到没有,对吧?匹配的一个代码,那可不可以呢?一个代码逻辑可不可以呢?可以的,假如说我现在这个 source 呢?为一百,对吧?那一百除以一百,结果是不是为十啊?跟它匹配吗?那会不会输出它呢?来我们运行看一下, 你知心对不对?会不会打印 a 呢?打印 a 的 是不是?那现在如果说我这个是多少?我这个是九十二,对吧?九十二除以十与十呢?结果为九嘛,对不对?是不是跟他匹配?但是这两个 case 语句后面的值呢?都匹配的是这一个代码,所以说怎么样他也会打印 a, 懂了吧? 也会打印 a, 看到没有?嗯,是这个意思,明白了吧,对吧?就是说可以 switch 呢,跟多个也可以理解,没有。 嗯,是不是?所以说我们的用户怎么样可以,他可以什么呢?在输入我们的一个啊,制服的时候可以怎么样,对吧?啊?区分大小写,明白吧?区分大小写吧,是不是?嗯,我们打印对吧?这个人物坐标往左移动, 对不对?你?当然了,我们现在只是用这个中文呢,代替我们的这个移动的代码,因为我们现在还没有学后面的内容吗?对不对?不可能说现在教大家什么做什么,人物怎么移动的开发了,我们就用中文字母来来表中文的来表示,好吗?对不对?来,我们先看一下,假如说我们输入这个什么呢?啊? w, 对 吧?人物坐标往往什么往上移动,对吧,看到没有?嗯,是不是啊?小写吗?那我现在输入什么呢?输入大写呢? 大写看到没有,对吧?人物坐标往上移动,看到没有?是这样的一个干部逻辑,这就是我们 switch 的 一个用法啊,好吧。嗯,在我们时间当中呢,用的比较多的一个地方呢,就在就在这里啊, 好吧,所以说我们什么时候用 switch, 什么时候用 if else, 对 吧?这个教主呢,已经讲的很清楚了,是不是?就是说当我们的一个要执行多个语句的时候,对不对?就有的语句要执行呢还是不执行呢?对吧?要执行是不是?如果说要执行的前提是什么呢? 对吧?有个条件,要之前有个条件吗?如果说这个条件呢?是一个值对不对?一个固定的值,你就可以用十位去,如果说他是个区间,对吧?就像我们刚刚讲的对不对?你要表示分数,那么分数呢?他可能在一个区间啊,八十到九十之间呢,对不对?是不是呢?你就用什么 if else 会好比较好,懂了吧?嗯,是不是? 哎?我们的一个语句,因为我们之前有讲过,我们没有讲我们的流程控制语句,之前我们的代码都是怎么样?一行一行一行去写,从上往下去执行,对不对?那么我们如果说有这些代码哎, 需要一个条件才能执行,是不是?那啊?那我们就需要用的什么我们的流程控制语句,懂了没有?嗯,那这个条件如果说是一个值, 对不对?就用首位取,如果说它是个区间呢?就用一 f 二十,明白了吧?这就是它的用法以及呢所用到的一些啊,情况好不好?有什么疑问的话呢?大家可以接着找教主啊。 ok。

指针是 c 语言的灵魂,也是大家入门阶段最容易踩坑的地方。这道题刚好覆盖了指针本质、指算术运算、 size off 与指针这三个高频考点。 在分析选项前,咱们先把指针的三个核心概念理清楚,这也是解这道题的关键,也是指针入门的核心。先看第一个指针的本质,存储内存地址的变量。 那指真变量和普通变量有什么区别呢?先看普通变量,如 int a 等于十, a 是 普通变量,存储的是数据内容。十、那指真变量 int p 等于取地址 a, p 是 指真变量,存储的是目标变量的内存地址。如果 a 的 地址是零叉一零零, p 就 存零叉一零零。 想要通过指征获取目标地址,必须用解引用操作符星星屁才等于 a 的 数值。十、 第二个指征的算数运算。指征不是单纯的数字,它有类型属性。指征加减整数时,地址的偏移量不是固定的,而是遵循这个规则, 地址偏移量等于整数,乘以 sizeoff, 括号里是指针指向的类型。比如 int 星指针 int 占四个字节,那 p 加一会偏移四字节。叉星指针呢? 叉占一个字节, p 加一就偏移一个字节。第三个 sizeoff 与指针变量的大小和指向类型无关, 无论指征指向什么类型, int 星 double 星, void 的 星在同一个平台下,指征变量的大小是固定的,三十二位系统四字节,六十四位系统八字节。这里有一个需要注意的点, void 是 无类星, sets off void 在 c 语言中 没有定义,但 void 的 星是存储的内存地址大小和其他指征一致。 那我们下面来看这道题的一个选项, a 选项指向变量直接存储目标数据的内容,后边也是举了个例子,那这个选项的话是错误的, 原因是 int 星屁等于取地址。 a 中 p 是 指真变量,存储的是 a 的 内存地址,不是 a 的 数值,只有解引用星屁才等于 a 的 数值,可以看一下代码验证, 这里呢,也给大家留一个小问题,那如果直接写 print f 百分号, d p 会输出十吗?接下来看 b 选项,对时针进行 p 加一,操作时,地址实际增加的字节数固定为一,那这个也是错误的, 错误的原因是 p 加一的地址偏移量不是固定的一字节,而是由时针指向的类型大小决定。可以看一下代码验证,对比一下 int 星和叉星的偏移,就能直观的看到差异。 那就要延伸一个思考了, c 语言为什么要这么设计呢?其实是为了方便数组的便利。 接下来看第三个选项, want 星屁的 size of 括号里 p 结果为一字节,其实也就是求 size of 括号里 want 的 大小, 这个选项呢也是错误的。前面呢,我们也提到过, want 是 无类型, size of 括号里 want 在 c 标准中无定义,并非一个字节,我们可以通过代码来验证一下, 这里呢,也给大家粘贴上结果。最后提醒一下容易混淆的地方,望远的类型和望远的星是没有类型,不能用来定义变量。望远的星是能指向任意类型的纸质本质还是存地址大小和其他纸质一样? 最后一个选项,纸的加减运算不长,由指向的数据类型大小决定,这个选项是正确的, 这是 c 语言指数运算的核心规则,指数加减 n 时,地址的实际偏一量等于 n, 乘以 sizeof 括号里时针指向的类型 可以通过代码来进行验证一下。 double 类型占八个字节,所以 double 星 p 执行 p 加一时,地址就会增加八个字节,也就是 p 加上 sizeof 括号里 double。 那这道题的正确答案就是 d。 记住这三个核心点,时针的基础选择就不会错了。后续学习数组函数传参中的时针也能更加轻松。为了巩固咱们的知识点,再做一个课堂小练习,大家可以把答案写在评论区哦!

本视频耗时五个月,共计三十小时,三十八分钟,零基础自学 c 语言从入门到就业,全套教学视频包括开发环境搭建、语法讲解、算法与数据结构等,共三百六十八集。此视频内容敏感,很可能被下架,建议先收藏再观看。 我这里整理了两百多节 c 语言学习教程和学习路线,可供大家学习,需要的三个七抱走。好,那我们来学习我们的第一种运算符叫算数运算符啊,算数运符呢,比较简单,就是我们日常生活当中就说什么呀,顾名思义嘛,就算数的对不对? 那就像有什么呢?像我们的加减乘除嘛,是不是就是我们的算乘法?这个很简单啊,是不是?但是呢,这里要注意一下,我们在日常生活当中,这个大家见过的一个最多的算乘法符就是什么加减乘除四种对不对?但是在我们 c 元编程当中呢,它还多了三种,叫做一还一个,什么还,一个叫魔, 这个一个百分号啊,对不对?因为我们平时这个百分号表示的是什么意思呢?表示的是一个占比对不对?一个占的一个比例的一个作用,对吧?但是在我们编程当中呢,思维当中啊,这个百分号表示的是母,那就是功能是什么呢?求余 明白,求余数的意思啊,好吧,还有加加跟减减,那具体是什么意思呢?怎么用呢?这个等一下啊教主呢,来跟大一去解释。好吧,因为前面四个我们常用的运算符加减乘除,后面的乘除两个呢,你要注意一下, 就加跟减啊,这个没有关系对不对?就是我们跟平时生活当中是一样的,但是这个乘除呢?要注意一下啊,因为我们在我们的一个日常生活当中啊,这个除法呀, 跟乘法呀?乘法怎么表示的?就是一个乘号一个叉,表示乘,对不对?然后呢?这个表示什么?表示除,对吧?但是在我们编程当中,你想打一个叉,你你,你能有这个符号吗?你没有这个符号啊? 你,你在键盘上面,你能找到这个叉,这个乘法这个符号吗?只有这个 x 吗?这个 x 不是 乘的意思呢?它表示的是一个字母啊,对不对?没有这个乘法的,你找一下这个除法,你找得到吗?你找不到他,他没有。 所以说这个乘法跟除法在我们编程当中的表示方法是用什么呢?一个星号跟一个什么呢?斜杠表示啊,这个乘根除啊,这个星号怎么打呢?在我们键盘上面,你找到上面这个八啊,八那个数,看到没有?就是上面啊, f 九下面吗?有一个八,你摁住 shift, 你摁住这个 shift, 明白吧?然后呢?再摁这个八,对不对?这个乘法就出来了,表示乘的意思啊,那除法呢?对吧?就是这个啊。呃,右边我们这个 shift 的 键,左边那个 啊?那个按键,看到没有?他有一个斜杠跟一个问一个问号啊,明白吧?你这个摁住这个键,那就是打出来,这是问号,明白吧?是不是?你摁住这个什么直接摁这个键,那就是问号,明白吧?啊?就除, 你想不想?这乘法跟除法在我们,呃日常生活当中,这个,对吧?表示的一个区别啊?所以这里要注意一下啊,没有其他的一个,没有其他的一个区别就是表示上面呢。呃。有这个。什么有这个区别 啊?就是有这个区别,明白吧?成跟除啊。那第最注最主要的是后面三个这个膜是什么意思呢?对吧?因为首先除呢分为两种,一个是整除和除啊。整除的结果呢?是取商弃余,余呢?求余呢?余呢是指的是什么?整数进行操作 对不对?结果呢?是取于契三就什么意思呢?很简单啊。呃。举个例子你就清楚了。你不会不会很复杂,你就比如说我们这里有两个数来进行干嘛呢?相除,我十除以多少呢?我十除以这个 啊,四吧,对吧?十除以四啊,不行。 呃。也可以,或者说我们现在十除以二的结果等于多少?十除以二的结果为五,对不对?这个叫整除 啊,整除,对吧?是不是?所以整除他是怎么样啊?整除是怎么样,对吧?取这个,呃。三弃于,对不对?因为十除以二, 三是五嘛?余数为零嘛?零舍弃了,结果呢?就是五,明白吧。嗯?是不是?那还一种就是求余什么意思呢?假如说我们这个十除以这个多少?我们十除以这个四吧, 对吧?十除以四的一个三四十除以四,二四得八,三四二 余多少?我算一下啊,十除以四,二四得八,余数也是二,对吧?也是二明白。那么求余那就是什么呢?舍弃三 明白?没有啊?留这个余数,结果呢?我要啊,这是求,这是什么?就是求余,明白吧。就是第二种叫除吗?能有两种吗?余是什么?拿这个二吗?前面这个三给他去掉,明白了吧?嗯。是不是?所以说我们除法呢不能这么表示呢,对不对?你不可能十除以二等于五 啊,十除以四,十,你假如说是二吗?你不可能十除以二,十除以二 就是三四四,对不对?二四得八嘛,余数为二是不是也是一样的?你不能说十除以二为二,十除以二也为五,这不一样不行啊,所以说这个符号呢,我们求余,用什么呢?用百分号来表示, 看到没有?有百分号,十魔以二对不对?结果为二,明白了没有?嗯,因为十魔呢,表示的是求余的意思,懂了吧?就是十除以二,三呢为四, 对吧?你看十除以二,三是不是四啊?二四得八嘛,余数呢?为二嘛, 他求的是这个余,就是百符号就是求余,明白了吗?嗯,是不是我们可以输出看一下了,是不是?嗯,所以这里还跟大家讲一下这个输出的意思,因为我们第一个程序嘛,跟大家讲的对不对?哎, 输出一个什么?就是大家学的第一个程序呢,就是输出 plantif, 就是 输出的意思,我们那个 hello world 啊, hello world, 这个后面跟大家讲啊,后面我们马上就会讲到啊,不着急嘛,先跟大家讲一下这个哈,这个 plantif 是 输出,明白吧?就是输出,什么意思呢?把输出我们这个 字幕串,是吧?啊?这个字母看到没有啊?这个 hello world, 那 就是你好,世界把它输出到什么呢?我们这里运行程序的时候,明白吗?我们这里运行程序的时候,把这个字幕串输出到这个上面,看到没有? hello world 啊,看到没有?这个,这个,这个窗口叫什么呢?叫控制台窗口 啊,你叫控制台窗口就我们能够去干嘛呢?检验我们代码的数据吗?对不对啊?就输出的意思,明白吧?所以我们可以输出什么?这个看一下这个什么意思。不着急啊,输出假如说前面是格式控制制服串啊,不着急啊,输出什么呢?这个前面你先不管好不好,输出这个假如说十,我们刚刚讲的 魔以二啊,我们是魔以二吧,魔以四吧,是吧?四十魔以四,对不对?我们返回看一下了,刚刚是那个 啊,十魔以二,十魔以二对吧? ok, 我 们这里给它注是嘛注是嘛?否来 输出这个什么呢?十魔以二对吧,你看它的结果,哎,是不是等于二呢,对吧?来我们看一下运行结果啊。 啊,不对不对不对不对,这里为零啊这里为零啊。十除以二,这里是五啊,搞错了啊,这是五啊,对吧?为零啊, 是不是看到没有就是求余数嘛,这就是零嘛,对吧?这这这搞错了是吧?没关系没关系啊,是不是那十一模二为零呢,对吧?这个因为是录制的原因呢?这个, 呃,没有直播的原因啊,所以说这个问题呢,我这里暂时忽略了。不,他不能大家给提出来啊,是吧。嗯,好,我们现在数出能看到结果吗?是吧,所以二就是为零嘛,对不对?模也要为零嘛,是吧?本来十除以二呢,那是结为五嘛,这就不用看了嘛。 十除以二对吧,那结果就说啥那就是五了,看到没有对不对?所以这个百分号呢是求余的意思,求余数,明白了吧,好理解吧,非常简单啊。很简单啊,好不好?那么第,呃,四一个跟第五一个呢 啊?第六一个跟第七个啊,就是我们的。什么叫加啊,自增跟自减啊。这个自增就是什么呢?就是自身加一的意思。就是说假如说啊,一样的啊,假如说我们这里,呃对吧。自增就是一加加,看到没有,那么它的结果等于多少?等于二 没有啊,是不是啊一减减结果呢就是零,懂了吧?就是加加啊,就是自身加一的意思,自身的值呢?这个值呢?加加呢就加一啊,是吧。减减呢就自身的值,怎么样啊?就减减一就减一的意思,明白了吧。就是 啊,加加跟减减的一个什么这种啊功能懂不懂?好,等一下啊,分的简单。所以说加加减减呢也叫什么呢?我们的单目算符,因为加加是一个什么加加是一个这个,呃叫什么叫做运算符吗?他是指他是一个运算符,两个加 一起嘛,表示的是自身。自身加一的意思,懂了吗?嗯是不是是单目乘除,因为他只能操作一个数对不对?你不能说一加加一,这肯定不行的啊,你一加加你看到没有,他会报错吗?他不会报错的啊,加个加个加个括号结尾啊。 啊这里不能这么写,就是说你要说应 a 等于对吧,你说一加加 啊。呃呃这里也不行,你只能说,呃 这么样啊,应台对吧,等于 a 加加是吧,真就可以看到没有。嗯明晚叫单目算符啊。单目算符是不是单目运算符啊? ok 啊,就是操作一个操作数,明白吧。嗯你像我们的这种除法模都是双面算符,他给操作两个数,哎。一个数两个数对不对?好,那么我们的自增跟自减这个加减跟减减运算符他有一个特殊情况,他分为两种,就是前置跟后置。哎, 这个就比较重要了啊,什么意思呢?对吧?就是你看啊,我这个假如说什么,这里就是啊,你一加加,对吧?他的结果呢?是自身加一嘛,就变成二, 对不对?那我这个加加他分为什么呢?放在一后面跟什么?放在他的前面,明白吧?这个放在前面呢,他就表示的是前置,好理解啊,就前置嘛,对吧。啊?这个加加呢,放到后面呢,表示的是后置, 是不是那么放在前面?刚放到后面啊,他的运算结果跟大家讲一下,他是不一样的啊,他是不一样的,你不要以为是吧,都是加加,都是同一个算符,是不是?那不都是加一吗?对不对?我告诉大家不一样,他不一样什么意思呢?你就比如来我们同样通过代码来举例啊, 就更好理解,是吧?什么意思呢?我这里应他一个 a 等于十,可以吧,对不对?然后输出 a 的 值,来我们看啊, 输出摆放后 d 反斜根,对吧?输出 a 的 值看到没有?打印 a 的 值 a 多少? a 为十呢?那我输出 a 的 话,对吧?那肯定结果有多少为十吗?是不是这个很简单的,看到没为十了,对不对?那现在我怎么样?我再到他后面 是人,这个是什么呢?这个是后置,看到没有加加不是加一的意思吗?好,那我就把它运行出来,大家看啊, 那我们输出的结果应该是多少?应该是十一,你加加不是加加一吗?我本身是十啊,那十加一不就变成十一吗?但是他会输出十一吗?大家看一下,不会 还是十,看到了没?还是十,但是呢,我再输出 a, 我 写两字啊,我再输出一个 a, 现在我再输出 a 的 值,大家看对吧?多少呢?我们先看结果, 首先第一个是十,对不对?就是说我加了加,加,他没有加一,他输出的是十,对不对?我第二个输出怎么样?我没有加加,他反而输出的是十一,哎,这是为啥呢? 对不对?先出去。第一个嘛,是十嘛?第二个呢是十一嘛?看到没有?那为啥呢?就是因为这个加加呢?他是后置,他是在操作数的后面,明白吧?叫啥意思呢?哎,大家看啊。呃,后置呢,是先运算再自增,或者说自减, 明白吧?什么意思呢?先运算就是说我什么?我是后置,不管,我这个 a, 我 先输出了再说, 输出完了之后呢?对不对?我就说我先不管啊,我 a 的 十为十,我先输出 a 等于十,输出完了之后呢,我再自增在中间,输出完之后,我这个 a 加加变成十一了,你再输出 a, 那 就是十一,是这个意思,明白了吗?先干嘛?参与预算,他再自增, 但是如果说你是前置呢?大家看前置嘛?先自增,对吧?先自增或者说自减呢?看你用的是加减,减减,对不对?先我自身的这个值怎么样?我先加了,我再去参与计算啊,大家看, 我把它放到前面,放到前面来,哎,对不对? 是不是放到前面来?是什么?先干嘛?先加了再说,先自增就是说我现在 a 等于十,我必须先加了,已经变成十一了, 对吧?我再参与运算,再输出,看到没有?那结果就是十一了,明白吧?是不是?你再输出 a, 对 不对? a 现在就十一了呀,所以说两个结果他都是十一,看一下 看到了吗?是不是?所以这就是加加跟减减的一个需要注意的地方,它分为什么呢?前置跟后置啊。前置呢是先干嘛呢?先加了自增的, 我先参与运算了,对不对啊?先这个什么加完之后我再参与运算的啊。后置呢是干嘛呢?我先运算完了之后我自身呢?我在什么?我在这个啊,自增或者说自减,明白了吧。所以说这里要注意一下啊,是吧,不复杂吧这个同学们啊, 是吧,认为复杂的可以扣一啊,认为符不复杂的可以扣零。好吧,所以说没有太大的一个啊。这个难度啊,非常简单,叫算数运算符。需要注意的主要是这个什么加加跟减减,这里跟大家呢,可以留一个。什么 留一个作业。呃。什么作业呢?好不好,我们也留适当留一个作业吧。 你先,大家先别呃,做完之后先别急着看下个视频啊。先做完之后自己有结果了,对吧,再看下个视频, ok。 int a 等于十啊,这里要注视掉啊。 int a 等于十, 然后呢? into 一个 b, 对 吧。就定一个整数类型的变量 a 给它赋值呢为十定一个整数类型的变量 b 啊,对吧,现在没有值。 好的,那么,呃,假如说 b 等于 a 加加加 a, 好 吧, b 等于 a 加加加 a 加加 a, a 加加输出 a 的 值, 这是作业好吧,这是作业啊,输出 a 的 值为多少?别写代码,先不要自己去写代码。不要这个啊,教主,我直接把你的代码把这个作业复制一下,放到我这个编辑上面来,我一去运行, 对吧?然后呢?结果都是的啊,完成的。你不要那么去搞啊。先这个什么呢?不,不去输出啊?不输出,明白吧?直接去算一下,根据我们刚刚讲的,前置还是后置呢?对不对啊?去算出来之后自己内心有一个结果了, 明白吧?然后再去运行,运行完之后他会得到一个结果。这个结果呢,跟你自己算出来的结果是不是一致的?是一致的。哎,你就理解了。不不一致,理解不了怎么办?下个视频我来解释啊。 ok, 非常简单啊。

大家好,各位写 c 语言的朋友们,你们有没有想过这么一个问题,就是当我们写完代码,点下那个运行按钮之后,我们的电脑它背后到底都干了些什么?我跟你说,这可不是一瞬间变出来的魔法,而是一场超级精密的分成了四个步骤的蜕变之旅。 对,就是这个问题。咱们很多人啊,平时写代码,从我们看得懂的那个 main 点 c 文件,到最后电脑能直接跑的程序,中间这一大段过程就好像一个黑瞎子, 我们只知道哎,他能跑,结果也对,但具体他是怎么从一堆字母变成机器指令的,好像还真有点说不太清楚。不过呢,今天咱们就一起把这个黑瞎子给打开看看,你会发现呢,这背后啊, 是一套非常严谨而且逻辑特别清晰的流程,搞懂了它不仅能满足你的好奇心,更重要的是以后再遇到那些奇奇怪怪的 bug, 你 就能心里有底,成为一个更厉害的工程师。好,那么这场蜕变具体是怎么发生的呢?其实啊,整个过程可以被清清楚楚的分成四个主要阶段,这就是咱们今天的路线图了, 预处理、变异、会编,还有连接,你看,每一步都有他自己的任务和工具,就像流水线一样,把我们的原始代码一步一步的打造成最终的样子。来,咱们一个一个的拆开看。旅程的第一站叫预处理, 你可以把它想象成在真正的大战开始之前,先来一波战场清理工作,他的任务不是去理解你代码的逻辑,而是给后面真正的翻译工作扫清障碍,做好所有的准备。 那域处理器具体都干了些啥呢?很简单,他专门处理那些以警号开头的东西,比方说,他会把 has 引流的所有内容原封不动的复制粘贴到你代码的这个位置, 然后呢,把所有用 hash define 定义的红全都替换成它真实的值啊。对了,还有我们写的那些注是也全都会被删掉,毕竟机器它可不需要看咱们的笔记,对吧?零点四秒。所以你看,经过这么一折腾, 我们原来的那个 mate 点 c 元文件就变成了一个新的,通常体积会大不少的中间文件叫 mate 点 i。 这个时候,文件里已经没有红定义了,也没有注视了,所有投文件的代码都老老实实地合并进来了。 好了,战场打扫干净了,真正的主角编辑器现在要登场了。可以说啊,这是整个流程里最核心也是最复杂的一步。他的工作呢,就是负责把我们人类能看懂的司仪员翻译成一种更接近机器硬件的语言, 也就是会变代码。编辑器就像一个特别严格的语法老师,他会先检查你的作文,看看词法和语法对不对。比如你是不是忘了写分号啊,括号是不是少了一半 啊?然后呢,他会做异域分析,检查你变量类型用的对不对。更厉害的是,他还会悄悄帮你优化代码,让你的程序跑得更快一点。最后所有检查都通过了,他才会把你的代码翻译成会变语言。 那么这一次蜕变的结果呢?就是把那个预处理完的面点 i 文件,变成了一个以点 s 结尾的会变代码文件。 嗯,到这一步,虽然我们大多数人已经看不太懂了,但没关系,这恰恰说明我们的代码离机器的目标又近了一大步。 第三阶段就是会编了,这一步的目标特别纯粹,也特别直接,就是把上一阶段生成的我们还能勉强看懂一点点的会编代码,完完全全的翻译成计算机 cpu 唯一能懂的语言, 也就是由零和一组成的二进字谋器指令。会编器做的事情很简单,就是查表翻译,他会把每一条会编指令都转换成对应的二进字码, 然后把这些二进字码打包成一个目标文件。但你得注意啊,这个时候的程序他还是个半成品,他可能知道自己要做什么, 但他还不知道他要用的一些外部工具,比如说 premiere f 函数到底放在哪里。所以您看,这一步的输入是 main 点叉会标文件,输出呢,就是一个目标文件。 在 linux 系统下,它一般叫点 o 文件。在 windows 下呢,就是点 o、 b、 j 文件,它已经是纯粹的二进制格式了,但它还不能自己跑起来。 这就引出了我们最后一次,也是最关键的一次拓变连接。连接器,他就像一个工厂里的总装配师,他的任务就是把我们自己写的代码模块,还有各种外部的零件库全都组装到一起, 变成一台可以真正开动起来的完整机器。他的核心任务主要有两个,第一个叫符号解析,比如说你在 a 文件里调用了 b 文件里的一个函数链接器,就负责把你们俩接上头,让 a 能找到 b。 第二个叫库连接,就是把你代码里用到的那些标准库函数,比如 print f, 把它的具体实现代码从系统库里给你拽过来一起打包。最终连接器把我们的目标文件 main 点 o 和所有它需要的库文件全部合并在一起 等等等等,我们最终的目标,一个可以双击运行的可执行文件就诞生了,比如 program 点 exe 或者 a 点 out 到这里,我们代码的整个蜕变旅程才算圆满完成。 哎,你可能会问,了解这个流程除了满足技术好奇心还有啥用?用处可太大了,对于我们开发者来说,他最大的价值就是能帮我们快速的定位和解决那些看起来特别诡异的爆臭。 打个比方,当你看到找不到投文件这种错误的时候,你的脑子里就应该叮的一下反应过来啊,这是第一阶段,预处理出问题了,赶紧去检查你的害史, include 路径和文件名是不是拼错了, 问题八层就在这啊!最最常见的语法错误,那毫无疑问是第二阶段变异的产物,这其实是变异器在帮你检查代码写的规不规范,所以别慌, 仔细看看编辑器提示你的行号,它正在帮你指路呢。还有那个最让新手头疼的 undefined reference to 错误,它就发生在最后一个阶段连接,这说明什么?说明咱们那位总装配师找不到你想要的那个零件了, 要么是你只说了要用,但忘了把零件本身造出来,要么就是你忘了告诉他去哪个仓库里找好了。说了这么多,咱们最后用一张特别清晰的图表来把整个旅程回顾一下,把所有知识点都串起来来。我们最后就遮着这张总览图来巩固一下记忆。 你可以非常清楚的看到,整个流程是环环相扣的。首先预处理器帮我们打扫战场,输出点 i 文件, 然后编一器进行最核心的翻译工作,生成点 s, 会编代码,紧接着会编器,再把它变成机器能认识的点欧布标文件。最后连接器,这位总装配师把所有的零件和库都组装起来,最终诞生了我们的可行程序, 每一个阶段的工具输入、输出和核心任务都在这了,一目了然。所以啊,下一次当你再点击运行的时候,希望你脑海里能浮现出这背后精密的四次蜕变。 这也让我们忍不住去想一个问题,当我们用 c 语言写下一行行代码的时候,我们总以为自己在直接命令机器,但实际上呢,我们只是在和这个庞大又严谨的翻译系统对话。那么代码与机器之间,到底是谁在听谁的指令呢?