结构应用举例
Posted 天“码”行空
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了结构应用举例相关的知识,希望对你有一定的参考价值。
我们先来对前面几节进行一个粗略的概述,首先我们学习了结构的相关概念,如我们为什么要引入结构这一类型,它有什么优势呢?它的特点是什么呢?如何定义结构类型和结构变量,并且提及到typedef的定义数据类型。有了结构变量后,我们要对结构变量进行初始化。而且我们知道结构中的结构成员可以是任何数据类型,结构本身也是一种数据类型,那也就是说结构中还可以有结构,即可以将一个结构作为另外一个结构的成员。还要知道如何访问结构成员。
结构可以作为结构数组(数组元素为结构类型),结构数组是如何定义的?如何访问结构数组?以及如何对结构数组进行初始化?接着探讨了结构数组和指针的关系即结构指针(结构指针的定义,和初始化),其实就是数组和指针关系的引申。
结构与函数的关系是一大重要问题。如结构变量作为函数的参数问题,由于单向传递性的问题,我们引入结构指针作为函数参数来解决此类问题。此外结构还能作为函数的返回值。
下面来看一个例子。解决问题:实现学生信息表的录入,排序,和输出。
//结构数组作为函数参数
#include<stdio.h>
#define N 100
typedef struct student
char ID[16];
char name[16];
double score;
STUDENT;
void inputdata(STUDENT s[], int n);//输入n个学生信息
void outputdata(STUDENT s[], int n);//输出n个学生信息
void sort(STUDENT s[], int n);//按成绩降序排列
int main()
STUDENT s[N];
int n;
printf("请输入学生人数:");
scanf("%d", &n);
printf("请输入%d个学生的学号,姓名和成绩:\\n", n);
inputdata(s,n);
sort(s,n);
printf("输出排序为:\\n");
outputdata(s,n);
return 0;
void inputdata(STUDENT s[], int n)
for(i=0; i<n; i++)
scanf("%s%s%lf", s[i].ID, s[i].name, s[i].score);
void sort(STUDENT s[], int n)
int i,j;
STUDENT temp;
for(i=0; i<n-1; i++)
for(j=i+1; j<n; j++)
if(s[j].score>s[i].score)
temp = s[j].score;
s[j].score = s[i].score;
s[i].score = temp;
void outputdata(STUDENT s[], int n)
printf("%-16s%-16s%8s\\n", "学号", "姓名", "成绩");
for(int i = 0; i<n; i++)
printf("%-16s%-16s%6.1f\\n", s[i].ID, s[i].name, s[i].score);//-表示右补空格
请输入学生人数:4
请输入4个学生的学号,姓名和成绩:
202001 张三 85
202002 李四 90
202003 赵五 95
202004 王五 100
输出排序结果:
学号 姓名 成绩
202001 张三 85
202002 李四 90
202003 赵五 95
202004 王五 100
通过上例可以看出,结构数组作为函数参数和结构指针作为函数参数的实质相同,在函数间传递的是数组的首地址,数组本身没有被复制,减少了参数传递的代价。
以上是关于结构应用举例的主要内容,如果未能解决你的问题,请参考以下文章
ZZNUOJ_用C语言编写程序实现1190:查询记录(结构体专题)(附完整源码)