代码改变世界

第九次作业

2016-12-04 18:52  魏振川  阅读(175)  评论(1编辑  收藏  举报

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

复制代码
#include <stdio.h>
#define N 100
void Score(int score[],int n);  
double average(int score[],int n);  
int FindMax(int score[],int n);  
int FindMin(int score[],int n);  
int FindMaxIndex(int score[],int n,int max);  
int FindMinIndex(int score[],int n,int min);  
int Search(int score[],int n,int x);  
void bubblesort(int score[],int n);  
void printscore(int score[],int n);  
int main()
{
    int score[N]={0},i,n,x,index1,max,min;                   
    double ave;
    printf("请输入人数\n");
    scanf("%d",&n);
    Score(score,n);
    ave=average(score,n);
    printf("average=%.2f\n",ave);
    max=FindMax(score,n);
    min=FindMin(score,n);
    printf("最高分为%d\n最低分为%d\n",max,min);
    FindMaxIndex(score,n,max);
    FindMinIndex(score,n,min);
    index1=Search(score,n,x);
    printf("您查找的是第%d个学生\n",index1);
    bubblesort(score,n);
    printf("排序后的数:\n");
    printscore(score,n);                                                              
    return 0;
}
double average(int score[],int n)
{
    int sum=0,i;
    for(i=0;i<n;i++)
    {
        sum=sum+score[i];
    }
    return (double)sum/n;
}
void Score(int score[],int n)
{
    int i;
    printf("请输入成绩\n");
    for(i=0;i<n;i++)
    {     
        scanf("%d",&score[i]);
    }
}
int FindMax(int score[],int n)
{
    int i,a;
    a=score[0];
    for(i=0;i<n;i++)
    {
        if(score[i]>a)
        {
            a=score[i];
        }
    }
    return a;
}
int FindMin(int score[],int n)
{
    int i,a;
    a=score[0];
    for(i=0;i<n;i++)
    {
        if(score[i]<a)
        {
            a=score[i];
        }
    }
    return a;
}
void printscore(int score[],int n)
{
    int i;
    for(i=0;i<n;i++)
    {
        printf("%5d",score[i]);
    }
    printf("\n");
}
int FindMaxIndex(int score[],int n,int max)
{
    int i,count=0;
    for(i=0;i<n;i++)
    {
        if(score[i]==max)
        {
            count=i+1;
            printf("最高分的有第%d个人\n",count);
        }
    }
}
int FindMinIndex(int score[],int n,int min)
{
    int i,count=0;
    for(i=0;i<n;i++)
    {
        if(score[i]==min)
        {
            count=i+1;
            printf("最低分的有第%d个人\n",count);
        }
    }
}
int Search(int score[],int n,int x)
{
    int i;
    printf("请输入要查询的成绩\n");
    scanf("%d",&x);
    for(i=0;i<n;i++)
    {
        if(score[i]==x)
        {
            return i+1;
        }            
    }
    return -1;
}
void bubblesort(int score[],int n)
{
    int i,j,t,flag;
    for(i=0;i<n-1;i++)
    {
        for(j=0;j<n-1-i;j++)
        {
            flag=0;
            if(score[j]>score[j+1])
            {
                t=score[j];
                score[j]=score[j+1];
                score[j+1]=t;
                flag=1;
            }
        }
        if(flag==0)
        {
            break;
        }
    }
}

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

#include<stdio.h>
#define N 100
int main()
{
    int a[N],i,j=0;
    for(i=0;i<N;i++)
    {
        a[i]=i+1;
        if(a[i]%3!=0&&a[i]%7!=0)
        {
            printf("%3d  ",a[i]);
            j++;
        }
         
    }
    printf("\n共有%d个\n",j);
    return 0;
}

 

附加题

   1.将数组a中的10个元素后移m位,移出的m位顺序存放在数组的 前m位。要求:(1)数组值在程序中初始化(2)m从键盘输入。

#include <stdio.h>
#include <stdlib.h>
#define N 100
int main()
{
    int a,b,i,j=0,k;
    int num[N]={0};
    printf("请输入数组个数\n");
    scanf("%d",&a);
    printf("请输入你要移动的位数\n");
    scanf("%d",&b);
    if(b>a)
    {
        printf("error\n"); 
        exit(0);
    }
    for(i=0;i<a;i++)
    {
        num[i]=j+1;
        j++;
    }
    for(j=1;j<=b;j++)
    {
        k=num[a-1];
        for(i=a-1;i>0;i--)
        {
            num[i]=num[i-1];
        }
        num[0]=k;
    }
    for(i=0;i<a;i++)
    {
        printf("% 02d",num[i]);
    }
    return 0;
} 

 

实验总结:

1 void无返回值,直接调用就行!

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

3数组的第一个数是 ...[0]而不是...[1]。