查找书籍-给定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;
}

你可能感兴趣的:(C语言程序练习,蓝桥杯,算法,c语言,学习,PTA)