回 帖 发 新 帖 刷新版面

主题:自己编的程序没有达到自己想到的效果,求下改进!

我是想写能存入50个数字的,但遇到负数就停止存入,进行排序!但是我怎么也想不通为什么没有进行排序。希望大家帮帮忙。谢谢!下面是代码。C99的!
#include <stdio.h>
#define NUM 50
float fidmin(float[],int);

int main()
{
    float val[NUM];
    int i,move=0;
    float min;


    for(i=0;i<NUM;i++)
    {
        printf("请输入分数,输入完后请输入一负数表示:");
        scanf("%f",&val[i]);
        if(val[i]<0)
        break;
        move++;
    }
    for(i=0;i<move;i++)
    {
        printf("第%d个为%6.2f\n",i+1,val[i]);
    }
    
    min=fidmin(val,move);
    
    printf("所输入的数字按降序排序依次为:\n");
    for(i=0;i<move;i++)
       printf("%6.2f\n",val[i]);
     printf("%f",min);
    return 0;
}

float fidmin(float vals[],int num)
{
    int i,j,minxd;
    float min=0,temp;
    
    for(i=0;i<(num-1);i++);
    {
        for(j=1;j<num;j++)
        {
            if(vals[j]<vals[j-1])
            {
              temp=vals[j];
              vals[j]=vals[j-1];
              vals[j-1]=temp;
              min++;
            }
        }
    }
     return(min);
}

回复列表 (共5个回复)

沙发

尝试传递float*而不是float[]

板凳


现在不是这个问题了,不管float*还是float[];
它的任务都完成了!现在主要是没有进行排序。

3 楼

总觉得你的排序算法很别扭,能说说你的思路么

4 楼

我把程序加一点注解吧。
#include <stdio.h>
#define NUM 50
float fidmin(float[],int);

int main()
{
    float val[NUM];
    int i,move=0;
    float min;


    for(i=0;i<NUM;i++)/*定义最多可以输入50个数字*/
    {
        printf("请输入分数,输入完后请输入一负数表示:");
        scanf("%f",&val[i]);
        if(val[i]<0)/*当输入的数字小于零的时候就直接输入结束*/
        break;
        move++;
    }
    for(i=0;i<move;i++)/*这里是从新显示一遍刚刚输入的数字*/
    {
        printf("第%d个为%6.2f\n",i+1,val[i]);
    }
    
    min=fidmin(val,move);
    
    printf("所输入的数字按升序排序依次为:\n");
    for(i=0;i<move;i++)
       printf("%6.2f\n",val[i]);/*把数字给从小到大排列出来*/
     printf("%f",min);/*这是只是为了跟踪冒泡里运行的次数*/
    return 0;
}

float fidmin(float vals[],int num)
{
    int i,j,minxd;
    float min=0,temp;
    
    /*关于这里我就解释不太清楚了,因为冒泡我还弄不太明白呢,而这程序刚好问题就是出现在没有进行排序,应该说排序没有完整的进行,因为也有把最大的放在了最后。不过这是很多本书上都出现的教程冒泡程序,出错的可能性不大*/
    for(i=0;i<(num-1);i++);
    {
        for(j=1;j<num;j++)/**/
        {
            if(vals[j]<vals[j-1])
            {
              temp=vals[j];
              vals[j]=vals[j-1];
              vals[j-1]=temp;
              min++;
            }
        }
    }
     return(min);
}

5 楼

找出错误了,不是程序思路问题。 for(i=0;i<(num-1);i++);
就因为后面不小心加了个分号,去掉就正常了。谢了风剑!

我来回复

您尚未登录,请登录后再回复。点此登录或注册