实验10 结构体与公用体
1.实验目的、要求
利扎曲普坦
(2)掌握结构体类型数组的概念和使用。
(3)掌握公用体的概念与使用。
2.实验内容
(1)输入程序并运行,观察运行结果
#include “stdio.h”
int main( )
{ struct cmplx
{ int x;
int y;
} cnum[2]={1 , 3 , 2 , 7};
printf(“%d\n”, cnum[0].y / cnum[0].x * cnum[1].x );
return(0); }
运行此程序:按F2保存源程序,按F9完成一次编译连接,无提示错误,按任意键返回源程序行,按ctrl+F9运行,按alt+F5看结果,结果显示:6
(2)输入程序并运行,观察运行结果
union ks
{ int a;
int b;
};
union ks s[4];
union ks *p;
#include “stdio.h”
int main( )
{ int n=1, i;
printf(西北植物学报“\n”);
for(i=0;i<4;i++)
{ s[i].a=n;
s[i].b=s[i].a+1;
n=n+2;
}
p=&s[0];
printf(“%d,”,p->a);
printf(“%d” ,++ p->a);
return(0); }
运行此程序:按F2保存源程序,按F9完成一次编译连接,无提示错误,按ctrl+F9运行,按任意键返回源程序行,按alt+F5看结果,结果显示:23
(3)编写程序
有10个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入10个,要求打印出3门课总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课成绩、平均分数)。要求用input 函数输入10个;用average函数求总平均分;用max函数出最高分的;总平均分和最高分学生的数据都在主函数中输出。
#include"stdio.h"
struct student
{char num[6];
char name[8];
int score[4];
float avr;
}stu[10];
main()
{int i,j,max,maxi,sum;
float average;
for(i=0;i<10;i++)
{printf("number");
scanf("%s",stu[i].num);
printf("name");
scanf("%s",stu[i].name);
for(j=0;j<3;j++)
{printf("\nscore\n");
scanf("%d",&stu[i].score[j]); } }
average=0;
max=0;
maxi=0;
for(i=0;i<10;i++)
{sum=0;
for(j=0;j<3;j++)
sum+=stu[i].score[j];
stu[i].avr=sum/3.0;
average+=stu[i].avr;
if(sum>max)
{max=sum;
maxi=i; }}
dsp管理器 average/=5;
printf("number name score1 score2 score3 average\n");
for(i=0;i<10;i++)
{printf("%8s%10s",stu[i].num,stu[i].name);
for(j=0;j<3;j++)
printf("%7d",stu[i].score[j]);
printf("%6.2f\n",stu[i].avr); }
printf("average=%5.2f\n",average);
printf("The best student is %s,sum=%d\n",stu[maxi].name,max);
}
三星e568运行此程序:按F2保存源程序,按F9完成一次编译连接,无提示错误,按ctrl+F9运行,按要求输入十个学生的数据,按任意键返回源程序行,按alt+F5看结果,结果显示:
number name score1 score2 score3 average
01 san 76 87 79 80.67
02 tian 65 75 86 75.33
03 yuan 98 68 78 81.33
04 ping 97 86 78 87.00
05 shuo 65 74 82 73.67
06 ying 90 80 68 79.33
07 xiao 87 80 58 75.00
08 hu 64 98 60 74.00
09 xing 65 82 90 79.00
10 xu 60 98 76 78.00
average=156.67
The best student is ping,sum=261
3.思考及总结
(1结构体、共用体定义方式、引用方式和功能的相同点与不同点。
结构体定义方法
①先声明结构体类型,在定义该类型的变量
struct 变量名 变量名1,变量名2;
②在声明类型的同时定义变量
struct 结构体名
{
成员列表
}变量名表列;
③不指定类型名而直接定义结构体类型变量
struct
{
成员表列
}变量名表列;
共用体定义方法:
union 共用体名
挠脚心论坛 {成员表列
}变量表列;
只有定义了共用体变量才能引用它;但应注意,不能应用公共体变量,而只能引用共用体变量中的成员。例如:a .i a .ch a .f
结构体、共用体
引用方式和功能的相同点与不同点公称直径
结构体占用的内存空间是其元素占空间的总和;而共用体是元素中占用空间最大的元素的空间。其实在共用体所用的内存中已经写入了数据,当使用其它元素时,上次使用的内容将被覆盖. 也就是说他使几个不同类型的变量共占一段内存(相互覆盖),每次只有一个能使用。结构体则不然, 每个成员都会有存储空间,可以一起用.内部变量间是相互独立的。
(2)枚举类型的定义及应用场合。如果一个变量只有几种可能的值,则可以定义为枚举类型。“枚举”即把可能的值一一列举出来,变量的值只限于列举出来的值的范围。一般形式:enum[枚举名]{枚举元素列表}
(3)用typedef定义类型的方法。(通常分四步):
①先按定义变量的方法写出定义体(如:int i;)。
②将变量名替换成新的类型名(如:int INTEGER;)。
③在最前面加typedef(如:typedef int INTEGER;)。
④然后可以用新的类型名去定义变量了。
(4)使用typedef的注意事项。
①用typedef可以声明各种类型名,但不能用来定义变量。
②用typedef只是对已存在的类型增加一个类型名,而没有创造新的类型。
③typedef与#define有相似之处。
④当不同源文件需要用到同一类型的数据时,常用typedef声明一些数据类型,把它们单独放在一个文件中,然后在需要用到它们的文件中用#include命令把它们包含进来。
⑤使用typedef有利于程序的通用与移植。
4.易犯错误及纠正方法
(1)在做实验内容(1)、(2)时,先分析运行结果,注意结构体、共用体的不同特性,再上机运行,对照结果是否一致。
(2)实验内容(3)综合性较强,包括函数调用和结构体的应用,提前做好预习工作,再上机实验。