同学们,你们在写私语言代码时,是不是经常搞不懂 printf 里那些 break 开头的符号到底有什么用?其实啊,这些就是格式控制符,它们的作用就像给不同的礼物挑选合适的包装盒, 比如你要输出一个整数,就用百分号 d 这个盒子。想展示小数,就用百分号 f 这个盒子。如果把整数放进百分号 f 的 盒子里,就像把方形礼物硬塞进圆形盒子,结果肯定乱七八糟。 格式控制就是告诉计算机这个数据该用什么格式展示出来。就像寄快递时要填写物品类型,快递员才知道怎么处理。 记住,不同的数据类型有专属的格式控制符,选对了才能让输出结果既准确又美观。你们平时写代码时有没有遇到过格式控制出错的情况?评论区说说看你们是怎么解决的吧!
粉丝2127获赞1.1万

指针是 c 语言中的重要概念,被视为其精华所在。对于初学者而言,指针的含义可能并不清晰,他到底指向哪里呢?常见的解释是,指针就是一个地址,这里的地址又指的是什么?如果你对计算机组成结构不够了解,可能就很难理解这些抽象的概念。 指针的本质是什么?首先探讨这样的一个问题当我们定义一个变量 a 时,他会被存储在哪里? 在讨论变量的存储位置时,我们可能会想到固态硬盘或内存条等存储设备。因为变量对于读写速度有很高的要求。 当前主流的固态硬盘的速度大约在每秒三至四 g 之间,而主流内存条的速度可达每秒四十 g, 两者之间的速度差异接近十倍。我们所定义的变量 a 是否被存储在 内存条里面呢?虽然每秒四十 g 的速度已经相当快了,但其实还有更快的存储器。它位于 cpu 内部,被称为缓存,分为 l 一、 l 二和 l 三缓存。他们才是名副其实的内存, 因为它们位于 cpu 内部,而内存条位于 cpu 外部,你也可以叫它外存。那么,这些缓存的速度有多快呢? 这是我电脑的缓存速度。 le 的读写速度可达每秒两千五百多 g, 是内存条速度的六十多倍,是固态硬盘速度的六百多倍。 尽管固态硬盘的速度已经相当快了,但与缓存相比仍有很大差距。我们所定义的变量实际上是存储在缓存中的。那么,缓存到底是什么呢?实际上,缓存和内存条都属于 ram, 但缓存使用的是静态随机存取存储器,而内存条使用的是 动态随机存取存储器。缓存之所以比内存条快,是因为缓存的本质是由触发器构成的。每个触发器仅存储一位数据,就需要多个门电路以及多个晶体管来实现。而内存条只需要一个晶体管就能存储一位数据。因此内存条的容量可以比缓存大的多。 我的电脑缓存总容量仅为三十五兆,而内存条的容量通常及 gb 起步。内存条是通过电容的充放电来存储数据,这需要一定的时间。而缓存则可以在通电的瞬间即可存储数据。 在存储速度上,缓存比内存快的多。那么缓存又是如何存储一位数据的呢?在缓存存储单元中,只有当地只限为一时,该单元才处于活跃状态。如果输入一作为数据,那么输出也将唯一。 如果输入零作为数据,输出也将为零。当地址线为零时,输入是无效的,即无法对该单元进行读写操作。为了更直观的描述,我们使用一个立方体来表示一个缓存存储单元。一个字节由八个这样的立方体组成,他们共用一根地址线。 在进行字节写入之前,首先将地址线设置为一,然后给八个数据输入不同的数据来完成一个字节的读写。如果要进行两个字节的读写,是否需要增加九根线拟?虽然这种方法理论上可行,但电子工程师通常不会采用如此简单粗暴的设计方式。 我们可以通过增加一个飞门,不需要额外增加任何线路,就能够控制两个自己的数据。首先,他们的数据输入线都连接在一起。当输入一时,通过飞门的作用会变为零,上面的 字节不变,则允许读写。当输入零时,通过非门的唯一被允许读写,上面的则为零。通过这个非门,我们可以选择对哪个字节进行读写。对于八个字节的情况,我们就需要使用到一码器。常见的一码器是三八一码器,他有三个输入和八个输出。 当输入为零零零时,第一个输出为一,其余输出为零。当输入为零零幺时,第二个输出为一。以此类推。通过三根地址线,我们可以控制八个字节的读写操作。 如果使用四输入一码器,它可以控制十六个字节,而十输入一码器可以控制一千零二十四个字节,而十六输入一码器可以控制六万五千五百三十六个字节及六十四 kb 的数据。知道了存储空间的巡止范围是六十四 kb。 现在让我们将目光投向 c 语言中的指针,这将帮助我们更深入的理解。以这条语句为例,他将变量 a 的地址付给指针 pma, 用于取地址运算。 假设我们的存储空间只有十六个字节,当地址输入为二,进至幺幺幺幺时,密码器会控制存储变量 a 的单元。因此 a 的地址就是幺幺幺幺。 实际上,地址就是一码七的二。禁止输入值,也就是 ma 的值等于幺幺幺幺转换成十六禁止,表示就是零 x f。 一旦我们将这个地址付给指针 p, p 的值就是零 x f。 而信号 p 则指向所选择的存储单元,并读取其中存储的值。当我们将零 x f 作为地址数给一码器时, cpu 会访问恰好是变量 a 存储单元中的值。

告诉我这是啥?学过英语的不都知道,这不是动词返回吗? ok, 那 我们来看一段 c 程序, 你会发现刚刚的 return 在 最后一行,而聪明的你又发现它后面有个零溢过来的意思是返回零很怪,但我跟你讲,它的大概作用是结束程序。你或许是半知半懂,没关系,你一会儿就会懂的。 面对这一长串 c 语言,你了解了一个 return 肯定不够。学过英语的你又发现了两个中文为打印的单词。 printf 在 c 语言中表示格式化输出的意思。输出什么呢?就是 printf 双引号内的内容。那我问你, c 语言的意义是不是为了使用?为了看, 那么聪明的你就明白了,一个 c 程序中必须要有一个或多个输出,那有输出肯定有输入啊, scanf 就是 格式化输入的意思。 ok, 听完之后,是不是觉得自己对 c 语言已经大致了解了?但当你仔细观察这段 c 程序时,你会发现很多东西都看不懂。像这没事,听我慢慢讲。像这里, 这叫做头文件。在学指征之前,知道每段程序都需要它就行。相信你刚刚在观察这程序时,发现了 方用这个词出现了很多遍。不需要知道是什么意思,只需要知道在投文件之后,可以把 c 程序理解为函数,而 volume 可以 看成 x, 而 int 就是 来定义 x, y 的 mini 点是主函数,不可改。 后面的随便你定义。你可以把它定义成一元函数,二元函数随便几元,但你定义完后如何使用就是要学的了。 看这里,我定义完否用函数后,写了一行输入 scanf, 后面的否用是将输入的信息赋到否用,必须注意,每行代码写完后,除特殊以外都必须加一个分号,赋完值后添加 a f 与巨块。 if 是 如果的意思, 所以这行代码的意思是,如果负的值为三,就自动执行下行语句,输出 u n, 但如果输入的不是三,就跳过该 f 语句执行 s 语句,输出 guess, 最后 return 零结束程序。大括号必须打运行看下, 输入三用回车运行,看到了显示的是 u n, 那 再试下,不是三是二呢? 那显示的就是 guess。 那 你会问了一个 c 程序里就必须要有 f s 语句吗?当然不是。来看一段最基础的头文件,之后是主函数内,而后就是输出,最后是返回零程序结束运行, 然后就看见了输出的内容。那想必又有人问主包,主包 printf 只能输出英文吗?当然可以输出中文啊。来看 printf 的 输入框,里面是中文,运行 输出为中文。看了这么多 c 程序的你,一定会发现都有一个格式, 就是这个,可以在定义完魅仪函数后的大括号里尽情地编辑。那么恭喜看到这的你,已经对 c 语言有了比较初步的了解,如果你觉得有用的话,能双击屏幕为我点上一个赞吗?谢谢!

