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

第九次作业

  一、实验内容        

1、实验要求:

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

代码:

#include<stdio.h>
#define N 100
void shuru(int score[],int n);
double average(int score[],int n);
int maxindex(int score[],int n,int max[]);
int minindex(int score[],int n,int min[]);
int findindex(int a,int score[],int n,int find[]);
void paixu(int score[],int n);
void shuchu(int score[],int n);
int main()
{
    int i,score[N]={0},n,max[N]={0},min[N]={0},f,find[N]={0};
    printf("请输入学生的人数\n");
    scanf("%d",&n);
    shuru(score,n);
    printf("平均分为%.2lf\n",average(score,n));
    printf("成绩最高的学生是:");
    i=maxindex(score,n,max);
    shuchu(max,i);
    printf("成绩最低的学生是:");
    i=minindex(score,n,min);
    shuchu(min,i);
    printf("请输入你想查找的成绩:");
    scanf("%d",&f);
    if(findindex(f,score,n,find))
    {
        i=findindex(f,score,n,find);
        printf("这个成绩的学生是:\n");
        shuchu(find,i);
    }
    else
    {
        printf("你查找的成绩不存在。\n");
    }
    printf("将成绩由小到大排列:\n");
    paixu(score,n);
    shuchu(score,n);
    return 0;
} 
void shuru(int score[],int n)
{
    int i;
    for(i=0;i<n;i++)
    {
        printf("请输入第%d个学生的成绩:\n",i+1);
        scanf("%d",&score[i]);
    }
}
double average(int score[],int n)
{
    int i,sum=0;
    for(i=0;i<n;i++)
    {
        sum=sum+score[i];
    }
    return (double)sum/n;
}
int maxindex(int score[],int n,int max[])
{
    int i,Max,index=0;
    Max=score[0];
    for(i=0;i<n;i++)
    {
        if(score[i]==Max)
        {
            max[index++]=i;
        }
        else if(score[i]>Max)
        {
            Max=score[i];
            index=0;
            max[index++]=i;
        }
    }
    return index;
}
int minindex(int score[],int n,int min[])
{
    int i,Min,index=0;
    Min=score[0];
    for(i=0;i<n;i++)
    {
        if(score[i]==Min)
        {
            min[index++]=i;
        }
        else if(score[i]<Min)
        {
            Min=score[i];
            index=0;
            min[index++]=i;
        }
    }
    return index;
}
int findindex(int a,int score[],int n,int find[])
{
    int i,index=0,flag=0;
    for(i=0;i<n;i++)
    {
        if(a==score[i])
        {
            find[index++]=i;
            flag=1;
        }
    }
    if(flag==0)
    return 0;
    else
    return index;
}
void paixu(int score[],int n)
{
    int i,j,temp,flag;
    for(i=0;i<n-1;i++)
    {
        flag=0;
        for(j=0;j<n-1-i;j++)
        {
            if(score[j]>score[j+1])
            {
                temp=score[j];
                score[j]=score[j+1];
                score[j+1]=temp;
                flag=1;
            }
        }
        if(flag==0)
        break;
    }
}
void shuchu(int score[],int n)
{
    int i;
    for(i=0;i<n;i++)
    {
        printf("%d\n",score[i]);
    }
}

程序运行结果:

技术分享

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

代码:

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

程序运行结果 :

技术分享

二、实验总结(实验中遇到的问题及解决方法) 

1、函数名要一样,注意;的使用。

2、注意数组的越界问题。

3、返回值应放在循环的外面。

4、冒泡排序法的思路是:把相邻两个数进行比较,把小的调到前头!

5、注意分清数据类型,有必要时要进行强制数据转换

第九次作业