问题: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);
}