今天我们要讲的是 c 语言中的逻辑运算。在平面当中有一个三角形,它的三条边是 abc, 我们知道三角形的任意两边之河大于第三边,如果两条较短边的河小于最长边,那么则不能构成三角形。那么如何编写 z 语言程序,判断三角形是否合法呢? 程序输入三角形三条边的长度,然后判断三角形是否合法,合法输出一,否则就输出零。 那么在解决这个问题之前,我们先来学习 c 语言逻辑运算的知识。 在开发的过程当中,有时候我们需要综合多个关系条件进行判断,这个时候就需要我们使用逻辑运算符将多个关系运算连接起来,组成更复杂的逻辑表达式。 逻辑运算有三种,分别是与运算或非运算。逻辑运算的结果是一或零, 与运算符是两个 n 运算符两边的表达式都非零的时候,运算结果是一,只要其中某个表达式的值是零,结果就是零。 比方说, a 等于一, b 等于二, c 等于三。表达式 b 大 于 a 与 c 大 于 b 的 结果为一。 a 大 于 b 与 a 小 于 c 为零, a 减 b 的 差与 c 为一。 货运算符是两条竖线,当货运算符两边的表达式都是零的时候,运算结果为零,只要其中有一个值非零,那么结果就是一。 比方说, a 等于一, b 等于二, c 等于三。表达式 a 小 于 b 或 a 大 于 c 的 结果为一。 a 大 于 b 或 a 大 于 c 为零, a 加 b 减 c 或 b 大 于 c 为零。 非运算符是叹号,叹号后的表达式为零的时候,运算结果是零。表达式为零时,运算结果是一。 比方说, a 小 于 b 的 非运算结果为零, a 大 于 c 的 非运算结果是一, a 加 b 减 c 的 非运算为一。 除了使用与或非进行逻辑计算,我们还可以使用条件运算符。 条件预算可以根据逻辑表达式的值来执行两个表达式当中的一个,他的一般形式为逻辑表达式。问号表达是一,冒号表达是二。 当逻辑表达是结果非零的时候,执行表达是一,结果是零的时候,执行表达是二。比方说,声明 abc, 当 a 大 于 b 的 时候,执行 a 加 b, 否则执行 a 减 b。 当 a 小 于 b 的 时候,执行 a 乘二,否则执行 b 乘二。当 当 a 加 b 减 c 为零的时候,执行 a 乘以 b, 否则执行 a 加 b。 打印结果之后,我们发现 log 一 是 a 减 b, log 二是 a 乘二, log 三是 a 加 b。 那么到现在呢,我们学习了赋值、算数、比较逻辑等各种运算。为了明确运算的顺序,我们一般呢会为运算加上括号。当不使用括号确定优先级的时候,运算按照各个运算符的默认优先级顺序执行。 那么现在呢,我们回到判断三角形是否合法这个问题。若 a、 b、 c 可以 构成三角形,则任意两边之合大于第三边,也就是 a 加 b 大 于 c, a 加 c 大 于 b, b 加 c 大 于 a。 三个关系表达式同时成立的时候,三角形就是合法的。使用与运算 n 将它们连接组成判断三角形是否合法的表达式。 接下来呢,我们再来看这个问题的 c 语言代码。首先设置 abc 这三个变量,存储三角形的三条边,打印提示信息, 使用 scanf 输入三条边的长度使用语运算,将关于边长的三个关系表达式连接组成判断三角形是否合法的逻辑表达式,存储至串钩, 最后打印提示信息与川狗的值运行程序输入二三四,结果是一,输入一二三,结果是零。 那么到这里呢? c 语言的逻辑运算我们就讲完了,接下来呢,给大家留一个课后作业。我们知道,假如一个年份是润年,那么该年份是四的倍数,并且不是一百的倍数,或者该年份是四百的倍数, 那么编写一个 c 语言程序,输入一个年份,程序判断该年份是否是润年, 如果是润年,输出一,否则输出零。好的,感谢大家的观看,我们下节课再会。

小伙伴们大家好,这节课呢,我们继续来讲 c 语言相关的知识,接下来呢,我们来说转译字母,那转译字母有什么作用呢?我们通过一个小趣闻啊来了解一下。 话说有一个外地人来到了武汉,问当地市民,你们武汉市长是不是叫江大桥啊?那武汉人说,当然不是啊,外地人就很好奇,就发问说,那我过江的时候怎么看到了一副标语,武汉市长江大桥欢迎您呢?你看,中文的博大精深就出来了,对不对? 这句话呢,既可以翻译成武汉市长江大桥,也可以翻译成武汉市长江大桥,是不是啊?那么为了不引起歧义,我们可以在武汉市这个中间加一个空格,或者是将武汉市和长江大桥划分为两行,那如何操作呢?那就需要用到我们所说的转译字母了, 那写个代码给大家演示一下,好吧,来到我们的开发者工具当中,在这里呢,创建一个新的文件零三,可以叫 t m 吧,点 c 可以 吧,在这个里边呢,我们首先写一个主函数, return 一个零,那这里呢,我们就可以去打印了,对吧?在打印前呢,我们需要引入一个头文件, s t, d, i o 点 h, 是 不是?然后在这里呢,我们就可以通过 print f 来实现一个打印了,那我们就打印一个武汉市长江大桥, 好,我们右键运行一下,大家可以看到,在这边呢,就显示了一个文本信息,武汉市长江大桥,为了让他不引起起义呢,我们希望在武汉市和长江大桥中间呢,能加一个空格,怎么加呢?大家看啊,在武汉市这里,我们加一个 反斜杠,反斜杠是哪个按键?是回车上面那个斜杠啊,回车上面那个跟管道符号在一个按键上的那个才是我们的反斜杠,而斜杠呢,是问号按键,也就是 shift 旁边那个按键,那叫斜杠。我们这里要写一个反斜杠,后面加一个 b, 字母 b, 这个时候我们再来运行,你会发现不一样了。哪不一样了?我们的武汉市和长江大桥中间多了一个空格,当然呢,除了加空格,我们还可以加换行,比如我们斜杠 n 就 可以来实现一个换行,那这样两行的打印中间我们加一个换行,可以吧? 清理一下,我们再来输出,你会发现武汉市和长江大桥中间是分开两行的,对不对?武汉市是一行,长江大桥是另一行,那这样的话也不会再引起歧义了。我们这里无论无论看到的是杠 b 还是杠 n, 都被我们称为是转译符。 好,那接下来我们来看一下关于转移字母的基本概念,他说转移字母的核心啊,是一个反斜杠,看到了吗?一个反斜杠,他转移了后续字母的常规意义,其 啊就使其代表特殊功能。例如单独的 n 只是一个字母,那杠 n 就 代表是换行,就是斜杠 n。 啊,反斜杠啊,应该叫反斜杠 n 代表就是换行了,就是我们所看到这样反斜,如果是 b 呢?单独的就是一个字母 b, 比如说我们在长江大桥,长江中间加一个 b, 但它单纯的只是一个 b, 你 看长江 b 大 桥对不对?好,我们加一个,在它 b 的 前面加一个反斜杠的情况下,哎,它就变成了什么,它就变成了空格, 看,他就变成了空格,所以归根结底啊,转移字母的核心就是这个反斜杠,让他具有了特殊的意义。好,那么常用的转移字母还有很多, c 语言定义了一系列标准的转移字母,下面呢,给一些常见的,比如说杠 n 换行杠 t 水平制表符,杠二回车,杠 b 退格,杠 f 换 e 杠。单引号代表是将单引号能输出出来, 杠双引号代表着输出双引号,杠杠代表是输出一个反斜杠,杠零代表是输出一个空字母, 对不对?那比如我们这里可以演示一下,老师,我想打印出来一个双引号的内容,能不能行?就是输出的内容当中,比如说输出一个 hello world, hello world 用一个双引号括起来,能不能做到?可以,这里呢?我们换行一下 word, 在 这里边我们就写一个 hello word, 我 想将这个 hello word 打印出来,而且打印的时候加一个双引号,怎么办呢?如果你直接写双引号,那这明显是违规了,对吧?因为双引号是属于我们 c 语言的那个, 呃,关键符号对不对?那你可以在前面加一个反斜杠,后面也是单独双引号,不行,在双引号前面加一个反斜杠,这个时候我们再来输出,你会发现这个 hello world 就 不单是单纯的 hello world 了,而是加了一个 双引号,对不对?就像我们平时生活一样,比如说老师,我想 print 打印一个 f f, 里边打印一个呵呵, 原本啊呵呵就代表笑的意思对不对?但是现在的呵呵呢,就不代表笑了,一般代表骂人的话对不对啊?所以我们为了让他代表骂人的话,我们可以加一个斜杠啊,反斜杠啊,双引号, 后面呢也加上这个时候我们再来输出,那这个呵呵呢,就变成了有双引号的呵呵了,就不代表笑的意思了,而代表骂人的意思了,是不是?好,我们清空一下,那这样的话就是我们转译自辅的作用。当然呢,我们只演示了一个双引号,单引号也是如此, 呃,斜反斜杠也是如此,杠零空空字母也是如此,还有杠 f, 杠 b, 杠二杠 t, 杠 n, 大家可以自己手动的去操作一下。 ok, 那 么关于转移字母呢,我们就说到这里,感谢各位聆听,咱们下节再见。

