学 C 语言数组的时候,是不是觉得概念挺简单的,可一碰到练习题就懵圈?上课听懂了老师讲的数组定义、下标访问,可自己做题时要么数组越界,要么循环条件写错,对着屏幕发呆半天也找不出错在哪。其实啊,数组章节的高频试题就那么几种,把它们练熟了,做题自然就顺了。兔子哥今天就挑几道常考的题,跟你好好聊聊怎么做,还有那些容易踩的坑,一起往下看吧!
一维数组基础题:初始化和遍历是重中之重
一维数组的题里,初始化和遍历几乎每次考试都有,比如这道题:“定义一个包含 5 个整数的数组,初始化值为 1、3、5、7、9,然后逐个输出数组元素”。
做法其实不难,步骤是这样的:
- 定义并初始化数组:int arr [5] = {1, 3, 5, 7, 9}; 这里要注意,数组长度得和元素个数对得上,多了少了都会报错。
- 用 for 循环遍历:for (int i=0; i<5; i++) { printf ("% d", arr [i]); } 循环变量 i 从 0 开始,到 4 结束,因为数组下标是从 0 算起的。
你猜怎么着?有个同学就因为把 i<5 写成 i<=5,结果输出的时候多了一个乱码数字,这就是典型的数组越界,对吧?所以啊,循环条件一定要看仔细,长度是 n 的数组,下标最大是 n-1,这个得记牢。
那做这类题有什么小技巧吗?兔子哥觉得,写代码前最好在草稿纸上把数组下标标出来,比如 arr [0] 是 1,arr [1] 是 3,这样循环的时候就不容易弄错范围了。
一维数组应用题:找最值和排序是必考题
找最大值最小值、排序,这些题在数组章节里出现的频率太高了,就拿 “找出数组中的最大值” 来说,步骤得走对:
- 先定义数组:int nums [6] = {12, 35, 9, 47, 23, 56};
- 假设第一个元素是最大值:int max = nums [0];
- 循环比较:for (int i=1; i<6; i++) { if (nums [i] > max) { max = nums [i]; } }
- 输出 max。
这里最容易错的是啥?哦对了,有同学会把 i 的起始值设为 0,这样第一次比较就是 nums [0] 和自己比,虽然结果没错,但多此一举,浪费时间嘛。还有人忘了给 max 初始化,直接用 int max; 这样 max 一开始是个随机数,比较出来的结果肯定不对,这都是血的教训啊。
排序题里,冒泡排序考得最多,就像 “将数组按从小到大排序”。做法是相邻元素两两比较,大的往后放,重复 n-1 轮。有个小窍门,每轮结束后,最大的元素就 “冒” 到最后了,所以下一轮可以少比一次,这样能提高效率。兔子哥当年练冒泡排序,一开始总把内外循环的条件弄混,后来写了十遍才彻底记住,所以啊,多练真的很重要。
二维数组常见题:求和和找特定元素
二维数组比一维数组稍微复杂点,但高频题也就那么几个,比如 “求二维数组所有元素的和”,还有 “找出二维数组中的最小值”。
拿求和来说,步骤是这样的:
- 定义二维数组:int arr [3][4] = {{1,2,3,4}, {5,6,7,8}, {9,10,11,12}};
- 定义 sum 变量并初始化为 0:int sum = 0;
- 用双重循环遍历:for (int i=0; i<3; i++) { for (int j=0; j<4; j++) { sum += arr [i][j]; } }
- 输出 sum。
这里的 i 代表行,j 代表列,可别搞反了。有个女生就因为把 i 和 j 弄混了,循环条件写成 i<4、j<3,结果算出来的和完全不对,哭丧着脸跟我说,后来才发现是行和列搞反了。所以啊,写二维数组的时候,心里得清楚哪个是行哪个是列。
那怎么避免行和列弄混呢?很简单,定义数组的时候,比如 arr [3][4],就默念 “3 行 4 列”,写循环的时候也这么想,i 从 0 到 2(3 行),j 从 0 到 3(4 列),这样就不容易错了。
数组和函数结合题:传参是难点
数组作为函数参数的时候,很多人会犯迷糊,比如 “写一个函数求数组元素的平均值”。
函数定义得这样写:float average (int arr [], int len) { ... } 这里的 arr [] 其实是指针,后面的 len 必须传,不然函数不知道数组有多长。有个同学就忘了传长度,在函数里用 sizeof (arr)/sizeof (arr [0]) 算长度,结果肯定不对,因为数组名作为参数传递时,sizeof (arr) 得到的是指针的大小,不是数组的长度,这点一定要注意。
调用函数的时候也得注意,传数组名就行,不用加下标,比如 average (nums, 5),而不是 average (nums [0], 5),这点弄错了,函数根本得不到正确的数组地址。
做数组题,最重要的是什么呢?兔子哥觉得是细心,特别是下标和循环条件,稍微不注意就会出错。还有就是得多练,把这些高频题型练到闭着眼睛都能写出来,到时候不管题目怎么变,你都能应付。平时做题的时候,错了别灰心,把错误记下来,下次别再犯就行。反正数组这东西,看着复杂,其实套路就那些,练熟了真的不难,你说对吧?
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~