回 帖 发 新 帖 刷新版面

主题:请教:把五个学生的学号和两门课的成绩放在一个二维数组中,求出每个学生的平均分。。。。。。

请教:把五个学生的学号和两门课的成绩放在一个二维数组中,求出每个学生的平均分,然后把平均分也放在此二维数组中。要求先输出学生的成绩单,再按学生平均分的高低输出学生的成绩单。(希望解答的通俗易懂,先谢谢了!)

回复列表 (共7个回复)

沙发

OPTION BASE 1

' (X,1) XH  -- 学号
' (X,2) CJ1 -- 第一门课成绩
' (X,3) CJ2 -- 第二门课成绩
' (X,4) PJF -- 平均分

DIM XSCJ%(5, 4)
CLS
FOR I% = 1 TO 5 STEP 1
    msg$ = "shu ru di" + STR$(I%) + "ge xie shen de XH"
    PRINT msg$;
    INPUT D%
    XSCJ%(I%, 1) = D%
    FOR J% = 2 TO 3 STEP 1
        msg$ = "shu ru di" + STR$(I%) + "ge xie shen de CJ" + STR$(J% - 1)
        PRINT msg$;
        INPUT D%
        XSCJ%(I%, J%) = D%
    NEXT J%
    XSCJ%(I%, 4) = (XSCJ%(I%, 2) + XSCJ%(I%, 3)) / 2
NEXT I%
PRINT
PRINT "--------------------------------------------------------"
PRINT "XH", "CJ1", "CJ2", "PJF"
PRINT "--------------------------------------------------------"
FOR I% = 1 TO 5 STEP 1
    FOR J% = 1 TO 4 STEP 1
        PRINT XSCJ%(I%, J%),
    NEXT J%
    PRINT
NEXT I%

FOR I% = 1 TO 4 STEP 1
    IF XSCJ%(I%, 4) > XSCJ%((I% + 1), 4) THEN
        FOR J% = 1 TO 4 STEP 1
            D% = XSCJ%((I% + 1), J%)
            XSCJ%((I% + 1), J%) = XSCJ%(I%, J%)
            XSCJ%(I%, J%) = D%
        NEXT J%
    END IF
NEXT
IF XSCJ%(I%, 4) > XSCJ%(1,4) THEN
    FOR J% = 1 TO 4 STEP 1
        D% = XSCJ%(1, J%)
        XSCJ%(1, J%) = XSCJ%(I%, J%)
        XSCJ%(I%, J%) = D%
    NEXT J%
END IF
PRINT
PRINT "--------------------------------------------------------"
PRINT "XH", "CJ1", "CJ2", "PJF"
PRINT "--------------------------------------------------------"
FOR I% = 1 TO 5 STEP 1
    FOR J% = 1 TO 4 STEP 1
        PRINT XSCJ%(I%, J%),
    NEXT J%
    PRINT
NEXT I%

板凳

呵呵,我眼花了
只好替一楼做一下缩写吧

0.定义数组
1.输入数据
2.计算平均分
3.根据平均分替数组排序
4.输出结果

3 楼

楼上的!可不可以把我的程序简化一下!

4 楼

那我就拿你的作品要胡改一下喽,改得不好请勿见怪喔。


cls
m=5               [color=00FF00]'五个学生太少了点[/color]
DIM x(m, 3)
FOR i = 1 TO m
    PRINT "请输入第";I;"个学生的学号、成绩1、成绩2:";
    INPUT x(i,0),x(i,1),x(i,2)
    x(i,3)=((x(i,1)+x(i,2))/2         [color=00FF00]'计算平均分[/color]
NEXT

PRINT       [color=00FF00]'第一次输出成绩表[/color]
gosub 100

[color=00FF00]'按平均分从高到低排序[/color]
FOR i = 1 TO m-1
  for j=i to m
    if x(j,3)>x(i,3) then
       for k=0 to 3
         swap x(i,k),x(j,k)
       next
    end if
  next
NEXT

PRINT       [color=00FF00]'按平均分输出成绩排名表[/color]
gosub 100
system

100
PRINT "--------------------------------------------------------"
PRINT "序号", "学号", "成绩1", "成绩2","平均分"
PRINT "--------------------------------------------------------"
FOR i = 1 TO m
print i,x(i,0),x(i,1),x(i,2),x(i,3)
NEXT i
return



5 楼

改得不错! 不过你好像很惯用 GOSUB !!看来你是个编程老手了!数据结构和算法都掌握的差不多了吧! 以后向你学习喔!!!

6 楼

谢谢以上的 几位了!!!!

7 楼

差矣
其实结构化编程应该尽量避免使用 gosub
在这个程序里不好用子程
但又有重复的语句
就用一下过程语句了
可以重复利用的就不应该重复编写
虽然可以说是花大脑筋来偷懒
但却是个好习惯

我来回复

您尚未登录,请登录后再回复。点此登录或注册