hello, 大家好,这一课我们来一起了解一下数据类型转换。 首先我们要考虑一个问题,为什么会有数据类型转换呢?其实最主要原因之一就在于人家 c 语言将不同的数据分为不同的类型, 就比如说我们再去使用数字的时候,数字呢,它给我们分成了有 int 类型,还有 short 类型,还有什么 long 类型,还有 float 类型, double 类型,对不对?比如说它这个整数呢,就分为了,哎,这三种啊,小数的话呢,两种对吧?当然还有一些长的那些类型啊,我们就不再去说了,好吧, 好,那么他分为不同类型以后,那他这里边再去存储数据的时候,就会产生一些新的问题,就比如说我们现在的话呢,有一个数字现在是一,然后计算一加上一点五,那么这时候我想要去拿到结果的时候,那应该怎么办呢? 对于我们自己的意识里边,我们直接就给他换算出来了,就等于二点五,对不对?但是对于 c 语言来说的话,他再去换算的时候,底层会怎么去做呢? 首先我们先要先要去拿到这个一的这个变量,对不对?这个一的话呢,咱们一般情况来说会把它分为哪个类型啊?会分为这个 int 类型对不对?好,那除它以外的话呢,咱们还有就是这个一点五, 这个一点五的话,我们会把它分成什么样的一个类型呢?我们一般情况来说可以给它分成叫做 double 类型。那么问题来了,这个 int 类型,这个 int 类型和这个 double 类型能不能直接进行混合运算呢? 答案是不能的,在这个 c 语言里边,他在如果说是不同类型的话,他要进行预算,先要统一数据类型,因为他毕竟底层分配的这个空间是不一致的, 对不对?那么只有统一的空间,他们才能知道如何进行相的一个表达, ok 吧?好,那么也就说他需要将一转成一点零,大家都是小数的,好,那么再进行计算,获得结果, ok 吧?这时候就会涉及到一个问题, 一,是不是要转成一点零啊?那也就说他要将整型转成小数,也就是浮点型,这就是数据类型的转换, ok 吧?好,这也是为什么要有数据类型转换的问题啊。好,那么我们知道这个数据类型转换了以后,然后接下来的话呢,我们来看一下它的概念啊, 那类型转换呢,其实就是将一个数据类型的值转换成另一个数据类型的值,那变量之间的这个类型转换呢?是可以进行互换的。注意了,这是变量,那这个变量指的什么意思?就比如说我们在这定义了一个 int, a 等于数字一,那我们能能不能把 a 的 类型换成其他的呢?有时候把这个 int 类型给它换成其他呢?答案是可以的,有时候咱们改的是这个变量的这个数据类型,那比如说我现在有一个常量一, 那我能不能把这个常量变成一个小数呢?哎,答案是不能的,因为他已经写死了,对不对?常量的概念是什么呀?是不允许去修改嘛,对不对?所以说的话呢,常量是不改的啊,我们在做数据类型转换的时候,一般转的什么都是人家变量的这个数据类型啊,这个咱们一定要清楚, 好,那么除他以外,还有就是咱们一定要了解人家 c 元的数据类型转换,那么他在去转换的时候呢,有分为两大类,第一大类就是隐式的啊,隐式的类型转换,那么我们也可以把它称之为叫做自动类型转换,比如说这两种方式其实是一种方式, ok 吧? 好,那么还有第二大类就是显示类型转换,叫做强制类型转换,这两种方式也是一样的, ok 吧?好,那么隐式类型转换的话呢,它是发生在 不同数据类型的混合运算时,它会自动的为我们进行相应的一个转换,那这个转换的话呢?是由谁来做的呢?是由编程来自动完成的,这个编程说白就是咱们自己安装的这个 c 的 这个编程, ok 吧?那也就说我们不要去写,不用去写额外的代码,它自动的就给我们进行相应的完成了, 那他再去转换的时候,肯定要去遵循一些规则,对不对?那这个规则都有哪些呢?我们来一起去看一下。首先第一点就是参与预算的这个类型,发现不同时,人家就会先去将这个类型呢 统一成一种类型,然后再进行预算,这个就比如说我们刚才说的一加上一点五,那么这时候他怎么去运算呢?他先去统一成同一种类型啊,比如说全都转成小数,然后再进行运算获得结果, ok 吧? 好,那么问题是它统一称小数呢?还是统一称整数呢?哎,这个东西咱们就要去看它另一个规则,它在转换的时候呢,会按照数据的长度的增加的方向来进行转换, 为的目的就是保证精度不降低。指的什么意思?比如说我们这的话呢,有一个 int 类型,有一个浪类型,我们想想这两种数据类型,谁表示的数据范围比较广呢? 是不是浪类型啊?所以说的话,哎,它会将这个 int 类型转成浪类型, ok 吧?好,这是这个意思。再比如说我们现在有一个类 int 类型, 还有一个浮点的 double 类型啊, double 类型,那么问题是他们之间在进行换算的时候,我们会把它去转,怎么去转换呢?他会去把 int 类型转成 double 类型,为什么呢?因为 double 类型表示的这个数据的这个广度更大一些, ok 吧,好,这是这个意思啊,比如说他会根据这个数据的长度来进行向那个转换,往上进行向那个转换 好,那么所有的浮点类型在去预算的时候,都会以双精度的进行运行,即使说这里面包含了单精度的运表达式,那么它也会去转成 double 类型啊,这时候这个东西咱们一定要清楚,也就是小数的话呢,它基本上都是以 double 类型进行相对的转换,这个计算的 好,除它以外,还有就是叉儿类型和少的类型呢,参与计算的时候都会去转成 int 类型,也就是说他虽说占用的空间比较少,但是没有关系,人在去计算的时候呢,都转成 int 类型了,这样的话呢,表示的这个数字之范围会更广,那么我们可以考虑一下,为什么要转成 int 类型呢? 就比如说咱们叉儿和少,它表示的范围是不是数字比较小啊,那比较小,如果说这两个短类型一加出来一个什么呀?超出范围的,那这时候怎么去 怎么怎么进行计算呢?好,他用 int 类型正好可以进行存储,对吧?好,这是这个意思啊,好,当然这只是咱们考虑的,但是实践来说的话呢,它底层我们知道转成 int 类型了就可以了,好吧,好,那么这是这块。 好,那么还有一个就是在赋值运算的时候啊,赋值运算的时候,那么赋值运算是指什么意思呢?就是当我们定义一个变量,比如说我们定义一个变量 a, 然后等于一, 咱们是不是把右边的给左边了,那么在这个时候呢,就叫做复制运算,那复制运算的时候,如果说发现两边的数据类型不同时,那他会怎么做呢? 他会把右边的类型转换成左边的类型,那比如说的话呢,我们在这写了一个什么?写了一个叫做啊, double, double a 啊, double a, 那 么这也说左边的话呢,是浮点类型,右边的话呢是这个整型,对不对?那么他会把这个一的话呢,转成这种浮点类型,转成一点零,然后再去给 a 进行相应的一个赋值, ok 吧?好,那么这是这块儿, 那么如果说右边这个值的话呢,长度比左边长,那这时候呢,他会去丢失一些相应的精度,那丢失这个精度的话呢,按四舍五入进行相应的一个存储, ok 吧?那这个指的是什么意思?比如说我们在左边的话呢,定义了一个 int a in 的 话,它是不是一个整数,然后的话呢,我们给它赋值三点一四,好,那么三点一四是不是它有小数啊?小数的话,那这时候呢,就会被舍弃掉啊?那么舍弃掉的话,那是进位呢?还是还是这个舍弃掉呢?那就根据它这个小数了,如果说,哎, 大于五的话,那么它就变成四了,如果小于五的话,它就什么直接舍弃掉了,是这个意思, ok 吧?好,那这是它一个怎么去进行相对计算?所以说的话呢,它在类型转换的时候,我们一定要注意它是怎么进行存储的。首先 如果说是一个表达式的时候,他们会去向上进行向的一个转型,那如果说是把这个式表达式往左进行向的复制的时候,他会把这个右边的转成左边的,这个咱们要清楚,好吧?好,那这是他一个转换的一个规则啊。 好,那么咱们再去详细的去看一下这个隐士转换,那么隐士转换的话,其实也可以称之为叫做自动类型转换,这个咱们应该是清楚的,对不对?那他在去发生的时候是什么时候呢?一般情况来说就是自动类型的时候,就是自在表达式中自动发生的,无需咱们进行指令调用。 那么通常情况来说的话呢,就是由小的类型转换成大的类型,那如果说咱们把大的类型转换成小的类型, 可不可能他会去运行呢?答案是可能,那么这时候呢,程序可能会给我们相应的这个警告, ok 吧?好,那么我们再来说,不给警告的时候啊,不给警告的时候呢,一般情况来说就是 底底层的啊,就是低级的给高级的,因为这样的话呢,他肯定是能完整的去表示出来的,就比如说我们一个 int 类型转成浪类型,那这个浪肯定是能完整的表示出这个 int 类型的, 所以说他的转换不会给我们相应的一个警告。那如果说咱们说什么说,哎,我能不能把浪行浪类型转成 int 类型啊?可以,但是的话呢,有可能会丢失数据,对不对?丢失数据的话,那么他就会给我们警告。那 隐式的类型的时候,隐式转换的时候,一般情况来说都是底转高, ok 吧?那么如果说咱们发生了这个高转低的时候,咱们一般情况来说不会用隐式的,而是考虑用这个强制类型转换,也就是第二种方式,这个咱们一定要清楚,好吧? 好,那么我们来看一个相应的代码啊,那么我们看一下,在这的话呢,我写了一些相应代码,这写着叫做 float pi 等于三点一四,那这个 float 类型我们想想它默认是什么?是一个 f 类型,但是想想如果说是一个浮点类型,咱们这个编辑器它默认会转成什么?是不是会转成一个 double 类型啊? 所以说咱们在这去复制的时候很有可能啊,注意这边的话呢,它再去参与计算,人家编辑器会转成一个 double 类型, 但转成 double 类型的话,然后在这儿去复制的时候,咱们这儿是什么呀?要左边类型,所以说什么呀?它内置的给我们做了一个转换, ok 吧?内置做了一个哎类型的一个转换。好,那么做完转换以后,然后我们再看 int 类型,这儿写什么? s r, 那 么它是什么呀?它是一个整数,这个肯定没问题, 然后在底下再进行预算的时候,你会发现什么?这是 r 乘 r, 然后 pi, 那 想想这时候这些数据类型它会怎么去做?它会把这个 r 转成什么呀?转成浮点类型。那么为什么转成浮点类型呢?因为你会发现这个 pi 是 不是就是浮点类型,所以说这边的话呢,都会转成浮点类型。 好,那么转成浮点类型以后,然后我们要还要再去考虑另一个规则,但凡是一个小数类型的就是浮点类型的,那么它最终会转成什么类型? 转成 double 类型,对不对?所以说他最后什么呀?转成了 w 类型, s 的 话呢?这边就是一个 w 类型, ok 吧?好,那么转成成 w 类型以后,然后我们在这去输出的时候,咱们说什么?哎,我要只要整数,所以说他最后给我们去输出的是一个整数,他也就说把小数呢给我们去舍弃掉了,是这样一个意思, ok 吧?好,那么也就说在这儿的话呢,它最后跟我们去输出的就是一个整数,因为它在赋值的时候,这儿就是一个什么呀? int 类型嘛,这是这个意思啊。好,那么这是这个演示类型相应的转换啊。

