C语言程序设计 实验九 结构体和共用体 答案 西北民大 电气院

实验九结构体和共用体

一,实验目的:

1,掌握结构体类型变量的定义和使用.

2,掌握结构体类型数组的概念和应用.

3,掌握共用体的概念和使用.

4,了解链表的概念,初步学会对链表进行操作.

二,实验准备:

1,复习结构体的概念和定义方法.

2,复习共用体的概念和定义方法.

3,源程序.

三,实验步骤及内容:

程序改错

typedef union { lo ng x[2];

int y[4];

char z[8];

} MYTYPE;

typedef union them;

main()

{ printf("%d",sizeof(them));

}

修改后的程序:

typedef union { lo ng x[2];

int y[4];

char z[8];

} MYTYPE;

MYTYPE them;

main()

{ printf("%d",sizeof(them));

}

程序填空

以下程序建立了一个带有头结点的单向链表,结点中的数据可由键盘输入,当输入数据为-1时,表示输入结束(链表头结点的data与不放数据,表空的条件是ph―>next==NULL).

#include ______

struct list {int data ;struct list *next ;};

_ struct list *creatlist()

{ struct list *p, *q, *ph;

int a ;

ph=(struct list *)malloc(sizeof(struct list));

p=q=ph;

printf("input an integer number,enter -1 to end :\n");

scanf("%d",&a);

while (a!=-1)

{ p=(struct list *)malloc(sizeof(struct list));

p->data=a;

q->next=p;

ph->next=p;

scanf("%d",&a);

}

p->next ="\0";

return(ph);

}

main()

{struct list *head;

head=creatlist();

}

3,有5个学生,每个学生的数据包括学号,姓名,三门课成绩,从键盘输入5个学生数据,要求打印出三门课总平均成绩,以及最高分的学生的数据(包括学号,姓名,三门课成绩,平均成绩).

要求:用一个input函数输入5个学生数据;用一个average函数求总平均分;用max函数找出最高分学生数据;总平均分和最高分的学生的数据都在主函数中输出.(习题9.5)

源程序:

#include

#define N 5

struct student

{

char num[6];

char name[8];

float score[3];

float avr;}

stu[N];

int i,j,maxi;

float sum,max,average;

void main()

{

printf("请输入学生信息:\n");

for(i=0;i<5;i++)

{printf("no.:");

scanf("%s",stu[i].num);

printf("name:");

scanf("%s",stu[i].name);

for(j=0;j<3;j++)

{printf("score %d:",j+1);

scanf("%d",&stu[i].score[j]);

}

printf("\n");

}

average=0;

max=0;

for(i=0;i<5;i++)

{

sum=0;

for(j=0;j<3;j++)

sum+=stu[i].score[j];

stu[i].avr=sum/3;

average+=stu[i].avr;

if (sum>max)

{max=sum;maxi=i;}

}

average/=N;

printf("no. name score1 score2 core3 average\n"); for(i=0;i

{printf("%5s%10s",stu[i].num,stu[i].name);

for(j=0;j<3;j++)

printf("%9.2f",stu[i].score[i]);

printf("8.2%f\n",stu[i].avr);}

printf("average=%5.2f\n",average);

printf("highest

score :student %s,%s.\n",stu[maxi].num,stu[maxi].name);

printf("his

score :%6d,%6d,%6d,average: %5.2f\n",stu[maxi].score[0], stu[maxi].score[1],stu[maxi].score[2],stu[maxi].avr);

getch();}

4,输入和运行以下程序:

unio n data

{

int i[2];

float a;

long b;

char c[4];

};

main()

{

unio n data u;

scanf("%d,%d",&u.i[0],&u.i[1]);

printf("i[0]=%d,i[1]=%d\na=%f\nb=%ld\nc[0]=%c,

c[1]=%c,c[2]=%c,c[3]=%c\n",

u.i[0],u.i[1],u.a,u.b,u.c[0],u.c[1],u.c[2],u.c[3]);

}

输入两个整数10000,20000给u.i[0]和u.i[1].分析运行结果.

运行结果:

C语言程序设计 实验九 结构体和共用体 答案 西北民大 电气院

分析:定义了共用体变量data.u,将10000,20000分别赋给u.i[0],u.i[1],分别用%d,%c,%f,输出这两个数,得到的结果

然后将scanf语句改成:scanf("%ld",&u.b);

输入60000给b.分析运行结果.

源程序:

unio n data

{

int i[2];

float a;

long b;

char c[4];

};

main()

{

unio n data u;

scanf("%ld",&u.b);

printf("i[0]=%d,i[1]=%d\na=%f\nb=%ld\nc[0]=%c,c[1]=%c,c[2]=% c,c[3]=%c\n",u.i[0],u.i[1],u.a,u.b,u.c[0],u.c[1],u.c[2],u.c[3]);

getch();

运行结果:

C语言程序设计 实验九 结构体和共用体 答案 西北民大 电气院

分析:原来的程序:结构体中的数组i被赋值10000和20000,并且也没有超过32767的范围;但其他的变量没有初始值;

改后的程序:只有b的值是被赋值的;

四,实验报告:

1,根据下列程序段回答问题:

struct data

{int i;

char ch;

float f;

}a;

uno in data

{int i;

char ch;

float f;

}b;

试问结构体变量a和共用体变量b所占用的字节数各是多少

解答:结构体变量a是七个字节,共用体变量b是七个字节

2,源程序.

3,错误原因及其修改记录.

4,实验结果记录.

5,实验体会.

相关推荐
相关主题
热门推荐