粉丝1.8万获赞2.7万

上一期视频我们在 linux 操作系统无斑图下面用 v i m 编写了第一个 c 言程序,输出了 hello world, 那么代码是比较简单的,今天我们来做一个稍微复杂一点的计算,一加二加三,一直加到十的和 好。之前我们已经建立了一个文件夹,叫做 cdm 零一,那么今天我们是把代码放到这里面来。好,我们双击打开文件夹,打开以后,我们在文件夹里面再创建另外一个文件夹,然后在空白处点鼠标右键,然后选择新建文件夹,文件夹的名字我们叫萨姆。 好,我们敲回车。三个文件夹创建成功以后,我们双击进到文件夹里面来。好,我们在空白处点鼠标右键,选择在终端打开,终端打开,我们把它往中间拖一点。好,我们在命令行里面输入 v i m 萨姆点 c。 好,敲回车。好,我们进到那个 vm 环境里面来了,就是我们先按一下键盘上面的 i 键,按完 i 键以后,我们的状态已经改为那个编辑状态了。接下来我们开始编写代码,先引入头文件 include s t d i o 点 h。 接下来我们开始冰写入口函数 int may。 首先我们电器循环变量和累加和变量,累加和变量的话,我们要负一个初值, inter i sum 等于零。 好,接下来我们来输入那个循环体, four i 等于一, i 小于等于十, i 加加。好,现在我们来进行累加和, some 等于 some 加 i。 好,新闻题写完了,接下来我们要输出累加和的结果,我们用的是 print f 函数,因为萨姆是整形,那么我们要进行一个转换,转换的话我们就用 print f 里面的百分之 d 来进行格式化, print f some 等于百分之 d, 然后这里的话就 some, 接下来的话我们进行返回 return 零,好到这里的话代码已经写完了,那么我们看一下有没有什么问题, 那么其实在那个 pro 这里的话,我们还是输入一个那个回车,不然的话我们输出的结果会跟那个命令行在一起,就看起来很不舒服,我们加一下,好杠,哎,好到这里的话代码都 改完了,那么这个时候我们按一下 esc 键,然后我们按一下冒号,然后输入 wq, 然后我们敲回车,那么我保存了以后,我们看一下那个我们的文件夹,那么萨姆鼎 c 这一个 因为念旧已经生成成功了。好,我们现在来进行兵役。 g c c sam, 点 c, 然后我们把那个输出的那个文件名指定一下,共 o some, 好,我们敲回车。 好,那么编页好了,我们回文件下看一下,那么就多了一个萨摩的这一个文件,好,我们把它执行起来。零零四,在执行命令的时候,他是不会搜索当前目录的,那么我们要运行我们编页好的程序的话,我们要指定一下目录, 那么我们就加上一个点杠,那么这个是指当前的那个目录,然后加上我们的萨姆,好,我们先这么说 一下看看,那么他是不对的,因为那个 linux 他是七分大小写的,我们要把大小写给他七分出来点杠。 sum, 好,那么 sum 等于五十五,那么结果是正确的了,那么我们可以返回来看一下代码, vim, 萨姆点 c, 首先是先引入头文件,然后来写那个入口函数,接着我们定义了那个循环变量和累加和变量, 接下来的话写了循环体,进行了累加和。接下来的话我们用 proton 函数来进行输出,输出的同时我们把那个整形转化成字符串, 那么最后的话是返回,那么整一个代码的话是比较简单的,只是我们在编译和运行的时候要注意一下那个命令的格式就是七分大小写,我们先返回来终端看一下好了,那么我们编译的话就是 g c c sam 点 c 然后如果说我们要指定文 前进门就加一个更凹的参数,那么我们在执行的话一定要指定一下他的路径,就是我们是在那个当前目录里面来进行运行的,那么这个就是在 vim 里面并写 c 已延程序来计算一加二加三一直加到十的和的代码,那么代码是比较简单的。