hello, 大家好,这一课我们来一起了解一下字母串, 什么是字母串呢?字母串啊,它是由一对双引号扩起来的字母训练,当我们看到这个解释的时候,我们大概就能猜想到它的一个数据长什么样子,就比如说我们可以看到在这的话呢,我列出出来了三个字母串,一个是什么呀? china, 还有一个 c program, 还有一个十二点五, 你会发现这个字母串里边呢,其实可以编辑的内容有很多,比如说英文字母啊,数字啊,符号啊,都是可以使用的,其实说的直接点就是我们单个字母可以去使用的内容,在这里面呢都可以进行编辑, 那么他比这个字母呢的优势在于哪呢?就是我们可以在这里面呢连续写多个, ok, 正因为他可以连续写多个,所以说以后我们再去编辑程序的时候,他的优势就体现出来了, 当我们想要去表示某个比较复杂的内容的时候,我们就不用再去单独的每一个字服用单引号给它编辑好了以后,然后用加号给它拼接起来了,对不对?这就是它的一个具体的一个优势啊。 好,那么问题是这个字母串跟我们之前了解过的字母又有什么区别呢?那在这呢,我们就以常量为说啊,为为基本来说,那么字母常量的话呢,它是由单引号扩起来的, 而咱们字母串的话呢,它是由双引号扩起来的,这就是为了让人家这个 c 元的编辑器来去识别,看看这到底是什么样一个类型,好去进行解析, ok 吧,好,除它以外的话呢,还有就是字母串成这样的话呢,它是由单个字母去组成的,这 在这的话呢,也有特殊情况,比如说转译字母啊,那转译字母的话呢,这属于特殊情况了,咱们就不再去额外去说了,除了转译字母以外,基本上都是由单个字母去组成的, 而字母串呢,它就不一样了,它可以由一个或者是多个字母来进行表示,就比如说我现在的话呢,表示一个英文单词,好,我写个 china 对 不对?那我想要去表示一个价格的时候,我可能什么样?连标点符号、字母、数字啊一块给它放到这里边, 甚至后期我们再去编辑程序的时候,可能会要表示一个文章,我们完全可以把一个文章挨着牌的全都给它理解出来,到时候呢用双引号给它扩起来就可以了,比如说这里面那个内容的长度呢?是不可就是这个预定的啊,或者是不可去预知的, ok 吧?好,那么这是这样一个情况, 好,除他以外的话呢,还有就是一个字母常量的话呢,可以去赋给,赋予给一个字母变量,他指的什么意思呢?比如 比如说我们现在单独写一个字母,写一个 a, 那 么我们能不能单独的用一个标示符来进行表示呢?就比如说我写一个叫做 a, 一 来表示的这个大写字母 a, 可不可以呢?答案是可以的,因为你会发现在 c 语言里面呢,它有专门定义这个字母类型,就比如说我们可以在这去写的时候,我就写一个叫什么呢?等于一个大写的 a, 可不可以啊?可以,没有问题, 但你会发现我们想要去通过这样一个方式定义一个字母差的时候,是没有方法的啊,这不是说没有方法,是目前啊没有直接的一个类型来进行表示的。 那么后边的话呢,咱们会去说什么?说有个叫做差啊差,然后给他一个数组的方式来进行相应的表示, ok 吧?好,那么数组的话呢,我们后边再去说。只说现在目前来说的话呢,是没有直观的一个方式来去定义一个哎,相应的一个字母差的,所以说 字母串常亮,不能直接赋于给一个字母变量, ok 吧?好,那么这是这块好,除它以外的话呢,还有就是它的空间问题,空间问题的话,字母的话呢,它一般情况来说只需要占用一个字节空间就可以了, 而字母而字母串长,这样的话呢,它就什么呀?这个东西就不好预知了,为什么呢?因为你会发现它里边这个内容的话呢,可长可短,对不对?但是的话呢,它也可以进行计算,怎么去计算呢?我们完全可以通过查看它里边这个字母的数量来进行计算, 它是在这里边所有字母的数量的长度,这个和啊也他的长度的基础上加上一就可以了。就比如说我们可以看到在这的话呢,还有一个叫做 c program, 那 么他在去存储的时候怎么去存储呢?他先去分配啊,看,比如说这有一个 c 字母好,那我们就分配一块空间,然后后边有空格好再分配一块空间, 后边每个字母的话呢,单独再去分配一块空间,但他这个空间分配完了以后呢,在后边他再额外的去分配一块空间,但他这个空间的话呢,它会存储什么呢?存储一个杠零, 这个杠铃是干什么用呢?它是为了标识字母串结束的一个标志, ok 吧?所以说的话呢,他只需要想要去计算一个字母串长度的时候,我们只需要什么样数,他这边有多少个字母,然后在这个基础上加一就可以了, ok 吧?好,这就是空间的一个大小的区别啊。 好,那么当我们了解完这个东西以后的话呢,那么接下来的话呢,我们来通过代码再去看一下它具体的一个展示效果啊。 好,那么如果说咱们想看这个效果的话,其实展示的方式也是比较简单,我们直接去进行输出就可以了,我们可以看到在这的话呢,我已经创建好了一个文件叫做字母串点 c, 并且的话呢编写好了一些相应代码,就是引入了标准的输入输出,然后入口地方对不对?好,我们直接什么写一个叫做 print 好, 那么这个 print 的 话里边我们编写内容,咱们之前他去输出的时候的话呢,还记得这里边我们会怎么去写吗?我们会通过双引号进行相应的一个输出,后边的话呢,紧跟一个具体的值,对不对? 那么我们在用双引号的时候为什么要这么去写啊?因为你会发现现在就已经了解了,对吧?这时候他其实说白了就是输出一个字母串,比如说我们这写个什么叫做数据啊,就写汉字了啊,数据 数据啊,数据内容啊,数据内容,然后后边的话呢,一个冒号,冒号后边紧跟什么呢?百分号 s, 那 么当我们再去输出一个字母串的时候,我们是用百分号 s 的 方式进行向下输出的。好,那么问题是这个字母串怎么去进行表示呢?咱们说了 是通过双引号的方式进行表示的,对不对?好,那比如说我写一个字母写一个 a, 好, 那么这时候呢,我们给他进行运行,你会发现在这的话呢,他就给我们去输出了一个 a, 输出一个 a 以后,然后我们再看他这个底下这个控制台也没有出现警告或者是报错的一个情况,对不对?说明这个东西是没有问题的。 那除这样一个写法以外的话呢,那么我们也可以什么再去换其他写法?比如说我现在一个符号啊,那么我再写多个符号,写个叫做 abc, 好 吧,好,那再我们再去运行走起,那这时候的话,你会发现看着吧,这边也是没有问题的啊,那我们在这给它进行换行,不然的话呢,看着是个不舒服啊, 看着不清晰再进行。好,那这时候我们可以看到这边都是没有问题的,对不对?那也就说当我们想要去表示一个字母串长量的时候,我们用双引号就可以了,那么我们能不能用其他的一些符号呢?就比如说我们现在的话呢,给它进行像那个复制,一行下来, 我现在把这个双引号呢,给它换成单引号,那换成单引号的时候,我们想想人家这个 c 元的变器会把它解成解析成什么? 它是不是就应该是一个字母类型啊?对不对?那么我们这时候再去运行的时候,你会发现看到吗?它程序运行过去了,但是的话呢,哎,没给我们进行输出,那么问题是为什么没有给我们进行输出呢? 你会发现在底下呢,他给我们去做出了一些相应的警告,说什么呀?说 print f, 这出现了问题,第几行呢?第六行的第九个字母,这是不是第六行啊?并且的话,咱们编辑器也给出了一些相应的一个输出的,对不对?所以说呢,这是一个错误信息啊。 好,那除他以外的话呢,那比如说我们再去进行输出的时候,再输出的时候,我们如果说不给他相的这个符号可不可以呢?那这时候的话,其实你会发现这直接就给我们爆红了,爆红了以后你再去运行,他根本就什么呀,哎,直接跟我们提示错误了, 所以说呢,这样一个方式也是不可以的, ok 吧?好,那么了解完这个东西以后,那么我们基本上也就清楚了这个字母串应该怎么去使用了,他在去使用的时候一定要去注意了啊,在这边这些就是字母串,就是字母串, 字母串啊,使用什么呀?使用使用双引号啊,扩起来的字母系列, ok 吧?好,那么在输出的时候,输出的时候, 输出的时候通过什么呀?通过百分号 s 来表示啊,来输出啊,表示, ok 吧?好,那么这是这块成,那么这搞定了以后的话呢,关于咱们这个字母串的一个,哎,使用基本上就算是简单的就了解了,好吧,那么后边至于怎么去把它给内给某个变量来进行,相当于一个存储的时候,我们取完数组再去聊它,好吧,好,那么这是这块啊, 好,那么接下来的话呢,我们来看一个练习题,在 c 语言中,以下哪一个选项描述了字母串的正确表示方式? a, 看嘛, hello, hello 的 话呢,它这儿用的是单引号,所以说这个是不合适的。 然后 b 的 话呢,用的是双引号,这个是没有问题的。这儿的话呢,后边符号上啥也没有,所以说这个不行,然后用小括号,这个也是不合适的。因此这道题我们选谁呢?选第二个就可以了啊。



