c语言编程:建立一个结构体数组?

作者&投稿:安钢 (若有异议请与网页底部的电邮联系)
C语言结构体数组 的输入方式~

C
语言中,结构体(struct)是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。
结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。
定义与声明
结构体的定义如下所示,struct为结构体关键字,tag为结构体的标志,member-list为结构体成员列表,其必须列出其所有成员;variable-list为此结构体声明的变量。
在实际应用中,C语言结构体数组常被用来表示一个拥有相同数据结构的群体,比如一个班的学生、一个车间的职工等。
在C语言中,定义结构体数组和定义结构体变量的方式类似;
例:
struct stu{
char*name;//姓名
int num;//学号
int age;//年龄
char group;//所在小组
float score;//成绩
}class[5];
表示一个班级有5个学生。

扩展资料:结构体数组的引用与引用一个结构体变量在原理上是一样的。只不过结构体数组中有多个结构体变量,我们只需利用for循环一个一个地使用结构体数组中的元素。
下面编写一个程序,编程要求:从键盘输入5个学生的基本信息,如姓名、年龄、性别、学号,然后将学号最大的学生的基本信息输出到屏幕。
#include<stdio.h>
#include<string.h>
struct STU
{
char name[20];
int age;
char sex;
char num[20];
};
void OutputSTU(struct STU stu[5]);
//函数声明,该函数的功能是输出学号最大的学生信息
int main(void)
{
int i;
struct STU stu[5];
for(i=0;i<5;++i)
{
printf("请输入第%d个学生的信息:",i+1);
scanf("%s%d%c%s",
stu<i>.name,
&stu<i>
.age,&stu<i>
.sex,stu<
i>.num);/*%c
前面要加空格,不然输入时会将空格赋给%c*/
}
OutputSTU(stu);
return 0;
}
void OutputSTU(struct STU stu[5])
{
struct STU stumax=stu[0];
int j;
for(j=1;j<5;++j)
{
if(strcmp(stumax.num,stu[j]
.num)<0)//strcmp函数的使用
{
stumax=stu[j];
}
}
printf("学生姓名:%s学生年龄:%d学生性别:%c学生学号:
%s
",stumax.name,
stumax.age,stumax.
sex,stumax.num);
}
输出结果是:
请输入第1个学生的信息:小红22 F Z1207031
请输入第2个学生的信息:小明21 M Z1207035
请输入第3个学生的信息:小七23 F Z1207022
请输入第4个学生的信息:小欣20 F Z1207015
请输入第5个学生的信息:小天19 M Z1207024
学生姓名:小明学生年龄:21学生性别:M学生学号:Z1207035
参考资料:
百度百科——结构体

所谓结构体数组,是指数组中的每个元素都是一个结构体。在实际应用中,C语言结构体数组常被用来表示一个拥有相同数据结构的群体,比如一个班的学生、一个车间的职工等。
结构体可以存储不同的数据类型,将他们互相联系起来。结构体数组可以连续存储多个结构体,和数组作用相似。比如想定义同一个最小外接矩形的四个坐标值,并给予这个矩形一个特征编号。当需要存储多个最小外接矩形的信息时,就需要动态申请一个结构体数组。
struct 结构体类型名{类型名 成员名;类型名 成员名;……},先声明结构体类型,再定义结构体变量名。声明结构体类型,不分配空间,定义结构体类型变量,就要分配内存空间。

扩展资料:
结构体数组指针类型:
一个结构体变量的指针就是该变量所占据的内存段的起始地址。可以设一个指针变量,用来指向一个结构体变量,此时该指针变量的值是结构体变量的起始地址,指针变量也可以用来指向结构体数组中的元素。
1、类型一:
指向结构体变量的指针引用结构体变量中的成员。
2、类型二:
用结构体变量和指向结构体变量的指针构成链表,链表是一种常见的重要的数据结构。链表有一个“头指针”变量,以head表示,它存放一个地址。该地址指向一个元素。
链表中的每一个元素称为“结点”,每个结点都应包括两个部分:
一是用户需要用的实际数据,
二是下一个结点的地址。
链表中各元素在内存中的存储单元可以是不连续的。要找某一元素,可以先找到上一个元素,根据它提供的下一元素地址找到下一个元素。这种链表的数据结构,必须利用结构体变量和指针才能实现。
可以声明一个结构体类型,包含两种成员,一种是用户需要用的实际数据,另一种是用来存放下一结点地址的指针变量。
参考资料来源:百度百科—结构体类型—数组

分析题意:

一、要定义两个结构体,一个是日期年月日,一个是员工。

二、程序包含三个功能:1、结构数组的输入。2、结构数组的输出。3、统计平均工资。根据编程习惯,三功能要写成独立函数,方便扩展和调用。

