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

第九次作业

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

# include <stdio.h>
# define N 100
void scan(int score[],int n);//输入数据 
int average(int score[],int n);//平均数 
int maxindex(int score[],int n,int a[]);//最大值下标 
int minindex(int score[],int n,int a[]);//最小值下标
void search(int score[],int n);//查找
void sort(int score[],int n);//排序
void print(int score[],int n);//输出 
int main()
{
    int i,a[N]={0},c[N]={0},d,score[N],n,max1,min1,maxindex1,minindex1; 
    double ave;
    printf("请输入人数:\n");
    scanf("%d",&n);
    printf("请输入成绩:\n");
    scan(score,n);
    ave=average(score,n);
    maxindex1=maxindex(score,n,a);
    max1=score[a[0]-1];
    minindex1=minindex(score,n,c);
    min1=score[c[0]-1];
    printf("平均数%.2f\n",ave);
    printf("最大值是%d\n",max1);
    for(i=0;i<=maxindex1;i++)
    {
        if(a[i]>0)
        {
            printf("%d号\n",a[i]);
        }    
    }
    printf("最小值是%d\n",min1);
    for(i=0;i<=minindex1;i++)
    {
        if(c[i]>0)
        {
            printf("%d号\n",c[i]);
        }        
    }    
    printf("\n");
    search(score,n);
    printf("\n");
    sort(score,n);
    print(score,n);
    return 0;    
} 
void scan(int score[],int n)
{
    int i;
    for(i=0;i<n;i++)
    {
        scanf("%d",&score[i]);
    }    
}
int average(int score[],int n)
{
    int sum,i;
    sum=0;
    for(i=0;i<n;i++)
    {
        sum+=score[i];
    }
    return (double)sum/n;
}
int maxindex(int score[],int n,int a[])
{
    int i,j,b;
    b=score[0];
    j=0;
    for(i=1;i<n;i++)
    {
        if(b<score[i])
        {
            b=score[i];
        }
    }
    for(i=0;i<n;i++)
    {
        if(b==score[i])
        {
            a[j]=i+1;
            j++;
        }
    }
    return j-1;
}
int minindex(int score[],int n,int a[])
{
        int i,j,b;
    b=score[0];
    j=0;
    for(i=1;i<n;i++)
    {
        if(b>score[i])
        {
            b=score[i];
        }
    }
    for(i=0;i<n;i++)
    {
        if(b==score[i])
        {
            a[j]=i+1;
            j++;
        }
    }
    return j-1;    
}
void search(int score[],int n)
{
    int i,a;
    printf("请输入要查找的数据:\n");
    scanf("%d",&a);
    for(i=0;i<n;i++)
    {
        if(a==score[i])
        {
            printf("%d号 ",i+1);
        }
    }
    
}
void sort(int score[],int n)
{
    int a,i,j,x,flag;
    
    for(i=0;i<n;i++)
    {
        flag=0;
        for(j=0;j<n-1;j++)
        {
            if(score[j]<score[j+1])
            {
                a=score[j];
                score[j]=score[j+1];
                score[j+1]=a;
            }
            else
            {
                flag=1;
            }
        }
        if(flag==0)
        {
            break;
        }
    } 
} 
void print(int score[],int n)
{
    int i;
    for(i=0;i<n;i++)
    {
        printf("%5d",score[i]);
    }
} 

技术分享

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

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

技术分享

附加题

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

# include <stdio.h>
int main()
{
    int i,a[100],b[100],x,m,n;
    for(i=0;i<100;i++)
    {
        a[i]=i+1;
    }
    printf("请输入一个数m(m<100):\n");
    scanf("%d",&m);
    for(n=0;n<100-m;n++)
    {
        b[n+m]=a[n];
    }
    x=m;
    for(n=0;n<m;n++)
    {
        b[n]=a[100-x--];
    }
    for(i=0;i<100;i++)
    {
        printf("%d\t",b[i]);
    }
return 0;    
}

技术分享

 

2. 数字加密:输入一个四位数,将其加密后输出。方法是将该数每一位上的数字加9,然后除以10取余,做为该位上的新数字,最后将千位和十位上的数字互换,百位和个位上的数字互换,组成加密后的新四位数。例如输入1257,经过加9取余后得到新数字0146,再经过两次换位后得到4601。

# include <stdio.h>
int change(int n);
int main()
{
    int a,b,c,d,e,f,g,h,i,j;
    tt:printf("请输入一个四位数:\n");
    scanf("%d",&a);
    if(a<1000||a>9999)
    {
        goto tt;
    }
    b=a/1000;
    c=a/100%10;
    d=a%100/10;
    e=a%1000;
    g=change(d);
    h=change(e);
    i=change(b);
    j=change(c);
    f=g*1000+h*100+i*10+j;
    printf("%04d",f);
    return 0;
}
int change(int n)
{
    int a=(n+9)%10;
    return a;
}

技术分享

 实验总结:

1.一个数组如果想要在多个函数里面调用,在定义函数后面的括号里必须有那个数组。如:int maxindex(int score[],int n,int a[]);score[]和a[]这两个数组都可以在其他函数里面调用;

2.只需输出不用返回值的用void用返回值的用int;

3.对于多个数据都要进行的相同循环,定义新函数。

程序分析:

两个都正确,第一个x[]和a[]都是数组,a有两个数,x可以存放,第二个x和y不是数组,两个变量正好存放a[]的两个数。

根据火柴棍那道题可以看出数组在有些时候可以大大简化程序。

第九次作业