c语言里面的结构体是什么意思
结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,叫做结构。
在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。
结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。
扩展资料
将一个结构体变量中的数据传递给另一个函数,有下列3种方法:
(1) 用结构体变量名作参数。一般较少用这种方法。
(2) 用指向结构体变量的指针作实参,将结构体变量的地址传给形参。
(3) 用结构体变量的引用变量作函数参数。
在软件开发过程中,常常需要动态地分配和撤销内存空间,例如对动态链表中结点的插入与删除。C语言中是利用库函数malloc和free来分配和撤销内存空间的。
参考资料来源:百度百科–结构体
C语言结构体
#include stdio.h
#include string.h
#define MAX_STUDENT_NUM 5 //学生个数
#define MAX_SCORE_NUM 3 //每个学生成绩个数
typedef struct student
{
char name[32];//姓名
int index; //学号
int score[MAX_SCORE_NUM]; //单项成绩数组
int avg_score;//平均成绩
int rank; //名次
}STUDENT_T;
//根据学生成绩进行冒泡排序
void ranking(STUDENT_T *a, int cnt)
{
int i = 0;
int j = 0;
STUDENT_T tmp = {0};
for (i = 0; i cnt; i++)
{
for (j = i+1; j cnt; j++)
{
if (a[i].avg_score a[j].avg_score)
{
memcpy(tmp, a[j], sizeof(STUDENT_T));
memcpy(a[j], a[i], sizeof(STUDENT_T));
memcpy(a[i], tmp, sizeof(STUDENT_T));
}
}
}
//计算名次并打印
for (i = 0; i cnt; i++)
{
//名次要考虑到并列的情况
if (0 == i || a[i].avg_score != a[i-1].avg_score)
{
j = i+1;
}
a[i].rank = j;
}
}
//计算平均成绩
void average(STUDENT_T *a, int cnt)
{
int i = 0;
int j = 0;
for (i = 0; i cnt; i++)
{
for (j = 0; j MAX_SCORE_NUM; j++)
{
a[i].avg_score += a[i].score[j];
}
a[i].avg_score /= MAX_SCORE_NUM;
}
}
void save(STUDENT_T *a, int cnt)
{
int i = 0;
int j = 0;
FILE *pf = NULL;
char tmp_str[128] = {0};
char score_str[MAX_SCORE_NUM][32] = {0};
//打开文件 没有即创建有则覆盖写入
pf = fopen(“./students.txt”, “w+”);
if (!pf)
{
printf(“文件打开失败\n”);
return;
}
//先拼接字符串再通过fprintf写入文件
for (i = 0; i cnt; i++)
{
sprintf(tmp_str, “姓名:%s 学号:%d 平均成绩:%d”, a[i].name, a[i].index, a[i].avg_score);
for (j = 0; j MAX_SCORE_NUM; j++)
{
sprintf(score_str[j], ” 成绩%d:%d”, j+1, a[i].score[j]);
strcat(tmp_str, score_str[j]);
}
fprintf(pf, “%s\n”, tmp_str);
}
//关闭文件
fclose(pf);
}
int main(int argc, char *argv[])
{
int i = 0;
int j = 0;
int rank = 0;
int cnt = MAX_STUDENT_NUM;
STUDENT_T student[MAX_STUDENT_NUM] = {0};
char tmp[32] = {0};
printf(“请输入学生人数:\n”);
scanf(“%d”, cnt);
if (cnt MAX_STUDENT_NUM)
{
printf(“最多%d个学生\n”, MAX_STUDENT_NUM);
return;
}
printf(“请按序号依次输入%d个学生的信息\n”, cnt);
for (i = 0; i cnt; i++)
{
printf(“\n第%d个学生:\n”, i+1);
printf(“姓名:\n”);
scanf(“%s”, student[i].name);
printf(“学号:\n”);
scanf(“%d”, student[i].index);
for (j = 0; j MAX_SCORE_NUM; j++)
{
printf(“第%d项成绩:\n”, j+1);
scanf(“%d”, student[i].score[j]);
}
}
//计算每个学生的平均成绩
average(student, cnt);
//根据平均成绩进行排序
ranking(student, cnt);
//打印
for (i = 0; i cnt; i++)
{
printf(“名次:%d 姓名:%s 学号:%d 平均成绩:%d\n”, student[i].rank, student[i].name, student[i].index, student[i].avg_score);
}
//保存到文件
save(student, cnt);
return 0;
}
这是我以前的回复 如果不需要保存文件就把save函数删了
C语言结构体定义
C语言结构体定义:struct为结构体关键字,tag为结构体的标志,member-list为结构体成员列表,其必须列出其所有成员;variable-list为此结构体声明的变量。
结构体是C语言中聚合数据类型(aggregatedatatype)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。
扩展资料
1、struct是声明结构体类型时必须使用的关键字,不能省略。“结构体”这个词是根据英文单词structure译出的。
2、structSTUDENT是定义的数据类型的名字,它向编译系统声明这是一个“结构体类型”,包括name、num、sex、age、score、addr等不同类型的项。
3、structSTUDENT与系统提供的int、char、float、double等标准类型名一样,都是数据类型,具有同样的作用,都是用来定义变量的。
参考资料来源:百度百科—结构体
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个学生的基本信息,如姓名、年龄、性别、学号,然后将学号最大的学生的基本信息输出到屏幕。
#includelt;stdio.hgt;
#includelt;string.hgt;
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;ilt;5;++i)
{
printf(“请输入第%d个学生的信息:”,i+1);
scanf(“%s%d%c%s”,
stult;igt;.name,
stult;igt;
.age,stult;igt;
.sex,stult;
igt;.num);/*%c
前面要加空格,不然输入时会将空格赋给%c*/
}
OutputSTU(stu);
return 0;
}
void OutputSTU(struct STU stu[5])
{
struct STU stumax=stu[0];
int j;
for(j=1;jlt;5;++j)
{
if(strcmp(stumax.num,stu[j]
.num)lt;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语言结构体的用法,
结构体的使用,首先要定义:
#includestdio.h
struct student
{
char name[10];
int num;
int age;
};//注意要分号
//然后就可以使用了:
void main()
{
struct student s;
struct student *p=s;//指针指向,可以不用指针
printf(“input name:”);
gets(s.name);//若使用指针,则:gets(p-name);
printf(“input num:”);
scanf(“%d”,s.num);//指针的写法:scanf(“%d”,p-num);
printf(“input age:”);
scanf(“%d”,s.age);
//输出结果:
printf(“name\tnum\tage\t\n”);
printf(“%s\t%d\t%d\n”);
}
结构体类似于数组,但结构体能定义不同的数据类型,这也是它的特别之处
c语言中-gt;是甚么意思
结构体中某个指针值域指向元素的值。struct
a{
int
*x,y;}a-x指的是*(a.x),x必须是指针。a.y表示a的y这个值域。