首页 > 试题广场 >

修改程序清单l4.2中的书目列表程序,使它首先按照输入的顺序

[问答题]
修改下面的书目列表程序,使它首先按照输入的顺序输出图书的描述,然后按照标题的字母升序输出图书的描述,最后按照value值的升序输出图书的描述。
/* manybook.c -- 包含多本书的图书目录 */
#include <stdio.h>
#define MAXTITL 40
#define MAXAUTL 40
#define MAXBKS 100  /* 最多可以容纳的图书册数 */
struct book {       /* 建立book模板  */
    char title[MAXTITL];
    char author[MAXAUTL];
    float value;
};
int main(void)
{
    struct book library[MAXBKS]; /* book结构数组 */
    int count = 0;
    int index;
    printf("Please enter the book title.\n");
    printf("Press [enter] at the start of a line to stop.\n");
    while(count < MAXBKS && gets (library[count].title) != NULL
                         && library[count].title[0] != '\0')
    {
       printf("Now enter the author.\n");
       gets(library[count].author);
       printf("Now enter the value.\n");
       scanf("%f, &library[count++].value);
       while(getchar() != '\n')
           continue;     /* 清空输入行 */
       if(count < MAXBKS)
       printf("Enter the next title.\n");
    }
    if (count>0)
    {
        printf("Here is the list of your books: \n");
        for(index = 0; index < count; index++)
        printf("%s by %s: $%.2f\n", library[index].title,
                library[index].author, library[index].value);
    }
    if (count>0)
    {
        printf("Here is the list of your books: \n");
        for(index = 0; index < count; index++)
        printf("%s by %s: $%.2f\n", library[index].title,
                 library[index].author, library[index].value);
    }
    else
        printf("No books?Too bad.\n");
    return 0;
}
推荐
#include <stdio.h>
#include <string.h>
void sort_title(struct book *p, int count);
void sort_value(struct book *p, int count);
#define MAXTITL   40
#define MAXAUTL   40
#define MAXBKS   100              /* maximum number of books  */
struct book {                     /* set up book template     */
 char title[MAXTITL];
 char author[MAXAUTL];
 float value;
};
int main(void)
{
 struct book library[MAXBKS]; /* array of book structures */
 int count = 0;
 int index;
 printf("Please enter the book title.\n");
 printf("Press [enter] at the start of a line to stop.\n");
 while (count < MAXBKS && gets(library[count].title) != NULL && library[count].title[0] != '\0')
 {
 printf("Now enter the author.\n");
 gets(library[count].author);
 printf("Now enter the value.\n");
 scanf("%f", &library[count++].value);
 while (getchar() != '\n')
 continue;          /* clear input line         */
 if (count < MAXBKS)
 printf("Enter the next title.\n");
 }
 if (count > 0)
 {
 printf("Here is the list of your books:\n");
 for (index = 0; index < count; index++)
 printf("%s by %s: $%.2f\n", library[index].title, library[index].author, library[index].value);
 printf("\nHere is the list of your books by title:\n");
 sort_title(&library[0], count);
 for (index = 0; index < count; index++)
 printf("%s by %s: $%.2f\n", library[index].title, library[index].author, library[index].value);
 printf("\nHere is the list of your books by value:\n");
 sort_value(&library[0], count);
 for (index = 0; index < count; index++)
 printf("%s by %s: $%.2f\n", library[index].title, library[index].author, library[index].value);
 }
 else
 printf("No books? Too bad.\n");
 return 0;
}
void sort_title(struct book *p, int count)
{
 int i,j;
 struct book temp;
 for(i=0; i<count-1; i++)
 for(j=0; j<count-1-i; j++)
 if( strcmp(p[j].title,p[j+1].title) > 0 )
 {
 temp = p[j] ;
 p[j] = p[j+1] ;
 p[j+1] = temp ;
 }
}
void sort_value(struct book *p, int count)
{
 int i,j;
 struct book temp;
 for(i=0; i<count-1; i++)
 for(j=0; j<count-1-i; j++)
 if( p[j].value > p[j+1].value )
 {
 temp = p[j] ;
 p[j] = p[j+1] ;
 p[j+1] = temp ;
 }
}

发表于 2018-05-05 22:08:29 回复(0)