结构体数组的定义和引用(一)

单个的结构体类型变量在解决实际问题时作用不大,一般是以结构体类型数组的形式出
现。结构体类型数组的定义形式为:
struct stu / *定义学生结构体类型* /
{
char name[20]; / *学生姓名* /
char sex; / *性别* /
long num; / *学号* /
float score[3]; / *三科考试成绩* /
};
struct stu stud[20]; 定/*义结构体类型数组stud ,*/
/ *该数组有2 0个结构体类型元素* /
其数组元素各成员的引用形式为:
stud[0].name、stud[0].sex、stud[0].score[i];
stud[1].name、stud[1].sex、stud[1].score[i];
...
...
stud[19].name、stud[19].sex、stud[19].score[i];
[例7-1]设某组有4个人,填写如下的登记表,除姓名、学号外,还有三科成绩,编程实现对表格的计算,求解出每个人的三科平均成绩,求出四个学生的单科平均,并按平均成绩由高分到低分输出。

题目要求的问题多,采用模块化编程方式,将问题进行分解如下:
1) 结构体类型数组的输入。
2) 求解各学生的三科平均成绩。
3) 按学生的平均成绩排序。
4) 按表格要求输出。
5) 求解组内学生单科平均成绩并输出。
6) 定义m a i n ( )函数,调用各子程序。
第一步,根据具体情况定义结构体类型。
struct stu
{
char name[20]; /*姓名* /
long number; /*学号* /
float score[4]; /* 数组依此存放E n g l i s h 、M a t h e m a 、P h y s i c s ,及A v e r a g e * /
} ;
由于该结构体类型会提供给每个子程序使用,是共用的,所以将其定义为外部的结构体
类型,放在程序的最前面。
第二步,定义结构体类型数组的输入模块。
void input(arr,n) /*输入结构体类型数组a r r 的n个元素* /
struct stu arr[];
int n;
{ int i,j;
char temp[30];
for (i=0;i<N;I++)
{
printf("\ninput name,number,English,mathema,physic\n"); /*打印提示信息* /
gets(arr[i].name); /输*入姓名*/
gets(temp); /输*入学号*/
a r r [ i ] . n u m b e r = a t o l ( t e m p ) ;
f o r ( j = 0 ; j < 3 ; j + + )
{
gets(temp); /*输入三科成绩* /
a r r [ i ] . s c o r e [ j ] = a t o i ( t e m p ) ;
} ;
}
}
第三步,求解各学生的三科平均成绩。
在结构体类型数组中第i个元素a r r [ i ]的成员s c o r e的前三个元素为已知,第四个Av e r a g e需
计算得到。
void aver(arr,n)
struct stu arr[];
int n;
{
int i,j;
for(i=0;i<N;I++)
{
a r r [ i ] . s c o r e [ 3 ] = 0 ;
f o r ( j = 0 ; j < 3 ; j + + )
arr[i].score[3]=arr[i].score[3]+arr[i].score[j];求 和/*/
arr[i].score[3]=arr[i].score[3] /3; 平 /均*成绩*/
}
}

时间: 2025-01-30 06:42:58

结构体数组的定义和引用(一)的相关文章

结构体数组的定义和引用(五)

