- 论坛徽章:
- 0
|
请教大虾——近日老师布置了个作业,但是不知如何下手。。
你可以借鉴一下
- #include<stdio.h>;
- #include<string.h>;
- #define N 5
- #define M 5
- struct student
- {
- int num;
- char name[10];
- int score[M];
- float sum;
- float aver;
- };
- typedef struct student STUDENT;
- void printdata(pt)//打印N个学生M门功课的成绩
- STUDENT *pt;
- {
- STUDENT *p;
- int j;
- printf("number name score1 score2 score3 score4 score5 sum aver\n");
- for(p=pt;p<pt;p++)
- {
- printf("NO.%3d%8s",p->;num,p->;name);
- for(j=0;j<M;j++)
- printf("%7d",p->;score[j]);
- printf("%6.2f%6.2f\n",p->;sum,p->;aver);
- }
- }
- void total(pt)//计算平均分和总分
- STUDENT *pt;
- {
- STUDENT *p;
- int j;
- for(p=pt;p<pt+N;p++)
- {
- p->;sum=0;
- for(j=0;j<M;j++)
- p->;sum=p->;sum+p->;score[j];
- p->;aver=p->;sum/M;
- }
- }
- void sort(pt)//选择法排序
- STUDENT *pt;
- {
- int i,j,k,t,m;
- char temp[10];
- for(i=0;i<N-1;i++)
- {
- k=i;
- for(j=i;j<N;j++)
- if((pt+j)->;sum>;(pt+k)->;sum)k=j;
- if(k!=i)
- {
- t=(pt+k)->;num;
- (pt+k)->;num=(pt+i)->;num;
- (pt+i)->;num=t;
- strcpy(temp,(pt+k)->;name);
- strcpy((pt+k)->;name,(pt+i)->;name);
- strcpy((pt+i)->;name,temp);
- for(m=0;m<M;m++)
- {
- t=(pt+k)->;score[m];
- (pt+k)->;score[m]=(pt+i)->;score[m];
- (pt+i)->;score[m]=i;
- }
- t=(pt+k)->;sum;
- (pt+k)->;sum=(pt+i)->;sum;
- (pt+i)->;sum=t;
- t=(pt+k)->;aver;
- (pt+k)->;aver=(pt+i)->;aver;
- (pt+i)->;aver=t;
- }
- }
- }
- int search(pt,n)//折半查找法
- STUDENT *pt;
- int n;
- {
- int top,bottom,m;
- top=0;
- bottom=N-1;
- while(top<=bottom)
- {
- m=(bottom+top)/2;
- if(n<(pt+m)->;num)
- top=m+1;
- else if(n>;(pt+m)->;num)
- bottom=m-1;
- else
- return(m);
- }
- return(-1);
- }
- main()
- {
- int i,j,k,number;
- STUDENT stu[N];
- for(i=0;i<N;i++)
- {
- printf("\n Input num,name,score1-5:");
- scanf("%d%s%d%d%d%d%d%d",&stu[i].num,stu[i].name,&stu[i].score[0],&stu[i].score[1],
- &stu[i].score[2],&stu[i].score[3],&stu[i].score[4]);
- }
- total(stu);
- printdata(stu);
- sort(stu);
- printf("sorted result:");
- printdata(stu);
- printf("Input the searching number:");
- scanf("%d",&number);
- k=search(number);
- if(k==-1)
- printf("Not found!");
- else
- {
- printf("No.%3d%8s",stu[k].num,stu[k].name);
- for(j=0;j<M;j++)
- printf("%7d",stu[k].score[j]);
- printf("%6.2f%6.2f\n",stu[k].sum,stu[k].aver);
- }
- }
复制代码 |
|