各位同学大家好,上节课留的两道习题没有标准答案,我把自己写的参考代码放到屏幕上了,大家可以对照着看看。 这两道题核心就是让大家熟悉格式化输出,还有传统输入输出的常用用法,都是基础且重要的内容。 我们之前学了 c 加加风格的输入输出,今天就来认识下 c 语言风格的输入输出方法。 大家要记住, c 语言风格的输入输出在 c 加加里是完全适配的,而且在一些特殊场景下,他还有自己的独特优势,所以掌握他很有必要。那接下来我们就一起来学习一下。 首先要注意 c 语言风格的输入输出,不用再引用 ios 去 m 库了,取而代之的是 s、 t、 d、 i、 o h 库,这个库里存放着 c 语言专门的输入输出函数。其中最核心最常用的有两个,一个是输出函数 printf, 对 应我们之前学的 c 加加里的 c、 o、 t, 另一个是输入函数 c、 n、 f, 对 应 c 加加的 c、 n、 e, 这两个函数的用法很有特点,我们先从 print f 函数开始讲,大家看屏幕,这就是我用 p、 r、 a、 t、 f 函数写的 hello world 程序。 看到这里,大家应该能对 p、 r、 n、 t、 f 的 基本用法有个初步感觉了,就是在函数的双引号里面直接写上你想要在屏幕上输出的内容就行。 大家注意到后面的反斜杠 n 了吗?这是一个转移字体,作用就是让输出内容换行。这个大家先记下来转移字体的详细用法,我会在后续课程里专门给大家讲解。 知道了普通内容的输出,那怎么用 p、 r、 n、 t、 f 输出变量呢?这里就要用到一个关键的东西,格式占位符。 它的作用就像我们在图书馆占座,先提前把要放变量的位置标出来,之后再用变量把这个位置填上。用法也很简单,在双引号里需要输出变量的位置写上格式占位符,然后在双引号后面整个函数的括号里面加一个逗号, 逗号后面跟上要输出的变量名就可以了。举个例子, int 整形的格式是例,大家可以看一下。 如果一个输出与距离要填多个变量,那就对应写多个格式占位符,然后把变量名按顺序写在后面,用逗号分隔开就行。 这里重点提醒一句,双引号和第一个变量之间的逗号千万不能忘,一忘代码就出错了。 另外,常用的格式占位符和它们对应的变量类型我都整理在屏幕上了,大家可以截图保存,平时编程的时候随时翻看。讲完了输出,我们再来看输入函数 scale f。 scale f 对 应 c plus plus 里的 c i in, 基本语法和 print f 很 相似,但它是专门做输入的函数,不会有任何输出内容。 我们平时用 c、 a、 n、 f 读取数据时,一般只在双引号里写格式占位符就可以。这里有个和 p、 r、 a、 t、 f 最大的不同点。大家一定要注意, c、 n、 f 后面的参数列表需要写待读入变量的地址,而不是直接写变量名。 那怎么获取变量地址呢?很简单,只需要在变量名前面加一个取址运算符就可以了。 这个细节大家编程时绝对不能忘,哪怕忘了代码,一般也能通过翻译,但实际运行的时候会出现输入失败、程序报错的问题,非常影响使用。 还有一个小知识点, scar n、 f 的 默认分格符是空格和回车,也就是说我们输入多个数据时,用空格或回车隔开函数就能正确识别。 如果大家想自定义分割符,比如用逗号分割,只需要在 c、 a、 n、 f 双引号里的格式占位符之间加上你想使用的分割符就行,屏幕上有对应的势力,大家可以参考。最后再说说 p、 r、 a、 t、 f 的 格式化输出,这也是它的一个优势语法,比 c 加加的 c、 u、 t 还要简单。 我先给大家演示几个基础的用法,比如想给输出的整数设置为宽为五,直接写百分之五 d 就 可以。 如果想输出 float 类型的浮点数,并且保留小数点后两位,就写百分之点二 f, 要是 double 类型的浮点数,就写百分之点二 l、 f, 就 这一点来说,比 c 加加的格式化输出方便很多。其他的进阶用法我们会在后续课程里边学编拓展,不用着急。关于 c 语言风格的输入输出,我们限阶段掌握这些内容就足够了。 毕竟 c 语言是 c 加加的前身,学好 c 加加的同时,了解一些 c 语言的基础内容,能让大家的编程基础更扎实。 为了让大家巩固今天的知识,我也准备了三道课后练习题,大家课后可以动手做一做,做完之后也可以在弹幕或者班级群里和同学交流解析思路,有问题也可以随时问我。那今天的内容就讲到这里,我们下节课再见!拜拜!

