实验目的 | 1.掌握结构体类型的概念和说明方法 2.掌握结构体变量的定义和引用。结构体类型变量成员的使用。 3.掌握结构体数组的定义和使用方法。 4.掌握指向结构体变量的指针变量的概念和应用。 5.掌握结构变量与指向结构的指针作为函数参数实现函数的调用。 6.掌握共用体的概念和说明方法。 7.掌握共用体变量的定义和引用。共用体类型变量成员的使用 8.掌握位运算的概念和方法。 9.掌握位运算符(&,|,∧,~)的使用方法。 10.了解有关位运算的算法。 11.掌握枚举类型概念和说明方法 12.掌握枚举类型变量的定义以及枚举类型变量的使用。 | |
c 实 验 内 容 与 步 骤 实 验 内 容 与 步 骤 实 验 内 容 与 步 骤 | 1.建立一个学生的简单信息表,其中包括学号、年龄、性别及一门课的成绩。要求从键 盘输入数据,并显示出来。上机运行以下程序。 分析:一个学生信息表可以由结构体来定义,表中的内容可以通过结构体中的成员来 表示。体会结构体成员的点运算符引用方法。 #include"stdio.h" void main() { struct st { int num; int age; char sex; float score; }; struct st info; printf("input number:"); scanf("%d",&info.num); printf("input age:"); scanf("%d",&info.age); getchar(); printf("input sex:"); scanf("%c",&info.sex); printf("input score:"); scanf("%f",&info.score); printf("number=%d\\n",info.num); printf("age=%d\\n",info.age); printf("sex=%c\\n",info.sex); printf("score=%f\\n",info.score); } 2.建立 5 名学生的信息表,每个学生的数据包括学号、姓名及一门课的成绩。要求从键盘 输入这 5 名学生的信息,并按照每一行显示一名学生信息的形式将 5 名学生的信息显示出 来。上机运行以下程序。 分析:每个学生的数据学号、姓名及一门课的成绩用结构体表示,5 名学生的信息表 用结构体数组表示,体会结构体数组元素的引用方法。 #include"stdio.h" #define N 5 struct stud { int num; char name [20]; float score; }; struct stud s[N]; void main() { int i; for (i=0;i printf("input number:"); scanf("%d",&s[i].num); printf("input name:"); scanf("%s",s[i].name); printf("input score:"); scanf("%f",&s[i].score); } for (i=0;i printf("%d ",s[i].num); printf("%s ",s[i].name); printf("%f\\n",s[i].score); } } 3.显示某人工资信息的程序如下,分析显示结果。上机运行以下程序。 分析:某人工资信息可以由结构体来定义,表中的内容可以通过结构体中的成员来表 示。体会结构体成员的指针运算符引用方法。 #include"stdio.h" #include "string.h" void main() { struct staff { char name[20]; char department[20]; int salary; }; struct staff w1,*p; p=&w1; strcpy(w1.name,"LiLi"); /*个人信息*/ strcpy((*p).department,"part1"); p>salary=1000; printf("%s %s %d\\n",w1.name,w1.department,w1.salary); printf("%s %s %d\\n",(*p).name,(*p).department,(*p).salary); printf("%s %s %d\\n",p>name,p>department,p>salary); } 4.编写 input()和 output()函数,输入、输出 2 个学生的数据记录。上机运行以下程序。 分析:体会结构化程序设计思想的应用。 #include "stdio.h" #define N 2 struct student { char num[6]; char name[8]; int score[4]; }stu[N]; void input() { int i,j; for(i=0;i printf("\\n please input %d of %d\\n",i+1,N); printf("num: "); 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"); } } void print(struct student stu[N]) { int i,j; printf("\\nNo. Name Sco1 Sco2 Sco3\\n"); for(i=0;i printf("%6s%10s",stu[i].num,stu[i].name); for(j=0;j<3;j++) printf("%8d",stu[i].score[j]); printf("\\n"); } } void main() { input(); print(stu); } 5.利用结构体类型,编程计算一名同学 5 门课的平均分。上机运行以下程序。 分析:计算一名同学 5 门课的平均分,是对结构体成员变量的算术运算。 #include "stdio.h" void main() { struct stuscore { char name[20]; float score[5]; float average; }; struct stuscore x={"WangWei", 90.5,85, 70, 90, 98.5}; int i; float sum=0; for(i=0; i<5; i++) sum+=x.score[i]; x.average=sum/5; printf("The average score of %s is %4.1f\\n", x.name,x.average); } 6.用结构体型数组初始化建立一工资登记表。然后键入其中一人的姓名, 查询其工资情况。 上机运行以下程序。 分析:查询工资情况,是对结构体成员的查询操作。 #include "stdio.h" #include "string.h" void main() { struct staff { char name[20]; char department[20]; int salary; int cost; } worker[3]={{"XuGuo", "part1",800,200}, {"WuXia int i; char xname[20]; printf("\\nInput the worker\\'s name: "); scanf("%s", xname); for(i=0; i<3; i++) if(strcmp(xname,worker[i].name)==0) { printf("\\n salary:%6d", worker[i].salary); printf("\\n cost:%6d", worker[i].cost); printf("\\n payed:%6d\\n",worker[i].salaryworker[i].cost); } } 7.用子函数求出 worker 数组中每个工人的实发工资。上机运行以下程序。 分析:求出每个工人的实发工资,是对结构体成员变量的算术运算。 #include"stdio.h" #define NUM 3 struct staff { char name[20]; char department[20]; int salary; int cost; int realsum; }; void main() { void getreal(struct staff *p,int n); struct staff worker[NUM],*pm; int i; printf("Input %d worker\\'s name department salary cost:\\n",NUM); for(i=0,pm=worker; i pm=worker; getreal(pm,NUM); for(pm=worker; pm yuan\\n",pm>name,pm>department,pm>realsum); } void getreal(struct staff *p,int n) { int i; for(i=0; i } 8.输入并运行下面程序,观察结果,分析联合变量的存储特点。上机运行以下程序。 #include"stdio.h" void main() { union { int i[2]; long k; char c[4]; }t,*s=&t; s>i[0]=0x39; /* 按照整型成员的类型赋值 */ s>i[1]=0x38; printf("%x\\n ",s>k); /* 按照长整型成员的类型使用储存内容 */ printf("%c\\n ",s>c[0]); /* 按照字符型成员的类型使用储存内容 */ } 9.今天星期三,再过 10 天是星期几?上机运行以下程序。 分析:枚举类型变量与整型变量是两种不同数据类型,注意它们之间的数据类型转换。 #include"stdio.h" void main() { enum weekday{sun,mon,tue,wed,thu,fri,sat}; char name[7][4]={"Sun enum weekday day; day=(enum weekday)((tue+10)%7); printf("\\nthe day is:%s\\n", name[((int)(day))]); } |