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

第九次作业

一、实验内容

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);
int findmaxindex(int score[],int n);
int findminindex(int score[],int n);
int find(int score[],int n);
int main()
{
    int score[N]={0},n=0,i=0,n1,n2,n3;
    printf("输入人数:\n"); 
    scanf("%d",&n);
    readscore(score,n);
    printscore(score,n);
    average(score,n);
    printf("平均数是:%.2f\n",average(score,n));
    findmax(score,n);
    printf("最高分是%d\n",findmax(score,n));
    n1=findmaxindex(score,n);
    printf("最高分数的学生为%d号\n",n1+1);
    findmin(score,n);
    printf("最低分是%d\n",findmin(score,n));
    n2=findminindex(score,n);
    printf("最低分数的学生为%d号\n",n2+1);
    n3=find(score,n);
    if(n3!=-1)
    {
        printf("%d号得到这个分数\n",n3); 
    }
    else
    {
        printf("不存在这个成绩\n");    
    }
    return 0;
}
void printscore(int score[],int n)
{
    int i;
    printf("学生成绩是:");
    for(i=0;i<n;i++)
    {
        
        printf("%5d",score[i]);
    }
    printf("\n");
}
void readscore(int score[],int n)
{
    int i;
    for(i=0;i<n;i++)
    {
        printf("输入成绩:\n");
        scanf("%d",&score[i]);
    }
}
double average(int score[],int n)
{
    int sum=0,i;
    double average;
    for(i=0;i<n;i++)
    {
        sum=sum+score[i];
    }
    average=(double)sum/n;
    return average;
}
int findmax(int score[],int n)
{
    int i=0,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=0,min;
    min=score[0];
    for(i=0;i<n;i++)
    {
        if(score[i]<min)
        {
            min=score[i];      
        }
    }
    return min;
}
int findmaxindex(int score[],int n)
{
    int i=0,max,n1;
    max=score[0];
    for(i=0;i<n;i++)
    {
        if(score[i]>max)
        {
            max=score[i];
            n1=i;            
        }
    }
    return n1;
}
int findminindex(int score[],int n)
{
    int i=0,min,n2;
    min=score[0];
    for(i=0;i<n;i++)
    {
        if(score[i]<min)
        {
            min=score[i];
            n2=i;            
        }
    }
    return n2;
}
int find(int score[],int n)
{    
    int i=0,n3=0,n4=0;
    printf("输入一个分数:\n");
    scanf("%d",&n4);
    for(i=0;i<n;i++)
    {        
        if(score[i]==n4)
        {
            n3=i+1;
        }
    } 
    return n3;
} 

程序运行结果:技术分享

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

代码:

#include<stdio.h>
int main()
{
    int a=0,n=0;
    for(a=1;a<=100;a++)
    {
        if(a%3!=0&&a%7!=0)
        {
            printf("%4d",a);
            n++;
            if(n%10==0)
            {
                printf("\n");
            }
        }
    }
    printf("有%d个",n);
    return 0;
}

程序运行结果:技术分享

二、实验总结:

1、注意换行时是在循环里面还是外面;

2、一般情况下,函数中不能有输入输出的语句;

3、主函数中注意后面函数的书写。

三、程序分析

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

分析上述两个程序的执行结果。说明为什么?

运行结果程序一是对的。程序二在主函数中交换函数的表示括号中写的数组表示的是一个数组而不是整型数字,所以运行结果不对。

 

第九次作业