大家好,那么接下来的话给大家讲一个 switch 语句的题目,那么 switch 的 话是一个多分支结构,那么我们来看一下这道题,方便呢大家了解一下啊,这个知识点。好,我们来看一下这个题, 以下 c 语言代码执行后输出的结果是什么?那这个考察是 c 语言代码的一个基础的认识,大家来看一下,这是 m 函数,然后呢给 i i 赋值为三, 那么 switch 这里面的话,把这个三呢传进去。我们知道呢, switch 语句里面会对应多个 case 啊,最后的话是个 default, 那 么大家注意了啊,那每个 case 后边的话,按说是应该什么呀?有一个 break 的, 也就是说这个里面的话是几,它会跳转到 case 后面跟的那个数字,那么执行完成之后的话,一般呢就会直接跳出了,对吧?这是一个比较正常的, 但这道题发现没有像第一个 case 一 后面的话就开始没有 break 了啊,那么我们 case 二有个 break, 那 么 case 三,哎, case 四这会的话都没有 break, 显然的话,这个语句呢,在标准的啊,我们写 c 语言的里面的话,它就是不规范的嘛,对吧?那么这道题的话,偏偏就是考察这个知识点啊,看一下你知不知道,每个 case 里面按正常来说都应该有个 break, 如果没有 break 之后的话,它会怎么样呢?顺序执行 break 的 话,就是跳出嘛,对不对?既然它不跳出了,我们要顺序执行最后的话到这个 default 啊,那我们最终的话就执行完成了, 那么这里面的话,这个 i 啊给它赋值是三,那么三的话,进去就要找 case 后面跟着三的啊,这样的一个 case 语句,那么接下来的话,它就会打印 c, 看到没有打印 c, 然后后面没有 break 的 继续执行 case。 四、 打印 d, 哎,后面没有 break, 一 直到 default, default 的 话就是呃,默认来说上面的话,你看都找不到才会到这个 default, 对 不对?但是这里面的话是因为没有 break 才过来的,所以它还会到这个 default, 然后呢打印 e, 那 么 default 执行完成之后的话,那么所以是语句的话,到此就为止了,所以最终的话把这个 c d, e 都会打印出来, 所以呢,我们应该选 c 选项,能明白吧?你比方说这里面的话,我们改一下这个呢 i 啊,给它赋值不是三了,赋值是二,那这个时候的话,大家想想应该选什么呀?哎,我们 case 哎,到这个二了,那么打印一个 b 对 不对?然后的话 break 又跳出了,所以就应该选什么呀? 哎,最终结果是 b 的 啊,这样的一个字母,而并不是这个 b 选项啊,这个 b 选项或者 c d 肯定不对,我就说如果这个给 i 复制为二的话,它到这个 b 啊,打印之后的话就 break 就 跳出 switch 语句了,这就是有 break 和没有 break 哎,它的一个区别,能明白吧。 好了,以上的话就是有关于这道题的讲解,希望大家呢好好思考一下。有关于 switch 语句的话,在考试当中呢,考的并不多,但是希望大家呢能了解一下它的结构。 那么 switch 语句每个 case 里面呢,按标准来说都有一个 break, 如果没有 break 的 话,它就会依次往下执行,直到呢 default 执行完成之后呢,才会啊结束我们的 switch 语句。


一个奇怪的现象,这个坑啊,你迟早会踩上。我给差行的变量 i 赋值为二百五十六,即十六金值的一百。那 i 呢?它是一个巴比特的字节,就会出现一出现象,那输出的结果应该为零,没有啥意义。 注意哈,看好了,如果我给 i 复制为一,我先左移十位,再右移十位,那对于一个巴比特的字节来说,你移动了十位,理论上是不是已经发生了一出,那输出的结果也应该为零。那我们来看输出结果,第一个输出零,没毛病,第二个输出一, 你意外不意外?惊喜不惊喜?那在单面机上会不会这样子呢?那一翻译系统已经提示有问题了,我们看一下运行结果,仍然第一个是零,第二个是一,那答案是什么呢?这就是 c 语言的类型提升。

