给定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
题解:
#include <stdio.h>
/*定义结构体*/
struct book
{
char bookname [31]; //每本书的书名(gets输入数组要在题目要求的基础上加一)
double money; //每本书的价格
};
int main(int argc, char const *argv [] )
{
struct book temp [10]; //结构变量(还要找最高价格最低价格需要用到结构体数组)
int n; //书的数量
int i; //循环变量
double max = 0.00, min = 0.00; //最大值 和 最小值;初值分别为0.00 0.00
int max_idx = 0, min_idx = 0; //最大值下标 和 最小值下标;初值分别为0 0(必须有不然会出错)
scanf ("%d\n", &n); //输入数的数量(要把输入完的回车符吃掉,不然会出现极大错误)
for (i = 0; i < n; i++)
{
/*输入书名和价格*/
gets (temp[i].bookname);
scanf ("%lf\n", &temp[i].money); //(要把输入完的回车符吃掉,不然会出现极大错误)
/*如果是第一项分别赋值给最大值和最小值*/
if (i == 0) max = min = temp[i].money;
/*找最大值及其下标*/
if (max < temp[i].money)
{
max = temp[i].money;
max_idx = i;
}
/*找最小值及其下标*/
if (min > temp[i].money)
{
min = temp[i].money;
min_idx = i;
}
}
/*打印价格最高和最低的书*/
printf ("%.2lf, %s\n", max, temp[max_idx].bookname);
printf ("%.2lf, %s\n", min, temp[min_idx].bookname);
/*两种打印等价*/
// printf ("%.2lf, %s\n", temp[max_idx].money, temp[max_idx].bookname);
// printf ("%.2lf, %s\n", temp[min_idx].money, temp[min_idx].bookname);
return 0;
}