ps:员工数量定义成常量,也为编程习惯,便于修改。另外,日期验证我只写了月份检测给你参考。需扩展,自行编写函数验证。

#include <stdio.h>

#define M 3//最大员工数量

typedef struct date

{

    int year;

    int month;

    int day;

}YMD;

typedef struct employee

{

    int id;//工号

    char name[20];//姓名

    YMD date;//日期

    int wage;

}EME;

void inputInfo(EME emes[]);//输入

void outputInfo(EME emes[]);//输出

float getAvg(EME emes[]);//求平均工资

int main()

{

    EME emes[M];//员工结构体数组

    inputInfo(emes);

    outputInfo(emes);

    printf("平均工资:%f",getAvg(emes));

    return 0;

}

void inputInfo(EME emes[])

{

    int i;

    for(i=0;i<M;i++)

    {

        printf("请输入员工%d的信息:
",i+1);

        printf("工号:"),scanf("%d",&emes[i].id);

        printf("姓名:"),scanf("%s",emes[i].name);

        printf("日期(分别输入年月日,空格分割):"),scanf("%d%d%d",&emes[i].date.year,&emes[i].date.month,&emes[i].date.day);

        if(emes[i].date.month>12 || emes[i].date.month<=0)//日期输入的验证不通过时,重新输入,验证可单独写函数,这里只做参考!

        {

            printf("输入日期不符合,请重新输入!

"),i--;

            continue;

        }

        printf("工资:"),scanf("%d",&emes[i].wage);

        printf("
");

    }

}

void outputInfo(EME emes[])

{

    int i;

    printf("所有员工的信息为:----------------------------
");

    for(i=0,printf("员工%d的信息:
",i+1);i<M;i++)

    {

        printf("工号:%d
",emes[i].id);

        printf("姓名:%s
",emes[i].name);

        printf("日期:%04d-%02d-%02d
",emes[i].date.year,emes[i].date.month,emes[i].date.day);

        printf("工资:%d
",emes[i].wage);

        printf("
");

    }

}

float getAvg(EME emes[])

{

    int i;

    float sum=0;

    for(i=0;i<M;i++)

        sum+=emes[i].wage;

    return sum/M;

}




C语言编程实现: 一个4行4列的二维数组
include <stdio.h>void main(){int i,j,s=0,a[4][4];for(i=0;i<4;i++)for(j=0;j<4;j++){scanf("%d",&a[i][j]);if(i==j) s+=a[i][j];}printf("\\n%d",s);}

用c语言怎么创建一个窗口?
通过调用windows API来创建窗口:#include<windows.h>int main(){MessageBox(NULL,"Hello World!","C图形程序",MB_OK);return 0;}这个是最简单的了 至于MFC QT 什么的 代码太多了

怎样建立一个论坛?用什么语言?
4)PHP源码:我们重点介绍一下PHP论坛程序。PHP语言是一种类HTML语言,与HTML语言有许多相似的地方,这对于制作网页来说,就带来了便利,只要稍微懂一些HTML语言,就可以看懂PHP语言的大致意思。PHP源码与其他几种源码比较起来,优点是代码编写简单,执行效率高,系统资源占用的少。目前PHP论坛程序主要有:...

C语言程序设计,做一个简单计算器
include <conio.h> include <math.h> void menu();\/\/声明部分 void add();\/\/"+"void sub();\/\/"-"void mul();\/\/"*"void div();\/\/"\/"void remain();\/\/"%"void add_n_to_m();\/\/"从n到m的和"void factor();\/\/"!"void sqrta();\/\/"开根"main(){ int i;while(1){ s...

用C语言编程 通过键盘输入一个小写字母,要求将其转化为对应的大写字母后...
ASCII 码使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符。标准ASCII 码也叫基础ASCII码,使用7 位二进制数(剩下的1位二进制为0)来表示所有的大写和小写字母,数字0 到9、标点符号, 以及在美式英语中使用的特殊控制字符。其中:0~31及127(共33个)是控制字符或通信专用字符(...

求java用c语言写一个的一个关于学生的名字,学号,成绩等一些的全英文编程...
\/ 学生成绩管理程序 编制一个统计学生考试分数的管理程序。设学生成绩已以一个学生一个记录的形式存储在文件中,每位学生记录包含的信息有:姓名,学号和各门功课的成绩。程序具有以下几项功能:求出各门课程的总分,平均分,按姓名,按学号寻找其记录并显示,浏览全部学生成绩和按总分由高到低显示学生...

C语言编程,把第一个文件内容读出来倒着写入另一个文件。可以用链表或...
\/\/手动建立一个res.txt,文件,输入字符串 \/\/再建立一个空白文件dst.txt include <stdio.h> include <stdlib.h> include <string.h> void main(){ FILE *fp;char a[100];if((fp=fopen("res.txt","r"))==NULL){ printf("文件打开错误");exit(0);} int i=0;char c=fgetc(fp);w...

C语言问题,编写一个程序计算矩形的面积和周长
1.代码参考:(边长可以是整数也可以是小数;实现乘法的运算符是*)2.代码参考:

如何为C语言添加一个本库没有的头文件,自己在编程的时候有用到_百度知...
把自己的头文件存为*.h文件名。然后在要调用该头文件的程序开头用 #include <*.h>如果你指的是包含一个你编译器没有的第三方头文件的话,那么首先检查该头文件代码是否被编译器支持,如果支持的话使用#include包含她就可以了。

输入年份输出属相c语言,编写程序,输入一个年份,判断该年属相.(提示s...
关于c语言 已知年属鼠,输入一个四位的整数(-之间)代表年份,显示这一年属相是什么? \/\/c++的 include include usingnamespacestd;intmain()\/\/year用来记录输入的年份 intyear;cin>>year;\/\/生肖相同的年份对于模12同余 \/\/所以建立一个生肖数组 stringZodiacSigns[12]={“Rat”,&#...

辽阳市13882332609: C语言编程.定义一结构体数组 -
示秆比卡: DEV C++下运行成功#include<stdio.h>#include<stdlib.h> typedef struct { char XH[100]; char XM[100]; char JG[100]; float CJ; }student; void paixu(student stu[],int n) { int t,j=0; while(j<n) { for(int i=j+1;i<n;i++) { if(stu[i].CJ>stu[j].CJ) { t=stu[i].CJ; stu[i].CJ...

辽阳市13882332609: C语言 结构体,数组 -
示秆比卡: //你想输入几种水果的名字的话,就得创建一个结构体数组变量呀#include <stdio.h> #include <stdlib.h> struct friut {char name[20];float price; //价格的话用一个变量来表示就行了,不需要用到数组 }; int main() {struct friut a[5];//比如创建一...

辽阳市13882332609: C语言结构体数组的定义和赋值 -
示秆比卡: C99标准出来以前,C语言不支持动态定义数组大小,只能采用动态分配指针方式来完成动态数组的个数定义.如: struct st {int x,y;char str[10]; }; struct st *array ; int n; printf("input n: "); scanf("%d", &n); array=(struct st*)malloc(n*sizeof(struct ...

辽阳市13882332609: 用c语言定义一个职工结构体数组 -
示秆比卡: #include "stdio.h"#include <string.h>#define N 5 struct Employee { char name[20]; long id; float salary; int age; }; void main() { struct Employee emp[N]; int i,j; float t; for (i=0;i<N;i++) { printf("name:"); scanf("%s",emp[i].name); printf("ID.:"); ...

辽阳市13882332609: 怎么在C语言中定义一个数组,数组元素的数据类型为自己定义的结构体类型 -
示秆比卡: struct zdy_st { int data; char name[10]; }; struct zdy_st myStruct[5] ; //定义一个结构体数组,有五个元素

辽阳市13882332609: 结构体内 定义数组 c语言 -
示秆比卡: 可以.student s; s.score[0] = 100; s.score[1] = 95; s.score[2] = 60;

辽阳市13882332609: c语言编程 定义一个结构体数组,存放12个月的信息,每个数组元素有三个成员组成:月份的数字表%C
示秆比卡: struct Info { char month[4]; //...另外两个成员 }; Info Ainfo[12]; ////初始化/// char temp[4]; for(int i=0;i&lt;12;i++) { sprintf(temp,"%c",i); strcpy(Ainfo[i].month,temp); }

辽阳市13882332609: c语言声明结构体数组 -
示秆比卡: 估计是使用空指针,检查main.c调用read

辽阳市13882332609: C语言结构体数组 -
示秆比卡: scanf_s("%s %d %d %d", s[p].name,10,s[p].score[0],1, s[p].score[1],1, s[p].score[2]),1; 前面的name不用加& 因为是数组名 但是后面的score都需要加&的啊、

辽阳市13882332609: 用c语言写:定义一个学生结构体(包含姓名,学号,语文,数学,外语,总分).定义一个学生结构体数组. -
示秆比卡: #include <stdio.h> struct student {char name[20];int idnum;float score[3]; //分别存三科成绩double total; // 总分 }; struct student * highscore(struct student *s, int n) {int i;struct student * high = s;for(i = 0; i < n; i++) {(s+i)->total = (s+i)->score...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网