当前位置: 首页 > news >正文

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_1stu_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)用指向结构体变量(或数组元素)的指针作实参,将结构体变量(或数组元素)的地址传给形参。

http://www.lryc.cn/news/150655.html

相关文章:

  • leetcode原题: 最小值、最大数字
  • Prompt2Model: Generating Deployable Models from Natural Language Instructions
  • 前端埋点 sendBeacon 替代方式
  • 面试官问我MySQL和MariaDB的联系和区别,这我能不知道?
  • 1.网络空间搜素引擎
  • 《安富莱嵌入式周报》第321期:开源12导联便携心电仪,PCB AI设计,150M示波器差分探头,谷歌全栈环境IDX,微软在Excel推出Python
  • 前端开发必备的网站
  • Java运行时jar时终端输出的中文日志是乱码
  • Vue框架--Vue中el和data的两种写法
  • 【数据结构】 二叉树面试题讲解->贰
  • C和SystemVerilog联合仿真
  • 15-mongodb
  • CSS学习笔记02
  • 为什么Java接口可以多继承,而类不可以?
  • 自动化信息收集工具 水泽 使用教程
  • 2023年全国职业院校技能大赛(高等职业教育组)“信息安全管理与评估”理论技能答案
  • MATLAB 动态图GIF
  • ChatGPT⼊门到精通(4):ChatGPT 为何⽜逼
  • 数据分析基础-数据可视化学习笔记03-可视化的符号与表示-图形符号学
  • 暴力递归转动态规划(四)
  • 大数据项目实战(Sqoop安装)
  • android——spinner下拉弹窗、popupwindow下拉弹窗列表
  • 【阿里淘天】淘天20230824真题一、二 <模拟、双指针>
  • Java注解和反射
  • 【Docker】01-Centos安装、简单使用
  • k8s之存储篇---数据卷Volume
  • 博流RISC-V芯片JTAG debug配置与运行
  • [国产MCU]-W801开发实例-UART控制器
  • OpenCV(九):LUT查找表
  • 2023年 Java 面试八股文(25w字)