c语言定义结构体数组
‘壹’ c语言定义一个具有5个元素的结构体数组,并进行初始化。写两个函数:1.输出这五个学生的信息;
#include<stdio.h>
structs
{
intnum;
charname[10];
floatscore;
};
intmain(void)
{
structsstu[5]={
{1,"xiaozhao",50.5},
{2,"xiaoqian",60.5},
{3,"xiaosun",75.5},
{4,"xiaoli",15.5},
{5,"xiaozhou",15.5}
};
floatvar=0.0f;
for(inti=0;i<5;i++)
{
printf("学号:%d 姓名:%s 成绩:%.2f ",stu[i].num,stu[i].name,stu[i].score);
var+=stu[i].score;
}
var/=5;
printf("平均分:%.2f ",var);
return0;
}
‘贰’ 用C语言写的数据结构的定义
在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。
在C语言中,定义一个结构的一般形式为:
struct结构名
{
//成员表列
};
成员表由若干个成员组成, 每个成员都是该结构的一个组成部分。对每个成员也必须作类型说明,其形式为:“类型说明符 成员名;”。成员名的命名应符合标识符的书写规定。例如:
struct stu
{
int num;
char name[20];
char sex;
float score;
};
在这个结构定义中,结构名为stu,该结构由4个成员组成。 第一个成员为num,整型变量;第二个成员为name,字符型数组;第三个成员为sex,字符型变量;第四个成员为score,浮点型变量。 应注意在括号后的分号是必不可少的。
然后,当结构定义完成后,即创建了一种数据类型,可以像int、float等内置类型一样使用,以上面定义的stu结构体来和int类型对比着看。
int a;//定义一个int类型的变量a
stu a; //定义一个stu类型的变量a
int *p; //定义一个int类型的指针p
stu *p; //定义一个stu类型的指针p
int a[10];//定义一个int类型的数组a,它有10个元素,每个元素是int类型
stu a[10];//定义一个stu类型的数组a,它有10个元素,每个元素是stu类型。
‘叁’ C语言结构体数组的定义
所谓结构体数组,是指数组中的每个元素都是一个结构体。在实际应用中,C语言结构体数组常被用来表示一个拥有相同数据结构的群体,比如一个班的学生、一个车间的职工等。
结构体可以存储不同的数据类型,将他们互相联系起来。结构体数组可以连续存储多个结构体,和数组作用相似。比如想定义同一个最小外接矩形的四个坐标值,并给予这个矩形一个特征编号。当需要存储多个最小外接矩形的信息时,就需要动态申请一个结构体数组。
struct 结构体类型名{类型名 成员名;类型名 成员名;……},先声明结构体类型,再定义结构体变量名。声明结构体类型,不分配空间,定义结构体类型变量,就要分配内存空间。
(3)c语言定义结构体数组扩展阅读:
结构体数组指针类型:
一个结构体变量的指针就是该变量所占据的内存段的起始地址。可以设一个指针变量,用来指向一个结构体变量,此时该指针变量的值是结构体变量的起始地址,指针变量也可以用来指向结构体数组中的元素。
1、类型一:
指向结构体变量的指针引用结构体变量中的成员。
2、类型二:
用结构体变量和指向结构体变量的指针构成链表,链表是一种常见的重要的数据结构。链表有一个“头指针”变量,以head表示,它存放一个地址。该地址指向一个元素。
链表中的每一个元素称为“结点”,每个结点都应包括两个部分:
一是用户需要用的实际数据,
二是下一个结点的地址。
链表中各元素在内存中的存储单元可以是不连续的。要找某一元素,可以先找到上一个元素,根据它提供的下一元素地址找到下一个元素。这种链表的数据结构,必须利用结构体变量和指针才能实现。
可以声明一个结构体类型,包含两种成员,一种是用户需要用的实际数据,另一种是用来存放下一结点地址的指针变量。
参考资料来源:网络—结构体类型—数组
‘肆’ c语言编程:建立一个结构体数组
分析题意:
一、要定义两个结构体,一个是日期年月日,一个是员工。
二、程序包含三个功能: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语言求助:定义一个学生结构体数组stu[10],结构体类型
#include <stdio.h>
#define N 10
typedef struct student {
int num;//成员num (学号)的类型为整型
char name[21];//成员name (姓名)的类型为字符数组
char sex;//成员sex(性别)的类型为字符型
int age; //成员score(分数)的类型为double类型
}stu;
void show(stu a[],int n) {
for(int i = 0; i < n; ++i)
printf("%d %d %s %c %d ",i + 1,a[i].num,a[i].name,a[i].sex,a[i].age);
printf(" ");
}
int find(stu a[],int n,int num) {
for(int i = 0; i < n; ++i) {
if(a[i].num == num) {
printf("%d %s %c %d ",a[i].num,a[i].name,a[i].sex,a[i].age);
return i;
}
}
return 0;
}
int main() {
int i,num;
stu a[N];
for(i = 0;i < N; ++i) {
scanf("%d",&a[i].num,a[i]);
fflush(stdin);
scanf("%s",a[i].name);
fflush(stdin);
scanf("%c",&a[i].sex);
scanf("%d",&a[i].age);
}
show(a,N);
printf("请输入待查学号:");
scanf("%d",&num);
if(!find(a,N,num)) printf(" 没有找到学号为%d的学生! ",num);
return 0;
}
‘陆’ C语言结构体数组的定义和赋值
intmain(void){
structstudentsbao={};
printf("%d,%s ",bao.id,bao.name);//输出是4224528,空(应该是null)
//structstudentsbao={3,"123"};可以。第一种赋值方法
//strcpy(bao.name,"bao");//可以,
//printf("%d,%s ",bao.id,bao.name);
//bao.name="bao";错误“stray'351'inprogram”其他是乱码,
//bao.name[0]='a';
//bao.name[0]='/0';
//printf("%d,%s ",bao.id,bao.name);
/*这样可以,*/
//chararr[10]="baobao";
////bao.name=arr;//error""
//scanf("%s",bao.name);//可以,
//printf("%d,%s ",bao.id,bao.name);
//所以scanf那一类函数都可以。
//还有就是memcpy函数也是可以的
return0;
}
(6)c语言定义结构体数组扩展阅读
C语言结构体数组的直接赋值及数组的长度计算:
#include<stdio.h>
//自定义一个字符串的结构体,包含猜或字符串和字符串长度两个变量
typedefstructStr{
charch[100];
intlength;//char数组(字符串)的长度
}myStr;
//刚开始声明变量时每个变穗漏伍量的字符串长度length都为0
//这里以长度为10的数组为例,数组长度是1000
//对第0个到第9个结构体数组的长度同时赋值为0
myStrmyStr1[10]={
[0...9]={
.length=0,
}
};
intmain(){
inti;
for(i=0;i<搜冲10;i++){
printf("%d ",myStr1[i].length);
}
return0;
}