第八章 数组 个人总结笔记

从键盘输入某班学生某门课的成绩(已知每班人数最多不超过40人,具体人数键盘输入),试编程计算其平均分

#include <stdio.h>
#define N 40
int Average(int score[],int n);
void ReadScore(int score[],int n);
int main()
{
    int score[N],aver,n;
    printf("Input n:")/*已知n,让人输入*/
    scanf("%d",&n);
    ReadScore(score,n);
    aver=Average(score,n);
    printf("Average score is %d\n",aver);
    return 0;
}
int Average(int score[],int n)
{
    int i,sum=0;
    for(i=0;i<=n-1;i++)
    {
        sum+=a[i];
    }
    return sum/n;
}
void ReadScore(int score[],int n)
{
    int i;
    printf("Input score:");
    for(i=0;i<=n-1;i++)
    {
        scanf("%d",&score[i]);
    }
}

从键盘输入某班学生某门课的成绩(已知每班人数最多不超过40人),当输入成绩为负值时,表示输入结束,试编程计算其平均分,并输出实际输入的人数

#include <stdio.h>
#define N 40
int Average(int score[],int n);
int ReadScore(int score[]);
int main()
{
    int score[N],aver,n;
    n=ReadScore(score);
    printf("Total studentd is %d\n",n);
    aver=Average(score,n);
    printf("Average score is %d\n",aver);
    return 0;
}
int Average(int score[],int n)
{
    int i,sum=0;
    for(i=0;i<=n-1;i++)
    {
        sum+=score[i];
    }
    return n>0?sum/n:-1;/*讨论n小于零的情况*/
}
int ReadScore(int score[])
{
    int i=-1;
    do{
        i++;
        printf("Input score:");
        scanf("%d",&score[i]);
    }while(score[i]>=0);
    return i;
}

从键盘输入某班学生某门课的成绩(已知每班人数最多不超过40人),当输入成绩为负值时,表示输入结束,试编程计算并打印最高分

#include <stdio.h>
#define N 40
int FindMax(int score[],int n);
int ReadScore(int score[]);
int main()
{
    int score[N],max,n;
    n=ReadScore(score);
    printf("Total studentd is %d\n",n);
    max=FindMax(score,n);
    printf("The highest score is %d\n",max);
    return 0;
}
int ReadScore(int score[])
{
    int i=-1;
    do{
        i++;
        printf("Input score:");
        scanf("%d",&score[i]);
    }while(score[i]>=0);
    return i;
}
int FindMax(int score[],int n)
{
    int i,max=score[0];
    for(i=1;i<n;i++)
    {
        if(max<score[i])
        max=score[i];
    }
    return max;
}

从键盘中输入某班学生某门课的成绩(每班人数最多不超过40人),当输入为负值时表示输入结束,试编程将分数从高到低顺序进行排序输出。用函数实现排序功能。

  • 交换排序法——降序排序
#include <stdio.h>
#define N 40
int ReadScore(int score[]);
void DataSort(int score[],int n);
void PrintScore(int score[],int n);
int main()
{
    int score[N],aver,n;
    n=ReadScore(score);
    printf("Total studentd is %d\n",n);
    DataSort(score,n);
    printf("Sorted scores:");
    PrintScore(score,n);
    return 0;
}
void DataSort(int score[],int n)
{
    int i,j,temp;
    for(i=0;i<n-1;i++)
    {
        for(j=i+1;j<n;j++)
        {
            if(score[i]<score[j])
            {
                temp=score[i];
                score[i]=score[j];
                score[j]=temp;
            }
        }
    }
}
int ReadScore(int score[])
{
    int i=-1;
    do{
        i++;
        printf("Input score:");
        scanf("%d",&score[i]);
    }while(score[i]>=0);
    return i;
}
void PrintScore(int score[],int n)
{
    int i;
    for(i=0;i<n;i++)
    {
        printf("%4d\n",score[i]);
    }
}
  • 选择排序法——降序排序
