• 第九次作业


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

    #include <stdio.h>
    #define N 100
    void rscore(int score[],int n);     //输入成绩
    double average(int score[],int n);  //平均值 
    int max(int score[],int n);         //最大值 
    int maxi(int score[],int n,int index[]);  //最大值下标 
    int min(int score[],int n);         //最小值 
    int mini(int score[],int n,int index[]);  //最小值下标 
    void search(int score[],int n); //查询
    void bubblesort(int score[],int n); //排序 
    void printf(int score[],int n); //输出 
    int main()
    {
        int score[N]={0},n,i,x,fmax,fmaxi,fmin,fmini,index[N]={0};
        double ave;
        printf("请输入人数和成绩
    ");
        scanf("%d",&n);
        rscore(score,n);
        ave=average(score,n);
        printf("这%d个人的平均成绩为%.2f
    ",n,ave);
        fmax=max(score,n);
        printf("最大值为%d	",fmax);
        fmaxi=maxi(score,n,index);
        for(i=0;i<fmaxi;i++)
        {
            x=index[i];
            printf("是%d号	",x+1);
        }
        printf("
    ");
        fmin=min(score,n);
        printf("最小值为%d	",fmin);
        fmini=mini(score,n,index);
        for(i=0;i<fmini;i++)
        {
            x=index[i];
            printf("是%d号	",x+1);
        }
        printf("
    ");
        search(score,n);
        bubblesort(score,n);
        printf(score,n);
        return 0;
    }
    void rscore(int score[],int n)
    {
        int i;
        for(i=0;i<n;i++)
        {
            scanf("%d",&score[i]);
        }
    }
    double average(int score[],int n)
    {
        int sum=0,i;
        for(i=0;i<n;i++)
        {
            sum=sum+score[i];
        }
        return (double)sum/i;
    }
    int max(int score[],int n)
    {
        int i,max=score[0];
        for(i=1;i<=n;i++)
        {
            if(max<=score[i])
            {
                max=score[i];
            }
        }
        return max;
    }
    int maxi(int score[],int n,int index[])
    {
        int i,fmax,num=0;
        fmax=max(score,n);
        for(i=0;i<n;i++)
        {
            if(score[i]==fmax)
            {
                index[num++]=i;
            }
        }
        return num;
    }
    int min(int score[],int n)
    {
        int i,min=score[0];
        for(i=0;i<n;i++)
        {
            if(min>=score[i])
            {
                min=score[i];
            }
        }
        return min;
    }
    int mini(int score[],int n,int index[])
    {
        int i,fmin,num=0;
        fmin=min(score,n);
        for(i=0;i<n;i++)
        {
            if(score[i]==fmin)
            {
                index[num++]=i;
            }
        }
        return num;
    }
    void search(int score[],int n)
    {
        int i,x,flag=0;
        printf("请输入需要查的数:
    ");
        scanf("%d",&x);
        for(i=0;i<n;i++)
        {
            if(score[i]==x)
            {
                printf("是第%d人
    ",i+1);
                flag=1;
            }
        }
        if(flag==0)
        {
            printf("输入错误
    ");
        }
    }
    void bubblesort(int score[],int n)
    {
        int i,j,t;
        for(i=0;i<n-1;i++)
        {
            for(j=0;j<n-1;j++)
            {
                if(score[j]>score[j+1])
                {
                    t=score[j];
                    score[j]=score[j+1];
                    score[j+1]=t;
        
                }
            }
        }
    }
    void printf(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 num[N]={0},i,a,b=0;
        for(i=0;i<N;i++)
        {
            num[i]=i+1;
            if(num[i]%3==0||num[i]%7==0)
            {
                num[i]=0;
            }
            if(num[i]!=0)
            {
                printf("%3d ",num[i]);
                b++;
                if(b%10==0)
                {
                    printf("
    ");
                }
            }
        }
        printf("共%d个数字
    ",b);
        return 0;
    }

    附加题

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

    #include<stdio.h>
    #define N 10
    int main()
    {
        int num[N]={0,1,2,3,4,5,6,7,8,9},i,a,b,c;
        printf("请输入一个个位数:
    ");
        scanf("%d",&a);
        if(a>9||a<0)
        {
            printf("输入错误
    ");
        }
        for(i=0;i<a;i++)
        {
            c=num[N-1];
            for(b=N-2;b>=0;b--)
            {
                num[b+1]=num[b];
            }
            num[0]=c;
        }
        for(i=0;i<N;i++)
        {
            printf("%d ",num[i]);
        }
        return 0;
    }

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

    #include<stdio.h>
    int main()
    {
        int num[4]={0},a,i,temp1,temp2;
        printf("请输入一个4位数:
    ");
        scanf("%d",&a);
        for(i=3;i>=0;i--)
        {
            num[i]=(a%10+9)%10;
            a=a/10;
        }
        temp1=num[0];
        num[0]=num[2];
        num[2]=temp1;
        temp2=num[1];
        num[1]=num[3];
        num[3]=temp2;
        for(i=0;i<4;i++)
        {
            printf("%d",num[i]);
        }
        return 0;
    }

    二、实验总结

    1.要学会数组和函数的相互应用,当你不知道数组里要存些啥数的时候,一般都是让里边的数是0,然后在程序中输数;

    2.第二题说的是将数组中是3、7的倍数的数删除,不能只是选择性的输出,可以将关于3、7倍数的让他是个别的数比如0,在最后输出时可以让不是0的输出;

    3.附加1这个题和之前做的插序的那个差不多,只是这个是定义的数满了,为了让这些输可以向后移动 可以考虑先拿出来一个数 然后剩下的数就跟之前插序的那个题一样了;

    4.附加2一定要搞清楚是谁和谁换了,数组下标是从0开始,可不要写成a[1]···a[4],这可就不对了。

    三、程序分析

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

    这是两个程序运行结果的截图,显然一个互换了 另一个没有

    第一个实参的地址给了形参,所以形参变了,实参也变,所以输出交换

    第二个只是把实参的值给形参,就算形参变,实参也不会变,所以输出是不变的

  • 相关阅读:
    Netty优雅退出
    使用FFmpeg切片HLS流
    Golang协程和线程区别
    00 PyTorch 开发环境搭建
    SpringBoot + LibreOffice + Hutool 实现附件预览简单示例
    css 注意事项 BFC
    css 伪类 属性选择器 优先级
    html img 标签图片格区别
    redis集群
    Redis RDB与AOF
  • 原文地址:https://www.cnblogs.com/zj1220/p/6129460.html
Copyright © 2020-2023  润新知