p11 结构体:统计大数据

结构体定义(Struct)是一种用户定义的数据类型,用于组合不同数据类型的元素。它们允许将多个相关的变量组合在一起,形成一个逻辑上的单元。可以通过定义结构体来描述一个实际问题中的对象或概念,从而更好地组织和管理代码。

输入一个正整数n(3<=n<=10),再输入n个雇员的信息(如下表所示),输出每人的姓名和实发工资(基本工资+浮动工资-支出)。

工资表

姓名

基本工资

浮动工资

支出

Zhao

240.00

400.00

75.00

Qian

360.00

120.00

50.00

Zhou

560.00

150.00

80.00

#include<stdio.h>
void main()
{  struct em
   {  char name[10];
      float jbg;
      float fdg;
      float zc;
    };
   struct em emp[100];
    int i,n;
    printf("输入员工个数:");
    scanf("%d",&n);
    for(i=0;i<n;i++)
	{  printf("员工姓名 基本工资 浮动工资 支出\n",i+1);
       scanf("%s%f%f%f",emp[i].name,&emp[i].jbg,&emp[i].fdg,&emp[i].zc);
    }
	printf("姓名  实发工资\n");
	for(i=0;i<n;i++) 
       printf("%s  :%.2f\n", emp[i].name,emp[i].jbg+emp[i].fdg-emp[i].zc);
} 

这里用struct 定义了 name jbg fdg zc着一些的数据类型,

em emp[100]数组把数组用在em中,因此&emp[i].jbg,&emp[i].fdg,&emp[i].zc,这里用了这些之前定义,并存储在相对于的位置上,

有3个学生,每个学生的数据包括学号、姓名、3门课的成绩。从键盘输入3个学生数据,要求输出每门课的平均成绩及总分最高的学生的姓名和总分(用结构体数组实现)。

输入输出示例:

输入学生学号:1001

输入学生姓名:zhang

输入学生三科成绩:70 80 90

输入学生学号:1002

输入学生姓名:liu

输入学生三科成绩:80 80 80

输入学生学号:1003

输入学生姓名:xiao

输入学生三科成绩:70 70 70

1001  zhang          70.000000  80.000000  90.000000

1002  liu            80.000000  80.000000  80.000000

1003  xiao           70.000000  70.000000  70.000000

课程1的平均成绩:73.333336

课程2的平均成绩:76.666664

课程3的平均成绩:80.000000

总分最高的学生是:aa  总分:240.000000

总分最高的学生是:bb  总分:240.000000

#include<stdio.h>
#include<math.h>
struct student            
{  
  int num;        //学号
  char name[20];  //姓名
  float score[3]; //成绩
};
void main()
{ struct student st[3];
  float sum[3];
  float avg[3]={0},max;
  int i,j;
  for(i=0;i<3;i++)  //输入3个学生的信息
  { printf("输入学生学号:");
    scanf("%d",&st[i].num);
    printf("输入学生姓名:");
    scanf("%s",st[i].name);
    printf("输入学生三科成绩:");
    scanf("%f%f%f",&st[i].score[0],&st[i].score[1],&st[i].score[2]);
  }
  for(i=0;i<3;i++)  //输出3个学生的信息
     printf("%d  %-10s  %f  %f  %f\n",st[i].num,st[i].name,st[i].score[0],st[i].score[1],st[i].score[2]);
  for(i=0;i<3;i++)  //计算每门课程的平均成绩
  {  for(j=0;j<3;j++)
       avg[i]+=st[j].score[i];
     avg[i]/=3;
  }
  for(i=0;i<3;i++)  //输出每门课程的平均成绩
     printf("课程%d的平均成绩:%f\n",i+1,avg[i]);
  for(i=0;i<3;i++)  //计算学生3门课程的总分
     sum[i]=st[i].score[0]+st[i].score[1]+st[i].score[2];
  if(sum[0]>sum[1])  //找出最高的总分
       max=sum[0];
  else
       max=sum[1];
  if(sum[2]>max)
       max=sum[2];
for(i=0;i<3;i++)  //输出最高分的学生的姓名和总分
  if(fabs(max-sum[i])<1e-8)
     printf("总分最高的学生是:%s  总分:%f \n",st[i].name,sum[i]);
}
#include<stdio.h>
#include<math.h>
struct student            
{  
  int num;        //学号
  char name[20];  //姓名
  float score[3]; //成绩
};
void main()
{ struct student st[3],*sp;
  float sum[3];
  float avg[3]={0},max;
  int i,j;
  sp=st;  //指针指向第1个学生
  for(i=0;i<3;i++)  //输入3个学生的信息
  { printf("输入学生学号:");
    scanf("%d",&sp->num);
    printf("输入学生姓名:");
    scanf("%s",sp->name);
    printf("输入学生三科成绩:");
    scanf("%f%f%f",&sp->score[0],&sp->score[1],&sp->score[2]);
	sp++;   //指针指向下1个学生
  }
  sp=st;   //指针重新指向第1个学生
  for(i=0;i<3;i++)  //输出3个学生的信息
  {
     printf("%d  %-10s  %f  %f  %f\n",sp->num,sp->name,sp->score[0],sp->score[1],sp->score[2]);
     sp++;  //指针指向下1个学生
  }
  sp=st;    //指针重新指向第1个学生
  for(i=0;i<3;i++)  //计算每门课程的平均成绩
  {  for(j=0;j<3;j++)
       avg[i]+=sp->score[i];
     avg[i]/=3;
     sp++;  //指针指向下1个学生
  }
  for(i=0;i<3;i++)  //输出每门课程的平均成绩
     printf("课程%d的平均成绩:%f\n",i+1,avg[i]);
  sp=st;   //指针重新指向第1个学生
  for(i=0;i<3;i++)  //计算学生3门课程的总分
  {
     sum[i]=sp->score[0]+sp->score[1]+sp->score[2];
     sp++;  //指针指向下1个学生
  }
  if(sum[0]>sum[1])  //找出最高的总分
       max=sum[0];
  else
       max=sum[1];
  if(sum[2]>max)
       max=sum[2];
  for(i=0;i<3;i++)  //输出最高分的学生的姓名和总分
    if(fabs(max-sum[i])<1e-8)
      printf("总分最高的学生是:%s  总分:%f \n",st[i].name,sum[i]);
}

在C语言中,箭头(->)用于访问结构体指针所指向的成员。 在给结构体指针赋值时,可以使用箭头来访问结构体成员。

例如: ```c sp->num = 123; ```

在访问结构体指针所指向的成员时,也可以使用箭头。

例如: ```c printf("%d", sp->num); ```

scanf("%s",sp->name);在使用scanf函数读取字符串时,如果参数是一个字符数组(例如char name[20]),则不需要使用&取地址符。

  • 18
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值