c primer plus 第十四章课后编程3题

//修改14.2 1、按照输入顺序。2、按照标题字母的声明输出图书的信息。3、按照价格(升序从小到大)

#include <stdio.h>
#include <string.h>
char *s_gets(char *st,int n);

#define MAXTITL 40
#define MAXAUTL 40
#define MAXBKS 100

struct book {
char title[MAXTITL];
char author[MAXAUTL];
float value;
};

int main(void)
{

struct book library[MAXBKS];
struct book temporary;
int count=0;
int index;
int k; //用来排序

printf(“Please enter the book title.\n”);
printf(“press [enter] at the start of a line to stop.\n”);
while (count<MAXBKS && s_gets(library[count].title, MAXTITL)!=NULL
&& library[count].title[0]!=’\0’)
{
printf(“Now enter the the author.\n”);
s_gets(library[count].author, MAXAUTL);
printf(“Now enther 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(“This is the list of books sorted by input order:\n”);
for(index=0;index<count; index++)
printf("%s by %s: $%.2f\n",library[index].title,
library[index].author, library[index].value);

//按照标题字母声明的顺序输出

printf("This is a list of books in alphabetical order:\n");
for(index=0; index<count; index++)
{
  for(k=index+1;k<count;k++)
  {
    if(strcmp(library[index].title,library[k].title)>0)
    {
       temporary=library[index];
        library[index]=library[k];
        library[k]=temporary;
    }
  }
        printf("%s by %s: $%.2f\n",library[index].title,
               library[index].author,library[index].value);
}

//按照价格从低到高排序
printf(“Here is a list of books by price:\n”);
for(index=0; index<count; index++)
{
for(k=index+1;k<count;k++)
{
if(library[index].value>library[k].value)
{
temporary=library[index];
library[index]=library[k];
library[k]=temporary;
}
}
printf("%s by %s: $%.2f\n",library[index].title,
library[index].author,library[index].value);
}
}

return 0;
}

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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值