- 基础知识:
(1)结构体的定义:C++ 中的结构体是由一系列具有相同类型或不同类型的数据构成的数据集合,也叫结构。
(2)结构体类型声明和变量定义:
struct 类型名{
数据类型1 成员名1;
数据类型2 成员名2;
…
} 变量名;
(3) 使用:a. 引用结构体变量中成员的格式为:
结构体变量名. 成员名
b.可以对结构体变量的整体进行操作。
eg: swap(a[i],a[j])
(4) 结构体数组:
struct student{
int age;
char name[20];
int height;
};p[20] /* 表示有多个学生,数组*/ - 题目:
problem A: 结构体应用
nefu 1053
#include <bits/stdc++.h>
#include <cstdio>
using namespace std;
struct student{
char num[10];/*也可用int*/
char name[30];
double score;
};
int main()
{int n,i;
scanf("%d",&n);
student stu[100];
getchar();
for(i=0;i<n;i++)
scanf("%s %[^\n] %lf",stu[i].num,stu[i].name,&stu[i].score);/*%[^\n] 只在遇到回车时停止输入,遇到空格继续输入*/
for(i=0;i<n;i++)
printf("%s %s %.2lf\n",stu[i].num,stu[i].name,stu[i].score);
return 0;
}
problem B:身高问题
nefu 1637
#include <bits/stdc++.h>
#include <cstdio>
using namespace std;
struct student{
char name[100];
int hight;
int num;
};/*结构体类型定义*/
int main()
{
int n,i,j,k;
student stu[100],m;/*变量声明*/(定义和声明可分开写,也可合并写)
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%s%d%d",stu[i].name,&stu[i].hight,&stu[i].num);
m=stu[0];
for(j=1;j<n;j++)
{
if(stu[j].hight>m.hight)
m=stu[j],k=j;
}
for(i=0;i<n;i++)
{
if(stu[i].hight==stu[k].hight)
{
if(stu[i].num>stu[k].num)
return 0;
else k=i;
}
}
printf("%s %d %d\n",stu[k].name,stu[k].hight,stu[k].num);
return 0;
}
problem C:成绩统计
nefu 1638
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
struct student{
char s[3];
char num[10];
int ave;
}stu[1001];
int main()
{
int i,n,k,u;
scanf("%d",&n);
u=0;k=0;
for(i=0;i<n;i++)
{
scanf("%s",stu[i].s);
if(strcmp(stu[i].s,"C")==0)/*由于字母的不同后面的数据类型也不同,所以分情况讨论*/
{
scanf("%s",stu[i].num);
k++;
}
else
{
scanf("%d",&stu[i].ave);
u=u+stu[i].ave;
}
}
printf("%d %d",k,u/(n-k));
return 0;
}
problem D:优秀学生
nefu 1186
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
struct student{
int num;
char name[20];
int score;
}stu[100];
int main()
{
int i,n,k;
while(scanf("%d",&n)!=EOF)
{
k=0;
for(i=0;i<n;i++)
scanf("%d %s %d",&stu[i].num,stu[i].name,&stu[i].score);
for(i=0;i<n;i++)
{
if(stu[i].score>=90)
{
printf("%d %s %d\n",stu[i].num,stu[i].name,stu[i].score);
k++;}
}
printf("%d\n",k);
}
return 0;
}
problem E:谁不及格?
nefu 1147
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
struct student{
int num;
char name[20];
double score;
}stu[100];
int main()
{
int i,n,k;
while(scanf("%d",&n)!=EOF)
{
k=0;
for(i=0;i<n;i++)
{
getchar();
scanf("%[^\n] %d %lf",stu[i].name,&stu[i].num,&stu[i].score);
if(stu[i].score<60)
k++;
}
if(k==0)
printf("They are Great!!\n");
if(k!=0)
{
printf("%d\n",k);
for(i=0;i<n;i++)
{
if(stu[i].score<60)
printf("%s\n",stu[i].name);}
for(i=0;i<n;i++)
{
if(stu[i].score<60)
printf("%d\n",stu[i].num);}
for(i=0;i<n;i++)
{if(stu[i].score<60)
printf("%.2lf\n",stu[i].score);}
}
}
return 0;
}