| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1521 人关注过本帖
标题:【求助啊】刚学数组,练练手,却...
只看楼主 加入收藏
思考ING
Rank: 1
来 自:重庆
等 级:新手上路
帖 子:140
专家分:0
注 册:2008-3-12
收藏
 问题点数:0 回复次数:14 
【求助啊】刚学数组,练练手,却...
题目:已知某班N(〈=50)名学生进行了高数、英语和C语言等3门课考试,将3门课的成绩以及计算3门课的总分存放于一个二维数组中,将学生姓名存放在另一个二维字符数组中,按总分(由高到低)排序(注意:学生姓名也应该按总分排序)并输出排序结果(序号、姓名及总分)。
程序中那个存放学生姓名的二维数组不知道怎么构建,还有怎么存储啊?有那个大虾能帮忙完善一下吗?真是感激不尽!
以下为我的源程序:
#define N 50
main()
{ int grade[N][4],i,a,j,k,temp;
  clrscr();
  printf("\nEnter the number of students:");/*输入学生数*/
  scanf("%d,&k");
  printf("\nEnter indicated grade");
  for(i=1;i<=k;i++)                         /*输入学生成绩*/
    { printf("Student number %3d\n",k);
     for(j=1;j<=3;j++)
      {printf("%3d:",j);
       scanf("%d",&grade[i-1][j-1]);
      }
    }
  for(i=1;i<=k;i++)                       /*对学生成绩求和*/
    { grade[i-1][4]=0;
      for(j=1;j<=3,j++)
    grade[i-1][4]+=grade[i-1][j-1];
    }
  for(i=1;i<k;i++)  scanf("%d",&grade[i-1][4]);  /*排序*/
  for(i=1;i<k;i++)
    for(a=0;a<N-i-1;a++)
      if(grade[i-1][4]>grade[i][4])
    {temp=grade[i-1][4];
     grade[i-1][4]=grade[i][4];
     grade[i][4]=temp;
    }
  for(i=1;i<k;i++)  printf("%d",grade[i-1][4]);
printf("\nN=%d,sum=grade[i][4]",N,grade[i][4]);
}
搜索更多相关主题的帖子: C语言 源程序 number 姓名 
2008-04-16 14:55
pen_xian
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2007-10-7
收藏
得分:0 
for(i=1;i<=k;i++)                       /*对学生成绩求和*/
    { grade[i-1][4]=0;
      for(j=1;j<=3,j++)
    grade[i-1][4]+=grade[i-1][j-1
要细心啊!第17行你看for(j=1;j<=3;j++)
把,改成;
2008-04-16 16:06
pen_xian
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2007-10-7
收藏
得分:0 
而且代码很乱  我建议你自己改改在来请教吧!我看不懂
2008-04-16 16:08
思考ING
Rank: 1
来 自:重庆
等 级:新手上路
帖 子:140
专家分:0
注 册:2008-3-12
收藏
得分:0 
我改了,但还是有错啊

天生孤独的思考~~~~~~~~~
2008-04-16 21:24
xiaosan669
Rank: 1
来 自:西北工业大学
等 级:新手上路
帖 子:78
专家分:0
注 册:2007-3-9
收藏
得分:0 
风格貌似不好!

========== 我的世界,我说了算! ==========
2008-04-16 22:13
yd4433
Rank: 1
等 级:新手上路
帖 子:404
专家分:0
注 册:2008-3-9
收藏
得分:0 
代码比较乱建议数组下表从0开始循环
printf("\nN=%d,sum=grade[i][4]",N,grade[i][4]); 看到错没有  输出语句 着句一写  你的d%呢 还有就是 2#说的 里面代码没怎么看 clrscr();是什么?也许是我不知道把 开始以为是 函数 找了半天没找到 scanf("%d,&k");注意 细节的东西 scanf("%d",&k); 还有的就是你循环体里面的问题了 运行了下 复制语句有问题 for(j=1;j<=3;j++)
      {printf("%3d:",j);
       scanf("%d",&grade[i-1][j-1]);
      }
你自己看下把  是不是 J<=4呢 你想下

------...-.-..-...-----........-------.......----.....------....||- - !
2008-04-16 23:39
yd4433
Rank: 1
等 级:新手上路
帖 子:404
专家分:0
注 册:2008-3-9
收藏
得分:0 
#include<stdio.h>
#define N 50
main()
{ int grade[N][4],i,a,j,k,temp,sum;
 

  printf("\nEnter the number of students:");/*输入学生数*/
  scanf("%d",&k);
  printf("\nEnter indicated grade");
  for(i=1;i<=k;i++)                         /*输入学生成绩*/
    { printf("Student number %3d\n",i);
     for(j=1;j<=4;j++)
     {  printf("%3d:",j);
       scanf("%d",&grade[i][j]);
      }
    }
  sum=0;
  for(i=0;i<k;i++)                       /*对学生成绩求和*/
    {
      for(j=0;j<4;j++)
      sum+=grade[i][j];
    }
   
  for(i=0;i<k;i++) /*排序*/
  { for(j=0;j<4-i;j++)
      if(grade[i][j]>grade[i][j+1])
    {
          temp=grade[i][j];
     grade[i][j]=grade[i][j+1];
     grade[i][j+1]=temp;
    }
   printf("%d",grade[i][j]);
  }
printf("\nN=%d,sum=%d",N,sum);
}
    对你的程序进行的修改 让你知道自己写的程序那里有问题
要是按题目的意思 只有结构了

------...-.-..-...-----........-------.......----.....------....||- - !
2008-04-17 00:03
yd4433
Rank: 1
等 级:新手上路
帖 子:404
专家分:0
注 册:2008-3-9
收藏
得分:0 
汗 刚学数组 就用2唯数组来练手

------...-.-..-...-----........-------.......----.....------....||- - !
2008-04-17 00:32
思考ING
Rank: 1
来 自:重庆
等 级:新手上路
帖 子:140
专家分:0
注 册:2008-3-12
收藏
得分:0 
还是看不懂,我倒是越编越乱了~~~~~~~~~~~
不知道有那位热心人或爱好者有此兴趣解答,希望是整道题~~~~~~~(可以只给源码,注释嘛就交给我了~~~`)

天生孤独的思考~~~~~~~~~
2008-04-17 18:55
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
程序代码:
/*
根据你的题意写的小程序,不成敬意谨作参考!
   还欢迎各位批评,谢谢。
*/
#include<stdio.h>
#include<string.h>
#define N 50
#define X {char c;while(c=getchar()!='\n'&&c!=EOF); }
void ke(int i,char a[N]) /*输出各科字符的函数*/
{
        switch(i)
        {
                case 0 :strcpy(a,"高数");
                       break;
                case 1 :strcpy(a,"英语");
                       break;
                case 2 :strcpy(a,"C语言");
        }
}
int main(void)
{
        int chengji[4][N]={0};/*定义一个二维数组并初始化,chengji[0][N]代表高数,chengji[1][N]代表英
                               语,依次类推,chengji[3][N]代表总分;N代表学生数。*/

        char xingming[20][N]={"0"};/*定义一个字符型二维数组,xingming[0][N]是学号,
                                   xingming[1][N]~xingming[19][N]代表姓名*/
        char ming[19]={"0"},gongke[10];
        int i,j,k,m,t;

        printf(" 请输入学生总数:\n");
        scanf("%d",&m);/*~~~~~~~~~~~~~~~~输入学生总数*/
        X;
        puts(" ");
        for(j=0;j<m;++j) /*存入学生的学号、姓名、各科成绩、总成绩*/
        {
                printf("请输入NO.%2d学生的学号:\n",j+1);
                xingming[0][j]=getchar();
                X;
                printf("请输入姓名:\n");
                        gets(ming);
                for(k=0;k<19;++k)
                        xingming[k+1][j]=ming[k];
                for(i=0;i<3;++i)
                {
                        ke(i,&gongke);
                        printf("请输入NO.%2d学生的%s科成绩,\n"
                                "enter结束输入:\n",j+1,gongke);
                        scanf("%d",&chengji[i][j]);
                        X;
                        chengji[3][j]+=chengji[i][j];  /* 把每个学生的总成绩存入chengji[3][N]当中*/
                }
                puts("\n***************************************************************\n");
        }
        /*~~~~~~~~~~~~~~~~~~~~~~~~~数据输入完毕~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
        /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~下面使用冒泡法排序~~~~~~~~~~~~~~~~~*/
        for(i=0;i<m;++i)
                for(j=i+1;j<m;++j)
                        if(chengji[3][i]<chengji[3][j])
                        {
                                for(k=0;k<4;++k)
                                {
                                        t=chengji[k][i];
                                        chengji[k][i]=chengji[k][j];
                                        chengji[k][j]=t;
                                }
                                for(k=0;k<2;++k)
                                {
                                        t=xingming[k][i];
                                        xingming[k][i]=xingming[k][j];
                                        xingming[k][j]=t;
                                 }
                        }               
       /*~~~~~~~~~~~~~排序完毕,下面开始输出~~~~~~~~~~~~~~~~~~~~~~~~~~*/
       for(i=0;i<m;++i)
       {
                printf("学号%c",xingming[0][i]);
                printf("  姓名:");
                for(j=1;j<19;++j)
                        printf("%c",xingming[j][i]);
                printf("  高数:%d, 英语:%d, C语言:%d,总成绩:%d\n",
                          chengji[0][i],chengji[1][i],chengji[2][i],chengji[3][i]);
                printf("\n**************************************************************\n");
        }



        getch();
}


[[it] 本帖最后由 广陵绝唱 于 2008-4-17 22:14 编辑 [/it]]
2008-04-17 22:11
快速回复:【求助啊】刚学数组,练练手,却...
数据加载中...
 
   



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

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