注册 登录
编程论坛 C++ Builder

C语言综合题目.求高手解决.

WJbobo 发布于 2008-09-10 10:54, 1747 次点击
紧急求助
//用结构体输入数据,输入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结束,
8 回复
#2
shaoyuan2008-09-10 23:26
C中1表示永真,break让程序退出一个循环语句,可以再定义一个变量来作为退出多重循环的标示。
#3
WJbobo2008-09-11 19:43
那是当然啊.1是在条件成立的前提下才为真啊.如果不成立不就推出了吗.
#4
zhong07111012008-09-14 15:19
count为何不声明,也不处理?
#5
zhong07111012008-09-14 16:23
void sort(Book book[], int sun)
{
   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;
           }
       }
   }
}
排序算法
#6
xieguoyong8882008-10-11 14:13
高手们都来了
#7
kakaqq2008-10-13 10:04
[bo][un]WJbobo[/un] 在 2008-9-11 19:43 的发言:[/bo]

那是当然啊.1是在条件成立的前提下才为真啊.如果不成立不就推出了吗.

如果输入1表示while成立然后回到do{}这个语句。如果输入2的话就是说while不成立就回到了for(){}。我想说的是不管是输入1 还是2。你都逼着让人必须输入三次然后程序才能继续执行。那你这个“是否继续曾加一本书的信息”有什么意义?
#8
kakaqq2008-10-13 10:10
你说count不是具体的值。哪么你为什么在前面定义int count=3呢?搞个全局变量?
#9
kakaqq2008-10-13 10:35
给你该了你看下功能估计和你想的差不多吧。

#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