| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 291 人关注过本帖
标题:排序问题
只看楼主 加入收藏
sdy不懂
Rank: 1
等 级:新手上路
帖 子:19
专家分:1
注 册:2012-2-22
结帖率:100%
收藏
已结贴  问题点数:30 回复次数:2 
排序问题
题目:  1.在函数中进行10个学生成绩从高到低排名 sort(int a[10])

        2.改进第一步的函数为sort(int a[],int n),进行n个学生成绩从高到低排名,

        3.改进第二步的函数为sort(int a[],int n, char style), 将n个学生成绩从高到低排名,排名方式根据sort()函数的style参数进行,如          style 为 ‘a’按升序排,style为’d’按降序排。(a:ascending  升,d:descending 降)


#include <stdio.h>
#include <stdlib.h>

int sort1(int a[10])
{
  int i,j,t;

  printf("Please input 10 students performance:\n");
  for(i=0;i<10;i++)
   scanf("%d",&a[i]);

  for(i=0;i<9;i++)
   {
    for(j=0;j<9-i;j++)
    if(a[j+1]>a[j])
    {
      t=a[j];
      a[j]=a[j+1];
      a[j+1]=t;
    }
   }
  for(i=0;i<10;i++)
   printf("%d\t",a[i]);
}

int sort2(int a[],int n)
{
  int i,j,t;

  while(scanf("%d",&a[n])&&a[n]!='\n')
  {
    for(i=0;i<n;i++)
    {
     for(j=1;j<n-1;j++)
      if(a[j+1]>a[j])
      {
       t=a[j];
       a[j]=a[j+1];
       a[j+1]=t;
      }
    }
  }
  for(i=0;;i++)
   printf("%d\t",a[i]);
}

int sort3(int a[],int n,char style)
{
  int i,j,t;

  printf("Please input sort order a or d:");
  style=getche();

  switch(style)
  {
    case 'a':
    while(scanf("%d",&a[n])&&a[n]!='\n')
     {
      for(i=0;i<n;i++)
       {
         for(j=1;j<n-1;j++)
         if(a[j]>a[j+1])
         {
          t=a[j];
          a[j]=a[j+1];
          a[j+1]=a[j];
         }
       }
     }
    for(i=0;;i++)
     printf("%d\t",a[i]);
    break;

    case 'd':
    while(scanf("%d",&a[n])&&a[n]!='\n')
     {
      for(i=0;i<n;i++)
      {
        for(j=1;j<n-1;j++)
        if(a[j+1]>a[j])
        {
         t=a[j];
         a[j]=a[j+1];
         a[j+1]=a[j];
        }
      }
     }
    for(i=0;;i++)
     printf("%d\t",a[i]);
    break;

    default:
    printf("Input error!");
    break;
  }
}

main()
{
   char style;
  int a[10],n,i,j,k;
  int s1,s2,s3;

  printf("Please input 10 students performance:\n");
  for(i=0;i<10;i++)
   scanf("%d",&a[i]);
  s1=sort1(a[10]);

  printf("Please input n:\n");
  scanf("%d",n);
  s2=sort2(a,n);

  printf("Please input style and n:\n");
  scanf("%c%d",&style,&n);
  s3=sort3(a,n,style);

  printf("%d",s1);
  printf("\n%d",s2);
  printf("\n%d",s3);
  return 0;
}


这个程序哪里错了!如果可以,就把正确的写出来。









搜索更多相关主题的帖子: include 
2012-06-26 16:48
随风飘荡
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:208
专家分:598
注 册:2011-9-9
收藏
得分:30 

主函数里面已经读入数据了但在每个函数里面又都有scanf
函数都有返回值但是没有return语句
sort2\3里面的for输出没有退出条件,死循环
sort2\3里面的while(scanf)是干嘛用的?输出10还是13就退出循环?为什么还要读入到a[n]里面
s1\s2\s3是用来干什么的我还看不懂你的意思,
sort1(a[10])这样调用真能通过编译吗...

顺便一提:这真的很像东拼西凑各种复制来的东西


顺便问问LX的各位大大,像这种有int返回值但不带return语句的函数我试了一下确实可以通过编译。
一开始我觉得返回的会是一个莫名其妙的值,但是如果不带return语句而函数最后一句是printf的话会返回printf的返回值也就是打印的字符数。
然后我又换了一些无意义的比如a=0;5;这样的返回的确实又是莫名其妙的值,这跟堆栈有关吗?

另外void haha(int a[10]);这样的函数声明我也试了一下好像跟void haha(int a[]);没什么不一样,那么具体是不是真的没什么不一样呢?还是说和编译器的实现有关,我的是vs2010


[ 本帖最后由 随风飘荡 于 2012-6-26 19:07 编辑 ]
2012-06-26 19:05
全世界安静
Rank: 2
等 级:论坛游民
帖 子:104
专家分:65
注 册:2012-6-4
收藏
得分:0 
学习

[ 本帖最后由 全世界安静 于 2012-6-26 19:57 编辑 ]
2012-06-26 19:28
快速回复:排序问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.122839 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved