结构体

  1. 基础知识:
    (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] /* 表示有多个学生,数组*/
  2. 题目:
    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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值