上机实训 结构体.docx

上传人:b****3 文档编号:4971934 上传时间:2022-12-12 格式:DOCX 页数:13 大小:23.61KB
下载 相关 举报
上机实训 结构体.docx_第1页
第1页 / 共13页
上机实训 结构体.docx_第2页
第2页 / 共13页
上机实训 结构体.docx_第3页
第3页 / 共13页
上机实训 结构体.docx_第4页
第4页 / 共13页
上机实训 结构体.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

上机实训 结构体.docx

《上机实训 结构体.docx》由会员分享,可在线阅读,更多相关《上机实训 结构体.docx(13页珍藏版)》请在冰豆网上搜索。

上机实训 结构体.docx

上机实训结构体

实训七结构体和共用体

一、实验目的:

1.掌握结构体类型数据的定义和引用

2.能够用typedef说明一个新的类型

3.掌握函数之间结构体变量的数据传递

4.能够求出结构体数组中的最大值,平均值,及结构体数组中数据的排序

5.能够用结构体构成链表并且能够引用出链表中的数据

二、实验内容

1.结构体的定义和引用,启动VisualC++,输入以下程序

#include"stdio.h"

structstudent

{

longintnum;

charname[20];

charsex;

charaddr[20];

};

main()

{

structstudenta={89031,"lilin",'m',"123beijingroad"};

printf("no:

%ld\nname:

%s\nsex:

%c\naddr:

%s\n",a.num,a.name,a.sex,a.addr);

}

 

思考:

如果定义成结构体指针或结构体者数组的话,那么他们的成员又该如何引用?

如果是结构体指针程序变为:

main{

structstudentb={89031,"lilin",'m',"123beijingroad"},*a;

a=&b;

printf("no:

%ld\nname:

%s\nsex:

%c\naddr:

%s\n",a->num,a->name,a->sex,a->addr);

}

如果是结构体数组程序变为:

main()

{

structstudenta[2]={89031,"lilin",'m',"123beijingroad",89032,"lily",'f',"123shanghairoad"};

printf("no:

%ld\nname:

%s\nsex:

%c\naddr:

%s\n",a[0].num,a[1].name,a[0].sex,a[1].addr);

}

2.用typedef说明一个新的类型。

启动VisualC++,输入以下程序

#include"stdio.h"

typedefstruct

{

inta;

charb;

}ST;

main()

{

STy;

y.a=0;y.b=’A’;

printf(“y.a=%dy.b=%c”,y.a,y.b);

}

 

3.函数之间结构体变量的数据传递.

#include"stdio.h"

struct A

{ int a;char b[10];double c;};

struct A f(struct A t);

main()

{ struct A a={1001,"ZhangDa",1098.0};

  a=f(a); printf("%d,%s,%6.1f\n",a.a,a.b,a.c);

}

struct A f(struct A t)

{ t.a=1002;strcpy(t.b,"ChangRong");t.c=1202.0;return t;}

 

思考:

如果把函数f(structA)中的returnt;去掉,输出的结果会是什么?

4.求结构体数组中的最大值。

学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:

把分数最高的学生数据放在b所指的数组中,注意:

分数最高的学生可能不止一个,函数返回分数最高的学生的人数。

请把下面的空填完整。

 

#include

#defineN16

typedefstruct

{charnum[10];

ints;

}STREC;

intfun(STREC*a,STREC*b)

{

inti,j=0,max=a[0].s;

for(i=0;i

if(max<)

max=a[i].s;

for(i=0;i

if(max==a[i].s)b[j++]=a[i];

return;

}

main()

{STRECs[N]={{"GA05",85},{"GA03",76},{"GA02",69},{"GA04",85},

{"GA01",91},{"GA07",72},{"GA08",64},{"GA06",87},

{"GA015",85},{"GA013",91},{"GA012",64},{"GA014",91},

{"GA011",77},{"GA017",64},{"GA018",64},{"GA016",72}};

STRECh[N];

inti,n;FILE*out;

n=fun(s,h);

printf("The%dhighestscore:

\n",n);

for(i=0;i

printf("%s%4d\n",h[i].num,h[i].s);

printf("\n");

out=fopen("c:

\\test\\out.dat","w");

fprintf(out,"%d\n",n);

for(i=0;i

fprintf(out,"%4d\n",h[i].s);

fclose(out);

}

 

参考答案:

a[i].sj

5.以下程序把三个NODETYPE型的变量链接成一个简单的链表,并在while循环中输出链表结点数据域中的数据,请填空

#include

structnode

{intdata;structnode*next;};

typedefstructnodeNODETYPE;

main()

{NODETYPEa,b,c,*h,*p;

a.data=10;b.data=20;c.data=30;h=&a;

b.next=&b;b.next=&c;c.next=’\0’;

p=h;

while(p){printf(“%d”,p->data);;}

}

}

 

参考答案:

p=p->next;

三、上机作业

1、学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:

按分数的高低排列学生的记录,高分在前。

请把以下程序补充完整。

#include

#defineN16

typedefstruct

{charnum[10];

ints;

}STREC;

voidfun(STRECa[])

{

inti,j;

STRECt;

for(i=0;i

for(j=1;j

if()

{

要填多行

}

}

 

 

main()

{

STRECs[N]={{"GA005",85},{"GA003",76},{"GA002",69},{"GA004",85},

{"GA001",91},{"GA007",72},{"GA008",64},{"GA006",87},

{"GA015",85},{"GA013",91},{"GA012",64},{"GA014",91},

{"GA011",66},{"GA017",64},{"GA018",64},{"GA016",72}};

inti;FILE*out;

fun(s);

printf("Thedataaftersorted:

\n");

for(i=0;i

{if((i)%4==0)printf("\n");

printf("%s%4d",s[i].num,s[i].s);

}

printf("\n");

out=fopen("c:

\\test\\out.dat","w");

for(i=0;i

{if((i)%4==0&&i)fprintf(out,"\n");

fprintf(out,"%4d",s[i].s);

}

fprintf(out,"\n");

fclose(out);

}

 

参考答案:

a[i].s

2.请输出以下程序的结果:

typedef struct

{ int num;double s;} REC;

void fun1(REC x)

{ x.num=23;x.s=88.5; }

main()

{ REC a={16,90.0};

  fun1(a);

  printf("%d\n",a.num);

}

 

参考答案:

16

 

3填空,本程序的功能是,输出结构体指针变量a的值。

#include"stdio.h"

structstudent

{

longintnum;

charname[20];

charsex;

charaddr[20];

};

main{

structstudentb={89031,"lilin",'m',"123beijingroad"},*a;

a=&b;

printf("no:

%ld\nname:

%s\nsex:

%c\naddr:

%s\n",);

}

 

 

参考答案:

a->num,a->name,a->sex,a->addr

4.填空题:

学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:

把分数最低的学生数据放在h所指的数组中,注意:

分数最低的学生可能不止一个,函数返回分数最低的学生的人数。

 

#include

#defineN16

typedefstruct

{charnum[10];

ints;

}STREC;

intfun(STREC*a,STREC*b,)

{

inti,k=0,min;

min=a[0].s;

for(i=0;i

min=a[i].s;

for(i=0;i

if(a[i].s=min)

b[k++]=a[i];

return;

}

main()

{

STRECs[N]={{"GA005",85},{"GA003",76},{"GA002",69},{"GA004",85},

{"GA001",91},{"GA007",72},{"GA008",64},{"GA006",87},

{"GA015",85},{"GA013",91},{"GA012",64},{"GA014",91},

{"GA011",66},{"GA017",64},{"GA018",64},{"GA016",72}};

STRECh[N];

Inti,n;

FILE*out;

n=fun(s,h);

printf("The%dlowestscore:

\n",n);

for(i=0;i

printf(“%s%4d\n”,h[i].num,h[i].s);

printf("\n");

out=fopen("out14.dat","w");

fprintf(out,"%d\n",n);

for(i=0;i

fprintf(out,"%4d",h[i].s);

fclose(out);

}

 

 

 

 

参考答案:

if(a[i].s

 

上机作业二:

真题再现

1.(2010-03-36)设有定义

structcomplex

{intreal,unreal;}datal={1,8},data2;

则以下赋值语句中的错误的是B

A)data2=data1;B)data2=(2,6);

C)data2.real1=data1.real;D)data2.real=data1.unreal;

2.(2010-03-37)有以下程序

#include

#include

structA

{inta;charb[10];doublec;};

voidf(structAt);

main()

{structAa={1001,”ZhangDa”,1098.0};

f(a);printf(”%d,%s,%6.1f\n”,a.a,a.b,a.c);

}

voidf(structAt)

{t.a=1002;strcpy(t.b,”ChangRong”);t.c=1202.0;}

程序运行后的输出结果是A

A)1001,ZhangDa,1098.0B)1002,ChangRong,1202.0

C)1001,ChangRong,1098.0D)1002,ZhangDa,1202.0

3.(2010-03-38)有以下定义和语句

structworkers

{intnum;charname[20];charc;

srruct

{intday;intmonth;intyear;}s;

};

structworkersw,*pw;

pw=&w

能给w中year成员赋1980的语句是D

A)*pw.year=1980;B)w.year=1980;

C)pw->year=1980;D)w.s.year=1980;

4.(2009-03-37)有以下程序

#include 

struct ord

{ int x,y;} dt[2]={1,2,3,4};

main()

{ struct ord *p=dt;

  printf (“%d,”,++p->x); printf(“%d\n”,++p->y);

}

程序的运行结果是B

A)1,2     B)2,3      C)3,4    D)4,1

5.(2009-03-36)有以下程序

#include 

#define PT 3.5;

#define S(x) PT*x*x;

mian()

{ int a=1, b=2; printf(“%4.1f\n”,S(a+b));}

程序运行后输出的结果是D

A)14.0     B)31.5    C)7.5   D)程序有错无输出结果

6.(2010-03-35)以下程序

#include

#defineSUB(a)(a)-(a)

main()

{inta=2,b=3,c=5,d;

d=SUB(a+b)*c;

printf(”%d\n”,d);

}

程序运行后的结果是C

A)0B)-12C)-20D)10

