题目:
输入图书目录,使其安装输入图书的顺序输出图书的信息,然后按照书面德字母顺序输出图书德信息,最后按照价格额升序输出图书德信息
源代码:
#include <stdio.h>
#include <string.h>
#define MAXTITL 40
#define MAXAUTL 40
#define MAXBKS 100
struct book
{
char title[MAXTITL];
char author[MAXAUTL];
float value;
};
char * s_gets(char * st,int n);
void str_letter(struct book * libray,int count);
void str_money(struct book * libray,int count);
int main()
{
struct book libray[MAXBKS];
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 && s_gets(libray[count].title,MAXTITL) != NULL && libray[count].title[0] != '\0')
{
printf("Now enter the author.\n");
s_gets(libray[count].author,MAXAUTL);
printf("Now enter the value.\n");
scanf("%f",&libray[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(sequential output):\n");
for(index = 0; index < count ;index++)
{
printf("%s by %s: $%.2f\n",libray[index].title,libray[index].author,libray[index].value);
}
printf("Here is the list of your books(Alphabetical sort):\n");
str_letter(libray,count);
printf("Here is the list of your books(price output):\n");
str_money(libray,count);
}
else
{
printf("No books? Too bad.\n");
}
return 0;
}
void str_letter(struct book * libray,int count)
{
struct book * ptr[count];
struct book * temp;
for(int i = 0;i < count;i++)
{
ptr[i] = &libray[i];
}
for(int fir = 0; fir < count -1;fir++)
{
for(int sec = 1; sec < count;sec++)
{
if(strcmp(ptr[fir]->author,ptr[sec]->author) > 0)
{
temp = ptr[fir];
ptr[fir] = ptr[sec];
ptr[sec] = temp;
}
}
}
for(int index = 0; index < count ;index++)
{
printf("%s by %s: $%.2f\n",ptr[index]->title,ptr[index]->author,ptr[index]->value);
}
}
void str_money(struct book * libray,int count)
{
struct book * ptr[count];
struct book * temp;
for(int i = 0;i < count;i++)
{
ptr[i] = &libray[i];
}
for(int fir = 0; fir < count -1;fir++)
{
for(int sec = 1; sec < count;sec++)
{
if(ptr[fir]->value < ptr[sec]->value)
{
temp = ptr[fir];
ptr[fir] = ptr[sec];
ptr[sec] = temp;
}
}
}
for(int index = 0; index < count ;index++)
{
printf("%s by %s: $%.2f\n",ptr[index]->title,ptr[index]->author,ptr[index]->value);
}
}
char * s_gets(char * st,int n)
{
char * ret_val;
char * find;
ret_val = fgets(st,n,stdin);
if(ret_val)
{
find = strchr(st,'\n');
if(find) *find = '\0';
else
while(getchar() != '\n')
continue;
}
return ret_val;
}
演示效果:
如果朋友你感觉文章的内容对你有帮助,可以点赞,关注文章和专栏以及关注我哈,嘿嘿嘿我会定期更新文章的,谢谢朋友你的支持哈