Untitled Document

三、简答与编程题
1． 结构类型是将一组数据类型定义为一个新的数据类型，常常有特殊的含义，用于在程序中表示和处理类似于学生纪录，日期等复杂的数据。因此，结构类型数据与一般的基本数据类型相比，它更加能够满足程序对处理复杂数据的需要。当程序中需要对一组不同类型的数据作为整体进行处理的时候，就要用到结构类型了。
2． 结构类型在使用之前必须先进行定义，所以，定义结构变量必须出现在结构定义之后。可以在定义结构变量的时候初始化，也可以在后面的程序中通过整体赋值或对成员赋值进行初始化。对结构变量初始化的时候必须要符合结构类型定义的成员顺序及其类型。另外，如果一个结构类型内又嵌套了另一个结构类型，那么在初始化的时候，要依次对内部的结构变量各成员进行赋值。
3． 链表是一种重要的数据结构，是一种动态分配内存的结构。相对来说，用数组不能实现动态存储。当用数组来进行数据存储时，必须事先确定固定的长度；而链表是一组结点的序列，每个结点是由系统存储到不同的地址空间的。它们之间的连接是由指针实现的。插入和删除一个结点是非常容易的，而且链表比数组能表示更复杂的数据类型。
插入和删除一个结点的基本方法就是，首先对链表进行遍历，找到需要插入的地方或需要删除的结点，然后改变相邻结点指针的连接关系就可以了。
4． 该程序实现了一个时钟的显示。首先定义了一个结构clock，包括三个整形成员hour,minute,second来表示时间，并且定义了clock型的变量aClock。在主程序中，首先对aClock各成员赋值，然后循环10000次，每次循环调用一次子函数updata()和display()，用来计时和显示时间。
程序的输出结果是：
0：0：1
0：0：2
0：0：3
0：0：4
.
.
.
0：0：59
0：1：0
0：1：1
.
.
.
0：59：59
1：0：0
.
.
.
2：46：40
5．答：
#include <iostream.h>
struct data
{
int maths;
int days;
}
void day(data dd)
{
int dayth;
switch(dd.maths)
{
case 1:
dayth=31;
break;
case 2:
dayth=31+28;
break;
case 3:
dayth=31+28+31;
break;
case 4:
dayth=31+28+31+30;
break;
case 5:
dayth=31+28+31+30+31;
break;
case 6:
dayth=31+28+31+30+31+30;
break;
case 7:
dayth=31+28+31+30+31+30+31;
break;
case 8:
dayth=31+28+31+30+31+30+31+31;
break;
case 9:
dayth=31+28+31+30+31+30+31+31+30;
break;
case 10:
dayth=31+28+31+30+31+30+31+31+30+31;
break;
case 11:
dayth=31+28+31+30+31+30+31+31+30+31+30;
break;
case 12:
dayth=31+28+31+30+31+30+31+31+30+31+30+31;
break;
}
dayth=dayth+dd.days;
cout<<"the day of the date is:"<<dayth;
}
int main()
{
data d;
cout<<"input the maths:"<<endl;
cin<<d.maths;
cout<<"input the date:"<<endl;
cin<<d.days;
day(d);
return 0;
}

6. 分析：可以把学生定义为结构类型，包括学号，姓名和成绩等成员。
程序为：
#include <stdio.h>
int main( )
{
struct student
{
int num;
char name[20];
float score;
};
struct student stu[4];
struct student *p;
int i,temp=0;
float max;
for(i=0;i<4;i++)
scanf("%d%s%f",&stu[i].num,&stu[i].name,&stu[i].score);
for(max=stu[0].score,i=1;i<4;i++)
if (stu[i].score>max)
{ max=stu[i].score; temp=i; }
p=stu+temp;
printf("\n The maximum score:\n");
printf("No.:%d\n name:%s\n score:%4.1f\n",p->num, p->name, p->score);
return 0;
}