7.(2009-09-36)下面结构体的定义语句中,错误的是B

A)structord{intx;inty;intz;};structorda;

B)structord{intx;inty;intz;}structorda;

C)structord{intx;inty;intz;}a;

D)struct{intx;inty;intz;}a;

8.(2009-09-38)有以下程序

#include

#include

structA

{inta;charb[10];doublec;};

structAf(structAt);

main()

{structAa={1001,”ZhangDa”,1098.0};

a=f(a);jprintf(“%d,%s,%6.1f\n”,a.a,a.b,a.c);

}

structAf(structAt)

(t.a=1002;strcpy(t.b,”ChangRong”);t.c=1202.0;returnt;)

程序运行后的输出结果是D

A)1001,ZhangDa,1098.0

B)1001,ZhangDa,1202.0

C)1001,ChangRong,1098.0

D)1001,ChangRong,1202.0

9.(2009-09-12填)(12)设有定义:

structperson

{intID;charname[12];}p;

请将scanf(“%d”,【12】);语句补充完整,使其能够为结构体变量p的成员ID正确读入数据。

答案:

&p.ID

10.(2009-09-14填)有以下程序

#include

typedefstruct

{intnum;doubles}REC;

voidfun1(RECx){x.num=23;x.s=88.5;}

main()

{RECa={16,90.0};

fun1(a);

printf(“%d\n”,a.num);

}

