1 结构体及应用

``````struct student
{
int ID;
char name[20];
char sex;
float score;
};
struct student s[4]= {{
10001,"张三",'M',95
},
{10002,"李四",'F',92},
{10002,"王五",'F',96}
};                //定义了结构体数组stu[4]并对前两个赋值``````
``````void f1_1()
{
//结构体变量实例
struct student a= {1,"张三1",'M',95};       //定义变量并赋值
struct student b= {2,"李四1",'F',100};       //不能改变赋值顺序
struct student c;                              //结构体c未赋初值
//scanf("%d%s%c%f",&c.ID,c.name,&c.sex,&c.score);//注意c.name前无"&"
cin>>c.ID>>c.name>>c.sex>>c.score;
//printf("%d %s %c %f\n",a.ID,a.name,a.sex,a.score);
cout<<a.ID<<" "<<a.name<<" "<<a.sex<<" "<<a.score<<" "<<endl;
cout<<b.ID<<" "<<b.name<<" "<<b.sex<<" "<<b.score<<" "<<endl;
cout<<c.ID<<" "<<c.name<<" "<<c.sex<<" "<<c.score<<" "<<endl;
}
void  f1()
{
//结构体及其应用
//scanf("%d %s %c %f",&s[2].ID,s[2].name,&s[2].sex,&s[2].score);
cin>>s[3].ID>>s[3].name>>s[3].sex>>s[3].score;
for(int i=0; i<4; i++)
{
//printf("%d %s %c %f\n",s[i].ID,s[i].name,s[i].sex,s[i].score);
cout<<s[i].ID<<s[i].name<<s[i].sex<<s[i].score<<endl;
}
//return 9;
}``````

a.score=b.score;
sum=a.score+b.score;
a.score++;

cin>>a.ID>>a.name>>a.sex>>a.score;
cout<<a.ID<<a.name<<a.sex<<a.score;

2 结构体与指针

``````void f2()
{
//结构体与指针
struct student *p;
for(p=s; p<s+4; p++) //p为指向结构体的指针，自身加１即指向下一结构体元素
cout<<p->ID<<p->name<<p->sex<<p->score<<endl;
}
void f21()
{
//结构体指针变量指向结构体变量
struct student stu;   //定义结构体变量stu
struct student *p;    //*p必须和stu一样，均为struct student类型
p=&stu;               //结构体指针p指向结构体stu
stu.ID=10001;
strcpy(stu.name,"苏州1");//无法用"="对字符数组赋值，故用strcpy()
stu.sex='M';
stu.score=100;
cout<<stu.ID<<stu.name<<stu.sex<<stu.score<<endl;
cout<<(*p).ID<<(*p).name<<(*p).sex<<(*p).score<<endl;
}``````

3 选举

#include <string.h>

``````struct person
{
char name[150];
int count;
``````void f2_2()
{
/*
选举
*/
int n,m;
cin>>n;
for(int i=0; i<n; i++)
{
}
cin>>m;
char name[m];
for(int i=1; i<=m; i++)
{
cin>>name;
for(int j=0; j<n; j++)
}
for(int i=0; i<n; i++)
}``````

4 统计成绩

``````struct student1
{
int num;
char name[8];
int mark[3];
} person1[11];
#include<iomanip>
void f22()
{
//统计成绩
freopen("score.in","r",stdin);
int maxi=0;
float aver,aver1,max=0,sum=0;
for(int i=0; i<10; i++)
{
cin>>person1[i].num>>person1[i].name;
cin>>person1[i].mark[0]>>person1[i].mark[1]>>person1[i].mark[2];
sum+=person1[i].mark[0];
sum+=person1[i].mark[1];
sum+=person1[i].mark[2];
aver1=(float)(person1[i].mark[0]+person1[i].mark[1]+person1[i].mark[2]);
aver1=aver1/3;
if(aver1>max)
{
max=aver1;
maxi=i;
}
}
aver=sum/30;
cout<<setprecision(2)<<fixed<<aver<<endl;
cout<<person1[maxi].num<<" "<<person1[maxi].name<<" "<<setprecision(2)<<fixed<<max<<endl;
}``````

5 生日

``````struct Stu
{
string s;
int y,m,d;
} stu[200];
#include<algorithm>
void exchange(int i,int j)
{
swap(stu[i].s,stu[j].s);
swap(stu[i].y,stu[j].y);
swap(stu[i].m,stu[j].m);
swap(stu[i].d,stu[j].d);
}

void f23()
{
//生日
freopen("birthday.in","r",stdin);
int n;
//scanf("%d",&n);
cin>>n;
for(int i=1; i<=n; ++i)
cin>>stu[i].s>>stu[i].y>>stu[i].m>>stu[i].d;
for(int i=1; i<n; ++i)
for(int j=i+1; j<=n; ++j)
if(stu[i].y>stu[j].y)
exchange(i,j);
else if(stu[i].y==stu[j].y)
if(stu[i].m>stu[j].m)
exchange(i,j);
else if(stu[i].m==stu[j].m)
if(stu[i].d>=stu[j].d)
exchange(i,j);
for(int i=1; i<=n; ++i)
cout<<stu[i].s<<endl;
}``````