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