第九次做業

 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從鍵盤輸入。spa

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。(使用數組)3d

# 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;
}

 

 

二 實驗總結:code

1.注意void和int的區別blog

2.注意數組名錶示內存首地址, 是地址常量排序

3.在聲明函數時看是否加 int index[]內存

4.變量要附初值io

補充知識點:

在使用函數的過程當中,須要注意如下問題:

  (1)函數中定義的變量(包括形參),它只在本函數範圍內起做用,咱們稱之爲局部變量。在其餘函數中是不能使用本函數定義的變量的。

  (2)簡單變量作函數參數和數組作函數參數存在着本質的不一樣。

     簡單變量作參數,實現的是值的單向傳遞,即只能把實參的值傳給形參,因爲實參和形參佔用不一樣的內存單元,形參的改變不會影響實參。

     數組作函數參數,是將實參數組的地址傳給形參數組,實參和形參佔用的是相同的內存空間。  

3、程序分析

     程序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[]變化而變化,而程序二把數組中兩個數賦值給了兩個變量,因此結果相反。
相關文章
相關標籤/搜索