程序运行后的输出结果是【14】16

11.(2009-09-35)有以下程序

#include

#definef(x)x*x*x

main()

{inta=3,s,t;

s=f(a+1);t=f((a+1));

printf(“%d,%d\n’,s,t);

}

程序运行后的输出结果是A

A)10,64

B)10,10

C)64,10

D)64,64

12.(2009-04-14填)下列程序的运行结果为【14】

#include 

#include 

struct A

{int a;char b[10];double  c;};

void  f (struct  A   *t);

main()

{struct A a=(1001,”ZhangDa”,1098,0);

f(&a);printf(“&d,&s,&6,if\n”,a.a,a.b,a.c);

}

void f(struct  A  *t)

{strcpy(t->b,”ChangRong”);   }

答案:

1001,ChangRong,1098.0

13.(2009-04-15填)以下程序把三个NODETYPE型的变量链接成一个简单的链表,并在while循环中输出链表结点数据域中的数据,请填空

#include 

struct node

{int data; struct node *next;};

typedef struct node NODETYPE;

main()

{NODETYPE a,b,c,*h,*p;

a. data=10;b.data=20;c.data=30;h=&a;

b. next=&b;b.next=&c;c.next=’\0’;

p=h;

while(p){printf(“&d”,p->data);【15】;}

}

答案:

p=p->next

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 销售营销

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1