查找书籍-给定n本书的名称和定价,本题要求编写程序,查找并输出其中定价最高和最低的书的名称和定价。
给定n本书的名称和定价,本题要求编写程序,查找并输出其中定价最高和最低的书的名称和定价。
输入格式:
输入第一行给出正整数n(<10),随后给出n本书的信息。每本书在一行中给出书名,即长度不超过30的字符串,随后一行中给出正实数价格。题目保证没有同样价格的书。
输出格式:
在一行中按照“价格, 书名”的格式先后输出价格最高和最低的书。价格保留2位小数。
输入样例:
3
Programming in C
21.5
Programming in VB
18.5
Programming in Delphi
25.0
输出样例:
25.00, Programming in Delphi
18.50, Programming in VB
解析:结构体的题目,不要自己创建数组,太麻烦。有一点要注意,这里是输入一个带空格的字符串,所以不能用scanf,只能用gets。用gets又出现一个问题,前面要用scanf输入一个数字,那么你输入的回车就会被gets吃掉,所以再gets前要给一个scanf(“\n”);防止吞吃回车。
//查找书籍
struct DATA
{
char name[30];
double price;
}p[10], temp;
int main()
{
int n = 0;
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
scanf("\n");
/*可能有些人不知道为啥呢要加这一步 ,
这是因为gets函数的问题,上一个输入n是回车键结束,如果不加
这部,那么gets函数接收到的就是回车(\n),它就结束了,并
没有把实际要输的字符串输入。
以后出现需要输入字符串但是前面又出现了scanf不妨加这一步,
就可以不用for循环输入,直接使用gets*/
gets(p[i].name);
scanf("%lf", &p[i].price);
}
for (int i = 0; i < n; i++)
{
for (int j = i + 1; j < n; j++)
{
if (p[i].price < p[j].price)
{
temp = p[i];
p[i] = p[j];
p[j] = temp;
}
}
}
for (int i = 0; i < n; i++)
{
printf("%.2lf,%s\n", p[i].price, p[i].name);
}
return 0;
}