• 第九次作业


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

    #include<stdio.h>
    #define N 100
    void putin(int score[],int n);//输入函数 
    double average(int score[],int n);//平均值函数 
    int maxindex(int score[],int n,int max[]);//最大值下标函数 
    int minindex(int score[],int n,int min[]);//最小值下标函数 
    int findindex(int a,int score[],int n,int find[]);//查找函数
    void paixu(int score[],int n);//排序函数
    void putout(int score[],int n);//输出函数 
    int main()
    {
        int i,score[N]={0},n,max[N]={0},min[N]={0},f,find[N]={0};
        printf("请输入学生的人数:");
        scanf("%d",&n);
        putin(score,n);
        printf("平均分为%.2lf
    ",average(score,n));  //double类型,输出是%lf若是%d会输出零 
        printf("成绩最高的学生是:");
        i=maxindex(score,n,max);
        putout(max,i);
        printf("成绩最低的学生是:");
        i=minindex(score,n,min);  //应该先使用自定义函数,把返回值给一个变量,如果在putout函数里直接使用,因为前面是先输出的原除赋值数组,后用的自定义函数,数组没有被再赋值。 
        putout(min,i); 
        printf("请输入你想查找的成绩:");
        scanf("%d",&f);
        if(findindex(f,score,n,find))
        {
            i=findindex(f,score,n,find);
            printf("这个成绩的学生是:
    ");
            putout(find,i);
        }
        else
        {
            printf("你查找的成绩不存在。
    "); 
        }
        printf("将成绩由小到大排列:
    ");
        paixu(score,n);
        putout(score,n);
        return 0;
    } 
    void putin(int score[],int n)
    {
        int i;
        for(i=0;i<n;i++)
        {
            printf("请输入第%d个学生的成绩:
    ",i+1);
            scanf("%d",&score[i]);
        }
    }
    double average(int score[],int n)
    {
        int i,sum=0;
        for(i=0;i<n;i++)
        {
            sum=sum+score[i];
        }
        return (double)sum/n;
    }
    int maxindex(int score[],int n,int max[])
    {
        int i,Max,index=0;
        Max=score[0];
        for(i=0;i<n;i++)
        {
            if(score[i]==Max)
            {
                max[index++]=i;
            }
            else if(score[i]>Max)
            {
                Max=score[i];
                index=0;
                max[index++]=i;
            }
        }
        return index;
    }
    int minindex(int score[],int n,int min[])
    {
        int i,Min,index=0;
        Min=score[0];
        for(i=0;i<n;i++)
        {
            if(score[i]==Min)
            {
                min[index++]=i;
            }
            else if(score[i]<Min)
            {
                Min=score[i];
                index=0;
                min[index++]=i;
            }
        }
        return index;
    }
    int findindex(int a,int score[],int n,int find[])
    {
        int i,index=0,flag=0;
        for(i=0;i<n;i++)
        {
            if(a==score[i])
            {
                find[index++]=i;
                flag=1;
            }
        }
        if(flag==0)
        return 0;
        else
        return index;
    }
    void paixu(int score[],int n)
    {
        int i,j,temp,flag;
        for(i=0;i<n-1;i++)
        {
            flag=0;
            for(j=0;j<n-1-i;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 putout(int score[],int n)
    {
        int i;
        for(i=0;i<n;i++)
        {
            printf("%d
    ",score[i]);
        }
    } 

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

    #include<stdio.h>
    #define N 100
    int main()
    {
        int i,nums[N]={0},a=0;
        for(i=0;i<N;i++)
        {
            nums[i]=i+1;
        }
        for(i=0;i<N;i++)
        {
            if(nums[i]%3==0||nums[i]%7==0)
            {
                nums[i]=0;
            }
            else
            {
                a++;
                printf("%5d
    ",nums[i]);

              if(a%10==0)
              printf(" ");

    
            }
        }
        printf("剩余%d个",a);
        return  0;
    }

    附加题

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

    #include<stdio.h>
    #define N 10
    int main()
    {
        int i,nums[N]={0},m,temp,temp1,j;
        for(i=0;i<N;i++)
        {
            nums[i]=i;
        }
        for(i=0;i<N;i++)
        {
            printf("%3d",nums[i]); 
        }
        printf("
    请输入后移的位数:
    ");
        scanf("%d",&m);
        for(i=0;i<m;i++)
        {
            temp=nums[N-1];
            for(j=N-2;j>=0;j--)
            {
                nums[j+1]=nums[j];
            }
            nums[0]=temp;
        }
        for(i=0;i<N;i++)
        {
            printf("%3d",nums[i]); 
        }
        return 0;
    }

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

    #include<stdio.h>
    #define N 4
    int main()
    {
        int num,temp,i,j,nums[N]={0};
        printf("请输入一个四位数。
    ");
        scanf("%d",&num);
        while(num<1000||num>9999)
        {
            printf("输入错误,请重新输入:
    ");
            scanf("%d",&num);
        }
        for(i=3;i>=0;i--)
        {
            nums[i]=(num%10+9)%10;
            num=num/10;
        }
        temp=nums[3];
        nums[3]=nums[1];
        nums[1]=temp;
        temp=nums[2];
        nums[2]=nums[0];
        nums[0]=temp;
        for(i=0;i<N;i++)
        printf("%d",nums[i]); 
        return 0;
    }

    实验总结:1.double类型,输出是%lf若是%d会输出零;

         2.应该先使用自定义函数,把返回值给一个变量,如果在putout函数里直接使用,

          因为前面是先输出的原除赋值数组,后用的自定义函数,数组没有被再赋值;

         3.实参是数组名,不加中括号;

         4.后移应该先将最后一个数组元素提出来出来,让其一个一个移动,直到将第一个位置空出来,

          再把最后一个元素放到第一个位置,要求后移几位,外层循环就执行几次;

         5.冒泡排序法,外层循环比较n-1趟,内层比较n-1-i次;

    三、程序分析

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

    分析原因:swap函数里的实参是数组名,是将数组的首元素地址传给了形参,

    形参是和实参公用同一储存空间,自定义函数里数组的改变会就是实际数组的改变。

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

    分析原因:swap函数将实参的值复制一份给了形参,形参的改变不会影响到实参的改变,

    所以最后输出的结果,实参没有发生变化。

  • 相关阅读:
    jar 命令 打包装class文件的文件夹
    快捷下载 sourceForge下的资源
    win7 解决git clone 连接被拒绝—hosts文件过期
    tp_link路由器 重新设置
    gradle研究
    开始玩mondrian
    让eclipse启动时拥有jre
    qt md5加密,base64编码解码
    qt 网络库使用介绍
    c 正则表达式
  • 原文地址:https://www.cnblogs.com/TX980502/p/6115074.html
Copyright © 2020-2023  润新知