-
一、实验目的
1、掌握结构体类型、共用体类型和结构体类型变量的定义方法;
2、掌握结构体类型变量成员赋值和引用方法;
3、学会使用结构体数组;
4、掌握共用体和枚举类型数据的使用。
-
二、实验设备及器材
计算机
-
三、实验内容和要求
1、结构体类型的定义;
2、结构体变量的定义、赋值与使用;
3、结构体数组与结构体指针的定义与使用;
4、共用体类型的定义,共用体变量的定义与使用;
5、枚举类型的定义与使用;
6、自定义类型的使用。
-
四、实验步骤
一、建立以自己的学号命名的文件夹。
二、上机验证与分析题
1、写出程序ex11_1.c运行的结果。
/*文件名ex11_1.c*/
#include <stdio.h>
struct HAR
{
int x,y;
struct HAR *p;
}h[2];
int main()
{
h[0].x=1;
h[0].y=2;
h[1].x=3;
h[1].y=4;
h[0].p=&h[1];
h[1].p=h;
printf("%d %d\n",(h[0].p)->x,(h[1].p)->y);
return 0;
}
答:3 2.
2、写出程序ex11_2.c运行的结果。
/*文件名ex11_2.c*/
#include "stdio.h"
void main()
{
int z;
union data
{
int x;
int y;
}a;
a.x=3;
a.y=6;
z=a.x+a.y;
printf("z=%d\n",z);
}
答:z=12
3、阅读程序ex11_3.c,预测结果并上机验证。
/*文件名ex11_3.c*/
#include <stdio.h>
void main()
{
union data
{
int i;
char ch;
float f;
}a,b,c;
a.i=9;
b=a;
c=b;
printf("b.i=%d,c.i=%d\n",b.i,c.i);
}
答:b.i=9,c.i=9。
三、编程题:
1、试用结构体定义一个工厂职工的信息表,包含如下成员:工号、姓名、性别、年龄、参加工作日期、联系电话。源程序以ex11_4.c命名,保存在自己的文件夹内。
答:
#include<stdio.h>
typedef struct date
{
int year;
int month;
int day;
}DATE;
typedef struct people
{
long peopleID;
char peopleName[10];
char peopleSex;
int peopleAge;
DATE enterDate;
char peopleCall;
}PEOPLE;
int main()
{
PEOPLE stu1;
int i;
printf("输入数据:\n");
scanf("%ld",&stu1.peopleID);
scanf("%s",stu1.peopleName);
scanf(" %c",&stu1.peopleSex);
scanf("%d",&stu1.peopleAge);
scanf("%d",&stu1.enterDate.year);
scanf("%d",&stu1.enterDate.month);
scanf("%d",&stu1.enterDate.day);
scanf("%s",&stu1.peopleCall);
printf("工号\t\t名字\t性别\t年龄\t参加工作日期\t联系电话\n");
printf("%10d%10s\t%3c\t%2d\t%4d/%02d/%02d\t%10s\n",
stu1.peopleID,stu1.peopleName,stu1.peopleSex,stu1.peopleAge,
stu1.enterDate.year,stu1.enterDate.month,stu1.enterDate.day,
stu1.peopleCall);
return 0;
}
2、5位同学《程序设计基础》课程考核成绩如下表所示:
班级 (char banji) | 学号 (int num) | 姓名 (char name) | 程序设计基础课程考核成绩 (float score) |
本网络102班 | 10002 | 张小兵 | 89 |
本软件103班 | 20001 | 李莉嘉 | 54 |
本软件106班 | 30008 | 王明星 | 68 |
本网络103班 | 40006 | 刘 伟 | 92 |
本网络106班 | 50007 | 吴 菲 | 49 |
试编程求这5位同学该门课程的平均成绩,并输出成绩不及格的同学的班级、学号、姓名与成绩等信息。源程序以ex11_5.c命名,保存在自己的文件夹内。
答:
:#include<stdio.h>
struct student
{
char banji[20];
char num[8];
char name[20];
float score;
}stu[5]={{"本网络102班","10002","张小兵",89},
{"本网络103班","20001","李莉嘉",54},
{"本网络106班","30008","王明星",68},
{"本网络103班","40006","刘 伟",92},
{"本网络106班","50007","吴 菲",49}
};
main()
{
int i;
float ave, sum=0;
for(i = 0; i < 5; i++)
{
sum=sum+stu[i].score;
if(stu[i].score<60)
{
printf("成绩不及格的同学:%s\t%s\t%s\t%f\n",stu[i].banji,
stu[i].num,
stu[i].name,
stu[i].score);
}
}
ave=sum/5;
printf("平均成绩为:%.2f",ave);
}
3、5位职工的月收入如下表所示:
部门 (char department) | 工号 (char num) | 姓名 (char name) | 月收入 (float salary) |
技术科 | 010002 | 张援朝 | 6800 |
生产科 | 020006 | 李明瑞 | 2600 |
检验科 | 030018 | 王国庆 | 4800 |
后勤部 | 040026 | 刘小兵 | 3700 |
经营科 | 050068 | 吴 伟 | 1900 |
试编程求这5位职工的平均月收入,并输出月收入小于3000元的职工的部门、工号、姓名与月收入等信息。源程序以ex11_6.c命名,保存在自己的文件夹内。
答:
#include<stdio.h>
struct worker
{
char department[20];
char num[8];
char name[20];
float salary;
}wor[5]={{"技术科","010002","张援朝",6800},
{"生产科","020006","李明瑞",2600},
{"检验科","030018","王国庆",4800},
{"后勤科","040026","刘小兵",3700},
{"经营科","050068","吴 伟",1900}
};
main()
{
int i;
float ave, sum=0;
for(i = 0; i < 5; i++)
{
sum+=wor[i].salary;
if(wor[i].salary<3000)
{
printf(“月收入低于3000元的员工:%s\t%s\t%s\t%f\n",wor[i].department,
wor[i].num,
wor[i].name,
wor[i].salary);
}
}
ave=sum/5;
printf("平均月收入为:%.2f",ave);
}
-
五、实验小结
- 通过本次实验我掌握了结构体类型、共用体类型和结构体类型变量的定义方法;结构体类型变量成员赋值和引用方法;学会了如何使用结构体数组;以及共用体和枚举类型数据的使用。