9.2 【C语言】使用结构体数组

一个结构体变量中可以存放一组有关联的数据(如一个学生的学号、姓名、成绩等数据),如果有10个学生需要参加运算,显然应该用数组,这就是结构体数组。

9.2.1 定义结构体数组

例9.3 有三个候选人,每个选民只能投票选一人,要求编一个统计选票的程序,先后输入被选人的名字,最后输出各人得票结果。

编写程序:

#include<string.h>
#include<stdio.h>
struct Person{
    char name[20];   //候选人名字
    int count;     //候选人得票数
}leader[3]={"Li",0,"zhang",0,"sun",0};
int main(){
    int i,j;
    char leader_name[20];    //定义字符数组
    for(i=1;i<=10;i++){
        scanf("%s",leader_name);
        for(j=0;j<3;j++)
          if(strcmp(leader_name,leader[j]).name)==0)leader[j].count++;    
    }
    printf("\nResult:\n");
    for(i=0;i<3;i++)
        printf("%5:%d\n",leader[i].name,leader[i].count);
        return 0;
}

(1)定义结构体数组一般形式是

1.struct结构体名

{成员表列} 数组名[数组长度];

2.先声明一个结构体类型,然后再用此类型定义结构体数组:

结构体类型 数组名[数组长度];

struct Person leader[3]; //leader是结构体数组名

(2)对结构体数组初始化的形式是在定义数组的后面加上:

={数组表列};

比如:struct Person leader[3]={"Li",0,"zhang",0,"sun",0};

9.2.2 结构体数组的应用举例

if(stu[j].score>stu[k].score)    //进行成绩的比较
k=j;
temp=stu[k];stu[k]=stu[i];stu[i]=temp;   //stu[k]和stu[i]元素互换

9.3 结构体指针

所谓结构体指针就是指向结构体变量的指针,一个结构体变量的起始地址就是这个结构体变量的指针。

9.3.1 指向结构体变量的指针

指向结构体对象的指针变量既可指向结构体变量,也可指向结构体数组中的元素。

例9.5 通过指向结构体变量的指针变量输出结构体变量中成员的信息。

解题思路:

(1)怎样对结构体变量成员赋值

(2)怎样通过结构体变量的指针访问结构体变量中成员

#include<stdio.h>
#include<string.h>
int main(){
    struct Student      //声明结构体类型struct Student
    {long num;
    char name[20];
    char sex;
    float score;};
    struct Student stu_1;
    struct Student *p;
    p=&stu_1;   //p指向stu_1
    stu_1.num=10101;
    strcpy(stu_1,name,"li min");
    stu_1.sex='M';
    stu_1.score=89.5;
    printf("no.:%ld\nname:%s\nsex:%c\nscore:%5.lf\n",stu_1.num,stu_1.name,stu_1.sex,stu_1.score);
    return 0;
}

9.3.2 指向结构体数组的指针

可以用指针变量指向结构体数组的元素。

例9.6 有3个学生的信息,放在结构体数组中,要求输出全部学生的信息。

解题思路:用指向结构体变量的指针来处理。

(1)声明结构体类型struct Student,并定义结构体数组,同时使之初始化。

(2)定义一个指向struct Student类型数据的指针变量p;

(3)使p指向结构体数组的首元素,输出它指向的元素中的有关信息;

(4)使p指向结构体数组的下一个元素,输出它指向的元素中的有关信息;

(5)再使p指向结构体数组的下一个元素,输出它指向的元素中的有关信息。

编写程序:

#include<stdio.h>
struct Student{
    int num;
    char name[20];
    char sex;
    int age;
};
struct Student stu[3]={{10101,"li lin",'m',18},{10102,"zhang zhi",'m',19},{10103,"zhang san",'f',20}}  //定义结构体数组并初始化
int main(){
    struct Student *p;   //定义指向struct Student结构体变量的指针变量
    printf("no.name    sex age\n");
    for(p=stu;p<stu+3;p++)
        printf("%5d %-20s %2c %4d\n",p->num,p->name,p->sex,p->age);
        return 0;
}

9.3.3 用结构体变量和结构体变量的指针作函数参数

将一个结构体变量的值传递给另一个函数,有三个办法:

(1)用结构体变量的成员作参数。例如,用stu[1].num或stu[2].name作函数实参,将实参值传给形参。

(2)用结构体变量作实参。

(3)用指向结构体变量(或数组元素)的指针作实参,将结构体变量(或数组元素)的地址传给形参。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柯西极限存在准则

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值