今天呢,我们要聊一聊 c 语言的期末考试试卷。好的,这套试卷呢,我们会涉及到一些选择题,填空题,判断题,还有编程题,都是 c 语言里面的一些比较基础的知识点。 首先是第一题,在 c 语言当中,哪一个关键字是用来定义无符号整数的呢?这道题的答案是 a assignment, 这个关键字是用来定义无符号整数的,它只能表示非负整数。 然后 sine 呢,它是表示有符号的,那 long 和 short, 它是用来修饰整数的长度的。下面关于 c 语言函数的四个描述,哪一个是错误的?错误的是 a 选项。 c 语言里面函数是不能嵌套定义的,就是你不能在一个函数里面再定义另一个函数 哦,但是函数可以递归调用,然后函数可以有返回值,也可以没有参数,这些都是对的。哦哦,在 c 语言里面,哪个运算符是用来做按位语操作的呢?这道题应该选 b, 一个按的符号是按位语,选项 a 是 逻辑语, c 是 逻辑或, d 是 按位或。哎,那 c 语言里面打开文件用哪个函数啊? 打开文件是用 fopen 函数,它是标准 c 库里面的函数,然后它会返回一个文件,指向你可以指定要打开的文件的路径,还要打开的模式。嗯,那 open 呢?它其实是一个系统调用,它不是标准 c 库里面的函数, 然后 f read 和 read 这两个函数都是用来读取数据的,不是用来打开文件的。行,那在 c 语言里面定义红是用哪个关键字定义红是用井号 define, 它是一个预处理指令,在编辑之前就会进行一个简单的文本替换。哦,对,然后这个 define 前面一定要加号, 它本身并不是一个关键字。了解了,那在 c 语音里面,取地址是用哪个运存符?取地址是用这个 and, 对, 这个 and 就是 取地址运算符,它返回的是变量的内存地址, 然后这个也是指真操作的一个基础。哦,那在 c 语言里面,动态分配内存是用哪个函数?动态分配内存是用 milk 函数,它是在堆上面分配指定大小的内存空间,然后返回一个 void 星类型的指真。 那这个 alec 呢?它不是一个标准函数,然后 new 是 c 家里面的计算符, create 也不是标准函数。懂了,那在 c 语言里面,定义每举类型是用哪个关键字?定义每举类型是用 enum。 对, 然后 struct 是 定义结构体的, union 是 定义联合体的, t 的, shift 是 用来定义类型别名的。明白了, 箭头计算符和这个点儿计算符,它们在使用上到底有什么本质的区别?嗯,区别其实很简单, 箭头运算符是只能用在结构体或者联合体的指征上去访问它的成员, 然后点运算符呢?是你要有一个具体的变量,然后通过这个具体的变量去访问它的成员。哎,那这么说的话,这两个运算符是不是有时候可以互换啊?不不,它们的使用场景是完全固定的,就是箭头运算符只能用于指征,然后点运算符只能用于普通的变量。 对,他们是不可以随意互换的。明白了,然后还有一个很重要的问题,就是我们在用这个箭头运算符去访问结构体或者联合体成员的时候,有没有什么一定要注意的?有啊, 最重要的一点就是这个箭头运算符左边的那个纸真一定要是一个有效的纸真,就他不能是一个空纸真,或者说他不能是一个随便乱指的纸真。哦哦,那如果这个纸真他不指向一个有效的内存会怎么样? 如果是那样的话,运行的时候就会直接报错,可能会出现空止针解引用或者是断错误,这种很严重的错误,你的程序可能直接就崩溃了。所以这道题的正确答案是 b。 在 c 语言中,以下哪个函数用于函数串复制?答案是选项 a 叉 pi 函数用于将一个函数串复制到另一个函数串中, 然后 st cat 是 用来拼接函数串的, st r c m p 是 用来比较两个函数串的, st r n 是 用来返回函数串长度的。 ok, 那 在 c 语言里面哪个关键字是用来定义静态变量的?是用 static 这个关键字对 static 定义的静态变量,它的生命周期是贯穿整个程序运行期间的,但是它的作用域还是要看它定义的位置行。 那 c 语言里面哪个运行符是用来做条件判断的?条件判断的话是这个也叫三元条件运算符, 它是可以用来简化 if, else 这种简单的条件判断的,所以选 a, 其他几个选项都是逻辑运算符。明白了,那 c 语言里面哪个函数是用来从文件里面读取字母的? 从文件里面读取字母的函数有好几个, f, get 和 get 都是用来读单个字母的,然后 fgets 是 用来读一行字母串的。 哦,对,所以这道题应该选 d。 以上都是懂了,那 c 语言里面哪个关键字是用来定义联合体的?是用 union 这个关键字。对 union 定义的联合体,它的所有成员是共享同一块内存空间的。 而 struct 定义的结构体,它的每个成员都有自己独立的内存空间。好的,那 c 语言里面哪个计算符是用来做逻辑非的? 逻辑非的话是这个感叹号。对,它是可以把真变成假,把假变成真。所以正确答案是, a 选项 b 是 按谓取,反选项 c 是 按谓义或选项 d 是 按谓语。 好的,接下来我们来看一下填空题部分。嗯,第一题是在 c 语言里面用什么函数来释放动态分配的内存?释放动态分配的内存的话,是用 free 函数。对,就是你之前用 milk, cologne 或者是 relook 分 配的内存都要通过 free 来释放。 行。那 c 语言里面用什么关键字来定义一个只读变量?是用 const 这个关键字对 const 定义的变量,它的值在程序运行的过程当中是不可以被改变的,然后它可以让你的程序更安全,也更易读。那 c 语言里面用什么函数把字母串转成整数? 是用 a 做 a, 这个函数对 a 做 a, 它就是把字母串转成整数,然后如果说这个字母串它不是一个合法的数字的话,它就会返回零。懂了, 那 c 语言里面用什么运转符来获取一个变量的内存地址?获取变量的内存地址的话,是用这个取地址运算符,然后这个也是指真操作的基础。好的,那 c 语言里面用什么函数来计算字互串的长度? 计算字母串长度的话是用 string 这个函数。对,它是不包括字母串末尾的那个空字母的行。那 c 语言里面用什么关键字来定义一个寄存器变量?是用 register 这个关键字?对, register, 它就是建议编辑器把这个变量放在寄存器里面, 这样的话访问速度会快很多。那 c 语言里面用什么函数来把格式化的数据输出到一个字母串?是用 sprint 这个函数,它跟 printif 很 像, 但是它是把数据输出到一个字母串里面,而不是输出到屏幕上。懂了。那 c 语言里面用什么函数来比较两个字母串?比较字母串的话是用 s, t, r, c, m, p 这个函数。对,然后它如果返回零的话,就是表示两个字母串相等。如果返回一个小于零的数,就是表示第一个字母串小于第二个字母串。 如果返回一个大于零的数,就是表示第一个字母串大于第二个字母串。 ok。 在 c 语言中使用什么关键字定义类型别名?正确答案是 type def。 type def 关键字用于为现有数据类型定义新的名称,提高代码可读性。例如可以通过 type def 定义一个 int 的 别名, my int。 好 的。那 c 语言里面用什么函数来把一个整数转成函数串?把整数转成函数串的话,是用 i t o a 这个函数。 对,但是 i t o a 它并不是一个标准的函数。那你想要标准一点的话,你可以用 springf 实现同样的功能。行,我们再来看一下判断题的部分。嗯,比如说第一题,在 c 语言里面数组名是不是一个常量时针,然后能不能够被重新赋值? 数阻鸣其实就是一个指向数阻第一个元素的长量指针。对,所以你是不可以直接给数阻鸣重新赋值的。哦,那 c 语言里面局部变量如果没有初使化的话,它默认会被初使化成什么值? 其实局部变量它是不会被自动初使化的,它的值是不确定的,就是一个随机的垃圾值。 哦,对,只有全局变量和静态变量才会在没有触视化的情况下自动被触视化为零。那 c 语言里面 switch 后面的 case 标签它有什么要求? case 标签后面必须是一个整形的常量表达式。对,它不可以是一个变量或者说一个非常量的表达式, 因为这个东西是要在翻译的时候就要确定下来的。行,那 c 语言里面 continue 语句和 break 语句在循环里面的作用有什么区别? continue, 它的作用是跳过当前这一轮循环,剩下的语句直接开始下一轮循环。 哦,对,而 break 是 直接终止整个循环。了解了,那 c 语言里面 six of 到底是一个函数还是一个运算符? sizeof 其实是一个运算符,不是一个函数。对,它是在翻译的时候就会确定结果了,然后它的作用是返回一个数据类型,或者是一个变量在内存当中所占用的字节数。好的,我们最后来看一下编程题的部分。嗯,比如说让你写一个函数来判断一个数是不是质数, 你会怎么写?质数的话就是除了一和它本身之外没有其他的因子嘛。对,那我们就可以写一个函数,比如说叫 e sum prime, 然后它的参数是一个整数 n, 那 首先我们先把小于等于一的数都排除掉。对,然后二是一个特殊的偶质数,我们单独拎出来判断。确实, 那其他的数怎么判断效率比较高呢?对于大于二的数,我们就只需要判断从三开始到它的平方根的所有基数就可以了。 哦,对,就是你只需要看这些数能不能够整除 n, 如果能整除,那它就不是质数,如果都不能整除,那它就是一个质数。明白了,那怎么实现两个整数的交换?这个函数该怎么写?交换两个整数的话,你就需要一个临时变量来作为一个中转站。对,然后函数的参数你得传时针, 就是你要传这两个变量的地址进来,这样你在函数里面对这个地址进行操作,才能够真正地改变外面那两个变量的值。哦,那怎么写一个函数来求一个整形数组所有元素的和? 你可以写一个函数,比如说叫 sum aggregate, 然后它的参数就是一个整形的数值,还有数值的大小。对,然后你在函数里面定义一个变量 sum, 把它数值化为零, 然后你用一个 for 循环,把数组里面的每一个元素都加到 sum 上面,最后你把 sum 返回就可以了。懂了,那怎么写?一个程序来统计一个字母串里面字母数字和其他字母的个数?你可以用 fgets 先把这个字母串读进来,然后你再用一个 for 循环去便利这个字母串里面的每一个字母。 哦,对,然后你可以用 c type 点 h 这个头文件里面的 is alpha 和 is digit 这两个函数来判断它是字母还是数字,其他的就是特殊字体了,然后你分别用三个变量来计数就可以了。 ok 了,那么今天我们把 c 一 元期末考试的这一套试卷 从头到尾过了一遍,咱们下次再见吧,拜拜。拜拜。

