0
点赞
收藏
分享

微信扫一扫

1202: 基于顺序存储结构的图书信息表的修改

zhaoxj0217 2022-04-16 阅读 88

题目描述

定义一个包含图书信息(书号、书名、价格)的顺序表,读入相应的图书数据完成图书信息表的创建,然后计算所有图书的平均价格,将所有低于平均价格的图书价格提高20%,所有高于或等于平均价格的图书价格提高10%,最后逐行输出价格修改后的图书信息。
 

输入

输入n+1行,前n行是n本图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔,价格之后没有空格。最后第n+1行是输入结束标志:0 0 0(空格分隔的三个0)。其中书号和书名为字符串类型,价格为浮点数类型。

输出

总计n+1行,第1行是修改前所有图书的平均价格,后n行是价格修改后n本图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔。其中价格输出保留两位小数。

样例输入 Copy

9787302257646 Data-Structure 35.00
9787302164340 Operating-System 50.00
9787302219972 Software-Engineer 32.00
9787302203513 Database-Principles 36.00
9787810827430 Discrete-Mathematics 36.00
9787302257800 Data-Structure 62.00
9787811234923 Compiler-Principles 62.00
9787822234110 The-C-Programming-Language 38.00
0 0 0

样例输出 Copy

43.88
9787302257646 Data-Structure 42.00
9787302164340 Operating-System 55.00
9787302219972 Software-Engineer 38.40
9787302203513 Database-Principles 43.20
9787810827430 Discrete-Mathematics 43.20
9787302257800 Data-Structure 68.20
9787811234923 Compiler-Principles 68.20
9787822234110 The-C-Programming-Language 45.60

思路分析:

先计算一下平均价格,然后再将大于和小于平均数的分别加就行了。

代码如下:

#include<bits/stdc++.h>//注释都写在了每一行的上面 
using namespace std;
#define OK 1
#define ERROR 0
#define OVERFLW -2 //不能加O? 
#define MAXSIZE 100
//Status是函数返回类型,其值是函数结果返回代码
typedef int Status;
//创建一个链表 ,相当于创造了一个新的数据类型,相当于int a ;a为int型的变量
typedef struct
{
	string number;
	string name;
	double price;
} book;
typedef struct LNode
{
	book data;
	LNode * next;
} LNode,* LinkList;
Status InitList(LinkList &L)//链表的初始化
{
	L=new LNode;
	if(!L)exit( OVERFLW);
	L->next=NULL;
	return OK;
}
Status ListInsert(LinkList &L,int i,string number,string name,double price)//插入数据元素
{
	//关键就是找到i-1这个节点
	int j=0;
	LNode *p;
	p=L;
	while(p!=NULL&&j<i-1)
	{
		p=p->next;
		j++;
	}
	if(p==NULL||j>i-1)return ERROR;
	LNode *s=new LNode;
	s->data.number=number;
	s->data.name=name;
	s->data.price=price;
	s->next=p->next;
	p->next=s;
	return OK;
}
//尾插法创建单链表
void CreateList_R(LinkList &L)
{
	L=new LNode;
	LNode *r,*p;
	r=L;
//	cout<<"请输入"<<n<<"个节点的值"<<endl;
	for(int i=1; ; i++)
	{
		p=new LNode;
		cin>>p->data.number>>p->data.name>>p->data.price;
		r->next=p;
		r=p;
		if(L->data.number[0]=='0'&&L->data.name[0]=='0'&&L->data.price==0)//只需要判断name的第一个字符就行了
			break;
	}
	r->next=NULL;
}
int main()
{
	LinkList L;
	InitList(L);
	string number,name;
	double price;
//	CreateList_R(L);
	int x=0;
	double sum=0.0;
	for(int i=1; ; i++)
	{
		cin>>number>>name>>price;
		if(number[0]=='0'&&name[0]=='0'&&price==0)//只需要判断name的第一个字符就行了
			break;
		else
		{
			ListInsert(L,i,number,name,price);
			sum=sum+price;
			x++;
		}
	}
	sum=(sum*1.0)/(1.0*x);
	printf("%.2f\n",sum);
	LNode *q;
	q=L;
	q=q->next;
	for(int i=1;; i++)
	{
		if(q->data.price<sum)
		{
			q->data.price=q->data.price*1.2;
		}
		else
		{
			q->data.price=q->data.price*1.1;
		}
		q=q->next;
		if(q==NULL)
			break;
	}
	q=L;
	q=q->next;
	for(int i=1;; i++)
	{
		cout<<q->data.number<<' '<<q->data.name<<' ';
		printf("%.2f\n",q->data.price);
		q=q->next;
		if(q==NULL)
			break;
	}
	return 0;
}
举报

相关推荐

顺序表图书信息

Scala图书馆创建图书信息

0 条评论