#include <stdio.h>
#define N 40
int ReadScore(int score[]);
void DataSort(int score[],int n);
void PrintScore(int score[],int n);
int main()
{
    int score[N],aver,n;
    n=ReadScore(score);
    printf("Total studentd is %d\n",n);
    DataSort(score,n);
    printf("Sorted scores:");
    PrintScore(score,n);
    return 0;
}
void DataSort(int score[],int n)
{
    int i,j,k,temp;
    for(i=0;i<n-1;i++)
    {
        k=i;
        for(j=i+1;j<n;j++)
        {
            if(score[k]<score[j])
            {
                k=j;
            }
            
        }
        if(k!=i)
            {
                temp=score[k];
                score[k]=score[i];
                score[i]=temp;
            }
    }
}
int ReadScore(int score[])
{
    int i=-1;
    do{
        i++;
        printf("Input score:");
        scanf("%d",&score[i]);
    }while(score[i]>=0);
    return i;
}
void PrintScore(int score[],int n)
{
    int i;
    for(i=0;i<n;i++)
    {
        printf("%4d\n",score[i]);
    }
}

从键盘中输入某班学生某门课的成绩和学号(每班人数最多不超过40人),当输入为负值时表示输入结束,试编程将分数从高到低顺序进行排序,输出排序后学生分数与对应学号。用函数实现排序功能。

#include <stdio.h>
#define N 40
int ReadScore(int score[],long num[]);
void DataSort(int score[],long num[],int n);
void PrintScore(int score[],long num[],int n);
int main()
{
    int score[N],aver,n;
    long num[N];
    n=ReadScore(score,num);
    printf("Total studentd is %d\n",n);
    DataSort(score,num,n);
    printf("Sorted scores:");
    PrintScore(score,num,n);
    return 0;
}
void DataSort(int score[],long num[],int n)
{
    int i,j,k,temp1;
    long temp2;
    for(i=0;i<n-1;i++)
    {
        k=i;
        for(j=i+1;j<n;j++)
        {
            if(score[k]<score[j])
            {
                k=j;
            }
            
        }
        if(k!=i)
            {
                temp1=score[k];
                score[k]=score[i];
                score[i]=temp1;
                temp2=num[k];
                num[k]=num[i];
                num[i]=temp2;
            }
    }
}
int ReadScore(int score[],long num[])
{
    int i=-1;
    do{
        i++;
        printf("Input student's ID and score:");
        scanf("%ld %d",&num[i],&score[i]);
    }while(num[i]>0&&score[i]>=0);/*也要控制学号的输入正确*/
    return i;
}
void PrintScore(int score[],long num[],int n)
{
    int i;
    for(i=0;i<n;i++)
    {
        printf("%101d %4d\n",num[i],score[i]);
    }
}

从键盘中输入某班学生某门课的成绩和学号(每班人数最多不超过40人),当输入为负值时,表示输入结束,试编程从键盘任意输入一个学号,查找该学号学生的成绩

  • 线性查找法
#include <stdio.h>
#define N 40
int LineSearch(long x,long num[],int n);
int ReadScore(int score[],long num[]);
int main()
{
    int score[N],n,pos;
    long num[N],x;
    n=ReadScore(score,num);
    printf("Total students are %d\n" ,n);
    printf("Input the searching ID:");
    scanf("%ld",&x);
    pos=LineSearch(x,num,n);
    if(pos!=-1) printf("score=%d\n",score[pos]);
    else printf("Not found!\n");
    return 0;
}
int ReadScore(int score[],long num[])
{
    int i=-1;
    do{
        i++;
        printf("Input student's ID and score:");
        scanf("%ld%d",&num[i],&score[i]);
    }while(num[i]>0&&score[i]>=0);
    return i;
}
int LineSearch(long x,long num[],int n)
{
    int i;
    for(i=0;i<n;i++)
    {
        if(x==num[i])
        return i;
    }
    return -1;
}
  • 折半查找法(假设按学生的学号从小到大的顺序输入学生的成绩)
