完整教程:从0开始跟小甲鱼C语言视频使用linux一步步学习C语言(持续更新)8.8

第十一天
第二十六,二十七,二十八,二十九,三十和三十一集

第二十六集

二维数组

众所周知,二位即为一张平面,而二维数组也一样,如同一张平面
int a[3][4];就是表示一个二维数组,里面的3为行数即横,4为列数即竖。
存放的顺序如图
在这里插入图片描述
先变化后面的维度,再变化前面的维度,有点像for的嵌套模型。
对多维数组初始化的方法有很多种,这里就直接放张图
在这里插入图片描述
没有初始化的,全部都赋为0

新注释方法

使用if(0)进行对长语句的注释,因为if(0)永远也不会执行,
#if(0)
#endif

第二十七和第二十八集

例题

在这里插入图片描述
通过该例题来了解数组里值的累加,很轻松,看看就行了

例题1

在这里插入图片描述
这里小编的想法是打算先将a数组转化为只有1行,没有列的数组,即c【0】【6】通过两层的for循环嵌套就可以完成,i要在上面赋为0,不能在for语句里面赋,不然转化不了第二行的数字,如图
在这里插入图片描述
之后呢,对b进行赋值,通过for对列从上往下赋值,按顺序来即可。
不过小甲鱼这个很便捷巧妙。
在这里插入图片描述直接 行与列进行了调换

例题2

在这里插入图片描述
这套题较难,本来想着先化为一行数组,接着用之前的冒泡法进行求最大值,但是有了数组之后更好的方法,就是先设一个为最大值,然后用for语句进行对数组的全部数进行比较,如果大于max则将大于max的那个数赋给max,最后就可能得到最大值。

例题3

在这里插入图片描述
如何依次给数组赋值呢,这里是个难点啊。是借助for语句然后就是打印,打印很简单,一个一个扣上去也可以,也可以通过小甲鱼的技巧,直接打印行数为1或者列数为1的语句搭建。

第二十九集

二分法

这个学过数学就可以懂,就是不断通过分割来确定范围,增加运算的速度。

不过在启用前要是有序的数据,不能是乱序的。
在这里插入图片描述
这道题就是展示了二分法了。
先设置low,mid,high三个变量作为指示,其中low=0,mid=4,hign=9,其中数字代表了数组里数据的顺序,如mid=4,数组第五位为23
接着设置for的循环语句嵌上if判断语句,mid为low加上high的值除以2,mid与查找的值比较,不符合进入,if比较,其>mid则mid赋值为low,然后继续for。其<mid则mid赋值为high,然后继续for,知道比出来为止,
有个疑问就是(high+low)/2可能算出来有小数点,然后因为定义为整形,可能会有偏差,如9+0=4.5
整形输出为4,这会不会导致我们输入的值会由于这个误差而误判呢?
小甲鱼没有说,我们就自己想下
应该是不会的,至少我们验证程序是对的,其实是这样的,mid只是用来指示罢了,他在不在中间,多一少一是无所谓的,该比还是要比。
下面这张图是核心语句,很好理解。
在这里插入图片描述

getchar消耗字符的作用

在这里插入图片描述
这里小甲鱼想做一个识别用户是否输入正确数字的判断,如果没有getch(),这个程序在这里会进入死循环,为什么呢,缘于录入了n的数据,如果输入错误数据,那么这会是一串乱码,乱码可能会符合while的判断语句,然后进行循环,不会让你继续输入。
怎么做到的呢?就是小甲鱼这里很巧妙的运用了getchar语句来消去了&n里面存储的字符数据,来使代码正常运行,这
小编好奇,去搜了下资料,是这样的,scanf读取数据后是将素材储存在缓冲区,然后getchar能够从缓冲区读取字符,然后这里是单单的getchar()没有赋值,也就是读取了字符后,没有存储的地方,那会直接删除,小编是这么想的,不知道对不对,大家来纠正。

第三十一集

scanf会返回值

scanf读n个数就会返回n,没读返回0
通过借此,我们能够通过if对scanf的返回值进行判断,来完成一些机制上的需求
至于为什么输入abcdf时,会打印5次错误提醒,我想是因为scanf读取一次字符循环一次,所以打印了5次错误提醒。

总结

数组与循环的搭配可以做出很多更简便的操控,
二分法这种比大小的思路
通过getchar的新作用,能够消去&a里的内容
scanf行返回数值
今天也就结束了,没有什么了,喜欢的点点赞,作者也是初学者,可以大家一起交流,老手看到错误或者不好的地方,在评论区留言,作者我大大感谢!!!

posted @ 2025-08-14 12:22  wzzkaifa  阅读(16)  评论(0)    收藏  举报