c语言结构体数组,c语言编程:建立一个结构体数组?
c语言结构体数组,c语言编程:建立一个结构体数组?详细介绍
本文目录一览: c语言中数组和结构体有什么区别?
1、定义上的区别:
数组是同类型数据的集合;结构体可以是同类型也可以是不同类型数据的集合。
举例如下:
int a[5]; // 数组a的5个元素都是int类型
struct stu
{
int num;
char name[5];
float score;
}std; // 结构体std的三个成员分别是int型、char型和float型,数据类型不同。
2、调用时候的区别
数据是直接用形如“数组名[下标]”的方式调用,如a[3],表示数组a的第4个元素(数组下标从0开始);
结构体是用结构体成员运算符来调用的,如:std.num,表示调用结构体std中的num变量。
c语言定义结构体数组
#include
structstudent
{
intnum;
charname[20];
floatscore1,score2,sum,average;
};
voidmain()
{
structstudentstu[5];
inti;
for(i=0;i<5;i++)
{
printf("请依次输入第%d个学生的学号,姓名,和两门成绩:",i+1);
scanf("%d%s%f%f",&stu[i].num,stu[i].name,&stu[i].score1,&stu[i].score2);
stu[i].sum=stu[i].score1+stu[i].score2;
stu[i].average=stu[i].sum/2;
}
printf("学号姓名成绩总成绩平均成绩\n");
for(i=0;i<5;i++)
printf("%d%s%.2f%.2f%.2f
%.2f\n",stu[i].num,stu[i].name,stu[i].score1,stu[i].score2,stu[i].sum,stu[i].average);
}
1、C语言结构体数组的定义:数组是有序的并且具有相同类型的数据的集合。
2、结构数组就是具有相同结构类型的变量集合。假如要用C语言,定义一个班级40个同学的姓名、性别、年龄和住址, 可以做成一个结构数组。
结构数组成员的访问是以数组元素为结构变量的,它的形式为:
1、结构数组元素—成员名。
2、例如:student[0].name,student[30].age
3、实际上结构数组相当于一个二维构造, 第一维是结构数组元素, 每个元素是一个结构变量, 第二维是结构成员。
C语言结构体数组的定义是什么?
结构数组就是具有相同结构类型的变量集合。
假如要定义一个班级40个同学的姓名、性别、年龄和住址, 可以定义成一个结构数组。如下所示:
struct{char name[8];char sex[2];int age;char addr[40];}student[40];
也可定义为:
struct string{char name[8];char sex[2];int age;char addr[40];};struct string student[40]。
C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。
C语言结构体数组
#define N 3#include
struct Book{ char Sm[100]; //书名 char Zz[20]; //作者 int Nian,Yue,Kc;};void paixu(struct Book s[],int n){ struct Book t; int i,j; for(i=0;i
<n-1;i++) for(j="i+1;j<n;j++)" if (s[i].kc<s[j].kc){ t="s[i];s[i]=s[j];s[j]=t;" } }void print(struct book s[],int n){ int i; for(i="0;i<N;i++)" printf("%s %s %d %d\n",s[i].sm,s[i].zz,s[i].nian,s[i].yue,s[i].kc);}int main(){ struct s[n]; scanf("%s%s%d%d%d",s[i].sm,s[i].zz,&s[i].nian,&s[i].yue,&s[i].kc); paixu(s,n); print(s,n);}
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
#include
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
.name,
&stu
.age,&stu
.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\n",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语言编程:建立一个结构体数组?
分析题意:
一、要定义两个结构体,一个是日期年月日,一个是员工。
二、程序包含三个功能:1、结构数组的输入。2、结构数组的输出。3、统计平均工资。根据编程习惯,三功能要写成独立函数,方便扩展和调用。
ps:员工数量定义成常量,也为编程习惯,便于修改。另外,日期验证我只写了月份检测给你参考。需扩展,自行编写函数验证。
#include
#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的信息:\n",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("输入日期不符合,请重新输入!\n\n"),i--;
continue;
}
printf("工资:"),scanf("%d",&emes[i].wage);
printf("\n");
}
}
void outputInfo(EME emes[])
{
int i;
printf("所有员工的信息为:----------------------------\n");
for(i=0,printf("员工%d的信息:\n",i+1);i
<m;i++)
{
printf("工号:%d\n",emes[i].id);
printf("姓名:%s\n",emes[i].name);
printf("日期:%04d-%02d-%02d\n",emes[i].date.year,emes[i].date.month,emes[i].date.day);
printf("工资:%d\n",emes[i].wage);
printf("\n");
}
}
float getAvg(EME emes[])
{
int i;
float sum=0;
for(i=0;i
<m;i++)
sum+=emes[i].wage;
return sum/M;
}
</m;i++)
</m;i++)
</m;i++)
结构体数组定义和使用是什么?
要定义结构体数组,得先定义结构体,像这样:
typedef struct tagstu
{
char name[32];
int age;
}Stu;
然后用结构体类型来定义结构体数组,如:
Stu stus[10];
这是定义了一个有10个元素的结构体数组叫stus。
至于结构体数组的使用方式,跟其它数组类似,如使用下标为5的元素可以这样做:
strcpy(stus[5].name,"lili");
stus[5].age=16;
这就定义了一个结构体数组,共有 10 个元素,每个元素都是一个结构体变量,都包含所有的结构体成员。 结构体数组的引用与引用一个结构体变量在...
所谓结构体数组,是指数组中的每个元素都是一个结构体。在实际应用中,C语言结构体数组常被用来表示一个拥有相同数据结构的群体,比如一个班的学生、一个车间的职工等。 结构体可以存储不同的数据类型,将他们互相联系起来。结构体数组可以连续存储多个结构体,和数组作用相似。
结构体数组指针类型:
一个结构体变量的指针就是该变量所占据的内存段的起始地址。可以设一个指针变量,用来指向一个结构体变量,此时该指针变量的值是结构体变量的起始地址,指针变量也可以用来指向结构体数组中的元素。
结构,汉语词汇,读音为jié gòu,意思由组成整体的各部分的搭配和安排;建筑物承重部分的构造;构筑;建造等意思。
释义
1、连结构架,以成屋舍。
2、建筑式样。
3、今指建筑物上承担重力或外力的部分的构造。
4、指诗文书画等各部分的搭配和排列。
5、勾结。
关于c语言中的结构体数组作为函数参数传递的
printf("The Euclidean distance between two Points is %lf",PointDist(d[2]));
这一行有问题,你直接把d[2]作为参数传递过去了,d[2]是一个Point类型,而函数的形参是指针类型,所以会报错。要做的就是改成printf("The Euclidean distance between two Points is %lf",PointDist(d));就好。
printf("The Euclidean distance between two Points is %lf",PointDist(d[2]));
输出格式是%lf, 而PointDist(Point)的返回值是int型的。
还有PointDist()是求两点见的距离吗?似乎公式不对呀?
坐标最好使用float型数据,
楼主朋友,你的程序有问题的几个地方是:
1、参数传递不对,因为你的函数定义时的形参为 以Point 为基类型的指针,而在函数声明和调用中你用的是Point 类型变量;
2、函数的返回值类型和你最后输出的时候的数据格式说明符不符,因此出现了你所说的错误。
修改如下就没问题了
#include
#include
typedef struct {int x; int y;} Point;
int PointDist(Point *);
int main()
{
Point d[2];
printf("Enter the x value of point1:"); scanf("%d",&d[0].x);
printf("Enter the y value of point1:"); scanf("%d",&d[0].y);
printf("Enter the x value of point2:"); scanf("%d",&d[1].x);
printf("Enter the y value of point2:"); scanf("%d",&d[1].y);
printf("The Euclidean distance between two Points is %d\n",PointDist(d)); //把lf改成 d
system("pause");
return 0;
}
int PointDist(Point dot[2]) //实际上如果不修改上面的lf时可以把此处以及函数声明中
//的int改成double
{
int a,b;
a=(dot[0].x-dot[1].x)+(dot[0].y-dot[1].y);
b=a+1;
return b;
}
1、结构体数组传给指针,实质上是不可能的,本质上传的是数组首地址,根据偏移来操作数组,这样看起来好像是真在操作数组一样。就和普通指针一样使用,只不过它是结构体数组。2、例程:
typedef struct Student{ char name[10] ; int age ;}Student;#define LEN 10 //print all Student infomationvoid fun(Student *pStu,int len){ int i ; for(i = 0 ;i < len ;++i) { printf("%s\t%d",pStu[i].name,pStu[i].age) ; }}int main (){ Student stu[LEN] ; fun(stu,LEN) ; }
C语言 结构体数组 计算个数
法一:
可以自己定义一个计数器
int
count=0;
在循环输入过程中,使用它来进行计数。
法二:在开始过程中将
stu[100]的char
name[20]全部初始化为\0,输入完毕后,在循环依次判断是否为\0,统计数字。
建议使用法一。
不过楼上说得对,这题确实没有太大的意义,如果是动态数组的话,还有点意思。这静态的,没意思。
给数组初始化,判断值是否被改变-----------------这题没意义的
第一种方法,设置一个结构体变量的成员为某个具体的常量,进行遍历寻找得出变量的数量
第二种方法,在输入时计算
第三种,建立一个有指针域的动态链表
用第三种方法实现的一个例子,可用来学籍管理系统
#include
#include
#include
typedef
struct
student
{
int
num;
char
name[20];
char
sex[3];
struct
student
*next;
}LIST;
LIST
*CreateList()
{
int
i,n;
LIST
*head=NULL,*pre,*cur;
printf("请输入学生的总个数:");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
printf("正在输入第%d个学生数据!\n",i);
pre=(LIST
*)malloc(sizeof(LIST));
pre->next=NULL;
printf("请输入该学生的姓名:");
scanf("%s",&pre->name);
printf("请输入该学生的学号:");
scanf("%d",&pre->num);
printf("请输入该学生的性别:");
scanf("%s",&pre->sex);
if(NULL==head)
head=pre;
else
cur->next=pre;
cur=pre;
}
return
head;
}
int
GetNum(LIST
*head)
{
int
i=1;
while(head->next!=NULL)
{
i++;
head=head->next;
}
return
i;
}
void
Disp(LIST
*head)
{
int
i=1;
printf("正在输出学生信息!\n");
while(head->next!=NULL)
{
printf("正在输入第%d个学生的数据!\n",i++);
printf("学生姓名:\t%s\n学生学号:\t%d\n学生性别:\t%s\n",head->name,head->num,head->sex);
head=head->next;
}
printf("正在输入第%d个学生的数据!\n",i++);
printf("学生姓名:\t%s\n学生学号:\t%d\n学生性别:\t%s\n",head->name,head->num,head->sex);
printf("学生信息输出结束!\n");
}
void
DestroyList(LIST
*head)
{
LIST
*pre=head;
while(head->next!=NULL)
{
pre=pre->next;
free(head);
head=pre;
}
}
int
main(void)
{
LIST
*head;
head=CreateList();
printf("一共有%d个学生数据!\n",GetNum(head));
Disp(head);
DestroyList(head);
getch();
return
0;
}
满意采纳,不满意追问
C语言 结构体数组的个数如何自己定义?
#define N x 改为#define N 3
就可以
因为数组的个数应该是常量而不是变量
不用定义结构体数组,定义一个结构体变量,然后再添加元素的时候使用函数malloc.
C里的数组除了动态分配,必须指明分配大小
#include
void main( )
{
int x;
x=3;
#define N x
struct student
{int num;
char name[20];
char sex;
float weight;
}*stu;
stu=new student[N];//用指针,动态分配
//stu[0].num;这样调用
}
int i;
struct A *a;
scanf("%d",&i);
a = (struct A *)malloc(sizeof(struct A)* i);
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 st)); //动态分配n个结构体空间,接下来array的操作,与数组操作是相同的,如:array[0].x=1 ;C99以后,C语言标准开始支持动态定义数组,但动态数组,在其确定个数之后,在其生命期中,就不可变了。如:
struct st { int x,y; char str[10];};int n;printf("input n: "); scanf("%d", &n);struct st array[n] ; //定义动态数组array[0].x=1 ;