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

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

 input(int go)
{
    char name[6];
    int i,num[6];
    float yuwen[6],shuxue[6],yingyu[6];
    for(i=0;i<6;i++)
{
    printf("请输入第[%d]学生的姓名\n",i+1);
    scanf("%s",name);
    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);
}    

 sort1()
{    int n;
    float t;
    int i;
    char a[10];
    for(i=0;i<6;i++)
    {
        if(num[i]>num[i+1]) /*条件成立,交换前后学号*/
        n=num[i+1];     
        num[i+1]=num[i];
        num[i]=n;
        
        strcpy(&a[10],&name[i+1]);  /*交换前后姓名,使与学号相对应*/
        strcpy(&name[i+1],&name[i]);
        strcpy(&name[i],&a[10]);
        
        t=yuwen[i+1]; /*交换前后语文成绩,使与学号想对应*/
        yuwen[i+1]=yuwen[i];
        yuwen[i]=t;
        
        t=shuxue[i+1]; /*交换前后数学成绩,使与学号想对应*/
        shuxue[i+1]=shuxue[i];
        shuxue[i]=t;
        
        t=yingyu[i+1]; /*交换前后英语成绩,使与学号想对应*/
        yingyu[i+1]=yingyu[i];
        yingyu[i]=t;
    }
    printf("学生成绩按学号排序:\n");
    printf("姓名\t学号\t语文成绩\t数学成绩\t英语成绩\n");
    for(i=0;i<6;i++)
    printf("%s\t%d\t%.2f\t\t%.2f\t\t%.2f\n",name[i],num[i],yuwen[i],shuxue[i],yingyu[i]);
    
}    
 sort2()
{
    int i;
    float t;
    char a[10];
    int b;
   for(i=0;i<6;i++)
{
    if(yuwen[i+1]+shuxue[i+1]+yingyu[i+1]>yuwen[i]+shuxue[i]+yingyu[i])
    b=num[i];     
    num[i]=num[i+1];
    num[i+1]=b;
        
     strcpy(&a[10],&name[i+1]);/*交换前后姓名,使与学号相对应*/
     strcpy(&name[i],&name[i+1]);
     strcpy(&name[i+1],&a[10]);
     
     t=yuwen[i]; /*交换前后语文成绩,使与学号想对应*/
    yuwen[i]=yuwen[i+1];
    yuwen[i+1]=t;
        
    t=shuxue[i]; /*交换前后数学成绩,使与学号想对应*/
    shuxue[i]=shuxue[i+1];
    shuxue[i+1]=t;
        
    t=yingyu[i]; /*交换前后英语成绩,使与学号想对应*/
    yingyu[i]=yingyu[i+1];
    yingyu[i+1]=t;
}
printf("学生成绩按总分排序:\n");
printf("姓名\t学号\t总分\n");
for(i=0;i<6;i++)
{
printf("%s\t%d\t%.2f",name[i],num[i],yuwen[i]+shuxue[i]+yingyu[i]);
printf("\n");
}

}

 stat()
{   int i;
    float sum1=0.0,sum2=0.0,sum3=0.0;  
    float aver1,aver2,aver3;
    printf("姓名\t学号\t语文\t数学\t英语\t总分\t平均分\n");
    for(i=0;i<6;i++)
    {
    printf("%s\t%d\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f",name[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<6;i++) /*求总分*/
 {
     
    sum1=sum1+yuwen[i];
    sum2=sum2+shuxue[i];
    sum3=sum3+yingyu[i];
 }
      {
       aver1=sum1/6;/*求平均分*/
       aver2=sum2/6;
       aver3=sum3/6;
      }
            
{      
float max1,max2,max3,min1,min2,min3,t;
int i,j;
for(i=0;i<6;i++)  /*求语文成绩的最高分和最低分*/
{
 for(j=0;j<6-i;j++)
 if(yuwen[j+1]<yuwen[j])
  {
      t=yuwen[j+1];
      yuwen[j+1]=yuwen[j];
      yuwen[j]=t;
  }
}
  max1=yuwen[5];min1=yuwen[0];
  
for(i=0;i<6;i++)   /*求数学成绩的最高分和最低分*/
{
 for(j=0;j<6-i;j++)
 if(shuxue[j+1]<shuxue[j])
  {
      t=shuxue[j+1];
      shuxue[j+1]=shuxue[j];
      yuwen[j]=t;
  }
}
  max2=shuxue[5];min2=shuxue[0];

for(i=0;i<6;i++)  /*求英语成绩的最高分和最低分*/
{
 for(j=0;j<6-i;j++)
 if(yingyu[j+1]<yingyu[j])
  {
      t=yingyu[j+1];
      yingyu[j+1]=yingyu[j];
      yingyu[j]=t;
  }
  max3=yingyu[5];min3=yingyu[0];
}
  
 
  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 go=0;
   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:   go=input(go);break;/*输入学生资料函数*/
        case 2:   sort1();sort2();break;/*成绩排序函数*/
        case 3:   stat();break;/*成绩统计函数*/
        case 0:   exit(0);break;/*退出*/   
    }
}}
搜索更多相关主题的帖子: 改改 统计 运行 
2008-06-14 10:03
himpo
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:192
专家分:123
注 册:2008-5-16
收藏
得分:0 
问题不少啊。
1.定义了全局变量,在局部函数中再次定义覆盖。
  如:char name[6];
int i,num[6];
float yuwen[6],shuxue[6],yingyu[6];

input(int go)
{
    char name[6];
    int i,num[6];
    float yuwen[6],shuxue[6],yingyu[6];
    for(i=0;i<6;i++)
2.char name[6]是一个字符数组,其每个元素只能存放一个字符,来存放姓名,好像不太方便,
  但你的名字只有一个字符的话,当我没说。但是你的input中的for循环有个
 printf("请输入第[%d]学生的姓名\n",i+1);
    scanf("%s",name);
就说不过去了。输出name[i]不能用%s吧?
3.好多地方大括号没加,也就是层次不清楚。
 如:if(num[i]>num[i+1]) /*条件成立,交换前后学号*/
        n=num[i+1];     
        num[i+1]=num[i];
        num[i]=n;
        
        strcpy(&a[10],&name[i+1]);  /*交换前后姓名,使与学号相对应*/
        strcpy(&name[i+1],&name[i]);
        strcpy(&name[i],&a[10]);
        
        t=yuwen[i+1]; /*交换前后语文成绩,使与学号想对应*/
        yuwen[i+1]=yuwen[i];
        yuwen[i]=t;
        
        t=shuxue[i+1]; /*交换前后数学成绩,使与学号想对应*/
        shuxue[i+1]=shuxue[i];
        shuxue[i]=t;
        
        t=yingyu[i+1]; /*交换前后英语成绩,使与学号想对应*/
        yingyu[i+1]=yingyu[i];
        yingyu[i]=t;
我想你的本意应该是if满足的话,后面的这些都执行,但是没了{}就只执行
 n=num[i+1];     这一句了。。
4.别的没细看.......
5.建议用结构体。
6.有点累。。。
2008-06-14 10:34
himpo
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:192
专家分:123
注 册:2008-5-16
收藏
得分:0 
还有for(i=0;i<6;i++)
    {
        if(num[i]>num[i+1]) /*条件成立,交换前后学号*/
        n=num[i+1];     
        num[i+1]=num[i];
        num[i]=n;
i=5时,num[i+1]到了num[6]
明显越界。。
这都是基本功的问题,要不就是你粗心大意。。
唉!!~~~~~~~~
2008-06-14 10:40
快速回复:各位帮帮改改程序!排序和统计运行错误
数据加载中...
 
   



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

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