C语言综合题目.求高手解决.
紧急求助//用结构体输入数据,输入1继续输入,2结束,并按照书名排序输出。
#include"stdio.h"
#include"string.h"
//结构体
struct Book{
char name[20];
int price;
int num;
int amout;
}book[20];
int count=3;
//输出
void output(struct Book book[],int sum )
{
int i;
for(i=0;i<sum;i++)
{
printf("书名是:\t");printf("单价是:\t");printf("数量是:\t");printf("该书的总价是:\t");
printf("\n");
printf("%s\t\t",book[i].name);
printf("%d\t\t",book[i].price);
printf("%d\t\t",book[i].num);
printf("%d,%d,%d\t",book[i].amout=book[i].num*book[i].price);
printf("\n");
}
return;
}
//排序
void sort(struct Book book[], int sun)
{
struct Book zemp;
int i;
for(i=0;i<sun;i++)
{
if(strcmp(book[i].name,book[i+1].name)<0)
{
zemp=book[i];
book[i]=book[i+1];
book[i+1]=zemp;
}
}
output(book,count);
return;
}
void main()
{
int i,y;//i 变量
for(i=0;i<count;i++)
{
printf("请输入图书的书名:\n");
scanf("%s",book[i].name);
printf("请输入图书的价格:\n");
scanf("%d",&book[i].price);
printf("请输入图书的数量:\n");
scanf("%d",&book[i].num);
do{
printf("是否继续增加一本书的信息:(1/2)");
scanf("%d",&y);
}while(y==1);
}
printf("***********************************************\n");
printf("排序前\n");
output(book,count);
printf("***********************************************\n");
printf("按书名排序后为:\n");
//printf("按书名排序为:\n");
sort(book,count);
//printf("***********************************************\n");
//printf("按书名排序后为:\n");
//output(book,count);
}
有几个问题我控制不住.
1.count 不应该是具体的值。它是当输入2时,结束并统计count的值。输出
2。排序,好像没什么错啊。可是排不出来
3。就是输入1继续,输入2结束,
{
struct Book temp;
int i,j;
int numberOfBook=sun;
for(i=0;i<numberOfBook-1;i++)
{
for(j=0;j<numberOfBook-1;j++)
{
if(strcmp(book[j].name,book[j+1].name)>0)
{
temp=book[j];
book[j]=book[j+1];
book[j+1]=temp;
}
}
}
}
排序算法 [em09] 高手们都来了 [quote][bo][un]WJbobo[/un] 在 2008-9-11 19:43 的发言:[/bo]
那是当然啊.1是在条件成立的前提下才为真啊.如果不成立不就推出了吗. [/quote]
如果输入1表示while成立然后回到do{}这个语句。如果输入2的话就是说while不成立就回到了for(){}。我想说的是不管是输入1 还是2。你都逼着让人必须输入三次然后程序才能继续执行。那你这个“是否继续曾加一本书的信息”有什么意义? 你说count不是具体的值。哪么你为什么在前面定义int count=3呢?搞个全局变量? 给你该了你看下功能估计和你想的差不多吧。
#include"stdio.h"
#include"string.h"
//结构体
struct Book{
char name[20];
int price;
int num;
int amout;
}book[20];
int count=100;
//输出
void output(struct Book book[],int sum )
{
int i;
for(i=0;i<sum;i++)
{
printf("书名是:\t");printf("单价是:\t");printf("数量是:\t");printf("该书的总价是:\t");
printf("\n");
printf("%s\t\t",book[i].name);
printf("%d\t\t",book[i].price);
printf("%d\t\t",book[i].num);
printf("%d\t",book[i].amout=book[i].num*book[i].price);
printf("\n");
}
return;
}
//排序
void sort(struct Book book[], int sun)
{
struct Book zemp;
int i;
for(i=0;i<sun;i++)
{
if(strcmp(book[i].name,book[i+1].name)<0)
{
zemp=book[i];
book[i]=book[i+1];
book[i+1]=zemp;
}
}
return;
}
void main()
{
int i,y;//i 变量
for(i=0;i<count;i++)
{
printf("请输入图书的书名:\n");
scanf("%s",book[i].name);
printf("请输入图书的价格:\n");
scanf("%d",&book[i].price);
printf("请输入图书的数量:\n");
scanf("%d",&book[i].num);
printf("是否继续增加一本书的信息:(1/2)");
scanf("%d",&y);
if(y==1);
else {count=i+1;
break;} //仔细看这里的判断啊,你说的count作计数也是在这完全不知道为什么你在前面定义一个全局count是为什么·····排序应该没问题。
}
printf("***********************************************\n");
printf("排序前\n");
output(book,count);
printf("***********************************************\n");
printf("按书名排序后为:\n");
//printf("按书名排序为:\n");
sort(book,count);
//printf("***********************************************\n");
//printf("按书名排序后为:\n");
output(book,count);
}
页:
[1]
