struct student *p;
每使(输入)用一次要申请开辟空间 p = (struct student *)malloc(sizeof(struct student));
最后在free(p)
每使(输入)用一次要申请开辟空间 p = (struct student *)malloc(sizeof(struct student));
最后在free(p)
#include<stdio.h> #include<stdlib.h> #include<string.h> #define N 50 /***定义有50个学生***/ struct student { char num[10]; char name[20]; float score[4]; float aver; }stu[N]; void input(void) { int j,i,q=0; char c; struct student *p; p=stu; for(i=0;i<N;i++,p++) { printf("请输入%d学生的成绩:\n",i+1); printf("请输入学号:\n"); scanf("%s",p->num); printf("请输入姓名:\n"); scanf("%s",p->name); for(j=0;j<4;j++) { printf("请输入第%d科成绩:\n",j+1); scanf("%f",&p->score[j]); } p->aver=aver(p); printf("是否继续输入(Y/N)?"); getchar(); c=getchar(); if(c=='N'||c=='n')break; } } void name_s(struct student *p,char name) { char q=1; for(p=stu;p<p+N;p++) { if(strcmp(name,p->name)==0) { printf("%s %s %3.2f %3.2f %3.2f %3.2f %3.2f\n",p->num,p->name,p->score[0],p->score[1],p->score[2],p->score[3],p->aver); q=0; } } if(q==1)puts("查找不到这个姓名!\n"); } void num_s(void) { int q=0; struct student *p; char num[10]; printf("请输入要查询学号:\n"); scanf("%s",num); for(p=stu;p<p+N;p++) { if(strcmp(num,p->num)==0) printf("%s %s %3.2f %3.2f %3.2f %3.2f %3.2f\n",p->num,p->name,p->score[0],p->score[1],p->score[2],p->score[3],p->aver); q=1;break; } if(q!=1)printf("查找不到这个学号!\n"); } float aver(struct student *p) { float s=0.0; int i; for(i=0;i<4;i++) s+=p->score[i]; return(s/4); } void dysc(void) { int i=1; struct student *p; printf("输出的学号,姓名,第一科成绩,第二科成绩,第三科成绩,第四科成绩,平均分为:\n"); for(p=stu;p<p+N;p++) printf("%s %s %3.2f %3.2f %3.2f %3.2f %3.2f\n",p->num,p->name,p->score[0],p->score[1],p->score[2],p->score[3],p->aver); } void main() { int n; char name[20],num[10]; do { printf(" 主菜单\n"); printf("======================\n"); printf(" 1.输入学生成绩\n"); printf(" 2.按姓名查询学生成绩\n"); printf(" 3.按学号查询学生成绩\n"); printf(" 4.打印输出成绩\n"); printf(" 0.退出系统\n"); printf("======================\n"); printf(" 请选择(0~4):\n"); scanf("%d",&n); switch(n) { case 0:break; case 1:system("cls"); input(); break; case 2:system("cls"); printf("请输入要查询姓名:\n"); scanf("%s",name); name_s(stu,name); break; case 3:num_s();break; case 4:dysc();break; default:printf("输入错误,请重新输入\n");break; } } while(n!=0); printf("谢谢使用\n"); }
#include<stdio.h> #include<stdlib.h> #include<string.h> #define N 50 /***定义有50个学生***/ struct student { char num[10]; char name[20]; float score[4]; float aver; }stu[N]; void scan(void) { int j,i,q=0; char c; struct student *p; p=stu; for(i=0;i<N;i++,p++) { printf("请输入%d学生的成绩:\n",i+1); printf("请输入学号:\n"); scanf("%s",p->num); printf("请输入姓名:\n"); scanf("%s",p->name); for(j=0;j<4;j++) { printf("请输入第%d科成绩:\n",j+1); scanf("%f",&p->score[j]); } p->aver=avero(p); printf("是否继续输入(Y/N)?"); getchar(); c=getchar(); if(c=='N'||c=='n')break; } } void name_s(struct student *p,char *name) { int i; char q=1; p=stu; for(i=0;i<N;i++,p++) { if(strcmp(name,p->name)==0) { printf("该生的学号,姓名,第一科成绩,第二科成绩,第三科成绩,第四科成绩,平均分为:\n"); printf(" %s %s %3.2f %3.2f %3.2f %3.2f %3.2f\n", p->num,p->name,p->score[0],p->score[1],p->score[2],p->score[3],p->aver); q=0; } } if(q==1)puts("查找不到这个姓名!\n"); } void num_s(struct student *p,char *num) { int i; char q=1; p=stu; for(i=0;i<N;i++,p++) { if(strcmp(num,p->num)==0) { printf("该生的学号,姓名,第一科成绩,第二科成绩,第三科成绩,第四科成绩,平均分为:\n"); printf(" %s %s %3.2f %3.2f %3.2f %3.2f %3.2f\n", p->num,p->name,p->score[0],p->score[1],p->score[2],p->score[3],p->aver); q=0; } } if(q==1)puts("查找不到这个学号!\n"); } float avero(struct student *p) { float s=0.0; int i; for(i=0;i<4;i++) s+=p->score[i]; return(s/4.0); } void input(void) { int i=0; struct student *p; p=stu; printf("No.:学号,姓名,第一科成绩,第二科成绩,第三科成绩,第四科成绩,平均分为:\n"); for(i=0;i<N;i++,p++) { if(p->aver==0)break; printf("%d %s %s %3.2f %3.2f %3.2f %3.2f %3.2f\n",i+1, p->num,p->name,p->score[0],p->score[1],p->score[2],p->score[3],p->aver); } } void main() { int n; char name[20],num[10]; do { printf(" 主菜单\n"); printf("======================\n"); printf(" 1.输入学生成绩\n"); printf(" 2.按姓名查询学生成绩\n"); printf(" 3.按学号查询学生成绩\n"); printf(" 4.打印输出成绩\n"); printf(" 0.退出系统\n"); printf("======================\n"); printf(" 请选择(0~4):\n"); scanf("%d",&n); switch(n) { case 0:break; case 1:system("cls"); scan(); break; case 2:system("cls"); printf("请输入要查询姓名:\n"); scanf("%s",name); name_s(stu,name); break; case 3:system("cls"); printf("请输入要查询学号:\n"); scanf("%s",num); num_s(stu,num); break; case 4:system("cls"); input(); break; default:printf("输入错误,请重新输入\n");break; } } while(n!=0); printf("谢谢使用\n"); }