| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 584 人关注过本帖
标题:程序小问题
只看楼主 加入收藏
alvinzjy
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2008-6-14
收藏
 问题点数:0 回复次数:7 
程序小问题
/* Note:Your choice is C IDE */
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#include "ctype.h"

#define N 5        /*这是总的学生数,你可以想多少就多少*/

char name[N][20];
int i,num[N];
float yuwen[N],shuxue[N],yingyu[N];

input()
{
for(i=0;i<N;i++)
{
printf("请输入第[%d]学生的姓名\n",i+1);
scanf("%s",name[i]);getchar();
printf("请输入第[%d]学生的学号\n",i+1);
scanf("%d",&num[i]);
printf("请输入第[%d]学生的语文成绩\n",i+1);
scanf("%f",&yuwen[i]);
printf("请输入第[%d]学生的数学成绩\n",i+1);
scanf("%f",&shuxue[i]);
printf("请输入第[%d]学生的英语成绩\n",i+1);
scanf("%f",&yingyu[i]);
}
return(i);
}

void sort1()
{ int n;
float t;
int i,j;
char a[10];
for(i=0;i<N-1;i++)
for(j=i+1;j<N;j++)
{
if(num[i]>num[j]) /*条件成立,交换前后学号*/
{ n=num[j];     
num[j]=num[i];
num[i]=n;

strcpy(a,name[j]);  /*交换前后姓名,使与学号相对应*/
strcpy(name[j],name[i]);
strcpy(name[i],a);

t=yuwen[j]; /*交换前后语文成绩,使与学号想对应*/
yuwen[j]=yuwen[i];
yuwen[i]=t;

t=shuxue[j]; /*交换前后数学成绩,使与学号想对应*/
shuxue[j]=shuxue[i];
shuxue[i]=t;

t=yingyu[j]; /*交换前后英语成绩,使与学号想对应*/
yingyu[j]=yingyu[i];
yingyu[i]=t;
}
}
printf("学生成绩按学号排序:\n");
printf("学号\t姓名\t语文成绩\t数学成绩\t英语成绩\n");
for(i=0;i<N;i++)
printf("%d\t%s\t%.2f\t\t%.2f\t\t%.2f\n",num[i],name[i],yuwen[i],shuxue[i],yingyu[i]);

}

void sort2()
{
int i,j;
float t;
char a[10];
int b;
for(i=0;i<N-1;i++)
{for(j=i+1;j<N;j++)
{
if(yuwen[j]+shuxue[j]+yingyu[j]>yuwen[i]+shuxue[i]+yingyu[i])
{

strcpy(a,name[j]);/*交换前后姓名,使与学号相对应*/
strcpy(name[i],name[j]);
strcpy(name[j],a);

b=num[i];     
num[i]=num[j];
num[j]=b;

t=yuwen[i]; /*交换前后语文成绩,使与学号想对应*/
yuwen[i]=yuwen[j];
yuwen[j]=t;

t=shuxue[i]; /*交换前后数学成绩,使与学号想对应*/
shuxue[i]=shuxue[j];
shuxue[j]=t;

t=yingyu[i]; /*交换前后英语成绩,使与学号想对应*/
yingyu[i]=yingyu[j];
yingyu[j]=t;
}
}}
printf("学生成绩按总分排序:\n");
printf("姓名\t学号\t总分\n");
for(i=0;i<N;i++)
{
printf("%s\t%d\t%.2f",name[i],num[i],yuwen[i]+shuxue[i]+yingyu[i]);
printf("\n");
}

}

void stat()
{
int i,j;
float max1,max2,max3,min1,min2,min3;
float sum1=0,sum2=0,sum3=0;  
float aver1,aver2,aver3;
printf("姓名\t学号\t语文\t数学\t英语\t总分\t平均分\n");
for(i=0;i<N;i++)
{
printf("%s\t%d\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f",name[i],num[i],yuwen[i],shuxue[i],yingyu[i],
yuwen[i]+shuxue[i]+yingyu[i],(yuwen[i]+shuxue[i]+yingyu[i])/3);
printf("\n");
}


for(i=0;i<N;i++) /*求总分*/
{

sum1=sum1+yuwen[i];
sum2=sum2+shuxue[i];
sum3=sum3+yingyu[i];
}
aver1=sum1/N;/*求平均分*/
aver2=sum2/N;
aver3=sum3/N;      

max1=yuwen[N-1];min1=yuwen[0];/*求语文成绩的最高分和最低分*/
for(j=0;j<N;j++)
{
if(max1<yuwen[j])
 max1=yuwen[j];
if(min1>yuwen[j])
 min1=yuwen[j];
}

max2=shuxue[N-1];min2=shuxue[0]; /*求数学成绩的最高分和最低分*/
for(j=0;j<N;j++)
{
if(max2<shuxue[j])
 max2=shuxue[j];
if(min2>shuxue[j])
 min2=shuxue[j];
}

max3=yingyu[N-1];min3=yingyu[0];/*求英语成绩的最高分和最低分*/
for(j=0;j<N;j++)
{
if(max3<yingyu[j])
 max3=yingyu[j];
if(min3>yingyu[j])
 min3=yingyu[j];
}

printf("语文成绩统计:\n");
printf("平均分:%.2f\t""最高分:%.2f\t""最低分:%.2f\n",aver1,max1,min1);

printf("数学成绩统计:\n");
printf("平均分:%.2f\t""最高分:%.2f\t""最低分:%.2f\n",aver2,max2,min2);

printf("英语成绩统计:\n");
printf("平均分:%.2f\t""最高分:%.2f\t""最低分:%.2f\n",aver3,max3,min3);
}


