zoukankan      html  css  js  c++  java
  • 第九次作业

    一、实验内容

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

    代码

    
    
    #include <stdio.h>
    #define N 100
    void readScore(int score[],int n);//输入成绩 
    void printScore(int score[],int n);//输出成绩
    double average(int score[],int n);//平均值 
    int findMax(int score[],int n);//最大值 
    int findMin(int score[],int n);//最小值 
    void findMaxIndex(int score[],int n,int max);//最大值下标 
    void findMinIndex(int score[],int n,int min);//最小值下标 
    void findgrade(int score[],int n);//成绩查找 
    void bubbleSort(int score[],int n);//降序
    int main()
    {
        int score[N]={0},index[N]={0},n,max,min,i=0;
        double ave;
        printf("请输入学生人数
    ");
        scanf("%d",&n);
        readScore(score,n);
        printScore(score,n);
        ave=average(score,n);
        printf("平均值为%.2f
    ",ave);
        max=findMax(score,n);
        min=findMin(score,n);
        printf("最高分为%d
    最低分为%d
    ",max,min);
        findMaxIndex(score,n,max);
        findMinIndex(score,n,min);
        findgrade(score,n);
        printf("成绩从高到低排序为
    ");
        bubbleSort(score,n);
        return 0;
    }
    void readScore(int score[],int n)
    {
        int i=0;
        printf("请输入成绩
    "); 
        for(i=0;i<n;i++)
        {
            scanf("%d",&score[i]);
        }
    }
    void printScore(int score[],int n)
    {
        int i;
        for(i=0;i<n;i++)
        {
            printf("%5d",score[i]);
        }
        printf("
    ");
    }
    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 findMax(int score[],int n)
    {
        int i,max;
        max=score[0];
        for(i=0;i<n;i++)
        {
            if(score[i]>max)
            {
                max=score[i];
            }
        }
        return max;
    }
    int findMin(int score[],int n)
    {
        int i,min;
        min=score[0];
        for(i=0;i<n;i++)
        {
            if(score[i]<min)
            {
                min=score[i];
            }
        }
        return min;
    }
    void findMaxIndex(int score[],int n,int max)
    {
        int i,count;
        count=0;
        for(i=0;i<n;i++)
        {
            if(score[i]==max)
            {
               count=i+1;
               printf("最高分是第%d个人
    ",count);
            }
        }
    }
    void findMinIndex(int score[],int n,int min)
    {
        int i,count;
        count=0;
        for(i=0;i<n;i++)
        {
            if(score[i]==min)
            {
              count=i+1;
              printf("最低分是第%d个人
    ",count);
            }
        }
    }
    void findgrade(int score[],int n)
    {
        int i=0,x,s;
        printf("请输入要查询的成绩");
        scanf("%d",&x);
        s=0;
        for(i=0;i<n;i++)
        {
            if(score[i]==x)
            {
                s++;
                printf("第%d个人,共%d个
    ",i+1,s);
                continue;
            }
            else
            {
                printf("无符合条件的人
    ");
                break;
            }
        }
    }
    void bubbleSort(int score[],int n)
    {
      int i,j,temp;
      for(i=0;i<n-1;i++)
        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;
          }
        }
    }
    
    
    
    
    

    程序运行结果截图

    2.实验要求

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

    代码

    #include<stdio.h>
    #define N 100
    int main()
    {
        int i,a[100],j,n=0;
        //int a[N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70.71.72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100};
        for(i=0;i<100;i++)
        {
            a[i]=i+1;
        }
        for(i=0;i<N;i++)
        {
            if(a[i]%3==0||a[i]%7==0)
            {
                a[i]=0;
                n++;
            }
        }
        printf("共剩余%d个
    ",N-n);
        for(i=0;i<N;i++)
        {
            if(a[i]==0)
            {
                continue;
            }
            else
            {    
                printf("%5d",a[i]);
            }
        }
        return 0;
    }

    程序运行结果截图

     附加题

     1.实验要求

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

    代码

    #include<stdio.h>
    #define N 10
    int main()
    {
        int  i,m,j,t;
        int a[N]={0};
        //数组初始化
        for(i=0;i<N;i++)
        {
            a[i]=i+1;
            printf(" %d ",a[i]);
        }
        printf("
    请输入m得值
    ");
        scanf("%d",&m);
        for(j=0;j<m;j++)//移动m次
        {
            t=a[9];
            for(i=N-1;i>0;i--)//移动1位
            {
                a[i]=a[i-1];
            }
            a[0]=t;
        }
        for(i=0;i<N;i++)
        {
            printf(" %d",a[i]);
        }
        return 0;
    }

    程序运行结果截图

       2. 实验要求

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

    代码

    #include<stdio.h>
    int main()
    {
        int n,i,a,b,c,d,t;
        int num[4]={0};
        printf("请输入一个四位整数
    ");
        scanf("%d",&n);
        if(n>9999||n<1000)
        {
            printf("数据错误
    ");
        }
        else
        {
            a=(n/1000+9)%10;
            b=(n%1000/100+9)%10;
            c=(n%100/10+9)%10;
            d=(n%10+9)%10;
            t=a;
            a=c;
            c=t;
            t=b;
            b=d;
            d=t;
            num[0]=a;
            num[1]=b;
            num[2]=c;
            num[3]=d;
            for(i=0;i<4;i++)
            {
                printf("%d",num[i]);
            }
        }
        return 0;
    }

    程序运行结果截图

    二、实验总结

    1.实验2中数组的初始化为什么不能把所有元素写出来

    2.double类型变量输出时用%lf不是%d

    3.冒泡法排序时,n个数比较n-1趟,每趟比较n-i次。用外层函数表示趟,内层表示次

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

     程序1和程序2中swap函数的实参不同,程序1中数组元素的地址做函数的参数,实参和形参数组元素实现互相传递

    程序2 中的实参只是调用了数组元素,形参执行被调函数实参变量值不能变化。

  • 相关阅读:
    Codeforces 1167E(思路、数据处理)
    Codeforces 185D(发现性质、欧拉定理)
    BUPT2017 springtraining(16) #4 ——基础数论
    Codeforces Round #404 (Div. 2)——ABCDE
    BUPT2017 springtraining(15) #3
    BUPT2017 springtraining(16) #3 ——搜索与动态规划
    BUPT2017 springtraining(16) #2 ——基础数据结构
    Codeforces Round #413(Div. 1 + Div. 2, combined)——ABCD
    BUPT2017 springtraining(16) #1 ——近期codeforces简单题目回顾
    Codeforces Round #400 (Div. 1 + Div. 2, combined)——ABCDE
  • 原文地址:https://www.cnblogs.com/xxs812/p/6129968.html
Copyright © 2011-2022 走看看