首页 > 代码库 > 第九次作业

第九次作业

1.定义函数实现:输入若干名学生的成绩(输入人数或用负数结束均可),求其平均分,最高分和最低分,并指出最高分和最低分的学生(给出下标即可),输入一个成绩,说明是第几个学生的成绩,最后按照成绩从高到低排序后输出。(至少七个函数。输入函数、平均值函数、最大值下标函数、最小值下标函数,查找函数,排序函数,输出函数)

#include<stdio.h>
#include<stdlib.h> 
#define N 101
int x,index_query[N]={0},index_score[N]={0};
int imax(int score[]);
int imin(int score[]);
double average(int score[]);
void input(int score[]);
void output(int score[]);
void query(int score[],int n);
void bubblesort(int score[]);
int main()
{
    int score[N]={0};
    char c;
    input(score);
    printf("计算完毕(输入Y继续)\n");
    fflush(stdin);
    if((c=getchar())==Y||c==y)
    {
        output(score);
    }
}
void input(int score[])
{
    int i;
    printf("本程序可处理100个以内的成绩统计问题,请输入成绩个数\n");
    scanf("%d",&x);
    printf("您共要输入%d个成绩,下面请输入:",x);
    for(i=0;i<x;i++)
    {
        scanf("%d",&score[i]);
    }
}
int imax(int score[])
{
    int i=0,max,ii=0;
    max=score[0];
    for(i=1;i<x;i++)
    {
        if(score[i]>=max)
        {
            max=score[i];
        }
    }
    query(score,max);
    return max;
}
int imin(int score[])
{
    int i=0,min,ii=0;
    min=score[0];
    for(i=1;i<x;i++)
    {
        if(score[i]<=min)
        {
            min=score[i];
        }
    }
    query(score,min);
    return min;
}
double average(int score[])
{
    int i,sum=0;
    double ave;
    for(i=0;i<x;i++)
    {
        sum+=score[i];
    }
    ave=(double)sum/x;
    return ave;
}
void output(int score[])
{
    char c;
    int a,q,i,ii,max,min;
    double ave;
    while(1)
    {
        system("cls");
        printf("\n\n\n\n\t\t\t\t*****************\n\t\t\t\t*1、成绩查询    *\n\t\t\t\t*2、显示最大成绩*\n\t\t\t\t*3、显示最小成绩*\n\t\t\t\t*4、显示平均成绩*\n\t\t\t\t*5、成绩单      *\n\t\t\t\t*****************");
        fflush(stdin);
        if((c=getchar())==1)
        {
            system("cls");
            printf("请输入查询成绩:\n");
            scanf("%d",&a);
            printf("您查询的成绩为:\n");
            for(i=0;i<x;i++)
            {
                query(score,a);
                if(index_query[0]==0)
                {
                    printf("无此成绩"); 
                    break;
                }
                else
                {
                if(index_query[i]==0)
                    {
                        printf("号\n");
                        break;
                    }
                printf("%d ",index_query[i]);
                }
                if(i==x-1)
                printf("号\n");
            } 
        }
        else if(c==2)
        {
            system("cls");
            max=imax(score);
            printf("最大成绩为%d,为第",max);
            for(i=0;i<x;i++)
            {
                if(index_query[i]==0&&i!=0)
                {
                    break;
                }
                printf("  %d  ",index_query[i]);
             } 
             printf("号\n");
        }
        else if(c==3)
        {
            system("cls");
            min=imin(score);
            printf("最小成绩为%d,为第",min);
            for(i=0;i<x;i++)
            {
                if(index_query[i]==0&&i!=0)
                {
                    break;
                }
                printf(" %d ",index_query[i]);
             }
             printf("号\n"); 
        }
        else if(c==4)
        {
            system("cls");
            ave=average(score);
            printf("共有%d人,平均成绩为%.1lf\n",x,ave);
        }
        else if(c==5)
        {
            system("cls");
            bubblesort(score);
            printf("学号\t成绩\t名次\n");
            for(i=0,ii=1;i<x;i++)
            {
                
                query(score,index_score[i]);
                if(index_score[i]==index_score[i-1])
                {
                    printf("%d",index_query[ii]);
                    ii++;
                }
                else
                {
                    printf("%d",index_query[0]);
                    ii=1;
                }
                 printf("\t%d\t",index_score[i]);
                 printf("%d\n",i+1);
            }
        }
        else
        {
            printf("选择错误\n");
        }
        printf("是否继续?(Y)\n");
        fflush(stdin);
        if((c=getchar())==Y||c==y)
        {
            continue;
        }
        else
        {
            printf("感谢使用!");
            break;
        }
    }
}
void query(int score[],int n)
{
    int i,ii=0,ia=0;
    for(i=0;i<x;i++)
    {
        index_query[i]=0;
    }
    for(i=0;i<x;i++)
    {
        if(score[i]==n)
        {
            index_query[ii]=i+1;
            ii++;
            ia=1;
        }
        if(ia=0)
        {
            for(ii=0;ii<x;ii++)
            {
                index_query[ii]=0;
            }
        }
    }
}
void bubblesort(int score[])
{
    int i,ii,a,flag;
    for(i=0;i<x;i++)
    {
        index_score[i]=score[i];
    }
    for(i=0;i<x;i++)
    {
        flag=0;
        for(ii=0;ii<x-1-i;ii++)
        {
            if(index_score[ii]<index_score[ii+1])
            {
                a=index_score[ii];
                index_score[ii]=index_score[ii+1];
                index_score[ii+1]=a;
                flag=1;
            }
        }
        if(flag==0)
        break;
    }
}

技术分享

技术分享

技术分享

技术分享

技术分享

技术分享

技术分享

技术分享

 2.定义长度为100的整型数组,将数组元素赋初值为1,2……100,将其中所有值为3或7倍数的值删除,最后打印输出数组中剩余数的个数及每个数。

#include<stdio.h>
#define N 100
int main()
{
    int i,n=0,sum[N];
    for(i=0;i<100;i=i+1)
    {
        sum[i]=i+1;
    }
    for(i=0;i<100;i=i+1)
    {
        if(sum[i]%3==0||sum[i]%7==0)
        {
            sum[i]=0;
        }
    }
    for(i=0;i<100;i++)
    {
        if(sum[i]!=0)
        {
            n++;
            printf("%d ",sum[i]);
        }
    }
    printf("\n还剩下%d个数\n",n);
}

技术分享

实验报告

1、自定义函数确实好用。

2、处于偷懒目的使用了全局变量和数组。(逃~)

3、时间不够没写附加题。(典型找打)

程序分析

关于两个程序,我个人的理解是,作为实参的变量可以说是一个相对固定的“个体”,而数组则是划定范围的“容器”,形参则是“地标”。作为容器来讲,内部的“个体(下标变量)”是可以被取走或改变的。

第九次作业