基础语句——结构体

  我马上中考了,因此为了方便同学们复习,我五一假期多了一天,再加上我懒得复习,再加上我觉写的这些基础的东西比较无聊,再加上我每天无所事事,我打算最近抓紧多写几篇,好赶紧进入算法部分,写起来稍微有意思一点。上回我们讲了数组,先上一道题:

题目描述:
输入n个数,输出其中最大的数。

输入描述:
第一行一个正整数n,表示有n个数。
接下来一行有n个整数。

输出描述:
最大的那个数。

输入样例:
3
1 4 3

输出样例:
4

其他说明:
0<n<100000,所有数据均在int范围内。

  如果你不会找最大的数,参考一下代码,它的作用是输出a、b、c中最大的那个数:

#include<iostream>
using namespace std;
int main()
{
    int a,b,c;
    cin>>a>>b>>c;
    if(b>a)
        a=b;
    if(c>a)
        a=c;
    cout<<a;
    return 0;
}

  好了,今天来讲讲一个比较没用的知识点——结构体struct。简单地说,结构体是一个自定义的变量类型,假设你要定义一个名叫student的变量类型,每个student类型的变量中要存一名学生的学号、语文成绩、数学成绩和英语成绩。那么你可以使用以下代码来定义这样一个类型:

struct student
{
    int num,chinese,math,english;
};

  这样一来,你就有一个名叫student的变量类型了。你现在可以定义student类型的变量,定义的方法和int、char等是一样的,如下:

student a;

  这样你就有了一个student类型的变量a。你也可以定义student类型的数组:

student b[10000];

  简单吧!那要怎样使用定义的变量呢?假设你想把a的语文成绩变为100(这对于我是不可能的),那你只需要使用以下语句:

a.chinese=100;

  为了使大家深入理解struct的用法,我们来看一道例题。

题目描述:
输入n个学生的学号和各科成绩,输出学号最小的那个同学的总分。

输入描述:
第一行一个正整数n,表示有n名同学。
接下来n行,每行4个整数num、c、m、e,表示学号为num的同学的语文、数学、英语成绩。

输出描述:
一个数,表示学号最小的那名同学的总分。

输入样例:
3
2 100 100 98
3 99 97 0
1 100 59 10

输出样例:
169

其他说明:
0<n<100000,所有数据均在int范围内。

  答案代码如下:

#include<iostream>
using namespace std;
struct student
{
    int num,c,m,e;
}stu[10000];
int n,minn=0x3f3f3f3f,u;
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>stu[i].num>>stu[i].c>>stu[i].m>>stu[i].e;
        if(stu[i].num<minn)
        {
            minn=stu[i].num;
            u=i;
        }
    }
    cout<<stu[u].c+stu[u].m+stu[u].e;
    return 0;
}

  这段代码终于有点程序员的样子了,我们来解释几个地方。第一,我把结构体和变量的定义放在了主函数之外,其实这是比较正规的写法,这样写有两个好处:1.定义在主函数外的变量自动初始化为0,也就是说他们在定义时的值就是0;2.主函数外空间较大,能定义更多的变量。第二,我在结构体定义的末尾写了“stu[10000]”,这表示定义一个student类型的数组stu,和另写一句话定义是没有区别的。第三,0x3f3f3f3f表示16进制数3F3F3F3F,一般用来表示无限大。其他地方就没有什么可解释的了,有什么不懂在评论区里问就行。有些人可能不太习惯这种写法,但慢慢你就会习惯了,而且你以后可能需要频繁改变代码风格,比如有一些同学劝我将花括号的左半边写在上面那一行,我一直到现在都改不过来,但我个人其实不想改,因为只是一个美观问题,和程序真的一点关系都没有。

  其实上面这道题不用结构体甚至不用数组都可以做,只不过为了是大家更好的理解结构体,我辛辛苦苦地敲代码,你不点个赞我都替你对不起作者。

  这就是结构体的用法了,你学会了吗?

//答案代码 
#include<iostream>
using namespace std;
int n,a[100000],ans;
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>a[i];
    for(int i=1;i<=n;i++)
        if(a[i]>ans)
            ans=a[i];
    cout<<ans;
    return 0;
}
//以下是不用数组的版本
//#include<iostream>
//using namespace std;
//int n,a,ans;
//int main()
//{
//    cin>>n;
//    for(int i=1;i<=n;i++)
//    {
//        cin>>a;
//        if(a>ans)
//            ans=a;
//    }
//    cout<<ans;
//    return 0;
//} 

Created by RFdragon

猜你喜欢

转载自www.cnblogs.com/RFdragon/p/10802101.html