第九次作业

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);//最低分
void findMaxlndex(int score[],int n,int Max);//求最高分的下标
void findMinlndex(int score[],int n,int Min);//求最低分的下标
void search(int score[],int n,int x);//查询成绩 
void bubbleSort(int score[],int n);//排序 
       int main()
       {
           int score[N]={0},n,Max,Min,x;
           double ave;
           printf("输入学生人数(n<100)");
           scanf("%d",&n);
           readScore(score,n);
           printScore(score,n);
            ave=average(score,n);
            printf("平均分为%.2f\n",ave);
            Max=findMax(score,n);
            printf("最高分为%d\n",Max);
            Min=findMin(score,n);
            printf("最低分为%d\n",Min);
            findMaxlndex(score,n,Max);
            findMinlndex(score,n,Min);
            printf("输入查询的成绩");
            scanf("%d",&x);
            search(score,n,x);
            bubbleSort(score,n);
            printf("\n排序后为"); 
            printScore(score,n);
           return 0;
       }

void readScore(int score[],int n)
{
    
    int i;
    printf("输入成绩\n");
    for(i=0;i<n;i++)
    {
        scanf("%d",&score[i]);
    }
}
void printScore(int score[],int n)
{
    int i;
    for(i=0;i<n;i++)
    {
        printf("%5d",score[i]);
    }
    printf("\n");
}

double average(int score[],int n)
{
    int i,sum=0;
    for(i=0;i<n;i++)
    {
        sum+=score[i];
    }
    return (double)sum/n;
}
int findMax(int score[],int n)
{
    int i,max;
    max=score[0];
    for(i=1;i<n;i++)
    {
        if(score[i]>max)
        {
            max=score[i];
        }
    }
    return max;
}
int findMin(int score[],int n)
{
    int i,min;
    min=score[0];
    for(i=1;i<n;i++)
    {
        if(score[i]<min)
        {
            min=score[i];
        }
    }
    return min;
}
void findMaxlndex(int score[],int n,int Max)
{
    int i,maxlndex=0;
    printf("最高分有:");
    for(i=0;i<n;i++)
    {
        if(score[i]==Max)
        {
            printf("第%2d个",i+1);
        }
    }
    printf("\n");
}
void findMinlndex(int score[],int n,int Min)
{
    int i,minlndex=0;
    printf("最低分有:");
    for(i=0;i<n;i++)
    {
        if(score[i]==Min)
        {
            printf("第%2d个",i+1);
        }
    }
    printf("\n");
}
void search(int score[],int n,int x)
{
    int i;
    for(i=0;i<n;i++)
    {
        if(score[i]==x)
        printf("是第%d个",i+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;
            }
            
        }
        
    }
}

 

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

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

附加题

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

#include<stdio.h>
#define N 10
int main()
{
    int  asd[N],i,a,M,j,y;
    for(i=0;i<N;i++)
    {
        printf("输入一个数");
        scanf("%d",&asd[i]);
    }
    printf("移出M位:");
    scanf("%d",&M); 
    for(j=1;j<=M;j++)
    {
        y=asd[9];
        for(i=9;i>0;i--)
        {
            asd[i]=asd[i-1];
        }
        asd[0]=y;
    }
    for(i=0;i<N;i++)
    {
        printf("%2d",asd[i]);
    }
    return 0;
}

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

 

#include <stdio.h>
#define N 4
int main()
{
    int a,i,zxc[N],x,y;
    printf("请输入一个四位数\n");
    scanf("%d",&a);
    zxc[0]=a/1000;
    zxc[1]=a%1000/100;
    zxc[2]=a%100/10;
    zxc[3]=a%10;
    for(i=0;i<N;i++)
    {
        zxc[i]=zxc[i]+9;
        zxc[i]=zxc[i]%10;
    }
    x=zxc[1];
    zxc[1]=zxc[3]*100;
    zxc[3]=x;
    y=zxc[0];
    zxc[0]=zxc[2]*1000;
    zxc[2]=y*10;
    zxc[0]+zxc[1]+zxc[2]+zxc[3];
    printf("%d", zxc[0]+zxc[1]+zxc[2]+zxc[3]);
    return 0;
}

 

 

实验总结  1.函数int类型需要返回值,函数void类型不需要返回值。

      2.注意数组的越界问题,例如 int  score[2]是score[0],score[1]。

      3.注意函数和被调用函数的对应关系。

      4.函数中定义的变量只在本函数范围内起作用,在其他函数中不能使用。

 

  三、程序分析

     程序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;
}

分析  :  两个结果不同,

原因是因为简单变量做函数,实现的是值的单向传递!数组作函数参数,是将实参数组的地址传给形参数组!第一个用的是数组做函数,第二个程序是用简单变量做函数

posted on 2016-12-03 17:54  王佳明  阅读(260)  评论(1编辑  收藏  举报

导航