struct的精确用法

目录

我终于回来啦!

1,可以创造根据结构体格式的成员或数组。

普通成员

 数组成员

2,可以用指针遍历成员

3,使用typedef

---------------------------------------------------------------------------------------------------------------------------------

今天我整理了一些struct的用法,但我先说一声:

我终于回来啦!

前几天一直没空,因为今天有空,所以今天更新一下。那么首先第一个用法是:

1,可以创造根据结构体格式的成员或数组。

普通成员

我们先看下列例子:

#include <stdio.h>
#include<iostream>
struct student
{
    char name[20];
    int age;
    char sex[7];
    int score;
};student stu1 = {"Wang.x.m",12,"boy",90};
int main(){
	std::cout<<stu1.name<<" "<<stu1.age<<" "<<stu1.sex<<" "<<stu1.score;
}

这个代码很简单,首先创造一个经典结构体struct,然后在结构体里创建了变量name,age,sex和,score,之后创建一个结构体成员,最后打印。

运行结果:

 数组成员

但是如果成员有10个,那么根据前面的就只能这么写:

#include <stdio.h>
#include <iostream>
struct student
{
    char name[20];
    int age;
    char sex[7];
    int score;
};
int main()
{
    student stu1 = {"Wang.x.m", 12, "boy", 90};
    student stu2 = {"Li.y.n", 13, "girl", 85};
    student stu3 = {"Zhang.z.o", 11, "boy", 92};
    student stu4 = {"Chen.a.p", 14, "boy", 88};
    student stu5 = {"Liu.b.q", 12, "girl", 91};
    student stu6 = {"Sun.c.r", 13, "boy", 87};
    student stu7 = {"Zhao.d.s", 11, "girl", 93};
    student stu8 = {"Wu.e.t", 14, "boy", 86};
    student stu9 = {"Zhou.f.u", 12, "girl", 94};
    student stu10 = {"Qian.g.v", 13, "boy", 89};
    std::cout << stu1.name << " " << stu1.age << " " << stu1.sex << " " << stu1.score << std::endl;
    std::cout << stu2.name << " " << stu2.age << " " << stu2.sex << " " << stu2.score << std::endl;
    std::cout << stu3.name << " " << stu3.age << " " << stu3.sex << " " << stu3.score << std::endl;
    std::cout << stu4.name << " " << stu4.age << " " << stu4.sex << " " << stu4.score << std::endl;
    std::cout << stu5.name << " " << stu5.age << " " << stu5.sex << " " << stu5.score << std::endl;
    std::cout << stu6.name << " " << stu6.age << " " << stu6.sex << " " << stu6.score << std::endl;
    std::cout << stu7.name << " " << stu7.age << " " << stu7.sex << " " << stu7.score << std::endl;
    std::cout << stu8.name << " " << stu8.age << " " << stu8.sex << " " << stu8.score << std::endl;
    std::cout << stu9.name << " " << stu9.age << " " << stu9.sex << " " << stu9.score << std::endl;
    std::cout << stu10.name << " " << stu10.age << " " << stu10.sex << " " << stu10.score << std::endl;
    return 0;
}

这种代码十分不整洁,既不好看还效率低,这时候我们可以运用数组:

#include <stdio.h>
#include <iostream>
struct student
{
    char name[20];
    int age;
    char sex[7];
    int score;
};
int main()
{
    student students[10] = {
        {"Wang.x.m", 12, "boy", 90},
        {"Li.y.n", 13, "girl", 85},
        {"Zhang.z.o", 11, "boy", 92},
        {"Chen.a.p", 14, "boy", 88},
        {"Liu.b.q", 12, "girl", 91},
        {"Sun.c.r", 13, "boy", 87},
        {"Zhao.d.s", 11, "girl", 93},
        {"Wu.e.t", 14, "boy", 86},
        {"Zhou.f.u", 12, "girl", 94},
        {"Qian.g.v", 13, "boy", 89}
    };
    for (int i = 0; i < 10; i++)
    {
        std::cout << students[i].name << " " << students[i].age << " " << students[i].sex << " " << students[i].score << std::endl;
    }
    return 0;
}