今天我们要讲的是程序的输入和输出。在前面的课程当中,我们学习了内存和变量的相关知识,并且开发了简单的顺序结构程序,但是程序还是不能和外界进行联系, 所以我们需要为其添加输入和输出的功能,构成一个完整的计算机模型,从而解决实际问题。 现代计算机模行为逢诺伊曼体系结构,它包括五大组成部分,分别是运算器、控制器、存储器、输入设备和输出设备。运算器和控制器都被包含在 cpu 当中, 存储器分为内存和外存,常见的外存,比方说硬盘、光盘、 u 盘。输入设备呢,有键盘和鼠标,输出设备有显示器和打印机。 那么今天呢,我们详细讨论使用 c 语言对计算机的输入和输出设备进行操作,从而实现程序的输入和输出功能。另外呢,如果不特殊提及输入和输出都是指标准输入和标准输出。 所谓标准输入就是指接受键盘的输入,标准输出就是指数据在显示器上输出。 那么在开发 c 语言的时候,我们一般不会从头实现输入和输出,会使用标准库 s、 t、 d, i、 o 当中的函数。最常使用的标准输入函数是 scanf, 标准输出函数是 print f。 关于函数的概念,现在呢,我们只需要知道函数可以实现功能,为了使函数正常使用,我们需要按照正确的方式为函数输入参数。 首先呢,我们先来看标准输出函数 print f, 它最简单的使用方法是传入一个双引号括起来的字母串,双引号中包括了要输出到屏幕上的字母,比方说打印 hello word, 那 么我们如果需要使用 print f 打印变量的值,就需要在双引号中添加控制符, 在双引号后面将这些变量作为参数传入控制符,以带打印的变量按照顺序是一一对应的。 比方说,声明 abc 三个变量使用 print f 打印它们的值。 对于这条 print f 语句,传入了四个参数,分别是带打印的字母串和 abc 三个变量。在字母串当中有三个百分号, d 控制符按照顺序对应 abc, 最终输出的时候,将 a 等于号, b 等于号等字母信息和 abc 中存储的值一同输入到了屏幕。 那么关于控制符,比方说 d 对 应有符号的十进制整数, c 对 应四符, x 对 应十六进制等等。 比方说 num 等于十五,分别按照十进制、十六进制和八进制进行输出,得到相应的结果。 那么在 c 语言当中,我们使用一些字母前会加反斜杠来表示,不能够直接在文本中显示的阿斯特二字母。 比方说反斜杠 t 代表一个空白 tab, 反斜杠 n 代表换行符, 反斜杠零代表空字母等等。因为加上了反斜杠后,这些字母就不再表达它们原本的意思,所以也被称为转 e 字母。 比方说, print f, a, b, c, d, e, 如果后面没有加其他字母,再 print f 一个 a, b, c, d, e, 那 么它们是连在一起的,而加上反斜杠 t, 就 会按照 tab 格式输出, 加上反斜杠 n 就 会换一行。 关于标准输入函数概 f, 它的功能呢,是将键盘输入的数据保存到变量当中, 它的用法和 point f 类似,参数包括一个双引号括起来的字母串,并加上需要保存数据的变量地址。如果使用 scanf 对 一个变量进行输入,那么我们需要传入双引号括起来的控制符和变量地址。 比方说,定义变量 num, 通过 scanf 从键盘读入一个整数存储到 num, 这里呢?我们要注意传入的是 num 的 地址,而不是 num。 最后打印 num 的 值。运行程序之后,在屏幕当中会出现闪烁的光标,然后我们输入九九九,就会在屏幕当中会出现闪烁的光标,然后我们输入九九九了。 如果使用 scanf 对 多个变量进行输入,双引号内需要写上相应数量与类型的控制图,后面呢?跟上对应顺序的变量地址,它们是一一对应的。 比方说,定义 a、 b、 c 三个变量,使用 scanf 通过键盘输入它们的值并打印 运行程序。我们输入三个整数。在输入的时候,无论是通过空格、分格、一行输入,还是通过多行输入,效果都是一样的。因为在读入整数数据的时候,就会忽略掉输入过程当中的空白字符。 如果说使用 scanf 对 单独的字母进行输入,那么可能会出现预期外的效果。比方说输入 abc 三个字母, 我们发现完成 b 的 输入之后,就结束了输入,然后打印出 a 存储了 a, b 存储了换行符, c 存储了 b。 这是因为 scanf 将输入数据流当中的字母按照顺序存储到了 abc 三个变量当中。我们通过键盘输入的时候,输入数据流当中是前三个字母是 a、 换行符和 b, 但是当前呢,我们不需要深究这个问题,我们会在后面的课程当中解决这些问题。 那么到这里呢,程序的输入和输出这节课我们就讲完了,接下来呢,给大家留一个课后作业,想办法通过 scanf 输入三个字母,存储到三个字母变量当中,并且打印它们的值。 好的,感谢大家的观看。

好,同学们,今天我们一起来看一下三月十四号下午这套春考的 c、 e、 n 编程的真题。这个题呢,是让我们判断一下 我们的密码合不合法,并且判断它是几类密码。如果输入的这幅串呢,它是这个有大小写,数字长度,如果有三种这样的呢,就是三类密码,如果有两个就是两类密码,如果有一个呢,就是一类密码,并且长度要大于六 啊,如果长度小于六的话,提示不合法啊。如果,呃输入其他的字母的话,也是提示不合法啊,这是考试的要求,他的思路呢,非常简单,就四步,输入,检查、统计、输出。我们首先来看一下代码开头,这是完整的代码,为了防止大家看不清,我把它放大一点, 刚开始还是输入输出的这个头文件考试的时候必须要写,然后内含内函数,呃,是咱们程序的入口,所有代码都写在这里面。接下来是定义变量叉 e 啊,五十定义了一个字母的数组,用来存放我们输入的密码。 然后 i 呢,是循环变量 lin 记录我们密码的长度。 x 呢?标记是否有小写字母?如果是零的话就没有小写字母,如果是一的话就是有 s 啊,是标记是否有大写字母 d 呢?标记是否有数字 q, 标记是否有其他的非法的字母啊?这是定义了几个变量, 那么一开始呢,都是等于零表示,表示呢?暂时都没有。然后我们有一个输入的提示,请输入密码,然后读取用户所输入的字母串。 读取完了之后呢,用否循环来便利密码的每一个字母,直到遇到结束符写杠零啊,在这个地方呢,没有写不等于写杠零,呃,它们的意思是一样的。好,然后那加加, 那加加,每减它一个字母长度呢?就加一,然后判断,如果有小写字母 啊, x 就 等于一,如果有大写字母 a, s 等于一,如果有这个数字 d 等于一,如果有其他情况的话,如果有其他的字母,那么 q 就 等于就检测为非法的了,非法的。 然后我们再定一个啊,类的变量,类的变量类呢?啊,就是它的类型的数量,就是就是 x 加上 s 加上 d 啊,如果说这个长度大于六, 并且 q 等于零,就说没有非法字母的话,那么我们要输出密码是类,几类密码啊?类等于几? s 加 s 加 d 等于几。如果是一就是一类,二就是二,二类,三就是三类,如果长度这个不大于六, 或者是说 q 呢,不等于零,那么我们就会输出密码不合法,输出提示,然后程序就结束了。好,接下来我们来验证一下, 请输入密码,我先输入一个长度小于六的一一三一一,好,密码不合法,那么再来输入一下一个一类密码,一二三四五六七,好,密码为一类密码。再来输一下 一个二类密码。来测试一下,一一一 a, a, a, a, a, 全是小写 a 啊,密码为二类密码。 再来输一下三类密码,一一一 a, a, a 啊,大写 a。 好, 密码为三类密码,我们再来输一下一个这个非法的字母啊, 一一 a a 啊,然后再输入几个其他的符号,好,这里提示密码不合法。好,以上就是这个题它的完整的代码 啊,这道题呢,代码短,思路呢也非常的清晰,是春口这个非常典型的字母串的判断判断题目啊。今天考的这个编程题都是字母串啊, 所以说大家要把这个结构记牢,如果考试再遇到类似的题目的话,直接套用就行了。好的,以上就是我讲课的主要内容,谢谢大家。

