头歌:c语言结构体

第一关:结构体变量的初始化和引用

#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;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值