[新手提问] 菜鸟问题! 帮我看看错在哪里!
我不知道该怎么写这个案例说明. 自己瞎写的.有谁能教一下的么.
给个格式也行.
下面说程序问题.这个程序里开头测试了下还好.
后面排序我是不想打乱原由顺序.
存到XX1里输出排序结果.
可是排的好象有问题.用的是冒泡排序法(书上这么叫的).
插入那里也有问题.
对了,还有输出打印的时候有些排列不整齐..
有办法解决么..貌似跟我输入名字的长度有关系.
请有耐心的朋友帮忙看看!
先谢谢了!
程序代码:
/************************************************** 案例说明; 定义需要的头文件: #include<stdio.h> #include<string.h> #include<stdlib.h> 定义录入人数最大值: #define N 50 --------------------------------------------------- 定义结构stu; 包含函数: 姓名 char name[16] 学号 int no 成绩 struct inf cj; --------------------------------------------------- 定义结构inf; 包含函数: 语文 float yw 数学 float sx 英语 float yy; --------------------------------------------------- 申明结构stu; 结构数组 struct stu xx[N]; --------------------------------------------------- 定义录入子函数名: void lr(struct stu xx[]); 实现单个学员录入; --------------------------------------------------- 定义显示子函数名: void xs(struct stu xx[]); 显示全班成绩或者某学员成绩; 定义函数名: 全班成绩 void ap(); 某学员成绩 void sp(); --------------------------------------------------- 定义排序子函数名: void px(struct stu xx[]); 以三门功课的平均分排序; 定义函数名: 平均分 pjf; --------------------------------------------------- 定义插入子函数名: void cr(struct stu xx[]); 在指定位置插入信息; --------------------------------------------------- 定义删除子函数名: void sc(struct stu xx[]); 删除指定位置的学员信息; --------------------------------------------------- 定义清屏子函数名: void qp(struct stu xx[]); 清除屏幕; **************************************************/ #include<stdio.h> #include<string.h> #include<stdlib.h> #define N 50 struct inf { float yw; float sx; float yy; }; struct stu { char name[16]; int no; struct inf cj; }; void lr(struct stu xx[]); void xs(struct stu xx[]); void ap(struct stu xx[]); void sp(struct stu xx[]); void px(struct stu xx[]); float pjf(struct stu xx[],int i); void cr(struct stu xx[]); void sc(struct stu xx[]); int count=0; void main() { system("color 7c"); printf("\n\n\t\t欢迎进入学员信息查询系统\n\n"); printf("==========================================================\n\n"); do { int i; struct stu xx[N]; printf("\n"); printf("\t1---------录入信息\n"); printf("\t2---------显示信息\n"); printf("\t3---------排序信息\n"); printf("\t4---------插入数据\n"); printf("\t5---------删除数据\n"); printf("\t6---------清除页面显示\n"); printf("\t0---------退出程序\n"); printf("\t请选择: "); fflush(stdin); i=getchar(); if(i<'0'||i>'6') printf("输入错误!"); switch(i) { case '0': exit(0); break; case '1': lr(xx); break; case '2': xs(xx); break; case '3': px(xx); break; case '4': cr(xx); break; case '5': sc(xx); break; case '6': system("cls"); break; } }while(1); } void lr(struct stu xx[N]) { int i=count; char c; printf("\n\n"); do { fflush(stdin); printf("\t请输入第%d个姓名: ",i+1); gets(xx[i].name); fflush(stdin); printf("\t请输入第%d个学号: ",i+1); scanf("%d",&xx[i].no); if(xx[i].no<1||xx[i].no>50) { printf("学号输入错误!"); continue; } printf("\t语文成绩: "); scanf("%f",&xx[i].cj.yw); printf("\t数学成绩: "); scanf("%f",&xx[i].cj.sx); printf("\t英语成绩: "); scanf("%f",&xx[i].cj.yy); count++; i++; fflush(stdin); printf("\t是否继续(y or n): "); fflush(stdin); c=getchar(); }while(c!='n'); } void xs(struct stu *xx) { int i; do { printf("\n\n"); printf("\t1-----显示全班信息\n"); printf("\t2-----显示学员信息\n"); printf("\t0-----返回上一级菜单\n"); printf("\n\t请选择: "); fflush(stdin); i=getchar(); if(i<'0'||i>'2') printf("\t输入错误!\n"); switch(i) { case '0':break; case '1':ap(xx);break; case '2':sp(xx);break; } }while(i!='0'); } void ap(struct stu xx[N]) { int i; float x; printf("学号\t\t姓名\t\t\t平均成绩\n"); for(i=0;i<count;i++) { x=pjf(xx,i); printf("%d\t\t%s\t\t%7.2f\n",xx[i].no,xx[i].name,x); } fflush(stdin); getchar(); } void sp(struct stu xx[N]) { int i,j; float x; printf("请输入需要显示学员的学号: "); scanf("%d",&i); if(i<1||i>50) printf("学号输入错误!"); if(i>1&&i<50) { printf("学号\t\t姓名\t\t\t平均成绩\n"); j=i-1; x=pjf(xx,j); printf("%d\t\t%s\t\t%7.2f\n",xx[j].no,xx[j].name,x); } } void px(struct stu xx[N]) { int i,j; float x; struct stu temp,xx1[N],*p; for(i=0;i<N;i++) xx1[i]=xx[i]; p=xx1; for(i=0;i<count-1;i++) { for(j=0;j<count-i-1;j++) { if(pjf(p+j,j)<pjf(p+j+1,j)) { temp=*(p+j+1); *(p+j+1)=*(p+j); *(p+j)=temp; } } } printf("\n\n学号\t\t姓名\t\t\t平均成绩\n"); for(i=0;i<count;i++) { x=pjf(xx,i); printf("%d\t\t%s\t\t%7.2f\n",(p+i)->no,(p+i)->name,x); } } float pjf(struct stu xx[N],int i) { float sum=0; sum=xx[i].cj.yw+xx[i].cj.sx+xx[i].cj.yy; return sum/3; } void cr(struct stu xx[N]) { int x,i; char c; struct stu temp,*p; p=xx; do { printf("\t请输入要插入的学员学号: "); scanf("%d",&x); if(x<1||x>50) { printf("学号输入错误!"); continue; } for(i=count;i>x-1;i--) { temp=*(p+i); *(p+i)=*(p+i-1); *(p+i-1)=temp; } fflush(stdin); printf("\t请输入插入学员的姓名: ",x); gets(xx[x-1].name); fflush(stdin); x=xx[x-1].no; printf("\t语文成绩: "); scanf("%f",&xx[x-1].cj.yw); printf("\t数学成绩: "); scanf("%f",&xx[x-1].cj.sx); printf("\t英语成绩: "); scanf("%f",&xx[x-1].cj.yy); count++; fflush(stdin); printf("\t是否继续插入(y or n): "); fflush(stdin); c=getchar(); }while(c!='n'); } void sc(struct stu xx[N]) { int i,x; char c; struct stu temp,*p; p=xx; do { printf("请输入需要删除学员的学号: "); scanf("%d",&x); if(x<1||x>50) { printf("学号输入错误!"); continue; } for(i=x;i<count;i++) { temp=*(p+i); *(p+i)=*(p+i-1); *(p+i-1)=temp; } count--; fflush(stdin); printf("\t是否继续删除(y or n): "); fflush(stdin); c=getchar(); }while(c!='n'); }