5-4 输出学生成绩 (20分)

作者:czp 分类: PAT 发布于:2015-9-22 20:56 ė6094次浏览 614条评论

本题要求编写程序,根据输入学生的成绩,统计并输出学生的平均成绩、最高成绩和最低成绩。建议使用动态内存分配来实现。

输入格式:

输入第一行首先给出一个正整数N,表示学生的个数。接下来一行给出N个学生的成绩,数字间以空格分隔。

输出格式:

按照以下格式输出:

average = 平均成绩
max = 最高成绩
min = 最低成绩 

结果均保留两位小数。

输入样例:

3
85 90 95 

输出样例:

average = 90.00
max = 95.00
min = 85.00


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

int main()
{
    int n,i;
    double max=0,min=100,sum=0,now;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        scanf("%lf",&now);
        if(now>max) max=now;
        if(now<min) min=now;
        sum=sum+now;
    }
    printf("average = %.2lf\n",sum/n);
    printf("max = %.2lf\n",max);
    printf("min = %.2lf",min);

    return 0;
}  //为何要用malloc,偏不用

本文出自 czp的装逼站,转载时请注明出处及相应链接。

0

评论

  1. 中毒 Google Chrome 52.0.2743.116 Windows 10 2017-12-14 00:02 回复

    这样
    #include<stdio.h>
    #include<stdlib.h>
    int main ()
    {
        int n,i,*p;
        double max=0,min=999,average=0;
        scanf("%d",&n);
        if((p=(int*)calloc(n,sizeof(int)))==NULL){
        exit(1);
        }
        for(i=0;i<n;i++)
            scanf("%d",p+i);
            for(i=0;i<n;i++)
                average=average+*(p+i);
                    for(i=0;i<n;i++)
            {
        
            if(*(p+i)>max)
                max=*(p+i);
            }
            for(i=0;i<n;i++){    
        
            if(*(p+i)<min)
                min=*(p+i);    
                }
            
                free(p);
            printf("average = %0.2f\n",average/n);
            printf("max = %0.2f\n",max);
            printf("min = %0.2f\n",min);    
    }

  2. 好厉害 Google Chrome 53.0.2785.146 Android 2016-12-28 09:46 回复

    前面一大堆有什么用啊

    1. czp Google Chrome 55.0.2883.87 Linux 2016-12-28 09:48 回复

      @好厉害:没什么用

  3. 肖雯文 Google Chrome 21.0.1180.89 Windows 7 2016-06-06 16:28 回复

    而且我觉得你的答案好像基本都是先定义最大和最小,我看了一下前面的某一个题目

    1. czp Google Chrome 51.0.2704.79 Linux 2016-06-06 16:31 回复

      @肖雯文:以前年轻的时候写c语言的坏毛病,jb公司帮我改掉了这些陋习。

      1. 肖雯文 Google Chrome 21.0.1180.89 Windows 7 2016-06-06 16:37 回复

        @czp:那你现在是不这样定义了吗,那那种方法更好,表示快期末了。。。求大神教

      2. czp Google Chrome 51.0.2704.79 Linux 2016-06-06 16:44 回复

        @肖雯文:其实这种题目里最大最小一定会被定义,出现整个程序走完,因为最大最小问题而bug的情况基本没有。

  4. 肖雯文 Google Chrome 21.0.1180.89 Windows 7 2016-06-06 16:23 回复

    #include <stdio.h>
    int main()
    {
        int n,i;
        double max=0,min=100,sum=0,now;
        scanf("%d",&n);
        for(i=1;i<=n;i++)
        {
            scanf("%lf",&now);
            if(now>max) max=now;
            if(now<min) min=now;
            sum=sum+now;
        }
        printf("average = %.2lf\n",sum/n);
        printf("max = %.2lf\n",max);
        printf("min = %.2lf\n",min);

        return 0;
    }
    这样也可以,为什么前面要那么多啊

    1. czp Google Chrome 51.0.2704.79 Linux 2016-06-06 16:24 回复

      @肖雯文:以前写代码用codeblocks,没有import自动管理。

      1. 吴晓江 Google Chrome 45.0.2454.101 Windows 7 2016-10-12 23:27 回复

        @czp:实现两个函数,一个将输入的学生成绩组织成单向链表;另一个将成绩低于某分数线的学生结点从链表中删除。
        函数接口定义:
        struct stud_node *createlist();
        struct stud_node *deletelist( struct stud_node *head, int min_score );
        函数createlist利用scanf从输入中获取学生的信息,将其组织成单向链表,并返回链表头指针。链表节点结构定义如下:

        struct stud_node {
            int              num;      /*学号*/
            char             name[20]; /*姓名*/
            int              score;    /*成绩*/
            struct stud_node *next;    /*指向下个结点的指针*/
        };
        输入为若干个学生的信息(学号、姓名、成绩),当输入学号为0时结束。
        函数deletelist从以head为头指针的链表中删除成绩低于min_score的学生,并返回结果链表的头指针。   你可以帮我看一下吗

  5. 肖雯文 Google Chrome 21.0.1180.89 Windows 7 2016-06-06 16:19 回复

    题目要求用动态内存分配来实现

    1. czp Google Chrome 51.0.2704.79 Linux 2016-06-06 16:22 回复

      @肖雯文:我这是作弊#(滑稽)

      1. 肖雯文 Google Chrome 21.0.1180.89 Windows 7 2016-06-06 16:24 回复

        @czp:....服

    2. 薛福亮 Firefox 57.0 Windows 7 2017-12-27 15:28 回复

      @肖雯文:小姐姐 什么是动态内存分配你现在肯定知道了吧  能不能给少做指点

发表评论

电子邮件地址不会被公开。必填项已用*标注


Ɣ回顶部