上机实验十三 结构体及其它
一.实验目的
1. 掌握结构类型的定义、结构变量的定义和初始化,结构成员变量的引用。
2. 掌握结构数组的定义和使用方法。
3. 掌握结构指针的定义和使用方法。
4. 简单掌握动态存储分配函数malloc;
5. 简单掌握枚举类型enum;
6. 简单掌握移位运算。
二.实验
内容
财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容
【实验题1】程序填空:定义一个关于平面点的结构类型,并定义一个含5个元素的结构数组,用于存放5个平面点;然后输入这些点的坐标值,并统计位于半径为3、以原点为圆心的圆之内的点的个数。
# include
struct point{ //定义结构类型 struct point
double a,b ;
};
void main ()
{
int i, num=0;
struct point p[5];
//定义结构数组p
printf("Input 5 points: \n");
for( i=0; i< 5; i++)
scanf("%lf%lf", _&p[i].a_ ___ , _ &p[i].b_ _____); //输入5个点的坐标
for( i=0; i< 5; i++)
//统计位于指定圆内的点的个数
if( p[i].a_ * p[i].a_ + p[i].b* p[i].b < 9) num++;
printf(" num= %d \n", num);
}
运行程序,输入 1.0 2.1 -3 4.23 9.0 -8 4.5 -1 -0.25 -1.3
输出num=
【实验题2】程序填空:结构类型struct score 包含一名学生的3门学科成绩和个人平均成绩,要求输入某位学生的三门课程成绩,并计算其平均成绩。
(1) 用普通的结构变量
#include
struct score{
//定义结构类型
int math;
//数学成绩
int phys;
//物理成绩
int chem;
//化学成绩
float aver;
//平均成绩
};
void main()
{
struct score s; //定义结构变量s
scanf(“%d%d%d”,& s.math , &s.phys , &s.chem ); //输入s的前三个成员(三科成绩)
s.aver = ( s.math+ s.phys + s.chem )/3.0 ;
//计算s的平均成绩分量
printf("aver:%.2f\n”, s.aver ); //输出s的平均成绩分量
}
(2) 用结构指针
#include
struct score{
//定义结构类型
int math;
//数学成绩
int phys;
//物理成绩
int chem;
//化学成绩
float aver;
//平均成绩
};
void main()
{
struct score s, *p; //定义结构变量s和结构指针p
p= &s ;
//令p指向s
scanf(“%d%d%d”, &p->math , &p->phys , &p->chem ); //输入p的前三个分量(三科成绩)
p->aver = (p->math+ p->phys + p->chem )/3 ;
//计算p的平均成绩分量
printf("aver:%.2f\n”, p->aver );
//输出p的平均成绩分量
}
【实验题3】程序改错: 要求输入3名学生的学号、姓名和成绩,将这3名学生按成绩的降序排序后输出。源程序中的带/****/标记的语句行存在错误,请更正。
#include
struct student{
//定义结构类型
int num;
//学号
char name[20];
//姓名
float score;
//成绩
};
void main()
{
int i,j;
struct student s[3], temp; /****************/
printf("Input information of 3 students:\n");
for(i=0; i<3; i++)
scanf("%d%s%f", &s[i].num, s[i].name, &s[i].score); /****************/
for(i=2; i>0; i--)
for(j=0; j
struct STUDENT{ char name[16]; int math; int english; int computer; int average; };
void GetAverage(struct STUDENT *pst) /* 计算平均成绩 */
{
int sum=0;
sum = pst-> math + pst-> english+ pst-> computer;
pst->average = sum/3;
}
void main()
{
int i;
struct STUDENT st[4]={{"Jessica",98,95,90},{"Mike",80,80,90},
{"Linda",87,76,70},{"Peter",90,100,99}};
for(i=0;i<4;i++)
{
GetAverage(____&st[i]_____);
}
printf("Name\tMath\tEnglish\tCompu\tAverage\n");
for(i=0;i<4;i++)
{
printf("%s\t%d\t%d\t%d\t%d\n",st[i].name,st[i].math,st[i].english,
st[i].computer,st[i].average);
}
}
【实验题5】了解malloc函数(P296)。该程序功能:输入n以及小于n个字符的字符串,将字符串中所有小写字母改为相应的大写字母后,输出该字符串。
#include
#include
#include
void main()
{
int n,i;
/***** 1 *****/
char *str;
scanf("%d\n",&n);
str=(char*)malloc(n);//malloc函数返回分配n个长度的内存的首地址,所以str应为指针类型。
gets(str);
/***** 2 *****/
for(i=0;i='a'&& str[i]<='z') str[i]=str[i]-('a'-'A');
puts(str);
}
【实验题6】了解枚举类型(P312)。该程序功能:调用函数f,求a数组中最大值与b 数组中最小值之差。
#include
enum FLAG {positive=1,negative=-1};
float f(float *x,int n,enum FLAG flag)
{
float y; int i;
y=x[0];
for(i=1;iflag*y) y=x[i];
return y;
}
void main()
{
float a[6]={3,5,9,4,2.5,1},b[5]={3,-2,6,9,1};
printf("%.2f\n",f(a,6,positive)- _f(b,5,negative)___ );
}
【实验题7】了解移位运算(P319)该程序功能:将一个char型数的高4位和低4位分离,分别输出,如22(二进制:00010110)输出为1和6。
#include
void main()
{
char a,b1,b2,c; scanf("%d",&a);
/****** 1 ******/
b1=a>>4; /*b1存放高4位*/
c=~(~0<<4);
/****** 2 ******/
b2=a&c; /*b2存放低4位*/
printf("%d,%d",b1,b2);
}
101 Mike 78
102 Jane 95
103 Zuma 67