51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 3778|回复: 5
打印 上一主题 下一主题

[讨论] 一道C语言程序设计面试

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2007-12-17 17:31:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
对于一次考试成绩进行统计,考M科,(如六科,语文、政治、数学、物理、化学、外语),有N人(如10000人)参加。

统计要求;每个人的总成绩(total)

          每科的平均成绩

以个人总分的成绩排序,最高分排在第一名,最后输出的表格如下所示。



名次  考号  姓名  语文  政治  数学  物理  化学  外语  总分

---------------------------------------------------------------------------------------

1

2

3

---------------------------------------------------------------------------------------

平均成绩
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
 楼主| 发表于 2007-12-18 09:19:35 | 只看该作者

怎么没人回复?

回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2007-12-18 16:12:49 | 只看该作者
正好今天公司没活干~遇到我算你幸运~这种题应该发到开发群里去...
#include <stdio.h>
#include <time.h>
#define STD_NUM 3
#define SBJ_NUM 6

void SetScore();
void PrintScore();
void PrintAVG();

typedef struct Student{
    double allscore;
    float score[6];

}Student;

int main()
{
    Student s[STD_NUM];
    char *objarr[SBJ_NUM] = {"eng","chs","math","phy","gov", "gym"};

    /*设置成绩*/
    SetScore(s);

    /*输出成绩*/
    PrintScore(s, objarr);

    /*输出平均成绩*/
    PrintAVG(s);

    getch();
}

void SetScore(Student s[STD_NUM])
{
    int i;
    int j;

    for (i = 0; i < STD_NUM; i++)
    {
        s.allscore = 0;
        srand( (unsigned)(i+1));  /*设置随机种子*/
        for (j = 0; j < SBJ_NUM; j++)
        {
            s.score[j] = rand()%100; /*0-100随机数*/
            s.allscore += s.score[j];
        }

    }
    getch();
}

void PrintScore(Student s[STD_NUM], char *p[SBJ_NUM])
{
    int i;
    int j;
    Student stutemp;

    /*排序*/
    for (i = 0; i < STD_NUM-1; i++)
    {
        for (j = i+1; j < STD_NUM; j++)
        
        if (s.allscore < s[j].allscore)
        {
            stutemp = s;
            s = s[j];
            s[j] = stutemp;
        }

    }

    for (i = 0; i < STD_NUM; i++)
    {


        /*打印表头*/
        if (i == 0)
        {
            printf("\t");
            for (j = 0; j < SBJ_NUM; j++)
            {
                printf("%s\t", p[j]);
            }
            printf("all\n");
        }
        printf("%d:\t", i+1);



        /*开始打印成绩数据 */
        for (j = 0; j < SBJ_NUM; j++)
        {
            printf("%2.2f\t", s.score[j]);
        }
        printf("%f\n", s.allscore);

    }
}

void PrintAVG(Student s[STD_NUM])
{
    int i;
    int j;
    double all = 0;
    float avg = 0;

    printf("平均成绩");
    for (i = 0; i < SBJ_NUM; i++)
    {
        all = 0;
        for (j = 0; j < STD_NUM; j++)
        {
             all += s[j].score;
        }
        avg = all/STD_NUM;

        printf("%2.2f\t", avg);

    }

}
回复 支持 反对

使用道具 举报

该用户从未签到

4#
 楼主| 发表于 2007-12-18 16:47:10 | 只看该作者

谢谢了!

呵呵,虽然有很多错误,但还是要非常感谢你的
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2007-12-18 17:25:27 | 只看该作者
呵呵~可能是字体原因吧~我在Win-TC下运行出结果了...
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2007-12-23 23:14:03 | 只看该作者
长见识了,谢谢
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-5-7 09:14 , Processed in 0.071838 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表