第九次作业

Posted 张晓楠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第九次作业相关的知识,希望对你有一定的参考价值。

一、实验内容

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("请输入学生人数\\n");
    scanf("%d",&n);
    readScore(score,n);
    printScore(score,n);
    ave=average(score,n);
    printf("平均值为%.2f\\n",ave);
    max=findMax(score,n);
    min=findMin(score,n);
    printf("最高分为%d\\n最低分为%d\\n",max,min);
    findMaxIndex(score,n,max);
    findMinIndex(score,n,min);
    findgrade(score,n);
    printf("成绩从高到低排序为\\n");
    bubbleSort(score,n);
    return 0;
}
void readScore(int score[],int n)
{
    int i=0;
    printf("请输入成绩\\n"); 
    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("\\n");
}
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个人\\n",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个人\\n",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个\\n",i+1,s);
            continue;
        }
        else
        {
            printf("无符合条件的人\\n");
            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-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("\\n请输入m得值\\n");
    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("请输入一个四位整数\\n");
    scanf("%d",&n);
    if(n>9999||n<1000)
    {
        printf("数据错误\\n");
    }
    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\\na[1]=%d\\n",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\\na[1]=%d\\n",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 中的实参只是调用了数组元素,形参执行被调函数实参变量值不能变化。

 

以上是关于第九次作业的主要内容,如果未能解决你的问题,请参考以下文章

第九次作业

第九次作业

第九次作业

第九次作业

第九次作业

第九次作业