这样就比上一个少了900多个字符。

2,可以用指针遍历成员

但是这样需要0.58秒才能运行,很容易让我们等死,如果你想让运行得快一点,那么可以运用指针:

#include <stdio.h>
#include <iostream>
struct student
{
    char name[20];
    int age;
    char sex[7];
    int score;
};
int main()
{
    student students[10] = {
        {"Wang.x.m", 12, "boy", 90},
        {"Li.y.n", 13, "girl", 85},
        {"Zhang.z.o", 11, "boy", 92},
        {"Chen.a.p", 14, "boy", 88},
        {"Liu.b.q", 12, "girl", 91},
        {"Sun.c.r", 13, "boy", 87},
        {"Zhao.d.s", 11, "girl", 93},
        {"Wu.e.t", 14, "boy", 86},
        {"Zhou.f.u", 12, "girl", 94},
        {"Qian.g.v", 13, "boy", 89}
    };
    student* ptr = students;
    for (int i = 0; i < 10; i++)
    {
        std::cout << ptr->name << ptr->age << ptr->sex << ptr->score;
        ptr++;
    }
    return 0;
}

3,使用typedef

但这样比之前也快了0.05秒。有没有更快的方法呢?有,使用typedef关键词,比如这样:

#include <stdio.h>
struct student
{
    char name[20];
    int age;
    char sex[7];
    int score;
};
typedef student Stu;
int main()
{
    Stu students[10] = {
        {"Wang.x.m", 12, "boy", 90},
        {"Li.y.n", 13, "girl", 85},
        {"Zhang.z.o", 11, "boy", 92},
        {"Chen.a.p", 14, "boy", 88},
        {"Liu.b.q", 12, "girl", 91},
        {"Sun.c.r", 13, "boy", 87},
        {"Zhao.d.s", 11, "girl", 93},
        {"Wu.e.t", 14, "boy", 86},
        {"Zhou.f.u", 12, "girl", 94},
        {"Qian.g.v", 13, "boy", 89}
    };
    Stu* ptr = students;
    for (int i = 0; i < 10; i++)
    {
        printf("%s %d %s %d\n", ptr->name, ptr->age, ptr->sex, ptr->score);
        ptr++;
    }
    return 0;
}

这样写可以直接把运行速度飙升到:

4.格式环节

结构体创造:

struct 结构体名{
    格式1
    格式2
    格式3
      .
      .
      .
    格式n
};

成员创造:

普通成员:
struct 结构体名 结构体成员名 = {结构体变量1,结构体变量2,结构体变量3・・・结构体变量n};
数组成员:
struct 结构体名 结构体成员[n]={{结构体变量1.1,结构体变量1.2,结构体变量1.3···结构体成员1.n},
                             {结构体变量2.1,结构体变量2.2,结构体变量2.3···结构体成员2.n},
                             {结构体变量3.1,结构体变量3.2,结构体变量3.3···结构体成员3.n},
                                                         .
                                                         .
                                                         .
                             {结构体变量n.1,结构体变量n.2,结构体变量n.3···结构体成员n.n}};

5.出题环节 

最后该大家出点题:

【1,输出平均数】

请使用struct计算输入的n个平均数。

样例

输入:

5

6.7 8.2 1.3 2.9 7.9

输出:

20.68

【2, 输出总成绩】

请使用 struct 计算输入的 n 个学生成绩的总成绩。

样例:

输入:

3

85 90 88

输出:

263

【3, 输出最高分】

请使用 struct 找出输入的 n 个学生成绩中的最高分。

样例:

输入:

4

78 89 92 84

输出:

92

如果有什么没讲的话,我会尽快更新《sturct的用法第2期》

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值