• 第九次作业


     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 ("请输入人数:
    ");
        scanf ("%d",&n); 
        readscore(score,n);
        ave=average(score,n);
        printf("平均值为%.0lf。
    ",ave);
        maxindex=findmaxindex(score,n,index);
        printf("最大值下标为%d
    ",maxindex);
        minindex=findminindex(score,n,index);
        printf("最小值下标为%d
    ",minindex);
         c=search (score,n,x);
         for(i=0;i<c;i++)
         {
          printf("%d号。
    ",x[i]);
         }
        bubbleSort(score,n);
        printf("the sorted numbers:
    ");
        for(i=0;i<n;i++)
        {
           printf("%4d",score[i]);
        }
    }
    //输入函数
    void readscore (int score[],int n)
    {
       int i; 
       printf("请输入成绩:
    ");
       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("请输入你需要查找的成绩:
    ");
      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("
    请输入向后移的位数;
    ");
        scanf("%d",&m); 
        if(m>10)
        {
            printf("输入错误!
    ");
        }
        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("请输入一个密码(四位数):
     ");
      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
    a[1]=%d
    ",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
    a[1]=%d
    ",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[]变化而变化,而程序二把数组中两个数赋值给了两个变量,所以结果相反。
  • 相关阅读:
    LeetCode数学系列(1)——第172解题思路
    python的匿名函数lambda解释及用法
    LeetCode位操作系列(2)——位运算的常用技巧:lowbit运算,包含lowbit公式、讲解、231题运用
    【零散】jupyter notebook快捷键 mac版
    【油猴插件】分享推荐
    【Mac】 Chromedriver 存放路径
    【全网首发】微信公众号常见垃圾文章广告软文关键词整理
    Mac Chrome浏览器取消自动升级(最新版)
    requests与selenium之前cookies传递
    [转]scrapy中的request.meta
  • 原文地址:https://www.cnblogs.com/wei-1249700655/p/6115904.html
Copyright © 2020-2023  润新知