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

第九次作业

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

#include<stdio.h>
#define N 10 
int Readscore(int score[],int n);//输入函数 
void Score(int score[],int n);//输入成绩 
double average(int score[],int n);//平均值 
int findMax(int score[],int n);//最大值的下标 
int findMin(int score[],int n);// 最小值的下标 
int search(int num[],int n, int x);//查找 
void bubbleSort(int score[],int n);//排序 
void printScore(int score[],int n);//浏览函数 
int main()
{
    int score[N]={0},n,i,maxindex,minindex,max,min;
    double ave;
    printf("int student number:\n");
    scanf("%d",&n);
    Score(score,n);
    bubbleSort(score,n);
    printScore(score,n);
    max=findMax(score,n);
    printf("max=%d\n",max);
    min=findMin(score,n);
    printf("min=%d\n",min);
    ave=average(score,n);
    printf("average=%lf",ave);
    return 0;
}
int Readscore(int score[], int n)
{
    int i=0;
    printf("printscore");
    while(1)
    {
        scanf("%d",score[i]);
        if(score[i]<0)
        {
            break;
        }
        break;
    }
    return i;
}

void Score(int score[],int n)
{
    int i;
    for(i=0;i<n;i++)
    {
        printf("请输入第%d个学生的成绩:\n",i+1);
        scanf("%d",&score[i]);
    }
}

double average(int score[],int n)
{
    int i,sum=0,ave;
    for(i=0;i<n;i++)
    {
        sum=sum+score[i];
    }
    ave=(double)sum/n;
    return ave;
}
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;
}
int search(int num[],int n, int x)
{
    int i;
    for(i=0;i<n;i++)
    {
          if(num[i]==x)
        return i;
    }
    return -1;
}
void bubbleSort(int score[],int n)
{
    int i,j,temp;
    for(i=0;i<n-1;i++)  
    {
          for(j=0;j<n-1-i;j++) 
        {
            if (score[j]>score[j+1])
            {
            temp=score[j];
            score[j]=score[j+1];
            score[j+1]=temp;
            }
        }
    }
}
void printScore(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>
int main()
{
    int i,a=0;
    for(i=1;i<=100;i++)
    {
        if((i%3!=0)&&(i%7!=0))
        {
            printf(" %3d",i);
            a++;
        }
        if(a%10==0)
        {
            printf("\n");
        }
    }
    printf("一共%d个",a);
    return 0;
}

技术分享

 

 

  二、实验总结(实验中遇到的问题及解决方法) 

           1 下标值应在已定义的数组大小的范围内。

           2、一般是数组名[常量表达式][常量表达式]。

三、程序分析

         1,

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

最后a[0]与a[1]的值互换,void里完成交换,因为不需要输出,所以有awap(a),int[]可以由里面的数的变化表示相应的值。

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

x与y的值得交换代表a[0]于a[1]的交换,这里将a[]具体的赋给了某个字母。

第九次作业