联系方式

  • QQ:99515681
  • 邮箱:99515681@qq.com
  • 工作时间:8:00-21:00
  • 微信:codinghelp

您当前位置:首页 >> C/C++编程C/C++编程

日期:2018-05-04 09:28

综合训练一  结构体及结构体数组


一、实验学时  4学时

二、实验目的

1.掌握结构体类型变量和结构体数组的定义和初始化;

2.掌握结构体数组的输入和输出;

3.掌握在相关算法中结构体数组的应用。

三、实验内容

1.  在解决实际问题时,单独用单个的结构体类型变量的很少,一般是以结构体类型数组的形式出现,结构体数组就是具有相同结构类型的变量集合。

例如:若将一个班级20个同学的姓名、性别、学号和三科考试成绩进行定义, 可以定义成一个结构体数组。如下所示:

   struct              / *定义学生结构体类型* /

{

char name[20];      / *学生姓名* /

char sex;           / *性别* /

long num;           / *学号* /

float score[3];     / *三科考试成绩* /

} stud[20]; /*定义结构体类型数组stud,数组有2 0个结构体类型元素*/


   也可定义为:

struct stu         / *定义学生结构体类型* /

{

char name[20];    / *学生姓名* /

char sex;         / *性别* /

long num;         / *学号* /

float score[3];   / *三科考试成绩* /

};

struct stu stud[20]; /*定义结构体类型数组,有2 0个结构体类型元素*/


  结构体数组成员的访问形式为: 结构数组元素.成员名

  其数组元素各成员的引用形式为:

stud[0].name、stud[0].sex、stud[0].score[i];

stud[1].name、stud[1].sex、stud[1].score[i];

...

...

stud[19].name、stud[19].sex、stud[19].score[i];


2.下面的程序在结构体数组worker中存放5个工人的数据包括编号、姓名、年龄、工资,注意观察数据的输入和输出方法。

struct   work           /*职工基本情况*/              

{ char  num[10];       /*工号*/

          char  name[10];      /*姓名*/

          int  age;            /*年龄*/

          int  salary;         /*工资*/

        } worker[5];

      main( )

      { int i;

for(i=0;i<5;i++)

{ scanf("%s%s",worker[i].num,worker[i].name);    /*输入工号和姓名*/

scanf("%d%d",&worker[i].age,&worker[i].salary);} /*输入年龄和工资*/

for(i=0;i<5;i++)

{ printf("%s\t%s\t%d\t%d\n",worker[i].num,worker[i].name,worker[i].age,worker[i].salary); }

}


3.下面的程序在结构体数组worker中存放5个工人的编号和姓名,用gets和puts函数,注意观察数据的输入和输出方法:

#include “stdio.h”

struct   work

{ char  num[10];

 char  name[10];

} ;

main()

{ int i;

 struct work worker[5];

 for(i=0;i<5;i++)

 { gets(worker[i].num );    /*输入工号*/

   gets(worker[i].name);    /*输入姓名*/

  }

for(i=0;i<5;i++)

 { puts(worker[i].num );printf(" ");      /*输出工号*/

          puts(worker[i].name);printf("\n");     /*输出姓名*/

 }

}



4.若有一个可以包含20个学生的信息的结构体数组,结构体成员有学号、姓名、语文、数学、英语和平均分,编程实现对于这20个学生的结构体数组的输入和输出及求出每个学生的平均分,参考程序如下。

#include <stdio.h>

struct student         /*定义学生结构体类型*/

{

int no;              / *学号* /

char name[20];       / *学生姓名* /

 int chinese;         /*语文成绩*/

 int maths;           /*数学成绩*/

 int english;         /*英语成绩*/

 float  ave;          /*平均成绩*/

}stu[20];             /*定义结构体类型数组,有2 0个结构体类型元素*/


main( )

{ int i,length=0,n;

 printf("Input the number of student:");

 scanf("%d",&n);                   /*输入实际学生人数*/

 for(i=length;i<length+n;i++)

 {

  printf("the %d student's no: ",i+1);

  scanf("%d",&stu[i].no);            /*输入学号* /

  printf("the %d stdent's name: ",i+1);

  scanf("%s",stu[i].name);         /*输入学生姓名* /

  printf("the %d stdent's chinese: ",i+1);

  scanf("%d",&stu[i].chinese);       /*输入语文成绩*/

  printf("the %d stdent's maths: ",i+1);

  scanf("%d",&stu[i].maths);         /*输入数学成绩*/

  printf("the %d stdent's english: ",i+1);

  scanf("%d",&stu[i].english);       /*输入英语成绩*/


  stu[i].ave=(stu[i].chinese+stu[i].maths+stu[i].english)/3.0;

/*计算每个学生的平均成绩*/

  printf("\n");

  }

  length=length+n;

printf("\tNo\tName\tChinese\tMaths\tEnglish\tAveage\n\n");

  for(i=0;i<length;i++)

{ printf("%8d%10s%8d%8d%8d%8.1f\n",stu[i].no,stu[i].name,

stu[i].chinese,stu[i].maths,stu[i].english,stu[i].ave);

  }        /*输出学生信息*/

}