大家好,继续给大家带来二零二六年三月十四号上午最远考试的第二道真题回忆版,应该是一个填空题, 这道题也是咱们考生考完回忆,热心的网友啊提供的一个题目,非常的经典,题目的要求呢,很简单,要求输入五个学生每人三科成绩计算,并且输出每个学生的平均分。 这道题是考试里面最基础最经典的循环题目,思路简单,代码短必拿分。我们来看一下代码,首先我们需要定义的变量啊,用 i 来 表示第几个学生,那么 abc 呢?用来存放三科的成绩, a, v, g 用来计算平均分,然后用一个否循环, 循环五次处理五个学生,在循环里面提示啊,输入当前学生的三科成绩,输入三科成绩, 然后请输入啊,第几个学生输入完了之后呢? i 要加一,然后用 scf 读取这三个分数,分别存放到变量 abc 里面, 平均分呢,等于三颗的相加,然后除以三点零,除以三点零,最后用 print f 来输出,保留两位小数啊,看起来更加的规范, 整个代码啊,就是这些,那其中呢,这个百分 d 呢,是第几个学生?然后这个 a, v, g 呢,代表是它的平均分数, 那么这个代码没有复杂的数组,没有复杂的结构啊,是纯基础的循环加上数输出,那即使是新手呢,也能轻松的把它写出来啊,因为它是一个填空题啊,具体的它这个结构和咱们这个可能还有点区别, 所以可是如如果遇到这种题,直接按照这个思路写,能够完美的拿分。好程序写完了之后呢,我们来试一下啊,运行一下。 好,请输入五个学生的三科成绩。第一个学生啊,八十空格,八十空格,九十。预测啊,这个学生的平均分是八十三点三,第二个学生六十六十四十, 第三个学生四十五十,八十,第四个学生七十 三十二十,平均分是四十分。第五个学生一一一下车,他的平均分是一点零零分。好了,程序运行结束。 好的,以上就是这个填空题的讲解,谢谢大家。

让你做第十一题,你说你不会,那我问你,你上课的时候不是说听懂了吗?计算必然电阻的组织非常简单,我只讲最后一遍,听好了。 首先我们要知道两个电阻并连之后,他的组织会变小,那计算公式已经在这里了,我们待会直接套公式就行了。好,那首先写框架, 接下来输入两个电阻的组织, 然后用公式输出计算的结果,将上面的公式复制下来 粘贴,现在进行翻译, 翻译成功,测试运行复制测试的样例 答案和他的压力输出不一致,保留两位小数。接下来我们来设置浮点数的精度, 保留两位小数。好,再次测试运行, 答案正确,接下来提交 刷新测试通过这道题是不是非常简单?

今天我们要讲的是 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 语言程序,输入一个年份,程序判断该年份是否是润年, 如果是润年,输出一,否则输出零。好的,感谢大家的观看,我们下节课再会。

