结构体当中的变量scanf输入是否需要取地址_第一课--数据结构first&first

写在前面:因为本人已上大学且目前的专业与暂时与编程(大类通史)无关,所以为了确保质量,更新频率不定期,且难度会由浅入深(也算是给自己复习吧)。这几期会以先写数据结构,再写算法的方式交错进行

这篇文章适用于已经会“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

数组就是这样的

d06889a150710167307df4474d474e7b.png

我们来就此看一看数组的结构

定义时,是这样(略去了数组内容物的类型):

1a0398d3ec7a1eb3d107611ead633487.png

使用时,则是这样

b25ce077c908d60b6b014f8a82a3ce27.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

看到没,结构体的内部其实很简单

那么,结构体造好了,我们又该如何使用呢?

这里我只讲初级的

比如这样

#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

完结撒花

新专栏的第一篇文章,还请大家包涵,如有问题,欢迎大佬指正!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值