C语言结构体定义程序的修改和完善

2025-03-12 18:14:11
推荐回答(2个)
回答1:

(1)首先,为了我的方便,我只输入输出3个学生的数据,你定义的20个学生,那么你只需将for(i=0;i<3;i++)这个循环体改为i<20即可。

(2)另外为了节约空间,以及输入数据的方便,男女分别用M(Man),W(Woman)大写字母表示。

上代码,自己研究吧:

#include
typedef struct student
{
 int num;
 char name[20];
 char sex;
 int age;
 int score1;
 int score2;
 int score3;
 int score4;
 int avge;
 int total;
}STUDENT;
void main()
{
 STUDENT p[20];
 int i;
 void chazhao(STUDENT *);
 printf("输入3个学生的姓名\n");
 for(i=0;i<3;i++)
  gets(p[i].name);
 for(i=0;i<3;i++)
 {
  printf("输入%s的学号、性别、年龄、语文、数学、英语、计算机成绩\n",p[i].name);
  scanf("%d,%c,%d,%d,%d,%d,%d",&p[i].num,&p[i].sex,&p[i].age,&p[i].score1,&p[i].score2,&p[i].score3,&p[i].score4);
  p[i].total=p[i].score1+p[i].score2+p[i].score3+p[i].score4;
  p[i].avge=(p[i].score1+p[i].score2+p[i].score3+p[i].score4)/4;
 }
 chazhao(p);
 printf("\n按任意键返回主菜单\n"); 
}
void chazhao(STUDENT *p)  //因为数组是地址,所以形参必须是指针
{
 char n[20];
 int y,j,m,i,k;
 printf("按学号查找(按1)\n"); 
 printf("按姓名查找(按2)\n");
 printf("请选择:");
 scanf("%d",&y);
 if(y==1) 
 {
  printf("输入你想查找学生数据的学号:");
  scanf("%d",&m);
  printf("\n学号\t姓名\t性别\t年龄\t语文\t数学\英语\计算机\t平均分\t总分\n");
  for(i=0;i<3;i++) 
  {
   if(m==p[i].num)
   {
    j=i;break;
   }
  }
  printf("%d\t%s\t%c\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n",p[j].num,p[j].name,p[j].sex,p[j].age,p[j].score1,p[j].score2,p[j].score3,p[j].score4,p[j].avge,p[j].total); 
 }
 if(y==2)
 {
  printf("输入你想要查找的姓名:");
  scanf("%s",n); 
  printf("\n学号\t姓名\t性别\t年龄\t语文\t数学\英语\计算机\t平均分\t总分\n");
  for(i=0;i<3;i++) 
  {
   for(k=0;k<20;k++)  //比较每个字符使之相等
   {
    if(n[k]==*(p[i].name+k))
     j=i;
    else break;
   }
   if(k==20)     //每个元素都比较完成
  printf("%d\t%s\t%c\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n",p[j].num,p[j].name,p[j].sex,p[j].age,p[j].score1,p[j].score2,p[j].score3,p[j].score4,p[j].avge,p[j].total);
  }   
 }

运行结果:

下面是按学号查找结果:

注意:输入学号性别分数的时候用英文输入法。

回答2:

#include
#include
struct student{
int num;
char name[1024];
int age;
char sex[1024];
float score1;
float score2;
float score3;
float score4;
float avg;
float sum;
};
void chazhao()
{
char n[10];
struct student p[10];
int y,j,m,i;
for(i = 0 ; i < 1; i++){
scanf("%d", &p[i].num);
scanf("%d", &p[i].age);
scanf("%s", &p[i].name);
scanf("%s", &p[i].sex);
scanf("%f", &p[i].score1);
scanf("%f", &p[i].score2);
scanf("%f", &p[i].score3);
scanf("%f", &p[i].score4);
p[i].sum = p[i].score1 + p[i].score2 + p[i].score3 + p[i].score4;
p[i].avg = p[i].sum / 4;
printf("%f %f", p[i].sum, p[i].avg);
}
printf("按学号查找(按1):\n");
printf("按姓名查找(按2):\n");
printf("请选择");
scanf("%d",&y);
if(y == 1){
printf("请输入要查找的学号:");
scanf("%d",&m);
for(i=0;i<10;i++){
if(m == p[i].num){
j = i;
break;
}
}
}
else if(y == 2){
printf("请输入要查找的姓名:");
scanf("%s",&n);
for(i = 0; i < 10; i++){
if( strcmp(n, p[i].name) == 0){
j = i ;
break;
}
}
}
// printf("学号\t姓名\t性别\t年龄\t语文\t数学\t英语\t计算机\t平均成绩\t总成绩\t");
printf(" 学号:%d\n 姓名:%s\n 性别:%s\n 年龄:%d\n 语文:%.2f\n 数学:%.2f\n 英语:%.2f\n 计算机:%.2f\n 平均:%.2f\n 总分:%.2f\n",p[j].num,p[j].name,p[j].sex,p[j].age,p[j].score1,p[j].score2,p[j].score3,p[j].score4,p[j].avg,p[j].sum);
printf("\n按任意键返回到主菜单!\n");
}

int main()
{
chazhao();
return 0;
}