结构体练习

问题:3名老师,每个老师5名学生
老师结构体特征:姓名,学生数组
学生结构体特征:姓名,考试分数

#include<bits/stdc++.h>
using namespace std;
struct Student{
	string name;
	int score;
};
struct Teacher{
	string name;
	Student xuesheng[5];
};
void printTeacher(Teacher *p )
{
	cout<<p->name ;
	for(int i=0;i<5;i++)
	{
		cout<<"学生姓名"<<p->xuesheng[i].name<<"分数:"<<p->xuesheng[i].score<<endl;
	}
}
int main()
{
	Teacher laoshi[3];  //用中括号的形式不好给单独的成员赋值 
	laoshi[0].name="张老师";
	laoshi[1].name ="李老师";
	laoshi[2].name  ="王老师";
	for(int i=0;i<3;i++)
	{
		for(int j=0;j<5;j++)
		{
			cout<<"请输入"<<laoshi[i].name <<"的第"<<(j+1)<<"个学生信息:"<<endl;
			cout<<"学生姓名";
			cin>>laoshi[i].xuesheng[j].name;
			cout<<"学生分数";
			cin>>laoshi[i].xuesheng[j].score; 
		}
	  }  
 	for(int i=0;i<3;i++)
 	{
 		printTeacher(laoshi);
	 }

	
}

定义一个坐标点类型Point,每个Point有成员x, y表示其坐标。

设平面上两个点的坐标分别为(x1, y1) (x2, y2) ,其中 x1, y1, x2, y2为整数。
则曼哈顿距离 Manhattan Distance 的定义为: |x1 - x2 | + | y1 -y2|
写一个函数,求两点之间的直线距离Distance 和 曼哈顿距离

#include<bits/stdc++.h> 
using namespace std;
struct Point{
	int x;
	int y;
};
int Manhattan(Point *a,Point*b)
{
	Point result;
	result.x=a->x-b->x;
	if(result.x<0)
	{
		result.x=(-1)*result.x;
	}
	result.y =a->y-b->y;
	if(result.y<0)
	{
		result.y=(-1)*result.y;
	}
	int dis = result.x+result.y;
	cout<<"两点之间的曼哈顿距离是:"<<dis<<endl;;
	return dis;
	
}
double Distance(Point*a,Point*b)
{
	Point result;
	result.x=(a->x-b->x)*(a->x-b->x);
	result.y=(a->y-b->y)*(a->y-b->y);
	double s;
	s = sqrt(result.x+result.y);
	cout<<"两点之间的直线距离是:"<<s<<endl;;
	return s;
}
int main()
{
	Point a;
	cout<<"请输入点1的横纵坐标:";
	cin>>a.x>>a.y;
	Point b;
	cout<<"请输入点2的横纵坐标:";
	cin>>b.x>>b.y;
	Manhattan(&a,&b);
	Distance(&a,&b);
}

定义一个结构体Object,包括用户id及name信息。实现让用户在控制台输入id和name,并打印显示出结果(知识点:结构体的定义,结构体数组访问成员变量的方法)
示例:
输入ID: 1235
输入名字: hello
result: ID: 1235, 名字: hello

#include<bits/stdc++.h>
using namespace std;
struct Object{
	int id;
	string name;
};
void printObject(Object *p)
{
	cout<<"result:"<<"ID:"<<p->id<<","<<"名字:"<<p->name; 
}
int main()
{
	Object user;
	cout<<"输入ID:";
	cin>>user.id;
	cout<<"输入姓名:"; 
	cin>>user.name;
    printObject(&user);
	
	
	
}

设计一个英雄的结构体,包括成员姓名,年龄,性别;创建结构体数组,数组中存放5名英雄。
案例要求:
通过冒泡排序的方法,将数组中的英雄按照年龄进行升序排序,打印排序后的结果,并且并且把排序后的结果保存到一个txt文件中
//注意 交换的是交换整个结构体数组用的是struct Hero temp

#include<bits/stdc++.h>
using namespace std;
//年龄升序排列 
struct Hero{
	string name;
	int age;
	string sex;
};
void BubbleSort(Hero h[],int len)
{
	int i,j;
	for(i=0;i<len;i++)
	{
		for(j=0;j<len-1-i;j++)
		{
			if(h[j].age>h[j+1].age)
			{
				struct Hero temp = h[j];  //这里不能再用int temp了,用Hero temp  
				h[j]=h[j+1];
				h[j+1] =temp;
			 } 
		}
	}
}
void PrintHero(Hero h[],int len)
{
	int i;
	for(i=0;i<len;i++)
	cout<<"姓名:"<<h[i].name<<"年龄:"<<h[i].age <<"性别:"<<h[i].sex <<endl;
}
void Save(Hero h[],int len)
{
	ofstream outfile("txt");
	if(!outfile)
	{
		cerr<<"打开文件错误"<<endl;
		exit(1);
	}
	else
	{
		for(int i=0;i<len;i++)
		{
			outfile<<"姓名:"<<h[i].name<<"年龄:"<<h[i].age<<"性别:"<<h[i].sex<<endl;
		}
		}
	outfile.close();
}
int main()
{
	Hero h[5]={
		{"张飞",34,"男"},
		{"刘备",43,"男"}, 
		{"貂蝉",18,"女" },
		{"吕布",24,"男"},
		{"白起",52,"男"} 
	};
	int len =sizeof(h)/sizeof(h[0]); 
	BubbleSort(h,len);
	PrintHero(h,len);
	Save(h,len);
	
	
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值