(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);
}
}
}
运行结果:
下面是按学号查找结果:
注意:输入学号性别分数的时候用英文输入法。
#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;
}