2)指针法若p指向数组的某一个元素,则p++就指向其后续元素.3)指针的数组表示法若p=student,我们说指针p指向数组student,p[i]表示数组的第i个元素,其效果与student[i]等同.对数组成员的引用描述为:p[i].name.p[i].num等.[例7-4]指向结构体数组的指针变量的使用.structdata/*定义结构体类型*/{intday,month,year;};structstu/*定义结构体类型*/{char name[20];long num;struct d

结构体数组的定义和引用(四)

指针变量非常灵活方便,可以指向任一类型的变量,若定义指针变量指向结构体类型变量,则可以通过指针来引用结构体类型变量.7.3.1 指向结构体类型变量的使用首先让我们定义结构体:struct stu{char name[20];long number;float score[4];} ;再定义指向结构体类型变量的指针变量:struct stu *p1, *p2 ;定义指针变量p 1.p 2,分别指向结构体类型变量.引用形式为:指针变量→成员:[例7-2] 对指向结构体类型变量的正确使用.输入一个结构

结构体数组的定义和引用(三)

第七步,定义m a i n ( )函数,列出完整的程序清单.#include #include struct stu{char name[20];long number;float score[4];} ;m a i n ( ){void input(); / *函数声明* /void aver();void order();void output();void out_row();struct stu stud[4]; / * 定义结构体数组* /float row[3];i n p u t

结构体数组的定义和引用(二)

第四步,按平均成绩排序,排序算法采用冒泡法.void order(arr,n)struct stu arr[];int n;{ struct stu temp;int i,j,x,y;f o r ( i = 0 ; i < n - 1 ; i + + )f o r ( j = 0 ; j < n - 1 - i ; j + + )if (arr[j].score[3]>arr[j+1].score[3]){ temp=arr[j]; /结*构体类型变量不允许以整体输入或输出,但允许相互赋

结构体类型变量的定义和引用

前面的课程我们学习了一些简单数据类型(整型.实型.字符型)的定义和应用,还学习了数组(一维.二维)的定义和应用,这些数据类型的特点是:当定义某一特定数据类型,就限定该类型变量的存储特性和取值范围.对简单数据类型来说,既可以定义单个的变量,也可以定义数组.而数组的全部元素都具有相同的数据类型,或者说是相同数据类型的一个集合.在日常生活中,我们常会遇到一些需要填写的登记表,如住宿表.成绩表.通讯地址等.在这些表中,填写的数据是不能用同一种数据类型描述的,在住宿表中我们通常会登记上姓名.性别.身份证号

深入分析C语言中结构体指针的定义与引用详解_C 语言

指向结构体类型变量的使用首先让我们定义结构体:struct stu{char name[20];long number;float score[4];} ;再定义指向结构体类型变量的指针变量:struct stu *p1, *p2 ;定义指针变量p 1.p 2,分别指向结构体类型变量.引用形式为:指针变量→成员:[例7-2] 对指向结构体类型变量的正确使用.输入一个结构体类型变量的成员,并输出. 复制代码 代码如下: #include <stdlib.h> /*使用m a l l o c (

编程c语言-vs2013中如何定义一个结构体该结构体定义一个结构体数组 结构体数组中包含一个链表

问题描述 vs2013中如何定义一个结构体该结构体定义一个结构体数组 结构体数组中包含一个链表 这样定义对么 编译时报错 缺少:在*前面 这是哪错了啊 请高手指点指点 解决方案 你把两个结构体的定义调换一下次序就没问题啦,要先声明或定义结构体:Station,才能使用 解决方案二: 因为struct Station是在struct Train结构体之后才定义的,所以你要在这之前先声明一下struct Train 解决方案三: 做一个前向声明,或者调换两个结构位置都可以. 解决方案四: 结构体数组

C语言 结构体数组详解及示例代码_C 语言

所谓结构体数组,是指数组中的每个元素都是一个结构体.在实际应用中,结构体数组常被用来表示一个拥有相同数据结构的群体,比如一个班的学生.一个车间的职工等. 定义结构体数组和定义结构体变量的方式类似,请看下面的例子: struct stu{ char *name; //姓名 int num; //学号 int age; //年龄 char group; //所在小组 float score; //成绩 }class[5]; 表示一个班级有5个学生. 结构体数组在定义的同时也可以初始化,例如: str

C++中结构体的类型定义和初始化以及变量引用_C 语言

C++结构体类型的定义和初始化 有时需要将不同类型的数据组合成一个有机的整体,以供用户方便地使用.这些组合在一个整体中的数据是互相联系的.例如,一个学生的学号.姓名.性别.年龄.成绩.家庭地址等项,都是这个学生的属性,见图 可以看到学号(num).姓名(name).性别(sex).年龄(age).成绩(score ).地址(addr)是与姓名为"Li Fun"的学生有关的.如果在程序中将num,name,sex,age,score,addr分别定义为互相独立的变量,就难以反映出它们之间