PTA 7-1 找最贵的书和最便宜的书 分数 20

给定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
  第一次文章分享,有点紧张,主要是自己知识储备还不够,特别是在字符串处理这一块,这题让我很难受,为了帮助同学们能够遇到此题的时候不被折磨到,所以在此讲解一下。
  这一题主要是考察字符串处理,我们可以选用结构体来存储书名和价格,并定义结构体数组去存储数据。

宏定义和结构体部分:

#define MAXLINE 31
#define MAXBOOKS 10
typedef struct Node Book;
struct Node{
    char name[MAXLINE];    
    double price;
};
在这一部分里,定义了字符串数组最大存储的长度为30,宏定义为31是当最大输入为30个字符时,能够存储'\0'结束符
char name[MAXLINE];存放书名
double price; 记录输的价格
//定义结构体数组
    Book books[number];
    double minprice=1e10;
    double maxprice=0;
    //通过访问数组下标记录最贵和最便宜的书
    int  minname=0;
    int maxname=0;
 这里通过记录最贵和最便宜的书本下标,在输出的时候,直接通过下标访问即可
 在找寻最贵书本是,将maxprice设置为比其中任何一个书本的价格都大的情况,最便宜的同理设置为0

存入书本名称和价格

//存入书名和价格
    for(int i=0; i < number ; i++)
    {
        scanf("\n");
        /*gets()输入一个字符串,允许带空格,遇到回车结束,自动将输入的
        数据和'\0'送入数组中*/
        gets(books[i].name);
       scanf("%lf",&books[i].price);
       
    }

这里我选用了gets作为处理字符串输入的输入格式,因为你用getchar()只能输入一个字符,用scanf()是不能输入空格的,最输入空格的时候就会自动结束输入,gets()是处理字符串输入的函数,他允许输入空格!!!

在这里插入
然后就是比较:

for(int i=0;i < number;i++)
    {
        if(books[i].price < minprice)
        {
            minprice = books[i].price;
            minname = i;
        }
        if(books[i].price > maxprice)
        {
            maxprice = books[i].price;
            maxname = i;
        }
     }

输出格式:

//输出结果,保留俩位小数
    printf("%.2lf, ",maxprice);
    puts(books[maxname].name);
    printf("%.2lf, ",minprice);
    puts(books[minname].name);

这里选用puts()作为输出字符串数组,可以参考一下我上面发出来的那张图片,他会在输出时遇到结束符’\0’,自动将其装换位换行符’\n’
最后再注意一下输出的格式细节就可以了

提交情况:
在这里插入图片描述

完整代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXLINE 31
#define MAXBOOKS 10
typedef struct Node Book;
struct Node{
    char name[MAXLINE];    
    double price;
};
int main()
{
    int number;
    scanf("%d",&number);
    if(number <= 0 || number >MAXBOOKS)
    {
        printf("outing of line");
        return 1;
    }
    //定义结构体数组
    Book books[number];
    double minprice=1e10;
    double maxprice=0;
    //通过访问数组下标记录最贵和最便宜的书
    int  minname=0;
    int maxname=0;
    
    //存入书名和价格
    for(int i=0; i < number ; i++)
    {
        scanf("\n");
        /*gets()输入一个字符串,允许带空格,遇到回车结束,自动将输入的
        数据和'\0'送入数组中*/
        gets(books[i].name);
       scanf("%lf",&books[i].price);
       
    }
     
    for(int i=0;i < number;i++)
    {
        if(books[i].price < minprice)
        {
            minprice = books[i].price;
            minname = i;
        }
        if(books[i].price > maxprice)
        {
            maxprice = books[i].price;
            maxname = i;
        }
     }
      //输出结果,保留俩位小数
    printf("%.2lf, ",maxprice);
    puts(books[maxname].name);
    printf("%.2lf, ",minprice);
    puts(books[minname].name);
    return 0;
}
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值