8. 综合与真题
跨考点综合题 + 职教高考风格考点归纳。
学完前 7 章再看这里
这一章把前面学的顺序、选择、循环、数组、函数合在一起,用职教高考风格的例题来练。如果前面某一章还不熟,可以先回去再看一遍,再来做题。
下面例题会考:scanf 格式、== 和 = 的区别、break 的作用、数组下标从 0 开始、函数声明等。每道题下面有参考答案和解析,做完再对照。
本节代码里的英文词 / 常用变量名
x、y— 很多同学练习时喜欢用来表示“一个数”“另一个数”a、b、c— 练习时常用来表示个位、十位、百位或几个不同的数arr— 数组(array 的缩写)main— 主函数printf— 输出scanf— 输入
如果你平时就爱用 a、b、c、x、y 写题,没问题;做下面的例题时看清题目里每个字母代表什么(比如“x 是三位数,a 是个位”),在草稿上标一下就不容易混。
职教高考风格例题
下面几道题是职教高考常见题型,做完可对照参考答案和解析。
例题 1(scanf 与格式字符)
如下程序定义了 x、y 两个变量和输入格式字符:
float x;
int y;
scanf("%f,%d", &x, &y);
程序运行时,如需输入数值 3.14 赋给 x,输入数值 8 赋给 y,键盘应当输入(<回车> 表示按回车键)
A. x=3.14,y=8<回车>
B. 3.14,8<回车>
C. 3.14<回车>8<回车>
D. x=3.14<回车>y=8<回车>
参考答案:B
解析:scanf("%f,%d", ...) 里的格式串中有逗号,所以输入时必须按数字、逗号、数字的顺序输入,不能带 x=、y=,也不能用回车代替逗号。因此应输入 3.14,8 然后回车。
例题 2(break 语句)
判断:在循环结构中,当执行到 break 语句时,会结束本次循环,即跳过 break 之后所有尚未执行的语句,接着进入下一次循环的判定。
A. 正确 B. 错误
参考答案:B(错误)
解析:break 是直接跳出整个循环,不再进行下一次循环判定。题目里说的“结束本次循环、接着进入下一次循环的判定”是 continue 的作用,不是 break。可以记:break = 被击杀直接回泉水(循环结束),continue = 这波跳过、下一波再来(进入下一轮循环)。
例题 3(数组下标)
程序中有一个数组,声明如下:
int arr[6] = {8, 3, 1, 5, 9, 6};
则 arr[3] 的值为 ________ 。
参考答案:5
解析:数组下标从 0 开始。arr[0]=8,arr[1]=3,arr[2]=1,arr[3]=5,arr[4]=9,arr[5]=6。所以 arr[3] 是第 4 个元素,值为 5。
例题 4(水仙花数 · 程序填空)
“水仙花数”是指一个三位数,其各位数字的立方和等于该数本身(例如:1³+5³+3³=153)。请在给出的程序中有序号的横线处依次填入适当的代码,使程序能在屏幕上显示所有水仙花数。
#include <stdio.h>
int main()
{
int x;
int a, b, c;
(1)(x=100; x<1000; (2))
{
a = x % 10;
(3) = (x/10) % 10;
c = (x/100) % 10;
if(x (4) a*a*a + b*b*b + c*c*c)
{
printf("%d\n", (5));
}
}
return 0;
}
参考答案:
- (1)
for - (2)
x++ - (3)
b - (4)
== - (5)
x
解析:三位数从 100 到 999 用 for 循环;(2) 是循环变量自增 x++;个位 a、十位 b、百位 c,所以 (3) 填 b;判断“等于”用 ==;输出该数即 x。
综合小题思路
综合题一般会把顺序、选择、循环、数组、函数里的好几样合在一起。比如“简易战绩统计”:输入若干局的结果(1 表示胜 0 表示负),统计胜场数并输出。
步骤拆解:
- 定义变量:一个存“胜场数”的计数器(如 win_count),初值为 0;可能还要一个循环用的 i、以及每次输入的结果 x。
- 用循环:循环 n 次(或直到输入结束),每次用 scanf 读入一个结果。
- 在循环里用选择:如果读入的是 1,win_count 就加 1(win_count++)。
- 循环结束后用 printf 输出 win_count。
这样就把“顺序(先读再判断再加再输出)+ 循环(多次读入)+ 选择(是 1 才加)”串起来了。自己试着写一写,再对照答案改。
考点归纳(常考与易错)
- 数据类型与格式字符:int 用 %d,float 用 %f,char 用 %c,字符串用 %s;scanf 里格式串有逗号,输入也要打逗号;scanf 变量前要加 &。
- if / switch:判断相等用 == 不是 =;switch 的 case 后面一般要 break,否则会穿透。
- 循环:for 的三部分(初值、条件、更新)要写对;break 是跳出整个循环,continue 是跳过本次;循环次数、边界(从 0 开始还是从 1 开始)要算对。
- 数组:下标从 0 开始,长度为 n 的数组下标是 0~n-1;一维定义 类型 名[长度],二维 类型 名[行][列]。
- 函数:定义时写清返回类型和参数类型;调用在定义前面时要写函数声明;数组作参数写 类型 名[],调用时只写数组名。
结合游戏记:变量=血量金币、选择=回城还是团战、循环=普攻/CD、数组=多英雄数据、函数=技能封装。
本章总示例(含 main)
本章是综合与真题,下面是一段完整可运行的程序:在 main 里用循环和选择统计正数个数。
#include <stdio.h>
int main() {
int i, n, count = 0;
for (i = 0; i < 3; i++) {
n = (i == 0) ? 5 : (i == 1 ? -1 : 8);
if (n > 0) count++;
}
printf("正数个数:%d\n", count);
return 0;
}
下面练习区已预填了这段代码,可修改后点击「运行」。
练习区域
提示:注释可以暂时不写。下面是一段综合了循环与选择的小程序(统计正数个数),可仿照修改或自己写一题,点击「运行」。
运行结果:
(点击「运行」后显示在这里)
易错知识(避免踩坑)
- scanf 格式与输入一致:
scanf("%f,%d", &x, &y);输入必须带逗号,如3.14,8。 - break 是跳出整个循环:不是“跳过这一轮”,题目若说“结束本次循环”多半是考 continue。
- 数组下标从 0 开始:问 arr[3] 是第几个元素,答案是第 4 个。
- 综合题先理清步骤:再写 main 和函数,类型、分号、大括号要对上。
小结
- 综合题:把顺序、选择、循环、数组、函数组合起来,先想清楚“步骤”再写代码。
- 选择题、填空题常考格式字符、== 和 =、break、数组下标、函数声明;注意分号、大括号、类型对应。