结构体和共用体 参考答案

  • 格式:doc
  • 大小:33.00 KB
  • 文档页数:8

-

. z. 实验八构造体及其应用

班级:**:**: 成绩:

一. 实验目的

1、掌握构造体数据类型的定义和使用。

2、掌握构造体数组的定义和使用。

3、掌握链表的根本概念,熟练掌握单链表的创立、插入、删除和遍历操作。

二. 使用的设备和仪器:

计算机+Windows *P +Visual C++6.0

三. 实验内容及要求

1、定义一个描述时间的构造体类型Time〔包括时、分、秒〕,然后定义一个该构造体类型的变量,按24小时制输入时间信息,然后按12小时制输出〔区分AM和PM〕。

例如,输入的时间是22:10:30;输出:PM 10:10:30。

2、定义描述学生信息〔**、**、成绩〕的构造体数组。

1〕定义输入学生信息的函数Input;

2〕定义输出学生信息的函数Output;

3〕定义按**进展查找的函数Search,假设找到,则输出该学生的信息;如果没找到,则输出"该学生不存在〞。

3、建立一个由3个学生〔包括**、**、成绩〕组成的静态链表,然后,输出该链表中各结点的数据。

4、动态建立一个学生信息〔包括**、**、成绩〕的链表,**输入-1时表示完毕,然后输出该链表中各结点的数据。

选作题:

5、在第2题的根底上修改函数Search,假设找到,则返回该学生的信息;否则,返回

一个内容为空的构造变量。

6、有N个候选人,每个选民只能投一票,要求编写一个模拟10个选民进展投票的程

序,先后输入被选人的名字,最后按照选票由高到低输出投票结果。

7、在第3题的根底上,定义一个链表查找函数,对所输入的**进展查找,如果找到,则输出该学生的信息;如果没找到,则输出"该学生不存在〞。

四. 实验步骤

1、 程序代码:

*include

struct Time -

. z. {

int h,m,s;

};

void Input(Time *pt);

void Output12(Time t);

void main()

{

Time t;

Input(&t);

Output12(t);

}

void Input(Time *pt)

{

printf("Input hour:minute:second:");

scanf("%d:%d:%d",&pt->h,&pt->m,&pt->s);

}

void Output12(Time t)

{

printf("The Time is:");

if(t.h<12)

printf("AM %d:%d:%d\n",t.h,t.m,t.s);

else

printf("PM %d:%d:%d\n",t.h-12,t.m,t.s);

}

运行结果:

2、 程序代码:

*include

*include

*define N 3

struct Student

{

char num[10];

char name[10];

double score;

};

void Input(Student *p)

{

int i;

for(i=0;i

scanf("%s%s%lf",(p+i)->num,(p+i)->name,&(p+i)->score );

}

void Output(Student *p)

{

int i; -

. z. for(i=0;i

printf("num=%s name=%s score=%lf\n",(p+i)->num,(p+i)->name,(p+i)->score );

}

void Search(Student *p,char *nm)

{

for(int i=0;i

{

if(strcmp((p+i)->num,nm)==0)

{

printf("num=%s name=%s

score=%lf\n",(p+i)->num,(p+i)->name,(p+i)->score );

break;

}

}

if(i==N)

printf("该学生不存在!\n");

}

void main()

{

Student stu[N];

printf("请输入%d个学生的信息〔**、**、成绩〕:\n",N);

Input(stu);

printf("学生的信息为:\n");

Output(stu);

char nm[10];

printf("请输入要查找的学生的**:");

scanf("%s",nm);

printf("查找结果:\n");

Search(stu,nm);

}

运行结果:

3、 程序代码:

*include

*define N 3

struct student

{

char num[10];

char name[10];

double score;

student *ne*t;

};

void main()

{

student stu1={"001","zhangsan",89},stu2={"002","lisi",99},stu3={"004","wangwu",70}; -

. z. student *head,*p;

head=&stu1;

stu1.ne*t=&stu2;

stu2.ne*t=&stu3;

stu3.ne*t=NULL;

p=head;

while(p!=NULL)

{

printf("num:%s,name:%s,socre:%.2lf\n",p->num,p->name,p->score);

p=p->ne*t;

}

}

运行结果:

4、程序代码:

*include

*include

*include

*define N 3

struct student

{

char num[10];

char name[10];

double score;

student *ne*t;

};

void main()

{

student *head,*p,*s;

head=NULL;

printf("请输入学生信息,包括**和**〔**输入-1,表示完毕〕:\n");

s=(student*)malloc(sizeof(student));

scanf("%s%s%d",s->num,s->name,&s->score);

s->ne*t=NULL;

while(strcmp(s->num,"-1")!=0)

{

if(head==NULL)

head=s;

else

p->ne*t=s;

p=s;

s=(student*)malloc(sizeof(student));

scanf("%s%s%d",s->num,s->name,&s->score);

s->ne*t=NULL;

} -

. z. p=head;

while(p!=NULL)

{

printf("%s,%s,%d\n",p->num,p->name,p->score);

p=p->ne*t;

}

free(s);

}

运行结果:

选做题:

5、 程序代码:

*include

*include

*define N 3

struct Student

{

char num[10];

char name[10];

double score;

};

void Input(Student *p)

{

int i;

for(i=0;i

scanf("%s%s%lf",(p+i)->num,(p+i)->name,&(p+i)->score );

}

void Output(Student *p)

{

int i;

for(i=0;i

printf("num=%s name=%s score=%lf\n",(p+i)->num,(p+i)->name,(p+i)->score );

}

Student Search(Student *p,char *nm)

{

Student ept_stu={",",0};

for(int i=0;i

{

if(strcmp((p+i)->num,nm)==0)

return *(p+i);

}

return ept_stu;

}

void main()

{