zoukankan      html  css  js  c++  java
  • 习题9-4 查找书籍

    给定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

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 #include<string.h>
     4 #include<math.h>
     5 int main() {
     6     int n = 0;
     7     char a[10][31];                //二维数组存放书名
     8     double b[10];                //存放价格,浮点型
     9     int lmax = 0, lmin = 0;                        //最大值和最小值在数组中的位置
    10     double max = 0.0, min = 9999.0;
    11     scanf("%d", &n);
    12     getchar();
    13     for (int i = 0; i < n; i++) {
    14         gets(a[i]);
    15         scanf("%lf", &b[i]);
    16         getchar();
    17         if (max < b[i]) {
    18             max = b[i];
    19             lmax = i;
    20         }
    21         if (min > b[i]) {
    22             min = b[i];
    23             lmin = i;
    24         }
    25     }
    26 
    27 
    28     /*for (int i = 0; i < n; i++) {
    29         printf("%s , %.2lf
    ", a[i], b[i]);
    30     }
    31     printf("
    
    
    
    ");*/
    32     char t[31];
    33     strcpy(t, a[lmax]);
    34     printf("%.2lf, %s
    ", b[lmax], t);
    35     strcpy(t, a[lmin]);
    36     printf("%.2lf, %s", b[lmin], t);
    37     //system("pause");
    38     return 0;
    39 }

    说说我写这个题目的思路。

    先定义好n,数组(我这里用的是2维数组),还有最大值最小值,,以及最大值最小值的位置(其实可以省略,我比较偷懒,没有做到最简)。然后输入n,输入书名,输入价格,循环,比较,最后输出。

    需要非常注意的点是:如果输入书名的时候用的是gets()函数,然后用scanf()函数输入价格,一定要注意,这里scanf()后面要加上getchar(),为什么要加呢?

    gets()它的机制是,你键盘随便输入,我(gets)只看一个键,有没有回车,如果有回车了,好,我就不接受你了,你回车之前的所有的输入都存在我这里。

    scanf(%d)呢,如果是单独的一个它,问题不大,输入一个数,然后空格回车都行,它就会读进去。

    如果scanf()后面还有gets(),问题就来了:大家可以试一试,如果把上述代码的getchar()去掉会发生什么。

     中间空了4行是我为了区分清楚故意空的。大家可以看到, 原本应该是输入6个的,结果输入了4个就输出了。

    并且输出的元素中,第一行和第三行是完全正确的,第二行是乱码。

    我们接下来分析问题:我写了手稿,大家觉得哪个字看不懂给我说,我字太烂啦。

    上述,即是没有getchar()的情况。

    希望大家认真分析问题,解决问题。

  • 相关阅读:
    [FPGA与ASIC] 优化方法
    学习《中医药治疗热病的作用机理(韩晶岩)》的体会
    使用Capture CIS Lite仿真电路
    Everything软件-集本地文件搜索、文件服务器、批量操作文件等若干功能于一身的高效率软件
    注册表改右键菜单和默认程序
    Qt Quick开发教程4-QML拖放
    Qt Quick开发教程4--使用第三方QML UI包
    个人 PC/Android 常用软件列表
    Qt Quick开发教程3-C++与QML联合开发
    Qt Quick开发教程2-QML语法
  • 原文地址:https://www.cnblogs.com/KeithTee/p/13852642.html
Copyright © 2011-2022 走看看