写在前面:因为本人已上大学且目前的专业与暂时与编程(大类通史)无关,所以为了确保质量,更新频率不定期,且难度会由浅入深(也算是给自己复习吧)。这几期会以先写数据结构,再写算法的方式交错进行
这篇文章适用于已经会“Hello World”之类基操的童鞋,请按需食用
(文章默认使用C++语言)
大家应该对于定义一个变量,循环这类的基础储存应该已经有所了解,今天我主要介绍两个方面——数组和结构体
先来说数组
在你学习数组之前,你要读取并储存10个数字
画面是这样的
#include<iostream>
#include<cstdio>
using namespace std;
int a,b,c,d,e,f,g,h,i,j;
int main()
{
scanf("%d%d%d%d%d%d%d%d%d%d%d",&a,&b,&c,&d,&e,&f,&g,&h,&i,&j);
return 0;
}
老费劲了
而且代码的可读性很差……
用了数组后
#include<iostream>
#include<cstdio>
using namespace std;
int a[11];
int main()
{
for(int i=1;i<=10;i++)
{
scanf("%d",&a[i]);
}
return 0;
}
是不是简洁又明了?
数组,顾名思义,就是以组的形式存储数据的行为
不够明了?看下面
比如说,int a 是这样的(火车的原图来自网络)
![0f296f696e313e39357465e5d6cb492f.png](https://i-blog.csdnimg.cn/blog_migrate/ab67c5fd7b5f03fc0250d32ce0227b74.png)
数组就是这样的
![d06889a150710167307df4474d474e7b.png](https://i-blog.csdnimg.cn/blog_migrate/204c99300d7b5492915b0ceda484b9a1.jpeg)
我们来就此看一看数组的结构
定义时,是这样(略去了数组内容物的类型):
![1a0398d3ec7a1eb3d107611ead633487.png](https://i-blog.csdnimg.cn/blog_migrate/b5f325414418d7df6f8acdbf9d2dfbad.png)
使用时,则是这样
![b25ce077c908d60b6b014f8a82a3ce27.png](https://i-blog.csdnimg.cn/blog_migrate/12f13cc7c3a01e593454d99d75737263.png)
要注意的一点是,数组的下标从0开始
也就是说,第一节火车,在表示时是第0节
不过,我们当然可以规避这个问题
你看,我要存1000个数
如果我这么定义的话
int a[1000];
数组会是a[0],a[1],a[2]……a[999];
我为啥不能这么来:
int a[1001];
这样数组的下标就是
a[0],a[1],a[2]......a[1000];
你完全可以直接放弃a[0]
使用a[1]-a[1000]不就好了?qwq
说完数组,咱们再来看看结构体
首先:结构体是干啥的呢?
我们再看一下上图
int这类的定义型语言 在什么位置?
火车头!
也就是说,换一种数组的定义方式,就像换了一个火车头
不同的火车头可以拉不同的东西,比如int拉整型,long long 拉长整型,char拉字符
但是,如果这些东西不够用呢?
比如说我想在车厢里同时放多个相同的东西
或者车厢里的货物我想放成不一样的
这时,c++的原装火车头就不够用了
我们得新造一些
而结构体解决的问题就是在“int”,“long long”这些标准化火车头的基础上,造一些属于你自己的火车头
那么,怎么造呢?
我们先看一看结构体的主体结构
![9f16203e13f70752f977f0c1e429a018.png](https://i-blog.csdnimg.cn/blog_migrate/edead4c4d12025679555c1463764d24a.png)
看到没,结构体的内部其实很简单
那么,结构体造好了,我们又该如何使用呢?
这里我只讲初级的
比如这样
#include<iostream>
#include<cstdio>
using namespace std;
struct a{
int x,y;
}
int main()
{
a b;
}
这样一来,我就声明了一个变量名为b的a型结构体;
下一步,我们又该怎样利用声明好的b变量呢?
我们从上面可以得知,a型结构体里面会有两个参数
x和y
那么,我们利用时自然也就不能忘了这两个东西
请看下面
b.x=10;
b.y=11;
很简单是吧?就是这样
我们在使用给结构体赋值时
只需要“声明的变量.结构体参数=数值”就好了!
下面找一道题练练手
【深基7.例11】评等级 - 洛谷www.luogu.com.cn题面我放在下面
题目描述
现有 N(N≤1000) 名同学,每名同学需要设计一个结构体记录以下信息:学号(不超过 100000 的正整数)、学业成绩和素质拓展成绩(分别是 0 到 100 的整数)、综合分数(实数)。每行读入同学的姓名、学业成绩和素质拓展成绩,并且计算综合分数(分别按照 70% 和 30% 权重累加),存入结构体中。还需要在结构体中定义一个成员函数,返回该结构体对象的学业成绩和素质拓展成绩的总分。
然后需要设计一个函数,其参数是一个学生结构体对象,判断该学生是否“优秀”。优秀的定义是学业和素质拓展成绩总分大于 140 分,且综合分数不小于 80 分。
输入格式
第一行一个整数 N。
接下来 N 行,每行 3 个整数,依次代表学号、学业成绩和素质拓展成绩。
输出格式
N 行,如果第 i 名学生是优秀的,输出 Excellent
,否则输出 Not excellent
。
输入输出样例
输入 1
4
1223 95 59
1224 50 7
1473 32 45
1556 86 99输出 1
Excellent
Not excellent
Not excellent
Excellent
显然,这是一道结构体的入门练习题
设计一个结构体
装下后两个内容
然后按需进行比较即可
不多说,上代码,不懂得看注释
#include<iostream>
#include<cstdio>
using namespace std;
struct stu{
float zh;
int xy,sz,zf; //设计一个结构体,放下学生的学业成绩,素质拓展程序以及总分
}xs[1005];
int n;//总人数
int main()
{
scanf("%d",&n);//读取总人数
for(int i=1;i<=n;i++)
{
int xh;
scanf("%d%d%d",&xh,&xs[i].xy,&xs[i].sz);//读取个人信息
xs[i].zf=xs[i].xy+xs[i].sz;//计算总分
xs[i].zh=xs[i].xy*0.7+xs[i].sz*0.3;//计算综合
}
for(int i=1;i<=n;i++)
{
if(xs[i].zf>140&&xs[i].zh>=80)//判断是否合格
{
cout<<"Excellent"<<endl;
}
else
{
cout<<"Not excellent"<<endl;
}
}
return 0;
}
还有别的练习题同学们也可以去看看哦
【深基7.例10】旗鼓相当的对手 - 加强版www.luogu.com.cn 【深基7.例9】最厉害的学生 - 洛谷www.luogu.com.cn