我们先看一下三点,一,常见的数据类型及其计算,那么我们把常见的数据啊,从长量和变量这个角度呢,分成他们两类,长量就是在执行过程中他的值啊,不发生改变的量,变量,我们去可以修改他的这个值,这是他俩的一个区别。 那首先看一下这个长量啊,长量呢,我们在运行过程中他不会改变,包括什么呢?包括整形长量,你比如说我们给出一些整数,这个是一千零一 六百七十五负九,这些都是一些实际值的整数,它们都是敞亮,它不会改变的。还有实形敞亮,实形敞亮呢,也就是我们常说的这个浮点型敞亮,或者说浮点数都可以,就带小数的,那么它们都是浮点类型的敞亮字母敞亮就是一些英文字服用英文的单引号哈, 有很多同学呢,他在写代码的时候,他用中文的单引号去引起来他的一个字母。运行程序的时候啊,运行不起来,导致运行错误,这个错误咱们不要犯哈,这是英文的单引号引起来的一个字母。那我们需要去掌握的是什么呢?我们要去掌握的是 啊,他在计算机中的存储形式采用的是阿斯科曼,咱们在真题中啊,他有一年他就直接在这个选的选项中出现了阿斯科曼,并且是集合咱们计算机网络来去考的哈,在计算机网络中啊,他有这样一个知识点,就是我们的应用层有一个协议叫 smtp, 当然呢,大家现在先不用去管它是什么,你只需要知道这是我们计算机网络中一个常见的考点就可以了,他问 smtp 啊, 如果说用它来传输这个数据的话,这个数据必须用什么格式来去表示啊?答案呢就是 ask, 当年那个题呢,应该是选择 d 选项哈,这是 g 网哈。另外呢,咱们在数据结构中啊,也会用到 ask 码, 在数据结构中,咱们要学习一个知识点,叫做二叉排序数,这个非常常考,你把它称为必考的,那也不为过。 这个二胎排斥术,他就要求什么呢?要求字母之间的大小顺序啊,要有讲究,比如说左子数都小于根,都小于右子数,那这个过程中啊,就涉及到什么呢?涉及到节点之间元素值的比较,那么节点中的这个元素呢,就有可能是字母, 那么字母和字母比较大小的时候,哪个字母大,哪个字母小?比如说我写一个一个 b, 一个 d, 这两个字母谁大谁小呢?当然是 d 大 一点,那怎么比较的?难道这个 b 在 前面?我,我就不能说这个 b 大 吗? 对不对?其实它背后比较的逻辑呢,就是比较每个字母背后的阿斯克玛,谁的阿斯克玛大谁就大。 那么字母 b 的 阿斯科码,它是小于字母 d 的 阿斯科码的,虽说 d 大, 所以这就是阿斯科码啊,它背后大家需要掌握的这个点啊。当然呢,我们一会带着大家来看一下,每个字母的阿斯科码到底是什么啊?它是怎么去表示字母的 字母串场量呢?这个大家只需要简单了解即可啊,它不重要,也不会考的哈,这就是字母串场量哈,咱们重点看一下这个阿斯科码,这才是我们四零八需要的哈。