void main()
{    int k;
while(1)
{
printf("*******************学生成绩管理系统*********************\n");
printf("\t\t | 1. 输入学生资料 |\n");
printf("\t\t | 2. 学生成绩排序 |\n");
printf("\t\t | 3. 学生成绩统计 |\n");
printf("\t\t | 0. 退出 |\n");
printf("********************************************************\n");
printf("请输入(0~3)选择:");
scanf("%d",&k);
switch(k) /*用switch语句实现功能选择*/
{
case 1:   input();break;/*输入学生资料函数*/
case 2:   sort1();sort2();break;/*成绩排序函数*/
case 3:   stat();break;/*成绩统计函数*/
case 0:   exit(0);break;/*退出*/   
}
}}



附图:   姓名排序出现问题   不知道什么原因  望高手指点、、

个.jpg (43.51 KB)
图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: include choice 姓名 语文 
2008-06-14 18:05
flyue
Rank: 10Rank: 10Rank: 10
来 自:江南西道
等 级:贵宾
威 望:19
帖 子:3465
专家分:1563
注 册:2006-6-20
收藏
得分:0 
汗~~这么多代码,都把这些高手们吓跑了……
大的程序出了问题还得自己解决吧,不要指望谁能帮你。
你用的TC写的程序吧?用Visual C++调试一下,功能更强大。

天之道,损有余而补不足.人之道则不然,损不足以奉有余.孰能有余以奉天下,唯有道者.
2008-06-14 18:50
himpo
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:192
专家分:123
注 册:2008-5-16
收藏
得分:0 
LS的,其实他这个是个小程序,被他复杂化了。。
之前发过一个帖子,指了几个错误,已经进步不小了。。
2008-06-14 18:59
alvinzjy
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2008-6-14
收藏
得分:0 
回复 3# himpo 的帖子
刚学的   学过的知识都用上了   无办法  搞不定
2008-06-14 19:02
flyue
Rank: 10Rank: 10Rank: 10
来 自:江南西道
等 级:贵宾
威 望:19
帖 子:3465
专家分:1563
注 册:2006-6-20
收藏
得分:0 
如果是在学校的话,可以找你的同学来一起研究啊。顺便培养一下团队合作精神。
哎…我想找个会编程的同学都难啊

天之道,损有余而补不足.人之道则不然,损不足以奉有余.孰能有余以奉天下,唯有道者.
2008-06-14 19:02
alvinzjy
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2008-6-14
收藏
得分:0 
回复 3# himpo 的帖子
能再指点指点吗?
2008-06-14 19:08
himpo
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:192
专家分:123
注 册:2008-5-16
收藏
得分:0 
还是粗心的毛病!
我给你看了一下。。
在sort2函数中有名字的交换
if(yuwen[j]+shuxue[j]+yingyu[j]>yuwen[i]+shuxue[i]+yingyu[i])
{

strcpy(a,name[j]);/*交换前后姓名,使与学号相对应*/
strcpy(name[i],name[j]);
strcpy(name[j],a);

改成strcpy(a,name[j]);/*交换前后姓名,使与学号相对应*/
strcpy(name[j],name[i]);
strcpy(name[i],a);

知道名字排序有问题就要到这个上面找,要学会差错。。

再次佩服你的耐心和勇气。

bless!
2008-06-14 19:26
alvinzjy
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2008-6-14
收藏
得分:0 
回复 7# himpo 的帖子
thank you very much ,还是高手独具慧眼!!!以后还是要细心!!
2008-06-14 19:38
快速回复:程序小问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018190 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved