实验九

 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 findmaxindex(int score[],int n,int index[]);//求最高分及对应下标 
int findminindex(int score[],int n,int index[]);//求最低分及对应下标 
int Search(int score[],int n,int x);//查找 
void bubblesort(int score[],int n);//排序
int main()
{
    int score[N]={0},n,i,sum,count1,count2,index[N]={0},chazhao,x;
    double ave;
    printf("请输入班级人数");
    scanf("%d",&n);
    printf("\n");
    readscore(score,n);
    ave=average(score,n);
    printf("平均值为%.3f\n",ave);
    count1=findmaxindex(score,n,index);
    for(i=0;i<count1;i++)
    {
        printf("最高分=%d,是第%d个同学\n",score[index[i]],index[i]+1);
    }
    count2=findminindex(score,n,index);
    for(i=0;i<count2;i++)
    {
        printf("最低分=%d,是第%d个同学\n",score[index[i]],index[i]+1);
    }
    chazhao=Search(score,n,x);
    printf("该学生在%d位\n",chazhao+1);
    bubblesort(score,n);
    printf("排序后的顺序为:\n"); 
    printscore(score,n);
    return 0;
}
void readscore(int score[],int n)//输入数据 
{
    int i;
    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("\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 findmaxindex(int score[],int n,int index[])//求最高分对应的下标 
{
    int i,max,count1;
    max=score[0];
    count1=0;
    for(i=0;i<n;i++)
    {
        if(score[i]==max)
        {
            index[count1++]=i;
        }
        else if(score[i]>max)
        {
            max=score[i];
            count1=0;
            index[count1++]=i; 
        }
    }
    return count1;
}
int findminindex(int score[],int n,int index[])//求最低分
{
    int i,min,count2;
    min=score[0];
    count2=0;
    for(i=0;i<n;i++)
    {
        if(score[i]==min)
        {
            index[count2++]=i;
        }
        else if(score[i]<min)
        {
            min=score[i];
            count2=0;
            index[count2++]=i; 
        }
    }
    return count2;
}
int Search(int score[],int n,int x)//查找 
{
    int i;
    printf("请输入你要查询的成绩:"); 
    scanf("%d",&x);
    for(i=0;i<n;i++)
    {
        if(score[i]==x)
        return i;
    }
    return -1;
}
void bubblesort(int score[],int n)//排序
{
    int i,j,t,flag;
    for(i=0;i<n;i++)
    {
    
        for(j=0;j<n-1-i;j++)
        {    
            flag=0;
            if(score[j]>score[j+1])
            {
                t=score[j];
                score[j]=score[j+1];
                score[j+1]=t;
                flag=1;
            }
        }
        if(flag==0)
        {
            break;
        }
    }
    
}

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

#include<stdio.h>
int main()
{
    int i,a[100]={0},n=0;
    for(i=0;i<100;i++)
    {
        a[i]=i+1;
        if(a[i]%3==0||a[i]%7==0)
        {
            continue;
        }
        else
        {
            n++;
            printf("%4d",a[i]);
        }
    }
    
    printf("有%d个数",n);
    return 0;
}

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

实验总结:

1、注意与和或使用时的条件

2、注意只想结束一条语句是用的是continue,break是跳出循环

3、在自定义函数和主函数中数值的类型应一致

4、在调用函数时注意函数的对应

5、 数组的数据处理通常是通过循环结构来完成的,需要注意此时循环变量的初值是0,循环条件是i<10,那么在循环体中如果出现类似a[i-1]和a[i+1]的操作时就要考虑一下是否出现数组越界的情况了。

6、在使用函数时

(1)函数中定义的变量(包括形参),它只在本函数范围内起作用,我们称之为局部变量。在其他函数中是不能使用本函数定义的变量的。

 (2)简单变量做函数参数和数组做函数参数存在着本质的不同。

     简单变量做参数,实现的是值的单向传递,即只能把实参的值传给形参,由于实参和形参占用不同的内存单元,形参的改变不会影响实参。

     数组做函数参数,是将实参数组的地址传给形参数组,实参和形参占用的是相同的内存空间。       

三、程序分析

程序1:

  数组做函数参数,是将实参数组的地址传给形参数组,实参和形参占用的是相同的内存空间 ,因此交换的数值改变    

程序2:

简单变量做参数,实现的是值的单向传递,即只能把实参的值传给形参,由于实参和形参占用不同的内存单元,形参的改变不会影响实参。所以输出的还是实参。没有改变数值。

 

posted @ 2016-12-04 12:45  计科李茹  阅读(451)  评论(0编辑  收藏  举报