让你做第十四题,数字反向输出,你说你不会,那我问你,上课的时候你不是说听懂了吗?今天我再讲一遍,听好了。首先写框架, 然后定一个整形变量来保存输入的值。 接下来我们来处理数字,由于程序不知道输入的 n 到底是几位数,所以我们用无限循环来做。 那么处理之后的数,我们定一个新的变量来保存, 用 m 来保存结果。 那处理的思路其实很简单,我们只需要把输入的数个位拿出来 保存到高位。方法就是每次取出来一个个位数,我们把它乘以十,再保存到这里面去就行了。那么 m 等于 m 再乘十, 加上后边取出来的个位数, n 再除以十。 啊,这里 n 除以十,取它的余数,实际上取出来的就是个位数,那么每次取完个位数保存完,我们就把个位数给它去掉。怎么去啊?用 n 再除以 十,因为我们都知道整数除以十,他只能保存整数部分,而余数会被去掉。 好,接下来写循环跳出的条件,如果 n 等于零,说明我们已经把每位数都取完了,直接跳出当前数。 最后我们把处理的结果进行输出。 接下来测试运行,将上面的样例输入复制下来。 好,现在我们发现一二三四变为四三二一,直接点击提交, 刷新测试。通过这道题是不是非常简单?好,不要再自欺欺人了,会就会,不会就不会。

