C语言指针及其应用——成绩统计

任务描述
请设计一个函数,以指针变量作为函数的参数,从标准输入上读入数量不定的成绩。统计全班成绩的总数量、90 分及以上成绩的个数、60 分及以上成绩的个数和全班成绩的平均分,并返回这四个数给主程序。编写主程序调用此函数完成统计功能。
相关知识
参考《C程序设计基础题解与实训指南》。
编程要求
根据提示,在右侧编辑器的Begin-End区域内补充代码。
测试说明
输入:一行数据,是数量不定(至少 1 个)的非负整数,以空格分隔,表示班级同学的成绩。
输出:共输出 4 行数据:第一行为全班成绩的总数量;第二行为 90 分及以上成绩的个数;第三行为 60 分及以上成绩的个数;第四行为全班成绩的平均分(保留 2 位小数)。
例如,测试集 1 的输入是: 10 20 30 60 90 100 测试集 1 的运行结果为: 6 2 3 51.67

img


为什么我的运行结果是这样的啊😭😱

按题意这样写,供参考:

#include <stdio.h>
void data_stat(int* p_num, int* p_90, int* p_60, float* avg);
int main()
{
    int n = 0, a = 0, b = 0;
    float p = 0;
    data_stat(&n, &a, &b, &p);
    printf("%d %d %d %.2f\n", n, a, b, p);
    return 0;
}
void data_stat(int* p_num, int* p_90, int* p_60, float* avg)
{
    /*******************Begin******************/
    int num;
    *p_num = 0; *p_90 = 0; *p_60 = 0; *avg = 0;
    while (1) {
        scanf("%d", &num);
        (*p_num)++;
        (*avg) += num;
        if (num >= 90) (*p_90)++;
        if (num >= 60) (*p_60)++;
        if ((getchar()) == '\n')  break;
    }
    if(*p_num)
        *avg /= *p_num;
    /*******************End*******************/
}

看了半天终于看出来了,你那个scanf里是&d,应该是%d。如解决,请采纳,谢谢!

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7548598
  • 除此之外, 这篇博客: C语言实现八大排序算法详解及其性能之间的中的 这里和快排一样,老师依旧是直接打了100个星星,太重要啦。归并排序和快排很容易混淆,因为归并排序也用到了分治算法的思想。思路是,现在对一个数组进行排序,我们把数组分为两份,如果左边数组是有序的数组了,右边也是一个有序的数组了,那么我们把两个数组合并起来,整个数组就有序了,如果这两个数组不是有序呢?那我们继续分,分分分,直到小区间只剩下一个元素的时候,那么整个小区间就是有序的了。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 算法思想