定义struct结构体数组

题目要求:
有3个候选人,每个选民只能投票选一人,要求编一个统计选票的程序,先后输入被选人的名字,最后输出各人得票结果。
解题思路:
设一个结构体数组,数组中包含3个元素
每个元素中的信息应包括候选人的姓名(字符型)和得票数(整型)
输入被选人的姓名,然后与数组元素中的“姓名”成员比较,如果相同,就给这个元素中的“得票数”成员的值加1
输出所有元素的信息

说明:
(1)定义结构体数组一般形式是
① struct 结构体名
    {成员表列} 数组名[数组长度];
② 先声明一个结构体类型,然后再用此类型定义结构体数组:
     结构体类型  数组名[数组长度];
   如:
     struct Person  leader[3]; 


(2)对结构体数组初始化的形式是在定义数组的后面加上:
={初值表列}; 
 如:
struct Person  leader[3]= {"Li",0,"Zhang",0,"Fun",0}; 
/* Note:Your choice is C IDE */
#include "stdio.h"

struct Person{
 char name[20];//姓名
 int count;//票数
}a[3]={"li",0,"zhang",0,"liu",0};//a[3]为全局的结构体数组

void main()
{
    int i,j;
    char b[20];
    printf("请输入10个人的投票的结果:");
    for(i=0;i<10;i++){
     scanf("%s",b);//读人10个人的投票姓名
     for(j=0;j<3;j++)
     if(strcmp(b,a[j].name)==0)//stcmp函数比较字符串的大小,若两个字符串大小相等则结果为0
     a[j].count++;//人数累加
    }
    for(i=0;i<3;i++)
    printf("%5s:%d\n",a[i].name,a[i].count);
}


结果显示:
请输入10个人的投票的结果:li li li li liu liu zhang zhang zhang zhang
   li:4
zhang:4
  liu:2

题目要求:
有n个学生的信息(包括学号、姓名、成绩),要求按照成绩的高低顺序输出各学生的信息。
解题思路:
用结构体数组存放n个学生信息,采用选择法对各元素进行排序(进行比较的是各元素中的成绩)。

/* Note:Your choice is C IDE */
#include "stdio.h"

struct Student{
  int num; 
  char name[20]; 
  float score; 
   };//注意,分号不能省略 

void main()
{
    struct Student stu[5]={
     {10101,"Zhang",78},
        {10103,"Wang",98.5},
        {10106,"Li",86.9},
        {10108,"Ling",73.5},
        {10110,"Fun",100}  
    };//分号不可省略
    const int n=5;// const是一个C语言的关键字,它限定一个变量不允许被改变。
    //若有30个人则 const  int  n=30;
    //const  int  n=5;相当于在最上面直接定义,即 #define N 5
    //一旦被修饰就不能被赋值改变。当const int n=5之后再令n=9就是错的
    int i,j;
    struct Student k;
    for(i=0;i<n-1;i++){//冒泡排序
     for(j=0;j<n-1-i;j++)
     if(stu[j+1].score>stu[j].score){
      k=stu[j];
      stu[j]=stu[j+1];
      stu[j+1]=k;
      }
    }
    for(i=0;i<n;i++)
    printf("%6d %8s %6.2f\n",stu[i].num,stu[i].name,stu[i].score);
}


结果显示:
  10110      Fun 100.00
 10103     Wang  98.50
 10106       Li  86.90
 10101    Zhang  78.00
 10108     Ling  73.50
上面代码进行优化   1
函数的调用
/* Note:Your choice is C IDE */
#include "stdio.h"
void sort(struct Student stu[],int n);
struct Student{
  long int num; 
  char name[20]; 
  float score; 
   };
void main()
{
    struct Student stu[3]={
        {2019010,"Meng",69.7},
        {2019012,"Liu",78.9},
        {2019014,"Zhang",98.5}
    };
    int i,n=3;
    sort(stu,n);
    for(i=0;i<n;i++)
    printf("%6ld %8s %6.1f\n",stu[i].num,stu[i].name,stu[i].score);
}
void sort(struct Student stu[],int n){
 int i,j;
 struct Student k;
    for(i=0;i<n-1;i++){//冒泡排序
     for(j=0;j<n-1-i;j++)
     if(stu[j+1].score>stu[j].score){
       if(stu[j+1].score>stu[j].score){
      k=stu[j];
      stu[j]=stu[j+1];
      stu[j+1]=k;
      }
    }
    }
}



结果显示:
2019014    Zhang   98.5
2019012      Liu   78.9
2019010     Meng   69.7
上面的代码进行优化     2
函数的调用
#include "stdio.h"
void sort(struct student src[3],int n);//全局函数声明 
struct student
    {
     long xuehao;
     char name[20];
     int grade;
    };//全局结构体类型 声明 
int main()
{
 int i;
    struct student src[3]={//定义结构体类型数组,并且初始化 
     {2019052,"a",69},
        {2019051,"b",78},
        {2019053,"c",70}   
    };
  sort(src,3);
   for(i=0;i<3;i++){
  printf("%ld %8s %d\n",src[i].xuehao,src[i].name,src[i].grade);
 }
}
void sort(struct student src[3],int n)
{
 int j=0,i=0;
struct student temp;
 for(j=2;j>0;j--){
  for(i=0;i<j;i++){
   if(src[i+1].grade>src[i].grade){ 
   temp=src[i];
   src[i]=src[i+1];
   src[i+1]=temp;//数组整体换
    }
  }
 }
}


结果显示:
2019051        b 78
2019053        c 70
2019052        a 69
  • 11
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱睡觉的小馨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值