首页 > 代码库 > 第九次作业

第九次作业

一、实验内容

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;
    for(i=0;i<n;i++)
    {
        printf("%5d",score[i]);
    }
    printf("\n");
}

 


 

程序运行结果截图技术分享

 

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.实验2中数组的初始化为什么不能把所有元素写出来

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

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

向函数传递数组:数组作为函数参数时,不能再【】中给出数组的大小,必须用另一个参数来传入数组的大小

三、程序分析

程序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 中的实参只是调用了数组元素,形参执行被调函数实参变量值不能变化。

 

第九次作业