结构体定义(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
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
这里用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
#include
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
#include
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]),则不需要使用&取地址符。