• 第九次作业


    一 实验内容   

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

    #include <stdio.h>
    void readgrade(int grade[],int n);  //读取人数 
    void ave(int grade[],int n);       //求平均分 
    void maxgrade(int grade[],int n);  //求最高分
    void mingrade(int grade[],int n);  //求最低分
    void findgrade(int grade[],int find,int n);     //查询成绩
    void sort(int grade[],int n);   //排序 
    void printgrade(int grade[],int n);   //输出函数 
    #define N 100
    int main()
    {
        int grade[N],sum=0,n,i,max,min,find,m;
        printf("请输入需要统计的学生个数:");
        scanf("%d",&n);
        readgrade(grade,n);
        ave(grade,n); 
        maxgrade(grade,n);
        mingrade(grade,n);
        printf("请输入你要查询的成绩:");
        scanf("%d",&find);
        findgrade(grade,find,n);
        sort(grade,n);
        printgrade(grade,n);
        return 0;
     } 
    
    
    void readgrade(int grade[],int n)  //读取人数
    {
    int i;    
    for(i=0;i<n;i++)
    {
        printf("请输入第%d名同学的成绩:",i+1);
        scanf("%d",&grade[i]);
    }
    }
    
    void ave(int grade[],int n)  //求平均分
    {
        int sum=0,i;
        double average;
        for(i=0;i<n;i++)
        {
            sum=sum+grade[i];
        }
        average=(double)sum/n;
        printf("平均分为%.3f分
    ",average);
     } 
     
    void maxgrade(int grade[],int n)  //求最高分
    {
        int max=grade[0],i;
        for(i=1;i<n;i++)
        {
            if(grade[i]>=max)
            {
                max=grade[i]; 
            }
        }
        for(i=0;i<n;i++)
        { 
        if(grade[i]==max)
        {printf("第%d名",i+1);} 
        }
        printf("同学获得最高分,分数为%d分
    ",max);
    } 
    
    void mingrade(int grade[],int n)  //求最低分
    {
        int i,min;
        min=grade[0];
        for(i=0;i<n;i++)
        {
            if(grade[i]<=min)
            {
            min=grade[i];
            }
        }
        for(i=0;i<n;i++)
        { 
        if(grade[i]==min)
        {printf("第%d名",i+1);} 
        }
        printf("同学获得最低分,分数为%d分
    ",min);
    } 
    
    void findgrade(int grade[],int find,int n)  //查询成绩
    {
        int i;
        for(i=0;i<n;i++)
        {
            if(grade[i]==find)
            {
                printf("第%d名",i+1); 
                n++; 
            }
        }
        if(n==0)
        {
            printf("未找到符合条件的同学
    ");
        }
        else
        { 
        printf("同学获得了%d分
    ",find);
        }
     } 
     
     void sort(int grade[],int n)  //排序
     {
         int x,y,i;
         for(x=0;x<n-1;x++)
         {
             for(y=0;y<n-x-1;y++)
             {
                 if(grade[y+1]>grade[y])
                 {
                     i=grade[y];
                     grade[y]=grade[y+1];
                     grade[y+1]=i;
                 }
             }
         }
      } 
    
    
    void printgrade(int grade[],int n)   //输出函数 
    {
        int i;
        for(i=0;i<n;i++)
        printf("%5d",grade[i]); 
    }

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

    #include <stdio.h>
    int main()
    {
        int i,m,n,x,number[100];
        for(i=0;i<100;i++)
        {
            number[i]=i+1;
        }
        for(i=0;i<100;i++)
        {
            if(number[i]%3==0||number[i]%7==0)
            {
                number[i]=0;
            }
        }
        x=0;
        for(i=0;i<100;i++)
        {
            if(number[i]==0)
            continue;
            printf("%5d",number[i]);
            x++;
            if(x%10==0)
            printf("
    ");
        }
        printf("共有%d个数",x-1);
        return 0;
     }

    附加题

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

    #include <stdio.h>
    int main()
    {
        int i,m,n,x,number[10]={1,2,3,4,5,6,7,8,9,10};
        printf("原数组为:1,2,3,4,5,6,7,8,9,10
    ");
        printf("请输入要移动数组的位数:");
        scanf("%d",&m);
        if(m<0)
        printf("输入数据有误");
        for(i=0;i<m;i++)
        {
            n=number[9];
            for(x=9;x>0;x--)
            {
                number[x]=number[x-1];
            }
            number[0]=n;
        }
        printf("新的数组为:");
        for(i=0;i<10;i++)
        {
            printf("% d",number[i]);
        }
        return 0;
    }

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

    #include <stdio.h>
    int main()
    {
        int number[4],n,m,i;
        printf("请输入一个四位数:");
        scanf("%d",&n);
        if(n<1000&&n>9999)
        {
            printf("未按要求输入数据,请重新输入");
            scanf("%d",&n);
        }
        number[0]=n/1000;
        number[1]=n%1000/100;
        number[2]=n%100/10;
        number[3]=n%10;
        for(i=0;i<4;i++)
        {
            number[i]=(number[i]+9)%10;
        }
        m=number[2];
        number[2]=number[0];
        number[0]=m;
        m=number[3];
        number[3]=number[1];
        number[1]=m;
        for(i=0;i<4;i++)
        {
            printf("%d",number[i]);
        }
        return 0;
    }

     二、实验总结(实验中遇到的问题及解决方法) 

    1数组的第一个数是 ...[0]而不是...[1]

    2注意分清数据类型,有必要时要进行强制数据转换

    3函数没有返回值时,用void定义函数

    4编写程序时要尽可能考虑到可能出现的各种情况

    5循环中用countinue代表结束本次循环,break代表跳出循环 

     三、程序分析

    造成差异的原因在于简单变量作为函数变量时,形参的变化并不会影响到实参     而数组作为函数变量时,作为形参的数组的变化会影响到原来作为实参的数组

  • 相关阅读:
    AVUE 根据 某个字段 倒序查询
    Java hutool工具包的使用
    AVUE 添加搜索项
    SpringBlade 添加 回收站功能
    接口 form-data 将对象转换为复杂url参数
    AVUE 隐藏 新增按钮
    AVUE 查看crud列的属性配置
    AVUE dialog对话框 去掉 点击屏幕空白区 就关闭弹框
    接口 C#/Java 请求数据 raw 的方式传输复杂对象
    接口 PostMan 常用
  • 原文地址:https://www.cnblogs.com/UUZsama/p/6115321.html
Copyright © 2020-2023  润新知