HM068 档案两种传入

HM068 档案两种传入

HM068 档案两种传入

来源: 第 68 集 结构体-结构体做函数参数

难度: 入门

时间限制: 1s

空间限制: 64MB

题目描述

学生档案是一个结构体,含三个成员:姓名(字符串)、年龄(整数)、分数(整数)。要把整份档案交给子函数,有两种传入方式。

值传递: 形参类型写成结构体本身,例如 void printStudent1(Student s)。调用时直接传入结构体变量。子函数里用点号访问成员:s.names.ages.score。值传递会拷贝一份新档案。在子函数里改形参的年龄,**不会**改主函数里那份实参。

地址传递: 形参写成结构体指针,例如 void printStudent2(Student *p)。调用时传入实参的地址 &stu。指针访问成员必须用箭头:p->namep->agep->score,不能再用点号。若在子函数里执行 p->age = 200,主函数里的实参年龄会一起变成 \(200\)。

选用原则:不想改主函数里的数据,用值传递;想改主函数里的数据,用地址传递。

先读入一份学生档案,再处理若干操作。打印必须分别走值传递函数和地址传递函数;改年龄必须分别走两种传递,并同时报告子函数内看到的年龄和主函数里的年龄。

输入格式

第一行:一个不含空白的姓名 \(name\),以及两个整数 \(age\)、\(score\)(\(1 \le |name| \le 20\),\(1 \le age \le 200\),\(0 \le score \le 100\))。

第二行一个整数 \(q\)(\(1 \le q \le 100\))。

接下来 \(q\) 行,每行一种操作:

  • 1:用值传递打印当前档案。
  • 2:用地址传递打印当前档案。
  • 3\ x:值传递函数把形参年龄改成 \(x\)(\(1 \le x \le 200\)),不应用地址传递。
  • 4\ x:地址传递函数把指针指向的年龄改成 \(x\)(\(1 \le x \le 200\))。

输出格式

  • 操作 1:输出一行 VALUE name age score
  • 操作 2:输出一行 ADDR name age score
  • 操作 3:先输出一行 INNER x(子函数里改完后的形参年龄),再输出一行 MAIN a(主函数里实参的当前年龄)。
  • 操作 4:先输出一行 INNER x,再输出一行 MAIN a

姓名、年龄、分数之间恰好一个空格,行末换行。

样例

输入 #1

张三 20 85
4
1
3 100
1
4 200

输出 #1

VALUE 张三 20 85
INNER 100
MAIN 20
VALUE 张三 20 85
INNER 200
MAIN 200

输入 #2

李四 18 90
2
2
4 30

输出 #2

ADDR 李四 18 90
INNER 30
MAIN 30

说明

样例 1 对应:值传递把年龄改成 \(100\) 后,子函数里是 \(100\),主函数仍是 \(20\),再打印仍是 \(20\) 岁;地址传递改成 \(200\) 后,子函数和主函数都是 \(200\)。值传递打印用点号,地址传递打印用箭头。

信息

ID
1067
难度
(无)
分类
(无)
标签
(无)
递交数
0
已通过
0
通过率
?
上传者