本视频耗时五个月,共计三十小时,三十八分钟零基础自学 c 语言从入门到就业全套教学视频包括开发环境搭建、语法讲解、算法与数据结构等,共三百六十八集。 此视频内容敏感,很可能被下架,建议先收藏再观看。我这里整理了两百多节 c 语言学习教程和学习路线,可供大家学习,需要的三个七抱走。 那么我们接下来的话呢,来讲一下关于我们的这个宿主。呃,还有一个内容啊,我们之前所讲过的这个宿主的话呢,我们大多数都是以这个什么就是一维宿主啊,二维宿主对不对?或者说啊,不管说多维宿主也好,是不是啊,一维二维多维,我们都是基本上呢,这个宿主呢,一般都是以这个什么呢? 类型说明符就是都是 int 类型, float 类型,对吧?为主的是不是?好,那我们这个今天主要来讲一下这个视频,主要来讲一下就是关于我们这个 啊,制服创诉组,他的一个概念啊,就稍微提一下这个点好不好,因为我们的这个制服创诉组呢,他有几个点呢?他是比较特殊的对吧?什么意思呢?就是说我们的制服诉组是用来干嘛呢?是用来存储制服的 对吧?但你数组大小为一,你给存一个制服数组大小对吧?可能为五六七八九,可以存更多的制服是不是?那存更多的制服的话呢?我们是把它叫什么?叫制服串,是不是?那制服串我们怎么去啊?赋值或怎么出实化给我们的这个制服做主呢?对不对?好,首先的话呢, 呃,什么叫制服宿主呢?大家看啊,我们首先定一个窍类型的宿主对吧?就用来存放制服的嘛,我们叫做 area 好 不好是吧,然后呢我们给他促使化,是不是要促使化? 我们怎么说实话呢?对吧?啊?用什么单引号嘛?表示的是一个字母啦,对不对?嗯,假如说我们的 h 是 不是然后呢?一 l 对 吧? l 然后呢? o 对 吧? 是不是?那这个的话呢,他就是什么呢?我们的一个啊制服宿主用来干嘛呢?存放了多个制服对不对?那么这些制服呢啊,这个教主跟大家讲一下,就是我们给我们的制服宿主,一般来讲啊, 就是说粗使化的时候我们并不会这么去粗使化,什么时候我们才会这么去粗使化呢,对吧?就是我们一般或者说去便秘的, 我们一般就是说要对我们的这个什么数组里面的某一个元素去做操作的时候呢,我们才会这么去赋值,或者说这么去干嘛呢?说实话明白吧,我们一般给制服串就是说给我们的数组去啊什么?那赋值这个制服的话一般是这么写的,大家看啊,就是艾瑞 是吧,然后用双引号去引起来,看到没有,一般是这么去进行数值化的,我们并不需要像我们的什么呢? int 啦是吧,什么 float 类型的啊?数组一样,明白吧?啊?是吧?一个一个看到没有?像数组这种元素去赋值, 这种是可以的,但是我们用对吧写字母数字一般啊,这个什么呢?要复制注册化的话呢,一般是用这种形式的,就双引号直接给个制服就可以了,明白吧?然后每个制服就是我们什么跟上面他是一样的,他是一样的,明白吧?嗯,但是有个特殊的地方,就是说什么地方呢?大家看啊。 呃,因为我们制服串,大家记住啊,之前呢,我们不记得有没有讲过这个内容,就是说我们一个制服串,对吧?他最后呢倒是有什么呢?有一个反斜个 n, 反斜个零的结尾的,对吧?你有反斜个零,那就是什么他是制服串,你没有反斜个零,那就不是制服串, 这个大家能理解吧?就是说,你看啊,现在我们再定一个数组,叫艾瑞二,艾瑞二,好不好?然后呢,我们给他说实话,对吧?我们先给单独的吧,假如说 h 对 吧? 一 l l, 是 不是我们就先给这么多,然后我这个数组的大小为多少呢?假如说为五啊,为四为五都行,对吧?好,那么这个跟大家讲一下,它是不是一个字母串? 是不是?我们给什么呢?用四个串产量给啊?四个数组赋值,那么这是一个四串吗?我跟大家讲这是,这是一个四串,因为我们判断是不是一个四串的前提是什么呀?那他有没有反斜个零结尾吗? 对不对?有反斜个零结尾,那么他就是四串,没有他就是什么,他就是没有,对吧?那你说我怎么知道他这个数组,是不是啊?最后是不是反斜个零呢?我们来看一下, 我们这个数组大小为五,它总共有五个元素,但是我们前面呢,只复制了什么四个元素,对不对?我们之前有讲过我们给数组的元素赋值,如果说没有赋值的部分,它是不是自动默认为零呢?我们可以这样啊,我们把断点打在这里,好不好?打在这里大家看, 是吧?教大家一种方法,可以看我们把断点打在这里,然后呢把鼠标放到上面来, 看到没有?你点一下,那么大家就看到啊,这个他,他这个还没走,我们请他走啊,好不好?大家看啊,是不是?那大家,大家能看得到是不是 h 一 l l, 但是它最后一个元素呢?就说下标为四的这个元素,就是我们这个数组的最后一个元素嘛, 对不对?那么他这个元素是不是零啊?是吧?零跟反斜跟零的作用都是一样的啊?没有没有,没有,是不是啊?他就是什么呢?以反斜跟零就就说他最后个元素他自动默认为零,这个零呢表示的是什么?反斜跟零就表示这个字母创的一个结尾,明白吗?是不是?你或者说我们这里有一个数组叫艾瑞三,大小也为五, 好不好?以为五,然后呢?我们前面给他复制一下,对吧?那这个跟大家讲一下,他是不是一个啊?啊?字母串呢?就是说我这个数组里面他存的是不是字母串呢?对吧?所以这里就跟大家讲了,他不是字母串啊,不是啊,不是字母串, 对吧?为什么呀?因为他没有反斜个零嘛,因为我这个大家看我这个数组元素总共就五个元素,你都给他负过值了,那我反斜个零我放在哪里啊?是是不是啊?我总共就五个位置嘛,对不对?我总共就五个位置, 是不是的?大家看到没有?总共就五个位置,对不对啊?我五个位置呢,我都有值了,那我以那我表示制服串结尾的那个反斜个零。反斜个零放哪了?没地方放了,所以说他不是个制服串, 明白吧?嗯,我们可以打印看一下,大家看啊,我们来输出反斜个 s, 对 吧?因为这个什么呢?因为这个 对吧?制服以制服穿的形式输出呢?是用什么?是用法啊?百分百分 s, 明白没有?然后呢?输出这个艾瑞二, 对吧?艾瑞三,好吧,是不是啊?制服穿我们可以直接输出啊,不需要,不需要加什么什么取的什么?这个啊,艾艾瑞几下标记啊,直接输出就可以了。好吧,来我们运行,大家看一下结果好不好 啊?前面先注视掉,这里我们先注视掉,对吧?那么现在大家看一下啊,我们现在把它跑起来,是吧?那么大家就能看得到 我第一个是输出的 area 二的元素它,那么它是多少呢?是这个 h e l l, 对 吧?没错吧,是不是然后呢?有个反斜根零嘛?看到没有?然后呢?后面这个输入什么呢? hello, 是吧? hell 后面呢它就有什么呢?啊?什么这种烫烫烫烫烫烫烫烫,对不对?是不是?是不是就有问题了呀?所以说我们去输出制复创的时候呢,一定要留一个位置,给什么呢?给用来放什么?放一个理,不然的话呢它就会出问题好不好?然后的话呢?嗯, 这个因为我这个不好怎么放啊?这个 ppt, 所以 然后呢?就是我们怎么来测试一下,对吧?就是我们怎么来测试呢?我们这么测试啊,我们再定一个数组叫做 every 四吧,好不好?艾瑞斯,然后呢?不给他,呃这个什么不给他,这个,呃。大小是吧?然后呢? h 一 l l o 是 吧?这样是可以的对不对?然后呢?切,艾瑞五是吧?然后呢给他赋值,赋什么值呢? h e l 然后呢?反斜杠零 l 可以 吧?这是反斜个零是吧?看到没有?就是说我在进行输出,或者说我们在进行输出打印的时候,对不对?它碰到的反斜个零,因为反斜个零就代表的是什么?一个制服栓的结束就是后面的制服它都没有用了, 这个能理解吧?来,大家看,我们现在同样的话呢,去输出打印是吧?百分号 s, 然后呢? ary 四好不好啊?这里少个分号是吧? 好,大家看啊,这里是 ary 五。那么同学们看现在我们所输出的什么?输出的一个结果,哎,我们还是这里面有跨行啊,是吧? 呃,看的不清晰嘛?好,现在大家看是吧?我们前面还艾瑞斯输入了 hello, 但是呢,我在输入艾瑞五里面的字母字母的时候呢,大家看啊,输出了 h e l 它就结束了, 是不是因为什么呢?因为我们在输入的时候一个一个输出嘛,但是它碰到反斜个连接意味着什么问题啊?我这个字母算结束了,就后面的没有了,懂不懂?所以说我们在给我们的数啊,制服诉阻进行促熟化的时候呢,一定要稍微注意一下这个点, 第一个留一个位置放什么?反斜个零好不好?留一个位置反斜个零,这第一个啊,如果说就是说数组大小已经确定的前提下了,懂不懂?嗯?再一个是什么呢?我们的字母算对吧?你如果说有反斜个零对不对啊?他那个位就是说在我们的一个数组的元素当中呢,数组的那个格子里面,对吧? 就说在我们的一个数组的一个这种格,假如说我们这个什么啊?数组对吧?它大小为五, 是不是?那么呢第三个元素呢?就是就是反斜个零吗?但是你在进行打印输出的时候,到后面呢,没有了,打印不出来好不好?这就是我们在啊我们的数组里面要学这个字母,数组是要什么呢?注意到的一个点啊,这个 是吧,比较细的一个地方啊。那后面的话呢,我们就接下来学习什么我们的一些算小算法,就是我们是里面的一些啊,计算算法呀,对吧?像我们的一些啊,查找算法呀,好不好?我们做 啊,然后呢把算法学了一些简单的算法之后,然后呢带大家呢做一些我们的,对吧?一些这种啊,练习啊,做几个练习题,好吧,就进入到我们那个指真的学习的啊,好不好?就正式进入到我们 c 语言的最难的一个地方,也是我们的核心的地方呢,叫指真的好不好?