5. 某企业四名职工信息的输入和输出,参考程序如下。

main( )

{  struct employee          /*职工基本情况*/

{ int num;             /*工号*/

char name[8];        /*姓名*/

       int age;            /*年龄*/

int salary;         /*工资*/

}em[4];

int i;

for(i=0;i<4;i++)

{  scanf("%d",&em[i].num);    /*输入工号*/

scanf("%s",em[i].name);    /*输入姓名*/

scanf("%d",&em[i].age);    /*输入年龄*/

scanf("%d",&em[i].salary); /*输入工资*/

}

for(i=0;i<4;i++)

{ printf ("%d  ",em[i].num);   /*输出工号*/

printf("%s  ",em[i].name);   /*输出姓名*/

printf("%d  ",em[i].age);    /*输出年龄*/

printf("%d  ",em[i].salary); /*输出工资*/

printf("\n");

}

}  



6.  求某企业四名职工工资的平均值

main( )

{  struct employee         /*职工基本情况*/

{ int num;              /*工号*/

char name[8];         /*姓名*/

       int age;              /*年龄*/

int salary;           /*工资*/

}em[4]={{1,"wang",25,450},{1,"li",38,890},{3,"qi",30,234},{4,"jiang",54,759}};

float s=0,aver; int i;

for(i=0;i<4;i++)

s+=em[i].salary;

aver=s/4.0;

printf("%f\n ", aver);       /*输出平均工资*/

}



7. 找出企业四名职工工资的最高者及他的全部信息。

main( )

{  struct employee        /*职工基本情况*/

{  int num;            /*工号*/

char name[8];       /*姓名*/

       int age;           /*年龄*/

int salary;        /*工资*/

}em[4]={{1,"wang",25,450},{1,"li",38,890},{3,"qi",30,890},{4,"jiang",54,759}};

int i,max=em[0].salary;

for(i=0;i<4;i++)

if (em[i].salary >max) max=em[i].salary;

printf("%d\n ",max);

for(i=0;i<4;i++)

if (em[i].salary==max)

{ printf ("%d  ",em[i].num);      /*输出工号*/

printf("%s  ",em[i].name);      /*输出姓名*/

printf("%d  ",em[i].age);       /*输出年龄*/

printf("%d  ",em[i].salary);     /*输出工资*/

printf("\n");

}

}



8.查找某企业职工中年龄大于35岁的职工并显示他们的全部信息。

main( )

{  struct employee        /*职工基本情况*/

{ int num;             /*工号*/

char name[8];        /*姓名*/

int age;            /*年龄*/

int salary;         /*工资*/

}em[4]={{1,"wang",25,450},{1,"li",38,890},{3,"qi",30,234},{4,"jiang",54,759}};

int i;

for (i=0;i<4;i++)

if (em[i].age>35)

{ printf ("%d  ",em[i].num);       /*输出工号*/

printf("%s  ",em[i].name);       /*输出姓名*/

printf("%d  ",em[i].age);        /*输出年龄*/

printf("%d  ",em[i].salary);     /*输出工资*/

printf("\n");

}

}


9. 将某企业职工的信息按工资从多到少进行排序。

main()

{ struct employee        /*职工基本情况*/

{ int num;            /*工号*/

char name[8];       /*姓名*/

     int age;            /*年龄*/

int salary;         /*工资*/

}em[4]={{1,"wang",25,450},{2,"li",38,890},{3,"qi",30,234},{4,"jiang",54,759}};

int i,j,x,y,t; char ch[8];

for(i=0;i<4-1;i++ )

for(j=0;j<4-1-i;j++ )

if (em[j].salary<em[j+1].salary)

{ t=em[j].num;                 /*交换工号*/

     em[j].num=em[j+1].num;

     em[j+1].num=t;

     strcpy(ch,em[j].name);       /*交换姓名*/

strcpy(em[j].name,em[j+1].name);

strcpy(em[j+1].name,ch);

     t=em[j].age;                /*交换年龄*/

     em[j].age =em[j+1].age;

     em[j+1].age =t;

t=em[j].salary;              /*交换工资*/a

     em[j].salary =em[j+1].salary;

     em[j+1].salary =t;

}

for(i=0;i<4;i++)

{ printf ("%d  ",em[i].num);        /*输出工号*/

printf("%s  ",em[i].name);        /*输出姓名*/

printf("%d  ",em[i].age);         /*输出年龄*/

printf("%d  ",em[i].salary);      /*输出工资*/

printf("\n");

}

}



四、实验注意事项

1.结构体中各成员是被分别分配独立的存储单元,。

2.不可以用scanf( )函数对结构体进行整体赋值,只能通过对成员的赋值来改变结构体变量的值。



版权所有:编程辅导网 2021 All Rights Reserved 联系方式:QQ:99515681 微信:codinghelp 电子信箱:99515681@qq.com
免责声明:本站部分内容从网络整理而来,只供参考!如有版权问题可联系本站删除。 站长地图

python代写
微信客服:codinghelp