NOIP 提高组初赛 · NOIP 2015 提高组初赛试题 第 23 题

选择题 · 答案 3,2 · 考点:模拟

← 整套速查表 NOIP 提高组初赛 全部真题

题目

#include <iostream> 
using namespace std; 
struct point { 
    int x; 
    int y; 
}; 
int main() { 
    struct EX{ 
  int a; 
  int b; 
  point c; 
 } e; 
 e.a = 1; 
 e.b = 2; 
 e.c.x = e.a + e.b; 
 e.c.y = e.a * e.b; 
 cout << e.c.x << ',' << e.c.y << endl; 
    return 0; 
} 

输出:_________

答案:3,2

考点

模拟 讲解 →模拟 真题汇总 →

解题思维

这题就考结构体嵌套和成员访问,拿到题先别急着算,先把 e 里 a、b 赋了啥,再看 c 是个 point 类型,顺着点号一层层往里面钻,把 e.c.x 和 e.c.y 分别换成对应的表达式算出来就行。

常见错误

很多同学在看到 e.c.x 时会愣住,以为要先算 e.c 这个整体,其实 e.c 本身就是一个 point 类型的变量,直接就能访问它的 x 和 y。另外点号运算符的优先级最高,e.a+e.b 里先算加法再赋值,千万别把 e.a+e.b 当成一个整体再去点成员。

详细解析(节选)

考点与概念:结构体嵌套与成员访问

这题核心就两点:结构体定义和成员访问。struct point 里有两个 int 成员 x 和 y;struct EX 里又嵌了一个 point 类型的成员 c。访问时要用点号,而且可以一层一层点:e.c.x 就是先找到 EX 里的 c,再找到 point 里的 x。

命题人怎么挖坑

命题人最喜欢在结构体嵌套里设陷阱:

这题就是典型代表:e 里 a=1、b=2,c 是 point,然后 e.c.x 和 e.c.y 直接用了 a 和 b 的运算结果。

同考点真题

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断