第一关:结构体变量的初始化和引用
#include<stdio.h>
/*********Begin*********/
#include<stdio.h>
int main()
{
struct Student
{
long int num;
char name[20];
int score;
} student1,student2;
scanf("%ld%s%d",&student1.num,student1.name,&student1.score);
scanf("%ld%s%d",&student2.num,student2.name,&student2.score);
if(student1.score>student2.score)
printf("%ld %s %d\n",student1.num,student1.name,student1.score);
else if(student1.score<student2.score)
printf("%ld %s %d\n",student2.num,student2.name,student2.score);
else
{
printf("%ld %s %d\n",student1.num,student1.name,student1.score);
printf("%ld %s %d\n",student2.num,student2.name,student2.score);
}
return 0;
}
/*********End*********/
第2关:结构体排序
#include<stdio.h>
#include<string.h>
/*********Begin*********/
struct student//声明结构体类型struct student
{ int ID;
char name[20];
int score;
};
/*********End**********/
void input(int N,struct student s[])//定义一个input函数来接受信息
{ int i;
for(i=0;i<N;i++)
{
scanf("%d %s %d",&s[i].ID,s[i].name,&s[i].score);
printf("\n");
}
}
void swap(int N,struct student s[])//将学生信息按高低排序
{ int i,j,t;
struct student temp;
for(j=0;j<N-1;j++)
{ for(i=0;i<N-1-j;i++)
if(s[i].score<s[i+1].score)
{ temp=s[i];
s[i]=s[i+1];
s[i+1]=temp;
}
}
for(i=0;i<N;i++)
{
printf("%d %s %d",s[i].ID,s[i].name,s[i].score);
printf("\n");
}
}
/*********Begin*********/
int main()
{ int N;
scanf("%d",&N);
struct student s[N],*p=s;//定义结构体数组并初始化
void input( int N,struct student s[]);
void swap( int N,struct student s[]);
input(N,p);
swap(N,p);
/*********End**********/
return 0;
}
第3关:结构体存储数据
#include<stdio.h>
#include<string.h>
/*********Begin*********/
struct voter
{
char name[20];//选手姓名
int number;//选手得票
}v[3]={"Li",0,"Zhang",0,"Sun",0};
/*********End**********/
int main(void)
{ int i,j;
/*********Begin*********/
char lover[20];
int n ;//选民人数
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%s",lover);
for(j=0;j<3;j++)
{
if(strcmp(lover,v[j].name)==0) //如果名字对应,则该名字加1
v[j].number++;
}}
for(i=0;i<3;i++)
printf("%s:%d\n",v[i].name,v[i].number);
return 0;
}
第4关:结构体存储学生信息
#include<stdio.h>
#include<string.h>
int Count;
//定义结构体
struct student{
char sno[20],name[20];
int math,english,chinese,sum;
};
//自定义输出
void print(struct student stu){
printf("%s %s %d %d %d %d\n",stu.sno,stu.name,stu.math,stu.english,stu.chinese,stu.sum);
}
//用于输入姓名查询成绩
void query_stu(struct student s[],char *name){
/*********Begin*********/
int i=0;
for(;i<Count;i++)
{
if(strcmp(s[i].name,name)==0)
print(s[i]);
}
/*********End**********/
}
//用于删除输入学号所对应学生的信息
void delete_stu(struct student s[],char *sno){
/*********Begin*********/
int i=0;
for(;i<Count;i++)
{
if(strcmp(s[i].sno,sno)==0)
break;
}
for(;i<Count-1;i++)
{
s[i]=s[i+1];
}
/*********End**********/
}
//用于重登成绩
void update_stu(struct student s[],char *sno,int math,int english,int chinese){
/*********Begin*********/
int i=0;
for(;i<Count;i++)
{
if(strcmp(s[i].sno,sno)==0)
{
s[i].math=math;
s[i].english=english;
s[i].chinese=chinese;
s[i].sum= s[i].math+ s[i].english+ s[i].chinese;//重新计算总成绩
}
}
/*********End**********/
}
int main(void)
{
int n,q;
struct student students[50];
scanf("%d%d",&n,&q);
Count=n;
for(int i=0;i<n;i++){
/*********Begin*********/
scanf("%s%s%d%d%d",students[i].sno,students[i].name,&students[i].math,&students[i].english,&students[i].chinese);
students[i].sum=students[i].math+students[i].english+students[i].chinese;//求总成绩
/*********End**********/
}
while(q--){
int op;
scanf("%d",&op);
char sno[20],name[20];
if(op==1){
scanf("%s",name);
query_stu(students,name);
}
else if(op==2){
int a,b,c;
scanf("%s%d%d%d",sno,&a,&b,&c);
update_stu(students,sno,a,b,c);
for(int i=0;i<Count;i++)
print(students[i]);
}
else{
scanf("%s",sno);
delete_stu(students,sno);
for(int i=0;i<Count-1;i++)
print(students[i]);
}
}
return 0;
}