| 网站首页 | 业界新闻 | 群组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 编程论坛
大量收QQ微信精准粉/交友粉,非诚勿扰千里之行 始于足下
共有 256 人关注过本帖
标题:不能正常输出数组
只看楼主 加入收藏
lxk1732942
Rank: 2
等 级:论坛游民
帖 子:93
专家分:56
注 册:2018-9-4
结帖率:100%
  已结贴   问题点数:20  回复次数:8   
不能正常输出数组
程序代码:
#include<stdio.h>
void main()
{
    int i=0,j,n;
    float a[99]={0},t;
    printf("input some numbers(input 0.1 to end):\n");
    do
    {
        scanf("%f",a[i++]);
    }while(a[i-1]!=0.1);
    n=i-1;
    for(i=0;i<n-1;i++)
        for(j=0;j<n;j++)
            if(a[i]>a[j])
            {
                t=a[i];
                a[i]=a[j];
                a[j]=t;
            }
    for(i=0;i<n;i++)
        printf("%f",a[i]);
    printf("\n");
}


[此贴子已经被作者于2018-10-11 09:24编辑过]

2018-10-11 09:23
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:160
帖 子:6229
专家分:27265
注 册:2014-5-20
  得分:7 
试试:
//scanf("%f",a[i++]);
scanf("%f",&a[i++]);
2018-10-11 10:27
no1xijin
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:江西
等 级:版主
威 望:11
帖 子:155
专家分:944
注 册:2015-7-8
  得分:7 
1.scanf("%f",&a[i++]);;    // 缺少取地址符 &

2.你的主函数中do...while的结束条件不对,你修改一下结束条件就可以了,用!(a[n-1]>0  && a[n-1]<1)这个当结束条件可以跳出输入数据的do...while循环。
float 类型不能比较相等或不等,但可以比较>,<,>=,<=
用==从语法上说没错,但是本来应该相等的两个浮点数由于计算机内部表示的原因可能略有微小的误差,这时用==就会认为它们不等。应该使用两个浮点数之间的差异的绝对值小于某个可以接受的值来判断判断它们是否相等,比如用
    if (fabs(price - p) < 0.000001)
来代替
    if (price == p)

3.你的结果的排序算法有点问题,这个你没问,就不提了。
2018-10-11 14:05
月夜无影
Rank: 1
等 级:新手上路
帖 子:4
专家分:7
注 册:2018-10-11
  得分:7 
回复 楼主 lxk1732942
#include<stdio.h>
#include<math.h>//fabs()包含在math.h头文件内
int main()//void改为int
 {
     int i=0,j,n;
     float a[99]={0},t;
     printf("input some numbers(input 0.1 to end):\n");
     do
     {
         scanf("%f",&a[i++]);//少了个&
     }while(fabs(a[i-1]-0.1)>0.000001);//小数总是有误差,可改为相减大于一个很小的值 (fabs()包含在math.h头文件内 )
     n=i-1;
     for(i=0;i<n-1;i++)
         for(j=0;j<n-1;j++)//这里只遍历到n-1就可以了
             if(a[j]>a[j+1])//15到19行的i改为j
             {
                 t=a[j];
                 a[j]=a[j+1];
                 a[j+1]=t;
             }
     for(i=0;i<n;i++)
         printf("%f ",a[i]);//为了结果更清楚,最好加个空格或换行
     printf("\n");
     return 0;
 }

[此贴子已经被作者于2018-10-11 17:48编辑过]

2018-10-11 17:30
lxk1732942
Rank: 2
等 级:论坛游民
帖 子:93
专家分:56
注 册:2018-9-4
  得分:0 
回复 3楼 no1xijin
排序有什么问题,望指教
2018-10-11 18:25
lxk1732942
Rank: 2
等 级:论坛游民
帖 子:93
专家分:56
注 册:2018-9-4
  得分:0 
回复 3楼 no1xijin
是不是没有设置输出多少个数字换行
2018-10-11 18:27
lxk1732942
Rank: 2
等 级:论坛游民
帖 子:93
专家分:56
注 册:2018-9-4
  得分:0 
有没有什么办法可以只输出有效位数,这个样子输出一堆0不是很美观
2018-10-11 18:29
no1xijin
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:江西
等 级:版主
威 望:11
帖 子:155
专家分:944
注 册:2015-7-8
  得分:0 
回复 5楼 lxk1732942
你输入 5 2 1 看看,结果不是顺序或逆序,如果你不是要排(顺或逆)序,那就没问题,否则就是有问题。
若是有问题的话你把两个for改为
    for(i=0;i<n;i++)
        for(j=0;j<n-1;j++)
最后的结果就是按从大到小输出了。
2018-10-11 20:18
月夜无影
Rank: 1
等 级:新手上路
帖 子:4
专家分:7
注 册:2018-10-11
  得分:0 
回复 4楼 月夜无影
如果排序哪里不改的话,可能最后两个无法正常排序。但是13行的i<n-1该为i<n就应该可以了
2018-10-11 22:00







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

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