| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 430 人关注过本帖
标题:求大神。程序能够得到正确的运行结果,但是接着就提示5.exe已停止工作(出现 ...
只看楼主 加入收藏
Lx947154276
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2014-4-6
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:7 
求大神。程序能够得到正确的运行结果,但是接着就提示5.exe已停止工作(出现了一个问题……)
程序代码:
#include<stdio.h>
#define N 3                /*定义学生人数*/
struct student              /*建立结构体数据类型*/
{
    int num;                /*学号*/
    char name[20];          /*姓名*/
    float score[3];         /*3门课成绩*/
    float sum;              /*总成绩*/
    char grade;             /*等级*/
};
struct student stu[N];               /*定义结构体数组*/
void QuickSort(float array[],int n);

int main()
{
    {/*定义input函数*/
       int i;
       printf("请输入各学生的信息:学号、姓名、三门课成绩:\n");
       for(i=0;i<N;i++)
       {
           scanf("%d%s%f%f%f",&stu[i].num,stu[i].name,
               &stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);    /*输入数据*/
           stu[i].sum=stu[i].score[0]+stu[i].score[1]+stu[i].score[2];    /*求每位同学的总分*/
       }
   }


   float Sum[N];                       /*定义Sum数组,便于按Sum对学生stu排序*/
   int t;                              /*把stu[].sum赋给Sum[]*/
   for(t=0;t<N;t++)
       Sum[t]=stu[t].sum;
   QuickSort(Sum,N);



   printf("num\tname\tscore1\tscore2\tscore3\tsum\tgrede\n"); /*定义输出函数*/
   int m;
   for(m=0;m<N;m++)
   {
       printf("%d\t%s\t%-8.1f%-8.1f%-8.1f%-8.1f",stu[m].num,
           stu[m].name,stu[m].score[0],stu[m].score[1],
           stu[m].score[2],stu[m].sum);
       if((m+1)<=N*0.95)
           printf("合格\n");
       else
           printf("不合格\n");
   }
   return 0;
} 


void QuickSort(float array[],int n)    /*用快速排序法*/
{
    int j=0,k=n-1;
    float val=array[0];                    /*指定参考值val为第一个同学的数据,一般都指定数组里的第一个,下面实现把比val小的放在val前面,大的放在其后面*/
    struct student temp=stu[0]; 
    if(n>1)                               /*确保数组长度至少为2,否则无需排序*/
    {
        while(j<k)                    
        {
            for(;k>j;k--)                   /*从后向前搜索比val小的元素,找到后填到array[j]中并跳出循环*/
            {
                if(array[k]<val)
                {
                    array[j]=array[k];
                    stu[j]=stu[k];
                    break;
                }
            }
            for(;j<k;j++)                   /*从前往后搜索比val大的元素,找到后填到array[k]中并跳出循环*/
            {
                if(array[j]>val)
                {
                    array[k]=array[j];
                    stu[k]=stu[j];
                    break;
                }
            }
        }
        array[j]=val;                       /*将保存在val中的数放到array[i]中*/
        stu[j]=temp;
        QuickSort(array,j);                 /*递归,对前j个数排序*/
        QuickSort(array+j+1,n-j);             /*对j+1到n这n-j个数排序*/
    }
}

是快速排序的时候出问题了么?但是我是先得到正确的结果,然后提示出错,程序停止运行。
搜索更多相关主题的帖子: color 
2014-04-08 00:47
xiaozi2013
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:四川成都
等 级:蒙面侠
威 望:6
帖 子:830
专家分:4331
注 册:2013-12-13
收藏
得分:0 
scanf("%d%s%f%f%f",&stu[i].num,stu[i].name,
               &stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);    /*输入数据*/
           stu[i].sum=stu[i].score[0]+stu[i].score[1]+stu[i].score[2];    /*求每位同学的总分*/
       }

%d%s%f%f%f与&内容个数不对应吧

--整天敲那些破代码能找着媳妇儿吗。。。---
2014-04-08 08:30
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:3 
经过我的初步诊断   是快速排序的函数出现了堆栈崩溃
但是我对快速排序 不熟悉  所以无法帮你排错

DO IT YOURSELF !
2014-04-08 08:39
ying8501
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:1092
专家分:1446
注 册:2008-11-24
收藏
得分:15 
     。。。。
     array[j]=val;                       /*将保存在val中的数放到array[i]中*/
        stu[j]=temp;
        QuickSort(array,j);                 /*递归,对前j个数排序*/
        QuickSort(array+j+1,n-1-j);             //---这里错了   
}


[ 本帖最后由 ying8501 于 2014-4-8 09:34 编辑 ]
2014-04-08 09:26
Andrew_Lee
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:185
专家分:626
注 册:2014-3-21
收藏
得分:2 
额,楼上正解,我刚调到这儿
2014-04-08 09:38
Lx947154276
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2014-4-6
收藏
得分:0 
回复 2楼 xiaozi2013
字符串是不要&的,所以这里没有问题,而且我是可以得到运行结果的
2014-04-08 10:30
Lx947154276
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2014-4-6
收藏
得分:0 
回复 4楼 ying8501
多谢啦!原来是对0到j-1这j个数与对j+1到n-1这n-1-j个数进行递归排序,搞得我头晕死了。。。。。。。。
2014-04-08 10:48
Lx947154276
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2014-4-6
收藏
得分:0 
回复 3楼 wp231957
虽然不懂什么叫堆栈崩溃,但的确是最后递归的时候出错了。多谢O(∩_∩)O~~
2014-04-08 10:50
快速回复:求大神。程序能够得到正确的运行结果,但是接着就提示5.exe已停止工作 ...
数据加载中...
 
   



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

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