打印本文 打印本文  关闭窗口 关闭窗口  
C语言程序设计(第5章数组)5
作者:佚名  文章来源:不详  点击数  更新时间:2008/4/18 14:00:15  文章录入:杜斌  责任编辑:杜斌

5.5 应用程序举例
[例5-6] 为比赛选手评分。
    计算方法:从1 0名评委的评分中扣除一个最高分,扣除一个最低分,然后统计总分,并除以8,最后得到这个选手的最后得分(打分采用百分制)。
#include<stdio.h>
main( )
{
    int score[10]; / * 10 个评委的成绩* /
    float mark; /* 最后得分* /
    int i;
    int max = -1; / *最高分* /
    int min = 101; /*最低分* /
    int sum = 0; /*10个评委的总和* /
    for( i = 0 ; i < 10 ; i ++)
    {
         printf("Please Enter the Score of No. %d",i + 1 ) ;
         scanf("%d\n",&score[i]);
         sum = sum + score[i];
    }
    for(i = 0 ; i < 10 ; i++)
    {
        if(score[i] > max)
            max = score[i];
    }
    for(i = 0;i < 10 ; i++)
    {
        if(score[i]<min)
        min = score[i];
    }
    mark = ( sum - min - max ) / 8.0;
    printf("The mark of the player is %.1f\n" ,mark);
}


[例5-7] 数列排序,采用选择法实现对有5个数的数列进行排序。
选择法的算法思想是:(降序)
1. 将待排序的n个数放入数组num中,即num[0]、num[1]、. . . num[n-1]。
2. 让num[ 0 ]与后续num[1] . . . num[ n - 1 ]依次比较,保证大数在前、小数在后。此次比较,num[0]是数组中最大。
3. 余下n - 1个元素
4. num[1]与num[ 2 ] . . . num[ n - 1]依次比较,大数在前、小数在后,此次num[ 1 ]是全部元素的最大。
num[ n - 2 ]与num[ n - 1 ]比较,num[ n - 2 ]存大数。
num[ n - 1 ]存小数,比较结束,整理有序。
例:待排序5个数为: 44 76 82 63 71
一趟排序: 1次比较:76 44 82 63 71
2次比较:82 44 76 63 71
3次比较:82 44 76 63 71
4次比较:82 44 76 63 71
最大
#include <stdio.h>
main( )
{
    int num[5];
    int i,j ;
    int temp;
    num[0]=94; num[1]=76; num[2]=82; num[3]=63; num[4]=71;
    for(i=0; i<4; i++)
    for(j=i+1; j<5; j++)
    {
        if(num[i]>num[j])
        {
            temp = num[i];
            num[i] = num[j];
            num[j] = temp;
        }
    }
    for(i=0; i<5; i++)
    printf("%4d" ,num[i]);
    printf("ok\n");
}
    这是一个非常简单的排序程序,我们只需稍加扩展就可以编制出很多功能强大的管理程序,如学生统计总分、平均排列年级名次等。

[例5-8] 简易学生成绩查询系统。
图5 - 3为学生成绩登记表,下例程序完成如下功能:
1) 根据输入的学生学号,给出各次考试成绩及平均成绩;
2) 根据输入考试的次数,打印出该次考试中每个学生的成绩,并给出平均分;
3) 根据学号查出学生某次考试成绩;
4) 录入考试成绩。


#include <stdio.h>
main( )
{
    int select;
    int i,j ;
    int score[5][7];
    int average=0;
    int sum=0;
    do{
        printf("本程序有4项功能\n");
        printf("1、根据学号查询学生成绩\n");
        printf("2、根据考试号统计成绩\n");
        printf("3、根据考试号和学号查询成绩\n");
        printf("4、成绩录入\n");
        printf("0、退出\n");
        printf("请输入选择(0 - 4 ):");
        scanf("%d\n",&select);
        switch(select)
        {
            case 0:
                printf("OK\n");
                exit(0)
                break;
            case 1:
                printf("输入学号:");
                scanf("%d\n",&i);
                for(j=1; j<7; j++)
                {
                    printf("第%d科成绩是%d\n",j,score[i][j]);
                    sum += score[i][j];
                }
                average = sum/6;
                printf("学生的平均成绩是%d\n",average);
                break;
            case 2:
                printf("输入考试号:");
                scanf("%d\n",&j);
                for(i=1; i<5; i++)
                {
                    printf("第%d号学生本科成绩是%d\n",i,score[i][j]);
                    sum += score[i][j];
                }
                average = sum/4;
                printf("本科平均成绩是%d\n",average);
                break;
            case 3:
                printf("输入学号和考试号:");
                scanf("%d %d\n",&,i,&j);
                printf("第%d 号学生的第%d 科考试成绩是%d\n",i, j,score[i][j]);
                break;
            case 4:
                printf("请输入成绩\n");
                for(i=1; i<5; i++)
                    for(j=1; j<7; j++)
                        scanf("%d\n",&score[i][j]);
                break;
            default:
                break;
    }while(1);
}
从本例中可以看出,当涉及到二维数组时,通常用两重for循环来存取元素。
打印本文 打印本文  关闭窗口 关闭窗口