- 问题要求:编写一个完整的程序,对输入的n(n<100)本书进行排序并输出。
- 程序输入:程序首先输入一个正整数n,然后输入n本书的信息,每本书用两行输入,第一行输入书的名称(书名最长不超过50个字符,中间可能有空格)第二行输入价格,价格为浮点数。
- 程序输出:程序要求对n本书按价格从低到高排序,如果价格相同,则按书名(字符串)字典序从小到大排序。最后输出排序结果,每行输出一本书的信息,首先输出价格,然后输出书名,中间用一个英文逗号和一个空格分开。
#include <string.h>
#include <iostream>
using namespace std;
struct BOOK{
char name[51];
float price;
};
void sort(BOOK a[],int n)
{
BOOK tmp;
for(int i=0;i<n-1;i++)
{
for(int j=0;j<n-2;j++)
{
if((a[j].price)>(a[j+1].price))
{
tmp=a[j];
a[j]=a[j+1];
a[j+1]=tmp;
}
if((a[j].price)==(a[j+1].price))
{
int flag=strcmp(a[j].name,a[j+1].name);
if(flag>0)
{
tmp=a[j];
a[j]=a[j+1];
a[j+1]=tmp;
}
}
}
}
}
//请在此添加代码,实现书籍数据的输入、排序和输出
/********** Begin *********/
int main()
{
int n;//n-the number of book
cin>>n;
BOOK a[100];
for(int i=0;i<n;i++)
{
cin.getline(a[i].name,51);
cin>>a[i].price;
}
sort(a,n);
for(int i=0;i<n;i++)
{
cout << a[i].price << ", "<< a[i].name <<endl;
}
return 0;
}
/********** End **********/
运行结果:
问题:想知道程序哪里错了,是输入部分的错误吗?正确的程序应该是什么呢?