[新手提问] 菜鸟问题! 帮我看看错在哪里!
我不知道该怎么写这个案例说明. 自己瞎写的.有谁能教一下的么.
给个格式也行.
下面说程序问题.这个程序里开头测试了下还好.
后面排序我是不想打乱原由顺序.
存到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');
}







