期末考快到了,是不是对着 C 语言课本一脸懵?翻开书好像啥都懂,合上书做题就卡壳,尤其是指针、数组、循环这些老师反复强调的考点,一到习题里就认不出了。复习时间就那么点,刷太多题来不及,不刷题又怕考到不会的。其实啊,大学 C 语言期末考就那几个高频考点,把指针、数组、循环的典型题练熟,过线肯定没问题。今天兔子哥就汇总了这三块的高频习题,附带简单解析,都是从各校期末真题里挑的,新手也能看懂,一起往下看吧!
循环考点习题:考来考去就这几种,练熟了稳拿分
循环题在期末考里占比不小,而且不难,只要把 for、while 的用法搞透,基本不会丢分。那常考的有哪些呢?
打印图案:期末考的 “常驻嘉宾”
题目:用 for 循环打印一个 5 行的直角三角形,每行星号数量等于行数(第一行 1 个,第二行 2 个,直到第五行 5 个)。
解析:这种题关键是控制外层循环的行数和内层循环的星号数。外层循环从 1 到 5,内层循环跟着外层的行数走,比如第 i 行就打印 i 个星号。
参考代码:
c运行
#include int main() {int i, j;for (i = 1; i <= 5; i++) { // 控制行数for (j = 1; j <= i; j++) { // 控制每行星号数printf("*");}printf("\n"); // 每行结束换行}return 0;}很多人做错是因为内层循环的条件写反了,比如写成 j <= 5,这样就成了正方形,细心点就行。
循环求和:看似简单,细节容易错
题目:用 while 循环计算 1 到 100 中所有偶数的和。
解析:先定义一个变量存和,初始化为 0,再用 while 让数字从 2 开始,每次加 2,直到超过 100,每次循环都把数字加到和里。
参考代码:
c运行
#include int main() {int sum = 0, num = 2;while (num <= 100) {sum += num;num += 2; // 只加偶数}printf("总和是:%d", sum);return 0;}有人会用 if 判断数字是否为偶数,虽然也对,但不如直接让 num 每次加 2 高效,期末考按简洁的写法给分可能更高。
数组考点习题:别被 “下标” 绕晕,多练就能顺
数组题常和循环结合,考的无非是存数据、找最值、求和这些,难一点的会出二维数组,但期末考一般不会太复杂。
一维数组求最值:几乎每次都考
题目:定义一个包含 10 个整数的数组,用户输入数据后,找出其中的最大值和最小值。
解析:先假设第一个元素是最大(小)值,然后用循环逐个比较,遇到更大(小)的就更新。
参考代码:
c运行
#include int main() {int arr[10], i, max, min;printf("请输入10个整数:");for (i = 0; i < 10; i++) {scanf("%d", &arr[i]);}max = arr[0]; // 初始化最大值min = arr[0]; // 初始化最小值for (i = 1; i < 10; i++) {if (arr[i] > max) {max = arr[i];}if (arr[i] < min) {min = arr[i];}}printf("最大值:%d,最小值:%d", max, min);return 0;}数组题看似简单,不过一不小心就会下标越界,比如把 i < 10 写成 i <= 10,数组总共 10 个元素(下标 0 到 9),这样就会出错,这点要特别注意。
二维数组操作:期末考的 “分水岭” 题
题目:定义一个 3 行 3 列的二维数组,输入数据后计算每行的平均值并打印。
解析:外层循环控制行,内层循环计算每行的和,再除以列数(3)得到平均值。
参考代码:
c运行
#include int main() {int arr[3][3], i, j, sum;float avg;printf("请输入9个整数:");for (i = 0; i < 3; i++) {for (j = 0; j < 3; j++) {scanf("%d", &arr[i][j]);}}for (i = 0; i < 3; i++) {sum = 0;for (j = 0; j < 3; j++) {sum += arr[i][j];}avg = sum / 3.0; // 用3.0确保结果是小数printf("第%d行平均值:%.1f\n", i+1, avg);}return 0;}算平均值时,很多人用 sum / 3,这样结果会是整数,比如 sum 是 10 的话,10/3 得 3,而用 3.0 才能得到 3.3,这点容易被忽略。
指针考点习题:别怕绕,抓住 “地址” 就好办
指针是期末考的难点,也是拉开分数的地方,常和数组结合考,只要记住 “指针存的是地址”,慢慢理逻辑就行。
指针与一维数组:最常考的组合
题目:用指针遍历一个一维数组,计算所有元素的和。
解析:数组名本身就是首地址,定义一个指针指向数组首元素,然后移动指针逐个访问元素。
参考代码:
c运行
#include int main() {int arr[5] = {1,2,3,4,5}, sum = 0, i;int *p = arr; // 指针p指向数组首元素for (i = 0; i < 5; i++) {sum += *p; // 取指针指向的元素值p++; // 指针向后移动一位}printf("总和是:%d", sum);return 0;}有人会把 p++ 写成 p+1,这俩不一样,p++ 是移动指针本身,p+1 只是计算下一个地址,指针没变,这点要分清。
指针作为函数参数:期末考的 “难题”
题目:写一个函数,用指针交换主函数中两个变量的值。
解析:函数参数用指针,这样在函数里修改的是变量的地址,主函数里的值才会变。
参考代码:
c运行
#include void swap(int *a, int *b) { // 形参是指针int temp;temp = *a;*a = *b;*b = temp;}int main() {int x = 3, y = 5;swap(&x, &y); // 传地址printf("x=%d, y=%d", x, y); // 输出x=5, y=3return 0;}要是函数参数不用指针,直接写 int a, int b,那交换的只是函数里的临时变量,主函数里的 x 和 y 不会变,这是很多人会犯的错。至于指针和结构体结合的更复杂题型,具体怎么考更难的变式,我目前也没完全整理清楚,得再翻几本真题集看看。
最后说点我的看法。大学 C 语言期末考,指针、数组、循环这三块占了快一半的分,把上面这些题练熟,再找两套真题模拟一下,基本就能过。复习时别贪多,一道题做三遍,比三道题各做一遍有用。很多人觉得指针难,其实多画几张图,把指针指向谁、怎么移动的画出来,慢慢就懂了。考试时遇到不会的题别慌,先做会的,回头再啃难的,时间肯定够。希望这些习题能帮到你,祝期末考个好成绩!
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~