c语言教程从入门到精通:函数与数组经典例题50道

admin C语言 4


学 C 语言的朋友,是不是感觉函数和数组的概念都懂了,可一做题就发懵?数组下标总搞错,函数传参传半天不知道错哪,更别说把两者结合起来的题了。其实啊,函数和数组是 C 语言的 “半壁江山”,想从入门到精通,就得靠经典例题练手。兔子哥整理了 50 道函数与数组的经典例题,涵盖了从基础到进阶的各种题型,今天就挑重点讲讲,帮你打通任督二脉,一起往下看吧!

函数基础题:从定义到调用,这些题得先吃透


函数就像一个个小工具,学会用它们能让代码变简洁。刚开始练函数,从这几种题入手准没错。
  • 无参无返回值函数:比如写一个函数打印 “Hello World”,调用的时候直接写函数名就行。这种题主要练函数定义格式:void print_hello() { printf("Hello World"); },注意 void 表示没有返回值,括号里空着表示没有参数。
  • 有参无返回值函数:比如写一个函数求两个数的和,参数是两个 int,然后打印结果。函数定义:void sum(int a, int b) { printf("%d", a+b); },调用的时候传两个数进去,sum(3,5);就会打印 8。
  • 有参有返回值函数:上面那道题改一下,让函数返回和而不是打印。定义:int sum(int a, int b) { return a+b; },调用的时候可以用变量接收:int s = sum(3,5);,s 就是 8。

为啥要分这么细?因为不同的函数用法适合不同场景,比如只是想输出点东西,就用无返回值的;要是想计算结果给其他地方用,就得有返回值。我当年练函数,光是这三种类型就各做了 5 道,后来用起来才得心应手。


数组基础题:下标和遍历是绕不开的坎


数组就是一组相同类型的变量,刚开始最容易在 “下标” 和 “遍历” 上栽跟头,这几种题必须多练。
题型常见错误解题关键
一维数组赋值下标越界,比如定义 arr [5] 却用 arr [5] 赋值记住下标从 0 开始,最大下标是长度 - 1
数组遍历求和循环条件写错,比如 i <= 5 instead of i < 5循环变量从 0 开始,到长度 - 1 结束
二维数组操作行和列搞反,比如 arr [i][j] 写成 arr [j][i]先确定行再确定列,想象成表格

比如有道题 “定义一个 5 元素数组,输入值后求平均值”,很多人会写成:
c运行
int arr[5], i;for(i=1; i<=5; i++) { scanf("%d", &arr[i]); }

这就错了,下标应该从 0 到 4,循环条件得是 i < 5。这种小错误,不练个几道题真的记不住。


函数与数组结合:这才是真正的难点,也是考试重点


把函数和数组放一起,能解决更复杂的问题,但也更容易出错,这几种题型考得最多。
  • 用函数求数组最大值:把数组和长度传给函数,函数里遍历找最大。关键是数组作为参数时,要传长度,因为函数里不知道数组有多长。示例:

c运行
int find_max(int arr[], int len) {int max = arr[0];for(int i=1; i<len; i++) {if(arr[i] > max) max = arr[i];}return max;}

调用的时候find_max(arr, 5),就能得到 5 个元素的数组的最大值。
  • 用函数给数组排序:最经典的是冒泡排序,写一个函数接收数组和长度,在函数里完成排序。排序题不难,但循环嵌套容易写错,尤其是内层循环的结束条件,得多练几遍。
  • 二维数组作为函数参数:比如写一个函数求二维数组每行的和。这时候函数参数要指定列数,比如void row_sum(int arr[][3], int row),表示每行有 3 列,row 是行数。

有人可能会问,数组作为函数参数,为啥有时候要传长度,有时候不用?其实是因为一维数组传参时会退化成指针,函数不知道原数组长度;而二维数组指定了列数,函数能算出每行的元素个数。这个点刚开始有点绕,做两道题就明白了。


进阶题:字符数组(字符串)与函数,应用超广


字符串就是字符数组,和函数结合的题特别多,比如字符串复制、连接、比较,这些都是必练的。
  • 用函数统计字符串长度:和求数组长度类似,但结束条件是遇到 '\0'。函数:

c运行
int str_len(char str[]) {int len=0;while(str[len] != '\0') len++;return len;}

这个函数和库函数 strlen 功能一样,自己实现一遍,对字符串的理解能深很多。
  • 用函数反转字符串:比如把 “abc” 变成 “cba”,思路是用两个指针(或下标),一个在头一个在尾,交换后向中间移动。这种题能练到数组操作和循环,特别经典。

不过话说回来,字符串函数虽然实用,但写的时候一定要注意 '\0',比如复制字符串时,最后得加上结束符,不然打印的时候会出乱码。我当年就因为漏了这个,一道题改了半天才对。


最后说点我的看法。这 50 道题不用一天做完,每天做 5 道,10 天就能过一遍。关键是做一道就要懂一道,别贪多。做错的题标出来,过几天再做一遍,比做新题有用。函数和数组学好了,C 语言就算入门了,后面学指针、结构体都会轻松很多。我当年就是把这些题翻来覆去做了三遍,后来考 C 语言二级时,感觉大部分题都似曾相识。希望能帮到你,有啥题不会的,随时找我聊。

标签: 从入门到精通 半壁江山

发布评论 0条评论)

  • Refresh code

还木有评论哦,快来抢沙发吧~