#include <stdio.h>
#define N 40
int BinSearch(long x,long num[],int n);
int ReadScore(int score[],long num[]);
int main()
{
    int score[N],n,pos;
    long num[N],x;
    n=ReadScore(score,num);
    printf("Total students are %d\n" ,n);
    printf("Input the searching ID:");
    scanf("%ld",&x);
    pos=BinSearch(x,num,n);
    if(pos!=-1) printf("score=%d\n",score[pos]);
    else printf("Not found!\n");
    return 0;
}
int ReadScore(int score[],long num[])
{
    int i=-1;
    do{
        i++;
        printf("Input student's ID and score:");
        scanf("%ld%d",&num[i],&score[i]);
    }while(num[i]>0&&score[i]>=0);
    return i;
}
int BinSearch(long x,long num[],int n)
{
    int i,low=0,mid,high=n-1;
    do{
        mid=(low+high)/2;
        if(x==num[mid])
        return mid;
        else if(x>num[mid])
        low=mid+1;
        else if(x<num[mid])
        high=mid-1;
    }while(low<=high);
    return -1;
}

向函数传递二维数组

某班期末考试科目为数学(MT)、英语(EN)、和物理(PH),有最多不超过40人参加考试。请编程计算:
(1)每个学生的总分和平均分
(2)每门课程的总分和平均分
代码有误,我真的改不来

#include <stdio.h>
#define STUD_N 40
#define COURSE_N 3
void ReadScore(int score[][COURSE_N],long num[],int n);
void AverforStud(int score[][COURSE_N],int sum[],float aver[],int n);/*定义数组被函数接收,再去写入值,函数不直接返回数组*/
void AverforCourse(int score[][COURSE_N],int sum[],float aver,int n);
void Print(int score[][COURSE_N],long num[],int sumS[],float averS[],int sumC[],float averC[],int n);
int main()
{
    int score[STUD_N][COURSE_N],sumS[STUD_N],sumC[COURSE_N],n;
    long num[STUD_N];
    float averS[STUD_N],averC[COURSE_N];
    printf("Input the total number of the students (n<=40):");
    scanf("%d",&n);
    ReadScore(score,num,n);
    AverforStud(score,sumS,averS,n);
    AverforCourse(score,sumC,averC,n);
    Print(score,num,sumS,averS,sumC,averC,n);
    return 0;
}
void ReadScore(int score[][COURSE_N],long num[],int n)
{
    int i,j;
    printf("Input student's ID and score as:MT EN PH:\n");
    for(i=0;i<n;i++)
    {
        scanf("%ld",&num[i]);
        for(j=0;j<COURSE_N;j++)
        {
            scanf("%d",&score[i][j]);
        }
    }
}
AverforStud(int score[][COURSE_N],int sum[],float aver[],int n)
{
    int i,j;
    for(i=0;i<n;i++)
    {
        sum[i]=0;
        for(j=0;j<COURSE_N;j++)
        {
            sum[i]+=score[i][j];
        }
        aver[i]=(float)sum[i]/COURSE_N;
    }
}
AverforCourse(int score[][COURSE_N],int sum[],float aver[],int n)
{
   int i,j;
    for(j=0;j<COURSE_N;j++)
    {
        sum[j]=0;
        for(i=0;i<n;i++)
        {
            sum[j]+=score[i][j];
        }
        aver[j]=(float)sum[j]/n;
    } 
}
void Print(int score[][COURSE_N],long num[],int sumS[],float averS[],int sumC[]float averC[],int n)
{
    int i,j;
    printf("Student's ID\t MT\t EN\t PH\t SUM\t AVER\n");
    for(i=0;i<n;i++)
    {
        printf("%12ld\t",num[i]);
        for(j=0;j<COURSE_N;j++)
        {
            printf("%4d\t",score[i][j]");
        }
        printf("%4d\t%5.1f\n",sumS[i],averS[i]);
    }
    printf("\nSumofCourse\t");
    for(j=0;j<COURSE_N;j++)
    {
        printf("%4d\t",sumC[j]);
    }
    printf("\nAverofCourse\t");
    {
        for(j=0;j<COURSE_N;j++)
        {
            printf("%4.1f\t",averC[j]);
        }
    }
    printf("\n");
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值