hello, 大家好,我是 c 哥,今天呢也很高兴为你讲课,接下来呢,我们要学习的是二点七结构体, 那我们之前学完了一些基本类型呢?想一下,如果我们有许多相同属性的东西,是否每次都需要进行对这类东西的属性呢,进行一次次的定义呢?比如说这类的东西呢?一,这类东西二, 三,难道我每次都要对这类东西的属性呢进行定义吗?这东西呢可以说是物品啊,或者说是动物之类的都行啊,比如说呢,你有一条狗狗,那么我可以给这个狗狗啊定义一些属性名字啊,编号以及年龄, 那赋予他们的出值之后呢,我们进行一个输出,输出结果呢,如我们所料,应该是狗一,零以及二的, 那麻烦的地方在于哪边呢?如果我想要定义一百只不同的狗狗,那怎么办呢?难道要给下列所示的一百只狗都定义变量吗?比如说 第一条狗 name 一, 数组字母类型的数组,给他对应的狗一,然后呢,编号一,年龄一,狗二,编号二,年龄二,然后再依次输出。 那如果这两条狗还好吧,那我要一百条,一万条,一千条,是不是好麻烦又麻烦起来了,所以呢,我们发现呢,在学习过程当中呢,是不是?哎,我发现了一个痛点问题,我去解决它, 那这怎么解决呢?就需要来定义我们自己想要的一个数据类型结构体了。那结构体呢,也是由一些基本类型组成的啊, 它是我们自己定义的,我们可以看下它里面呢就是我们熟悉的一些,比如 try, input 啊, double 这些类型的,肯定是由这些基本类型组成的,这是不会变的,那它的一个格式是什么样的呢? 请看 structure 结构体名字,然后呢大括号要注意哈,后面要加个分号,新手呢很容易忘记加分号啊,那再往下看,这个可能我多写了啊,这个可以擦掉。 再往下看,这里我们定义的一个 structure dog, 这一整个呢,就是这一个结构体的名字了,然后在里面呢,我们定义了三个属性, 所以呢,这个结构体呢,由这三个属性进行组成,分别为 char name 制符数组 int id 整形变量 id 编号,那么 int x 整形变量年龄。 那这样我们就定义完了我们自己写的数据类型,之前呢基本类型,我们是比如说 int a 啊,这么进行赋值的,对吧?进行定义这个变量的,那我们自己的类型名字叫做 struct dog, 那 我就是 structure dog, 然后再来一个 dog, 就 定义完了自己的一个数据类型名字,那再往下 我们还可以怎么定义呢?你可以直接在这个后面呢,跟上一个 dog, 相当于呢,就是怎么做啊?粗实化结束,就是定义结束,相当于呢这一个的结合,这么写也是可以的。 那么我们再往下如何访问结构体的一个变量呢?那么我们引入一个新的运算符,也就是点号,就一个点啊,那这个点的话呢,怎么进行 对应上呢?比如说我们首先呢,刚刚讲的定义了一个狗狗的结构体, 那注意一下啊,你的一个数组啊,你不可以是 dog, none 等于狗一,你不可以这么写,为什么呢?我讲一下原因哈, 假设你认为这么写可以,那我是不是可以理解为你认为 chair none 三,然后呢, num 等于勾一这么一个写法?可以,这明显是错误写法吧。 ok, 你 数组你没办法这样子分开,这样直接进行一个复制吧。好, 所以呢,如果你真的要这么写,隔开写的话,你可以这么写, num 零等于狗, num 一 等于多少呢?一, num 二呢,等于你等会如果想用百分二 s 进行输出的话呢,是不是直接杠零一下,等会遇到这个杠零,你就会截止了这么一个写法吧。 好,那么又或者呢,你可以直接进行 scanf 进行写入,那这个位置上呢?你 dog 点上一个 n, 这数组名字呢,是不是就是相当于跟我们之前讲过了首元素的地址啊? 所以呢,你这位置呢,已经算是取地址了吧。好,那么等会我们会输入狗一, 那这个呢,如果你想要访问 id, 是 不是 dog 点 id 啊,等于零就行了, dog 点 egg 等于一 完事。那至于为什么我们不能换行呢?我稍微说一下一个通俗一点的解释啊,就是你看这里为什么可以换行,原因是它很直接啊, 我们就是把这一个零放到这 id 嘛,就是一个对一个的,但是你这是一堆啊, 你放进去的话呢,他没办法知道你到底是想要把这个记忆呢,放到这宿主的哪个位置?他不知道呀,你可能把这记忆放在零一二一二的位置还是零二的位置呢?他都无从得知啊。 好,从设计上面考虑呢,我们不应该这么做,你这么理解就可以了。好,那么再往下我们进行一个输出,输出完成之后呢,肯定就是狗一,然后呢零以及一了,这是它的运算结果。 那又或者说呢,我们能不能在一开始定义这结构体的时候呢,就给它进行一些粗实化?可以的,我们定义完成之后呢 sock, 然后呢 dog, 然后 dog 定义完成之后呢,对应的等于我们给它一个大括号啊, 大括号呢,你可以在大括号里面点上一个,那你就指定啊,这一个成员变量进行初识化,等于勾一, 这么写呢,是可以的,我们就直接指定了它的一个输出,你看它计算结果呢,就是一个勾一了,这么写就可以了。好,那么再往下 这地方呢,你很容易理解,那为什么这个时候就点就可以呢?这个时候是我在初设化的时候,相当于我已经创建的时候,初设化的时候直接给它初设化完成了, 跟你这个地方呢,在点上的时候呢,我定义完了,这个其实相当于我进行了定一个结构题,给它出使画完了,然后呢再进行,不与它值,这个时候肯定是不行的吗?但这个位置是我创建之初就给他定义完了。一个狗易, 就相当于是啊叉 n 三,等于勾一,当然是可以的。好,那再往下 结构体成员乱序的一个出实化,我们也可以不用按照这个顺序进行出实化啊,你看我们刚刚讲的是,你可以直接点,然后对应上这个成员变量 的一个初值,这里也一样的呀,我们也可以点上 egg 等于二,点上嫩等于狗一点上一个 id 等于零。 当然喽,你可以不要点了,如果你不写点啊,你就按照这一个你定义的顺序进行初数化就行了,你看 shaka dog, dog 等于什么呢?狗一,逗号零二这么写 好,那么我们进行输出下结果,你看这位置上是不是哪怕你乱序的,你只要能够指定这三个的哪一个,一个一个进行赋值,肯定可以输出正确的结果了。这边呢,我们 不指定,你就按照它定义的顺序进行给它赋予数值。 ok, 那 讲一个 type def, type defy 呢?它是允许程序员呢为已经存在的一个数据类型呢,定义一个新的名字,格式为 type defy 结构体,这少写的一个 defy 啊, defy 结构体,然后呢新名字,比如说讲个简单的 tabify int, 我 给他定义的中文名字整形,那么就给 int 类型的重命名,为了整形来看一下啊,当你重命名完之后呢,它们俩呢效果呢?一样, 你定义完之后,现在呢,你给他定一个 z 型 egg, 其就是等价于什么呢? int, egg 是 一样的效果啊,然后呢,十八输出一下,你看这位置是不是就一样样的效果? 我们也能够为结构体呢重命名,对应的格式为 sector, 然后呢 a, 然后结构体后面呢跟上一个它新的名字,那这个时候呢,它就不是这个的叠加了啊,刚刚我们如果没有重命名的时候呢, 它的名字呢?后面跟上什么呢?跟上一个 dog, 那 是它俩的一个结合,但是你多加了一个 tabify, 那 可就不一样了,它的意思就是我给这个结构体呢重新命名了一个新的名字,叫做 dog, 这是因为啥?那我个人呢,是觉得因为你每次要写一个 struct 太麻烦了,对吧?这么定义的话呢,你以后进行创建这个结构体,你就直接 dog 就 代表了 struct dog 了, 然后呢进行一些抽象,然后进行输出嘛,你看输出结果呢,跟我们之前写的一样一样,所以呢,这就是虫命名的一个魅力所在了。 那么结构体数组呢?与结构体时针我们来看一下,结构体数组呢,就是指结构体构成的一个数组, 比如说啊,现在我给他改个名字先,然后呢 dog, dog 三,请看这个位置,我进行一个负循环,那对应的我为这数组呢进行一个一个定义,请看负循环, 我 int i 等于零, i 小 于三,请输入狗的名字,然后呢输入这位置呢,我直接就是取地址 dog i, 也就 dog 零点 n, 然后呢 取地址 dog 零点 id 是 不是一样样的呀?好,然后呢,以此类推,我给狗零 定义完了,就下一条狗了,再下一条狗,这样的话是不是完成了我们最初的那个意愿,不用每一个每一个这样子复制吧。 好,如果你之前的话呢,是不是得一个个定义这些属性,然后一个一个的一个一个的进行复制,这样的话,我进行创建那个结构体的数组,是不是方便了很多呢? 然后呢我再进行输入一下,哎,我到底想获取哪一个狗狗的信息呢?根据我们的 id 来,那我输入的是第一条狗狗的信息, 然后呢就进行输出, dog 零的名字, dog 零的 id 以及 dog 零的 egg 就是 第一条狗狗的。好,那我们来看一下,首先我们创建了三个狗狗类型的 元素啊,这个元素的话是一个个结构体啊,那这个地方表述有点小小问题啊,应该是创建了狗狗类型的数组呢,长度为三,长度 长度为三啊,好,那么再进行输入对应的一个数值,狗一零二,狗二一一,狗三呢?二三, 那么进行输入完成呢?他不断的进行赋值吗?是不是狗一零二,狗二一一,狗三二三, 然后呢我们再次在下面这一个 x 这里呢进行输入的是一个零,所以最终呢,他进行写了一个狗狗的名字是狗一,狗狗编号是零,狗狗的年龄是二, 那这上面呢,由于我直接这个编辑器呢,是我需要先输入数据呢,他,他按照我这意愿呢,一个个进行直接复制进去了啊,那如果你按照你的编辑器啊,本地编辑器的话,他应该会是请输入狗狗的名字,然后你在这个地方打一个,比如说狗一, 然后呢他会继续显示出来,请输入狗狗的编号,这么进行显示的,那由于我刚刚说了,我是一次性写在这一个输入栏当中的,所以他直接就是一下串啊就出来了,那再往下结构体直角, 请看这里,我们还有一种定义形式呢,你可以直接在这里后面啊, struck dog 完之后呢,这边就 dog 了吧,我没有改名字啊,这地方是创建了这一个 结构体啊,然后呢对应的我直接在这后面直接写个等号,这么写也是可以的啊,然后请看 这里呢,我们重新再定义了一个 dog 的 指向类型, 然后呢 p 变量,然后它的话呢是吗?是不是取地址? dog 就是 将这一个结构体对应的存放地址呢?复制给了 p, 跟我们之前讲的,你 int 星号 p 等于取地址 a, 这边来个 int a 吧,我们写完整一点点啊,幺零零八六和现在的一个 sector, 我们再写完整一点点啊,慢点来,是不是 dog, 然后给它赋予了一些值,狗一零二,然后呢再进行 structure dog 星号屁变掉等于什么呢?是不是得存放这个狗狗 结构体类型的地址啊?因为它是狗狗结构体类型的指征,我是整形的指征,就得存放整形的地址。那我是不是狗狗类型的指征呢?就得存放狗狗类型的地址,那不就是取地址然后是 dog 吗? 是这么一回事,那现在呢,有两种办法能够进行访问结构体成员变量, 那这两种方式呢,并不是针对普通的一个结构体变量来的,因为普通的结构体变量我们之前就讲过了,他直接点就可以了, 而这种时针类型的一个结构体变量呢,才是我们讨论的一个东西啊。那这个屁的话,怎么去访问这个 结构体内的成员变量呢?其实第一种方式就是解引用的方式,你可以解开它的一个指向嘛,比如说这个星号屁括号点,那你这星号屁呢,是不是就等价于了 dog 了? 你解开吗?我们刚刚是把 dog 的 地址给到这一个指向,那我解开不就相当于是 dog 吗?你点上 id, 我 也点上一个 id, 不是 一样的意思吗? ok 或点上 egg, 点上嫩都可以啊, 这第一种形式,第二种呢,是我们比较常用的一种形式,你可以对比一下啊,普通的一个结构体变量的话呢,它是直接点上,而我现在是指征类型的结构体变量,我就直接箭头指向他们两个呢,效果一样, 只不过呢这个是指征用的,这是普通的一个结构体变量的。好,那我们来看一下它效果。 skyf, 然后呢是 p, 箭头 num, 就 相当于我们刚刚讲的这个 dog 点上 num 的 效果。那这里呢,我混合写了啊,星号 p, 然后括号点 id 都可以啊,那是不是等于一个零赋值,然后呢 p, 箭头 egg 等于二, 然后我们再进行输出。那看一下步骤啊,第一步呢,我们把这一个变量了的地址复制给了这一个执行 p, 那 步骤二是什么呢?是进行解引用,但这个也不一定解引用啊,我这个地方我写了一个解引用,然后也有用箭头的形式啊,反正就是为这个结构体在成员变量的进行赋值,赋完值之后呢,勾一零二, 因为我输入的呢就是这个狗一零二。那么进行输出的结果呢,是不是一样的?跟我们之前呢,用普通的一个结构体变量呢复制方式得到的结果呢? 一样的啊,一样的。好,那么至此呢,我们的一个结构体呢,就已经讲解完毕。