HM068 档案两种传入
HM068 档案两种传入
来源: 第 68 集 结构体-结构体做函数参数
难度: 入门
时间限制: 1s
空间限制: 64MB
题目描述
学生档案是一个结构体,含三个成员:姓名(字符串)、年龄(整数)、分数(整数)。要把整份档案交给子函数,有两种传入方式。
值传递: 形参类型写成结构体本身,例如 void printStudent1(Student s)。调用时直接传入结构体变量。子函数里用点号访问成员:s.name、s.age、s.score。值传递会拷贝一份新档案。在子函数里改形参的年龄,**不会**改主函数里那份实参。
地址传递: 形参写成结构体指针,例如 void printStudent2(Student *p)。调用时传入实参的地址 &stu。指针访问成员必须用箭头:p->name、p->age、p->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
- 通过率
- ?
- 上传者