第2题
第4题
实验十二 C程序的结构体 一、实验目的 1. 掌握结构体的概念和特点。 2. 熟练定义结构体数据类型,掌握结构体变量的定义及使用方法。 3. 了解结构体数组的特点,能使用结构体数组解决简单问题。 4. 掌握结构体指针的特点,能使用结构体指针作函数的参数。 二、实验内容及实验步骤 1. 用结构体类型实现“日期问题”。日期问题:已知一个日期(包括年、月、日),编写程序,计算这一天是这一年的第几天。 参考程序 /* 用结构体类型实现的日期问题程序 */ #include "stdio.h" struct date /* 定义结构体数据类型 */ { int year; int month; int day; }; main() { struct date d; int sum=0; printf("请输入日期(年、月、日之间用空格分隔):\n"); scanf("%d%d%d",&d.year,&d.month,&d.day); switch(d.month) { case 1:sum=0;break; case 2:sum=31;break; case 3:sum=31+28;break; case 4:sum=31+28+31;break; case 5:sum=31+28+31+30;break; case 6:sum=31+28+31+30+31;break; case 7:sum=31+28+31+30+31+30;break; case 8:sum=31+28+31+30+31+30+31;break; case 9:sum=31+28+31+30+31+30+31+31;break; case 10:sum=31+28+31+30+31+30+31+31+30;break; case 11:sum=31+28+31+30+31+30+31+31+30+31;break; case 12:sum=31+28+31+30+31+30+31+31+30+31+30;break; } sum+=d.day; /* 天数累加 */ if(d.month>2) /* 闰年处理 */ if(d.year%400==0||d.year%100!=0&&d.year%4==0) sum+=1; printf("Total: %d\n",sum); } 程序调试: ① 运行程序,输入一个合法日期数据,察看并分析程序结果。 ② 运行程序,输入一个月份非法的日期数据,察看并分析程序结果。 ③ 运行程序,输入一个日子非法的日期数据,察看并分析程序结果。 ④ 完善程序,使得在任何情况下,都能输出一个合理的结果。 ⑤ 用结构体指针改写上面的程序。 2. 学生成绩问题。有10个学生,每个学生的数据包括学号、姓名、3门课的成绩。从键盘输入10个学生数据,要求打印出每门课的总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课的成绩、平均分数)。 参考程序 /* 学生成绩问题程序 */ #include "stdio.h" #define N 10 struct student /* 定义结构体数据类型 */ { char num[5]; /* 学号(不超过4位) */ char name[10]; /* 姓名(不超过9位) */ int score1; /* 成绩1 */ int score2; /* 成绩2 */ int score3; /* 成绩3 */ }; main() { struct student stu[N]; /* 定义结构体数组 */ int max=0,sum1=0,sum2=0,sum3=0; int i,k=0,total,ave1,ave2,ave3,average; for(i=0;i<n;i++) * 输入学生数据,并进行成绩统计 { printf("no.%d: \n",i+1); printf("enter num:"); gets(stu[i].num); name:"); gets(stu[i].name); score1,score2,score3:"); scanf("%d,%d,%d",&stu[i].score1,&stu[i].score2, &stu[i].score3); getchar(); total="stu[i].score1+stu[i].score2+stu[i].score3;" sum1+="stu[i].score1;" sum2+="stu[i].score2;" sum3+="stu[i].score3;" if(total>max) { max=total; k=i; } /* 第k个结构体元素为最高分学生数据 */ } ave1=sum1/N; ave2=sum2/N; ave3=sum3/N; average=(stu[k].score1+stu[k].score2+stu[k].score3)/3; printf("The average score of this class are:\n"); printf("score1=%d, score2=%d, score3=%d\n",ave1,ave2,ave3); printf("The student of maxscore is:\n"); printf("num:%s,name:%s,score1:%d,score2:%d,score3:%d,average:%d\n", stu[k].num,stu[k].name,stu[k].score1,stu[k].score2,stu[k].score3,average); } 程序调试: 先用三个学生的数据调试程序(将程序中符号常量N定义为3): ① 运行程序,输入三个学生的数据:学号不超过4字符,以回车键结束;姓名不超过9字符,以回车键结束;成绩数据之间用逗号分隔,以回车键结束。察看并分析程序结果。 ② 运行程序,输入的学号或姓名信息超过规定长度,察看并分析程序结果。用三个学生的数据调试通过后,再用10个学生数据进行测试。 三、实验报告要求 写明: 1. 实验目的 2. 实验内容与步骤 3. 编写的程序(题目,经调试、运行后正确的程序) 4. 思考题的解决方法。 5. 总结讨论本次实验的结果和收获。
第7题
A、各成员所需内存空间的总和
B、各成员中占用内存最大者所需的内存空间
C、结构体中第一个成员所占用的内存空间
D、结构体中最后一个成员所占用的内存空间
第10题
程序功能:采用面向对象程序设计方法,编写C++程序,模拟CPU按地址对主存单元进行读写操作的过程。 用户能够进行的操作:(1)对主存指定单元的写入操作;(2)对主存指定单元的读出操作;(3)在成批显示主存所有单元的数据。 模块结构: computer.h 用于声明所有的类型、类和接口 computer.cpp 用于定义函数体内部代码 main.h 用于测试代码的正确性 公有数据类型: addressword int类型 dataword char类型 常数定义: MEMORYSIZE ,值为256 类结构: 1、 Computer类,公有类,外部可以访问。 (1) 私有数据成员:一个Cpu 类的实例,一个Memory类的实例。 (2) 公有函数成员: void writeMemory(addressword,dataword),能够实现将dataword参数数据写入由addressword参数指定的内存单元的操作; dataword readMemory(address) ,能够实现对主存指定单元的读出操作; displayMemoryAll() ,能够实现显示主存所有内存单元的内容的操作。 2、 Cpu类,为Computer类的内部类,私有类,除Computer类以外,其他类不能访问,外部不能访问。 (1) 私有数据成员:AR,addressword类型,表示地址寄存器;DR,dataword类型,表示数据缓冲寄存器。 (2) 公有函数成员:setAR() 、getAR()、setDR()、getDR(),自行设计所需的参数和返回值及其类型。 3、 Memory类,为Computer类的内部类,私有类,除Computer类以外,其他类不能访问,外部不能访问。 (1) 私有数据成员:memoryBody[MEMORYSIZE],char类型,每个数组元素代表一个内存单元,元素下标即内存单元地址,按字节编址。 (3) 公有函数成员:inputMemeory()、outputMemory(),修改或输出指定内存单元的值,自行设计所需的参数和返回值及其类型。 注意:内部类中,即使公有成员,也只能在其外部类中访问,用户不能访问。 要求: 程序设计应能模拟CPU访问存储器的过程。如: 写内存的操作应该包含如下过程:(step1)修改数据寄存器DR,(step2)设地址寄存器AR,(step3)将数据寄存器DR中的数据写入指定内存单元。 读内存的操作应该包含如下过程:(step1)设地址寄存器AR,(step2)将指定内存单元的内容送入数据寄存器DR。
为了保护您的账号安全,请在“上学吧”公众号进行验证,点击“官网服务”-“账号验证”后输入验证码“”完成验证,验证成功后方可继续查看答案!