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

第九次作业

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

# include <stdio.h>
# define N 100
void readscore (int score[],int n);//输入函数
double average(int score[],int n);//平均值
int findmaxindex (int score[],int n,int index[]);//最大值下标
int findminindex (int score[],int n,int index[]);//最小值下标
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},n,maxindex,i,minindex,c,x[N];
    int index[N]={0};
    double ave;
    printf ("请输入人数:\n");
    scanf ("%d",&n); 
    readscore(score,n);
    ave=average(score,n);
    printf("平均值为%.0lf。\n",ave);
    maxindex=findmaxindex(score,n,index);
    printf("最大值下标为%d\n",maxindex);
    minindex=findminindex(score,n,index);
    printf("最小值下标为%d\n",minindex);
     c=search (score,n,x);
     for(i=0;i<c;i++)
     {
      printf("%d号。\n",x[i]);
     }
    bubbleSort(score,n);
    printf("the sorted numbers:\n");
    for(i=0;i<n;i++)
    {
       printf("%4d",score[i]);
    }
}
//输入函数
void readscore (int score[],int n)
{
   int i; 
   printf("请输入成绩:\n");
   for (i=0;i<n;i++)
   {
      scanf("%d",&score[i]);
   }
}

//平均值
double average(int score[],int n)
{
   int i,sum;
   sum=0;
   for(i=0;i<n;i++)
   {
      sum+=score[i];
   }
   return (double)sum/n;
}
//最大值下标
int findmaxindex (int score[],int n,int index[])
{
  int i,max,index1;
  max=score[0];
  index1=0;
  for (i=0;i<n;i++)
  {
     if(score[i]>max)
     {
       max=score[i];
       index1=i+1;
     }
  }
  return index1;
}
//最小值下标
int findminindex (int score[],int n,int index[])
{
   int i,min,index2;
   min=score[0];
   index2=0;
   for (i=0;i<n;i++)
   {
     if (score[i]<min)
     {
        min=score[i];
        index2=i+2;
     }
   }
   return index2;
}

// 查找
int search (int score[],int n,int x[])
{
  int i,a,b;
  printf("请输入你需要查找的成绩:\n");
  scanf("%d",&a);
  b=0;
  for(i=0;i<n;i++)
  {
    if(score[i]==a)
    { 
      x[b++]=i+1;
    }
  }
  return b;
}
//排序函数
void bubbleSort(int score[],int n)
{
  int i,j,temp,flag;
  for(i=0;i<n-1;i++)
  {
      flag=0;
    for(j=0;j<n-i-1;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 printscore (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,score[N]={0},a,n;
  for(i=0;i<N;i++)
  {
     score[i]=i+1;
  }
  a=0;
   for(i=0;i<N;i++)
   {
      if(score[i]%3==0||score[i]%7==0)
        {
            score[i]=0;
        }
        else
        {
            a++;
            printf("%5d",score[i]);
        }
   }
   printf("剩余%d个",a);
   return 0;
}

技术分享

 

 

附加题

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

int a[N]={1,2,3,4,5,6,7,8,9,10},i,j,m,temp;
    for(i=0;i<10;i++)
    {
        printf("%d ",a[i]);
    }
    printf("\n请输入向后移的位数;\n");
    scanf("%d",&m); 
    if(m>10)
    {
        printf("输入错误!\n");
    }
    else
    {
        for(i=0;i<m;i++)
        {
            temp=a[9];
            for(j=9;j>0;j--)
            {
                a[j]=a[j-1];
            }
            a[0]=temp;        
        }
    }
    for(i=0;i<10;i++)
    {
        printf("%d ",a[i]);
    }
    return 0;
} 

 

技术分享

 

 

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

# include <stdio.h>
int main ()
{
  int i,a[4],b[4],m,n;
  printf("请输入一个密码(四位数):\n ");
  scanf("%d",&n);
  if(n>9999||n<1000)
  {
    printf("error");
  }
  else
  {
      a[0]=n/1000;/*千位*/
      a[1]=n%1000/100;/*百位*/
      a[2]=n%100/10;/*十位*/
      a[3]=n%10;/*个位*/
      for(i=0;i<4;i++)
      {
          b[i]=(a[i]+9)%10;
      }
      m=b[2]*1000+b[3]*100+b[0]*10+b[1];
      printf("加密后的密码是:%04d",m);
  }
  return 0;
}

 

技术分享

 

二 实验总结:

1.注意void和int的区别

2.注意数组名表示内存首地址, 是地址常量

3.在声明函数时看是否加 int index[]

4.变量要附初值

补充知识点:

在使用函数的过程中,需要注意以下问题:

  (1)函数中定义的变量(包括形参),它只在本函数范围内起作用,我们称之为局部变量。在其他函数中是不能使用本函数定义的变量的。

  (2)简单变量做函数参数和数组做函数参数存在着本质的不同。

     简单变量做参数,实现的是值的单向传递,即只能把实参的值传给形参,由于实参和形参占用不同的内存单元,形参的改变不会影响实参。

     数组做函数参数,是将实参数组的地址传给形参数组,实参和形参占用的是相同的内存空间。  

三、程序分析

     程序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 swap(int x[]) ,所以数组的值随着int[]变化而变化,而程序二把数组中两个数赋值给了两个变量,所以结果相反。

第九次作业