【发布时间】:2016-10-29 04:57:58
【问题描述】:
我的程序向用户提供了三个选项。第一个选项让用户输入分子,然后输入分母。第二个选项显示我输入的那些分数。现在对于第三个选项,假设按照从小到大的顺序对其进行排序。纠结了好久,不知道怎么办
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
//Struct to hold fraction data
typedef struct
{
int numerator, denom;
}fraction;
double Calc_Frac(fraction b)
{
return((double)b.numerator / b.denom);
}
int main()
{
//Array of 100 fractions
fraction arrFraction[100];
int i = 0;
int j;
int num = 1;
while (num == 1)
{
int choice;
printf("\nPress 1 to enter a fraction\n");
printf("Press 2 to view stored fractions\n");
printf("Press 3 to sort fractions\n");
scanf("%d", &choice);
if(choice == 1)
{
//Prompting user
printf("\nEnter your fraction, numerator followed by denominator\n");
//Reading values from user
scanf("%d %d", &arrFraction[i].numerator, &arrFraction[i].denom);
//Incrementing counter
i++;
}
if (choice == 2)
{
printf("-------------------------\n");
for (j = 0; j < i; j++)
{
printf("%d %d/%d \n", arrFraction[j].numerator/arrFraction[j].denom,
arrFraction[j].numerator%arrFraction[j].denom, arrFraction[j].denom);
}
printf("\n-------------------------\n\n");
}
if (choice == 3)
{
int min;
fraction tmp;
for (i = 0; i < j; i++)
{
min = i;
for (j = i + 1; j < i; j++)
{
if (Calc_Frac(arrFraction[j]) < Calc_Frac(arrFraction[min]))
{
min = j;
}
}
tmp = arrFraction[i];
arrFraction[i] = arrFraction[min];
arrFraction[min] = tmp;
}
i++;
}
} // end of while loop
system("pause");
return(0);
}
【问题讨论】:
-
别忘了检查零分母
-
您在 for 循环外的排序代码取决于 j 即
i < j
。但是 j 的值是多少?它会根据用户是否输入选项2而改变。 -
我建议首先采用排序逻辑并独立运行它,看看它是否真的排序正确。
-
*.com/questions/40315424/… 的完全相同的副本。其实我觉得你是同一个用户(airdemko3 -> ademko)
-
让多个帐户问同一个问题是不好的做法
标签: c arrays sorting fractions