求C++ I/O程序的编写示例

输入:
7
第一行Pb-193 3000 300 150
第二行Pb-190 3000 71 35.5
第三行Pb-186 3000 4.86 2.43
第四行Th-225 1500 523 261.5
第五行Th-237 1500 290 145
第六行O-16 2000 122.24 61.12
第七行Ti-51 2500 346 178
从左往右数为一到四列

输出:

  1. 分别输出第三列最大和最小的值的第一列数据
  2. 输出第二列所有数据的二分之一的平均数
  3. 输出第三列减第四列小于100的第一列数据

定义一个数据结构,把每行数据拆分到数据结构数组就简单了啊
这里的第3列是从1开始算起,还是从0开始算起?
第4列减去第3列小于100,无论从0开始算起,还是从1开始算起,好像都满足,而且都是负数

#include <iostream>
using namespace std;


typedef struct _info
{
    char s[20];
    int a1,a2;
    float a3,a4;
}info;

void fun1(info *data,int n)
{
    int max;
    for(int i=0;i<n;i++)
    {
        if(i==0 || data[i].a3 > data[max].a3)
            max = i;
    }
    cout<<"第三列最大的值的第一列数据是:"<<data[max].a1<<endl;
}

void fun2(info *data,int n)
{
    int min;
    for(int i=0;i<n;i++)
    {
        if(i==0 || data[i].a3 < data[min].a3)
            min = i;
    }
    cout<<"第三列最小的值的第一列数据是:"<<data[min].a1<<endl;
}

void fun3(info *data,int n)
{
    int sum=0;
    for(int i=0;i<n;i++)
    {
        sum += data[i].a2;
    }
    cout<<"第二列所有数据的二分之一的平均数是:"<<sum/(2.0*n)<<endl;
}

void fun4(info *data,int n)
{
    cout<<"第三列减第四列小于100的第一列数据分别是:\n";
    for(int i=0;i<n;i++)
    {
        if((data[i].a3-data[i].a4) < 100)
            cout<<data[i].a1<<endl;
    }
}

int main()
{
    info data[100];
    int n;
    cin>>n;
    getchar();
    char s[1000];
    for(int i=0;i<n;i++)
    {
        gets(s);
        char * p = strtok(s,"-");
        strcpy(data[i].s,p);
        char *q = strtok(NULL,"-");
        sscanf(q,"%d %d %f %f",&data[i].a1,&data[i].a2,&data[i].a3,&data[i].a4);
    }
    fun1(data,n);
    fun2(data,n);
    fun3(data,n);
    fun4(data,n);
    return 0;
}

img