结构应用举例

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

通过上例可以看出,结构数组作为函数参数和结构指针作为函数参数的实质相同,在函数间传递的是数组的首地址,数组本身没有被复制,减少了参数传递的代价。

以上是关于结构应用举例的主要内容,如果未能解决你的问题,请参考以下文章

6-5——结构体(按学生总分排序)练习2——请教优化

C语言程序设计,结构体

ZZNUOJ_用C语言编写程序实现1190:查询记录(结构体专题)(附完整源码)

ZZNUOJ_用C语言编写程序实现1192:删除记录(结构体专题)(附完整源码)

C项目 文件,结构体,链表,排序, 学生信息管理系统

ZZNUOJ_用C语言编写程序实现1191:添加记录(结构体专题)(附完整源码)