gpt4 book ai didi

c - 在 float 变量中排序后数组值发生变化

转载 作者:太空宇宙 更新时间:2023-11-04 04:32:30 26 4
gpt4 key购买 nike

我运行此代码并在数组“s”中输入浮点值,但在排序后,数组元素的新值与输入值略有不同。为什么会这样?这是我运行的代码:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <conio.h>


void main()
{
int N,sorted,i;

printf("How many students?\n");
scanf("%d",&N);
float s[N],temp;

for(i=0;i<N;i++)
{
printf("Marks of student %d?\n",i+1);
scanf("%f",&s[i]);
}
//bubble sorting ---
while(1)
{
sorted=0;
for(i=0;i<N-1;i++)
{
if(s[i]<s[i+1])
{
temp=s[i];
s[i]=s[i+1];
s[i+1]=temp;
sorted=1;
}
}
if(sorted==0)
break;
}
printf("\nSorted Marks - \n\n");
for(i=0;i<N;i++)
{
printf("%f\n",s[i]);
}
}

输入:

N=5
Marks = 34.53,54,34,56.76,87.567

输出:

Sorted Marks -

87.567001
56.759998
54.000000
34.529999
34.000000

最佳答案

简短的回答是并非所有 float 都可以精确存储,因此系统会选择“最接近”的可能数字,这可能导致例如34.53 变为 34.529999。 – 一些程序员老兄

您可以通过两种方式“解决”问题。 1) 将中的float改为double,将"%f"改为"%lf"扫描。 2) 将printf中的"%f"改为"%.4f"。 – 用户 3386109

关于c - 在 float 变量中排序后数组值发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34285975/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com