注:分配空间不⾜足以存储成员变量时,分配新的空间单位
5.作业:
typedef struct date
{
int year;
int mouth;
int day;
}Date;
typedef struct keCheng
{
char*lname;
int score;
}KeC;
typedef struct stu
{
int num;
char*name;
KeC lan;
KeC math;
KeC engl;
}Stu;
typedef struct person
{
int num;
char *name;
int sum;
}Per ;
typedef struct point
{
float abscissa;//横坐标
float ordinate;//纵坐标
}Point;
typedef struct size
{
float weith;//宽
float height;//高
}Size;
typedef struct rect
{
Point origin;
Size size;
}Rect;
int days(int year,int mouth,int day)
{
int sumDays;
int run[12]={31,29,31,30,31,30,31,31,30,31,30,31};
int unrun[12]={31,28,31,30,31,30,31,31,30,31,30,31};
if (year%400==0||(year%4==0&&year%100!=0)) {
for (int i=0; i
}
}else{
for (int i=0; i
}
}
return sumDays;
}
void avg( Stu *p,int i)
{
float suml=0,summ=0,sume=0;
for (int j =0; j suml+=(p->lan.score);
summ+=(p->math.score);
sume+=(p->engl.score);
p++;
}
printf("%.2f\t%.2f\t%.2f\t",suml/i,summ/i,sume/i);
}
void getFail( Stu *p,int i)
{
int center=0;
for (int j=0; j center =(p->lan.score)>(p->math.score)?((p->lan.score)<(p->engl.score)?(p->lan.score):((p->math.score)<(p->engl.score)?(p->engl.score):(p->math.score))):((p->lan.score)>(p->engl.score)?(p->lan.score):((p->math.score)>(p->engl.score)?(p->engl.score):(p->math.score)));
if (center<60) {
if ((p->lan.score)<60) {
printf("%d\t%s\t%d\n",p->num,p->lan.lname,p->lan.score);
}
if ((p->math.score)<60) {
printf("%d\t%s\t%d\n",p->num,p->math.lname,p->math.score);
}
if ((p->engl.score)<60) {
printf("%d\t%s\t%d\n",p->num,p->engl.lname,p->engl.score);
}
}
p++;
}
}
void getYou( Stu *p,int i)
{
int avges=0;
for (int j=0; j avges =((p->lan.score)+(p->math.score)+(p->engl.score))/3;
if (avges>=85&&avges<=90) {
printf("%d\t%s\n",p->num,p->name);
}
p++;
}
}
void judgeZhiXian(Point x,Point y)
{
if (x.ordinate==y.ordinate) {
printf("两个点是在一条水平线上。\n");
}else
printf("两个点不是在一条水平线上。\n");
}
void judgeChuiXian(Point x,Point y)
{
if (x.abscissa==y.abscissa) {
printf("两个点是在一条垂直线上\n");
}else
printf("两个点不是在一条垂直线上\n");
}
void judgeEq(Point x,Point y)
{
if ((x.abscissa==y.abscissa)&&(x.ordinate==y.ordinate) ) {
printf("两个点相等\n");
}else
printf("两个点不相等\n");
}
void judgeEqWeith(Size x,Size y)
{
if (x.weith==y.weith) {
printf("两个size等宽。\n");
}else
printf("两个size不等宽。\n");
}
void judgeEqheighe(Size x,Size y)
{
if (x.height==y.height) {
printf("两个size等高。\n");
}else
printf("两个size不等高\n");
}
void judgeEqSize(Size x,Size y)
{
if ((x.weith==y.weith)&&(x.height==y.height) ) {
printf("两个size相等\n");
}else
printf("两个size不相等\n");
}
void judgeXiangJiao(Rect rect1,Rect rect2)
{
//什么时候不想交
//1、矩形1的最大x小于矩形2的最小x
//2、矩形1的最小x大于矩形2的最大x
//3、矩形1的最大y小于矩形2的最小y
//4、矩形1的最小y大于矩形2的最大y
float maxx1=rect1.origin.abscissa+rect1.size.weith;
float minx1=rect1.origin.abscissa;
float maxy1=rect1.origin.ordinate+rect1.size.height;
float miny1=rect1.origin.ordinate;
float maxx2=rect2.origin.abscissa+rect2.size.weith;
float minx2=rect2.origin.abscissa;
float maxy2=rect2.origin.ordinate+rect2.size.height;
float miny2=rect2.origin.ordinate;
if (maxx1
printf("两个Rect不相交。\n");
}else
{printf("两个Rect相交。\n");}
}
void judgeIncludeP(Rect rect1,Rect rect2,Point p)
{
//点的x要在rect1 x的最大与最小之间
//点的y要在rect1 y的最大与最小之间
float maxx1=rect1.origin.abscissa+rect1.size.weith;
float minx1=rect1.origin.abscissa;
float maxy1=rect1.origin.ordinate+rect1.size.height;
float miny1=rect1.origin.ordinate;
float maxx2=rect2.origin.abscissa+rect2.size.weith;
float minx2=rect2.origin.abscissa;
float maxy2=rect2.origin.ordinate+rect2.size.height;
float miny2=rect2.origin.ordinate;
if ((p.abscissa>minx1&&p.abscissa
}else{
printf("两个Rect不包含这个Point。\n");
}
}
void judgeIncludeR(Rect rect1,Rect rect2)
{
//1、矩形1的最xiaox<=矩形2的最小x
//2、矩形1的最dax>=矩形2的最大x
//3、矩形1的最大y>=矩形2的最day
//4、矩形1的最小y<=矩形2的最xiaoy
float maxx1=rect1.origin.abscissa+rect1.size.weith;
float minx1=rect1.origin.abscissa;
float maxy1=rect1.origin.ordinate+rect1.size.height;
float miny1=rect1.origin.ordinate;
float maxx2=rect2.origin.abscissa+rect2.size.weith;
float minx2=rect2.origin.abscissa;
float maxy2=rect2.origin.ordinate+rect2.size.height;
float miny2=rect2.origin.ordinate;
if (minx1<=minx2&&maxx1>=maxx2&&miny1<=miny2&&maxy1>=maxy2) {
printf("Rect2在Rect1中\n");
}else
{printf("Rect2不在Rect1中\n");}
}
int main(int argc, const char * argv[])
{
/*1. (**)定义一个结构体变量(包括年、月、日),计算该日在本年中为第几天?(注意考虑闰年问题),要求写一个函数days,实现上面的计算。由主函数将年月日传递给days函数,计算后将日子传递回主函数输出。*/
// Date birthday;
// printf("请输入正确的日期格式:");
// scanf("%d%d%d",&birthday.year,&birthday.mouth,&birthday.day );
// int sunDays = days(birthday.year, birthday.mouth, birthday.day );
// printf("这一年的第 %d天\n",sunDays);
// insert code here...
//printf("Hello, World!\n");
/*2. (***)某班有5个学生,三门课。分别编写3个函数实现以下要求:
(1) 求各门课的平均分;
(2) 找出有两门以上不及格的学生,并输出其学号和不及格课程的成绩;
(3) 找出三门课平均成绩在85-90分的学生,并输出其学号和姓名
*/
// Stu student[5]={
// {1,"jack",{"languages",80},{"math",85},{"English",67}},
// {2,"rose",{"languages",73},{"math",87},{"English",96}},
// {3,"lucy",{"languages",56},{"math",45},{"English",36}},
// {4,"jassink",{"languages",78},{"math",36},{"English",93}},
// {5,"mima",{"languages",57},{"math",98},{"English",86}}};
// Stu*p;
// p=student;
// avg(p, 5);
// getFail(p, 5);
// getYou(p,5);
/*3. (***)模拟n个人参加选举的过程,并输出选举结果:假设候选人有四人,分别用A、B、C、D表示,当选某候选人时直接输入其编号(编号由计算机随机产生),若输入的不是A、B、C、D则视为无效票,选举结束后按得票数从高到低输出候选人编号和所得票数。 */
/*
Per Hper[4];
Per *p=Hper;
p->name="A";
(p+1)->name="B";
(p+2)->name="C";
(p+3)->name="D";
p->sum=0;
(p+1)->sum=0;
(p+2)->sum=0;
(p+3)->sum=0;
for (int i = 0; i<4; i++) {
(p->num)=arc4random()%9001+1000;
printf("第%d个人的编号是%d\n",i+1,p->num);
p++;
}
printf("请严格按照正确对应的数字输入!!!");
int n;
printf("请输入投票的人数!");
scanf("%d",&n);
p=Hper;
for (int i = 0 ; i
printf("请输入候选人的编号:");
scanf("%d",&number);
if (p->num==number) {
p->sum+=1;
}else if ((p+1)->num==number){
(p+1)->sum+=1;
}else if ((p+2)->num==number){
(p+2)->sum++;
}else if((p+3)->num==number){
(p+3)->sum++;
}
}
Per temp={0};
for (int i = 0; i< 4; i++) {
for (int j = 0; j<3-i; j++) {
if ((p+j)->sum<(p+j+1)->sum) {
temp=Hper[j];
Hper[j]=Hper[j+1];
Hper[j+1]=temp;
}
}
}
p=Hper;
for (int i = 0; i< 4; i++) {
printf("%s编号:%d\t票数:%d\n",p->name,p->num,p->sum) ;
p++;
}
*/
/* 4.(***)创建一个Point结构体,包含x,y两个变量。
并写以下函数:
函数1,判断两个点是否在一条水平线上。
函数2,判断两个点是否在一条垂直线上。
函数3,判断两个点是否相等。
*/
/*
Point x;
Point y;
printf("请输入第一个点的坐标:");
scanf("%f%f",&x.abscissa,&x.ordinate);
printf("请输入第二个点的坐标:");
scanf("%f%f",&y.abscissa,&y.ordinate);
judgeZhiXian(x, y);
judgeChuiXian(x, y);
judgeEq(x, y);
*/
/*5.(***)创建一个Size结构体,包含width,height两个变量。
并写以下函数:
函数1,判断两个size是否等宽。
函数2,判断两个size是否在等高。
函数3,判断两个size是否相等
*/
/*
Size size1,size2;
printf("请输入第一个Size的坐标:");
scanf("%f%f",&size1.weith,&size1.height);
printf("请输入第二个Size的坐标:");
scanf("%f%f",&size2.weith,&size2.height);
judgeEqheighe(size1, size2);
judgeEqWeith(size1, size2);
judgeEqSize(size1, size2);
*/
/* 6.(***)创建一个Rect结构体,包含origin,size两个变量。其中origin是Point类型的,size是Size类型的。
并写以下函数:
函数1,判断两个Rect是否相交。
函数2,判断两个Rect是否包含某个Point。
函数3,判断一个Rect是否在另外一个Rect中
*/
// Rect rect1={{3,5},{6,10}};
// Rect rect2={{3,8},{5,20}};
// Point p={4,8};
/*
Rect rect1,rect2;
Point p;
printf("请设置rect1:");
scanf("%f%f%f%f",&rect1.origin.abscissa,&rect1.origin.ordinate,&rect1.size.weith,&rect1.size.height);
printf("请设置rect2:");
scanf("%f%f%f%f",&rect2.origin.abscissa,&rect2.origin.ordinate,&rect2.size.weith,&rect2.size.height);
printf("请输入一个点的坐标:");
scanf("%f%f",&p.abscissa,&p.ordinate);
judgeXiangJiao(rect1, rect2);
judgeIncludeP(rect1, rect2,p);
judgeIncludeR(rect1, rect2);
*/
return 0;
}