今天咱们来聊一聊 c 语言的基础知识,包括怎么写一个简单的 c 语言程序,怎么让计算机去显示一些计算的结果?嗯,然后怎么去使用变量,怎么去从键盘读取一些输入,以及一些基本的数据类型。好的,这些都是很适合初学者的内容,那我们就开始吧。咱们先来说第一个, 就是怎么用 c 语言去显示一个计算的结果,比如我现在想让程序输出十五加三十七的和这个代码要怎么写? 这个很简单,你只需要这样写,首先得引入一个标准的输入输出头文件,然后呢,在主函数里面,用 studio 头文件中定义的 print f 就 可以把这个结果打印出来了。后面我们会介绍具体的语法细节。咱们先来聊聊这个程序的入口,也就是 main 函数, 嗯,它到底在一个 c 语言程序里面扮演一个什么样的角色?其实内函数它就是一个程序的大门,对所有的 c 语言程序执行的时候都是从内函数开始的, 就是你写的那些代码逻辑想要跑起来都得先经过这个 main 函数。能不能给我们写一下这个 main 函数的标准格式长什么样子?当然可以,这个是它最标准的一个写法, 就是 int main void, 然后后面跟着一对大括号,嗯,在大括号里面你可以写你的程序功能。最后是 return 零,就是这是一个完整的 main 函数,这里面的这个 return 零它到底是干什么用的?这个 return 零就是代表函数执行完了,然后它会给系统返回一个状态码, 对,那返回零就表示一些正常任务完成了,如果返回一个非零的值,通常就是表示程序遇到了什么错。其实 c 语言里 main 函数的格式和普通函数一样,有返回类型,通常为 int, 有 参数列表。我们这里的 void 表示参数列表为空大,括号部分是函数体。 main 函数是整个程序的唯一入口点。操作系统启动你的程序时,它知道从 main 函数开始启动你的程序。这是 main 函数与普通函数最本质的不同。普通函数可以被随意调用或忽略,但 main 函数是必须的。 明白了,然后我们再来看看这个 include 指令。这个 include 它到底在我们的程序里面扮演一个什么样的角色。井号 include 是 一个预处理指令,会在我们的代码翻译之前,把别的文件的内容直接插入到当前文件里面。对,相当于你可以把它想象成 给你的程序引入了一些现成的工具。那这个 s, d, d, i, o 点 h 是 什么呢?为什么我们几乎每个 c 语言程序里面都要用到它 s, d, d, o 点 h? 它其实是一个标准输入输出的库文件。嗯,那里面就装着 printif 和 scaff 这些我们常用的输入输出函数的说明书。 对,如果你没有把这个 stddl 点 h 包含进来的话,那编辑器就会不认识 printif 和 scaff, 然后它就会报错。好的,那么下面我们就在编辑环境里操作一下。首先加载标准读写头文件,然后创建主函数,完成函数体的业务内容。 点击运行观察结果,这里显示的是十五加三十七的结果,五十二符合我们的预期。 我很好奇就是这个代码,它到底是怎么从我们写的这个东西变成计算机能够执行的一个程序的?是这样的,我们写的这个程序呢,叫做原程序,它其实就是一堆字符的序列。 那这个原程序呢,需要经过一个翻译的过程,这个过程也叫翻译哦,翻译之后呢,会生成一个目标文件, 然后再经过链接,才会变成一个计算机能够直接执行的可执行程序,它是由零和一组成的一个位序列。原来如此, 那这个 printf 函数在显示计算结果的时候,它的格式复制串和转换说明到底是起什么作用呢?比如说我们写 printf 括号十五与三十七的和式百分号 d, 这个双引号里面的内容就是格式复制串,它决定了我们的输出长什么样子。 那这个百分号 d 就是 转换说明它会被后面这个十五加三十七的结果去替换掉。后面的下划线 n 代表换行,所以最后输出的就是十五与三十七的和是五十二,然后换行。我明白了, 那这个 printf 函数里面除了显示数字之外,还可以做些什么别的事情吗?当然可以啊,你看这个例子, printif。 您好,后面连续三个下划线 a, 这里的下划线是转移符,下划线 a 和下划线 n 类似,都是转移字符,它的作用是让计算机发出响铃声,所以运行这个语句,屏幕上会显示,您好,然后响铃三次,最后换行。哎,这个很有意思啊,那接下来我们要说的是变量, 在 c 语言里面,我们怎么去声明一个变量,然后怎么给它赋值,怎么把它的值显示出来呢?你可以这样,比如你要声明两个整数类型的变量, v x 和 v y, 你 就写 int v x v y, 然后给 v x 赋值的话,就 v x 等于五十七 哦,那 v y 呢?你可以让它等于 v x 加上十,就是 v y 等于 v x 加十。如果我只是声明了一个变量,但是没有给它赋值,直接把它的值输出会怎么样?这样的话,它输出的就是一个不确定的值,因为你没有促使化,所以它可能是任何值, 每次运行的结果都可能不一样。那我要是想在声明变量的同时就给它一个出使值,这个时候代码要怎么写?这个很简单,比如你可以这样写, int v x 等于五十七,然后 int v y 等于 v x 加十哦,这样的话 v x 一 开始就是五十七,然后 v y 就是 v x, 加上十,也就是六十七。懂了。 然后我们来探讨一下关于输入和显示,就是在 c 源里面,怎么能够让程序去读取用户从键盘输入的一个整数,并且把它显示出来。这个你可以用 scanf 函数, 比如说你要读入一个整数,首先你要声明一个变量来存这个值,比如 int no, 然后可以通过 printf 函数打印一个提示信息,请输入一个整数,然后通过 scanf 函数将一个满足百分号 d 要求的值存入 no 中。这里的百分号 d 是 decimal 实景制的缩写,是 c 语言格式控制符,专门对应 int 类型 no 前面的 and 符号是取地址符,在这里即表示获取变量 no 的 内存地址,用于存储输入的值。我想让用户输入两个整数,然后把它们的核显示出来。这个程序要怎么写?这个也很简单,首先你要声明两个变量来存这两个整数,比如 int n 一, n 二。 然后用 printf 和 scanf 来分别提示用户输入,并且读取这两个整数,最后用 printf 把它们的核打印出来。 在 n 一 n 二定义中的这个逗号是变量声明的分格符,作用是在同一条声明语句中同时声明多个相同类型的变量。 注意,我们将 printf 和对应的 scanf 写到了同一行,这样也是可以的。 c 语言对格式并没有严格的要求,对于编辑来说,它只关心分号的位置。分号是 c 语言的语句结束符,作用是告诉编辑器这一条完整的语句已经结束了。 那如果是想要计算一个长方形的面积,然后把结果显示出来,这个程序具体要怎么写,包括它的输入和输出要怎么实现。你可以这样,首先你要声明两个变量,一个是长,一个是宽,比如 int width height。 然后用 printf 来提示用户输入长和宽,再用 scanf 来读取这两个值,最后用 printf 把面积计算出来,并且打印在 c 语言中心号符号代表乘法运算符,在这个例子中, w 乘以 h 的 结果会替换掉字母串里的占位符百分号 d。 好的,今天我们一起写了一些简单的 c d n 程序,然后也了解了变量输入、输出,还有一些基本的格式控制。没错,那这就是我们今天的全部内容了,我们下期再见吧,拜拜!拜拜。