作业九

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

#include<stdio.h>
#define N 100
void readscore(int score[],int n);
void printscore(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 findminindex(int score[],int n);
int find(int score[],int n);
int main()
{
    int score[N]={0},n=0,i=0,n1,n2,n4;
    printf("输入人数:\n"); 
    scanf("%d",&n);
    readscore(score,n);
    printscore(score,n);
    average(score,n);
    printf("平均数是:%.2f\n",average(score,n));
    findmax(score,n);
    printf("最高分是%d\n",findmax(score,n));
    n1=findmaxindex(score,n);
    printf("最高分数的学生为%d号\n",n1+1);
    findmin(score,n);
    printf("最低分是%d\n",findmin(score,n));
    n2=findminindex(score,n);
    printf("最低分数的学生为%d号\n",n2+1);
    n4=find(score,n);
    if(n4!=-1)
    {
    printf("%d号得到这个分数\n",n4); 
    }
    else
    {
    printf("未找到");    
    }
    return 0;
}
void printscore(int score[],int n)
{
    int i;
    printf("学生成绩是:");
    for(i=0;i<n;i++)
    {
        
        printf("%5d",score[i]);
    }
    printf("\n");
}
void readscore(int score[],int n)
{
    int i;
    for(i=0;i<n;i++)
    {
        printf("输入成绩:\n");
        scanf("%d",&score[i]);
    }
}
double average(int score[],int n)
{
    int sum=0,i;
    double average;
    for(i=0;i<n;i++)
    {
        sum=sum+score[i];
    }
    average=(double)sum/n;
    return average;
}
int findmax(int score[],int n)
{
    int i=0,max;
        max=score[0];
        for(i=0;i<n;i++)
        {
            if(score[i]>max)
            {
                max=score[i];        /*最大值*/    
            }
        
        }
        return max;
}
int findmin(int score[],int n)
{
    int i=0,min;
        min=score[0];
        for(i=0;i<n;i++)
        {
            if(score[i]<min)
            {
                min=score[i];        /*最大值*/    
            }
        
        }
        return min;
}
int findmaxindex(int score[],int n)
{
    int i=0,max,n1;
        max=score[0];
        for(i=0;i<n;i++)
        {
            if(score[i]>max)
            {
                max=score[i];
                n1=i;            
            }
        }
        return n1;
}
int findminindex(int score[],int n)
{
    int i=0,min,n2;
        min=score[0];
        for(i=0;i<n;i++)
        {
            if(score[i]<min)
            {
                min=score[i];
                n2=i;            
            }
        
        }
        return n2;
}
int find(int score[],int n)
{    
    int i=0,n3=0,n4=0;
        printf("输入一个分数:\n");
        scanf("%d",&n3);
        for(i=0;i<n;i++)
        {        
            if(score[i]==n3)
            {
                n4=i+1;
            }
            else
            {
                n4=-1;
            }
        }    
        return n4;
} 

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

#include<stdio.h>
int main()
{
    int a=0,b=0,c=0;
    for(a=1;a<=100;a++)
    {
        if(a%3==0||a%7==0)
        {
            continue;
        }
    else
        {
            printf("%5d",a);
            c++;
        }
        if(c%10==0)
        {
            printf(" \n");
        } 
    }
        printf("有%d个",c);
    return 0;
}

 

 

附加题

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

#include<stdio.h>
#define N 100
int main() 
{    
    int shuzu[N]={0},a,b,i,m,n,n1;
    printf("输入要平移的位数:\n"); 
    scanf("%d",&m);
    printf("原数组为:"); 
    for(a=0,b=1;a<N;a++,b++)
    {
        shuzu[a]=b;
        printf("%d\t",shuzu[a]);
    }
    n1=N-m;
    for(i=0;i<m;i++)
    {
        n=shuzu[n1];
        shuzu[n1]=shuzu[i];
        shuzu[i]=n;
        n1++;
    }
        printf("\n\n\n");
        printf("数组变成:");
    for(i=0;i<N;i++)
    {
    
        printf("%d\t",shuzu[i]);
    }
    return 0;
} 

# include <stdio.h>
int jiami(int x);
int main()
{
    int a,b,c,d,e,f,g,b1,d1,f1,g1,h;
    printf("输入一个四位数\n");
    scanf("%d",&a);
    if(a<1000||a>9999)
    {
        printf("输入错误\n");
    }
    b=a/1000;/*千位*/
    c=a%1000;/*后三位*/
    d=c/100;/*百位*/
    e=c%100;//后两位
    f=e/10;//十位
    g=e%10;//个位
    b1=jiami(b);
    d1=jiami(d);
    f1=jiami(f);
    g1=jiami(g);
    f=b1*1000+d1*100+f1*10+g1;
    printf("%04d",f);
    return 0;
}
int jiami(int x)
{
    int z=(x+9)%10;
    return z;
}

三、程序分析

     程序1     

#include <stdio.h>
void swap(int x[]);
int main()
{  
     int a[2]={1,2};
    swap(a);
    printf("a[0]=%d\na[1]=%d\n",a[0],a[1]);
    return 0;
}
void swap(int x[])
{   
    int z;
    z=x[0];     
    x[0]=x[1];     
    x[1]=z;
}

  程序2  

#include <stdio.h>
void swap(int x,int y);
int main()
{
    int a[2]={1,2};
    swap(a[0],a[1]);
    printf("a[0]=%d\na[1]=%d\n",a[0],a[1]);
    return 0;
}
void swap(int x,int y)
{  
     int z;
     z=x;
     x=y; 
     y=z;
}

程序一和程序二都使用了void,所以不能返回数值,程序一函数为void swap(int x[]) ,所以数组的值随着int[]变化而变化,而程序二把数组中两个数赋值给了两个变量,所以结果相反。

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

1:注意函数的引用,以及void和int的区别。

2:数组平移时,要给出所平移数组空余的位置,以便存放平移的数组。

3:注意限制条件,不满足条件的用continue来取消。

4:函数名要一样,注意;的使用。

5:注意限定条件。

posted on 2016-11-29 08:42  Mty灬  阅读(227)  评论(3编辑  收藏  举报

导航