原题,完成校际运动会成绩管理功能,包括输入比赛项目event及参赛学校名字name,输入比赛成绩score,参赛选手名字person,项目名次rank,计算总分sum,其中,sum为score加上项目的加分。 各项目名次取法有如下几种:项目一:取前5名:第1名得分7,第2名得分5,第3名得分3,第4名得分2,第5名得分1;其余名次不加分。项目二:取前3名:第1名得分5,第2名得分3,第3名得分2;其余名次不加分。输出第一所学校的score和sum。#include<stdio.h>#include<stdlib.h>#include<string.h>#define LEN sizeof(struct School)struct School{int event; char name[20]; int score; char person[20]; int rank; int sum; struct School *next;};static int n;struct School *creat(void){struct School *head; struct School *p1,*p2,*a[100]; n=0; p1=p2=(struct School *)malloc(LEN); head=NULL; while(p1->event!=0) {n=n+1; if(n==1)a[0]=head=p1; else p2->next=p1; p2=p1; p1=(struct School *)malloc(LEN); printf("the event is:(put 0 end the putting of school):"); scanf("%d",&p1->event); printf("school name:"); getchar(); gets(p1->name); printf("school score:"); scanf("%d",&p1->score); printf("person name:"); getchar(); gets(p1->person); printf("school rank:"); scanf("%d",&p1->rank); switch(p1->event) {case 0:p1->sum=p1->score;break; case 1: {switch(p1->rank) {case 1:p1->sum=p1->score+7;break; case 2:p1->sum=p1->score+5;break; case 3:p1->sum=p1->score+3;break; case 4:p1->sum=p1->score+2;break; case 5:p1->sum=p1->score+1;break; default:p1->sum=p1->score;}}break; case 2: {switch(p1->rank) {case 1:p1->sum=p1->score+5;break; case 2:p1->sum=p1->score+3;break; case 3:p1->sum=p1->score+2;break; default:p1->sum=p1->score;}}break; default:p1->sum=p1->score; } } p2->next=NULL; return(a[0]); }int main(){struct School *pt;pt=creat();printf("\nscore:%d\nsum:%d\n",pt->score,pt->sum); return 0;}输入的score是123,event 为1,rank为1.输出的score总是一个很大的数据15564562,输出的sum 也很大,11235578.求教为什么?
2 回答
已采纳
BlueCitizen
TA贡献5条经验 获得超0个赞
哦,能进入循环,我说错了,抱歉。while(p1->event!=0)对于这个入口循环,event并没有赋值,那么系统会随机给一个值,给什么样的值看运气,一般会很大。
- 2 回答
- 0 关注
- 1700 浏览
添加回答
举报
0/150
提交
取消