关于#c语言#的问题:要求输人这 10个学生的成绩

#include <stdio.h>
int main ()
{
float score [10],sum=0,max=0;
int i=0, i max;

for (i;i<10;i++);

{scanf ("%f", ascore[i]) if (score [i]>max) ,max=score [i];i max=i;
}
printf ("6.2f\n, %d\n",max,i max);
return 0;

}

for 循环后面的 分号 去掉,还有其他问题修改如下:

img

#include <stdio.h>

int main ()
{
    float score[10],sum=0,max=0;
    int i, i_max;

    for (i=0;i<10;i++)
    {
        scanf("%f", &score[i]);
        if (score[i] > max) {
            max=score[i];
            i_max = i;
        }
        sum+=score[i];
    }
    printf("sum=%.2f , max = %.2f, index=%d\n", sum, max, i_max);
    return 0;
}
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7624845
  • 这篇博客也不错, 你可以看下C语言学习笔记 结构体和结构体指针成员访问的操作符
  • 除此之外, 这篇博客: 数据结构之C语言实现栈与循环队列中的 栈的实现 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 从数据结构的角度看,栈是一种抽象数据类型,具有先进后出(FILO, First In Last Out)的特点,添加元素和删除元素的操作只能在【栈顶】进行
    在这里插入图片描述

    定义结构体

    typedef struct myStack
    {
        int *data;
        int topIndex;  // 指向栈顶元素的指针
        int maxSize;   // 栈容量
    } myStack;
    

    初始化栈【参数使用引用,这是c++语法】

    栈顶指针初始化为-1

    void initStack(myStack &stk, int maxSize)
    {
        int *s = (int *)malloc(maxSize * sizeof(int)); // 分配空间
        stk.data = s;
        stk.topIndex = -1;
        stk.maxSize = maxSize;
    }
    

    判断栈是否为空

    bool empty(myStack stk)
    {
        return stk.topIndex == -1;
    }
    

    入栈操作

    包含2个操作:

    1. 判断栈是否已满
    2. 将元素放入栈内
    3. 栈顶指针+1
    bool push(myStack &stk, int e)
    {
        if (stk.topIndex == stk.maxSize - 1)
            return false; // 栈满,返回入栈失败
        stk.data[++stk.topIndex] = e;
        return true;
    }
    
    

    出栈操作

    bool pop(myStack &stk)
    {
        if (empty(stk))
            return false; // 栈空,返回出栈失败
        --stk.topIndex;
        return true;
    }
    
    

    返回栈顶元素

    int top(myStack stk)
    {
        return stk.data[stk.topIndex];
    }
    
    

    完整代码及测试

    #include <cstdio>
    #include <memory>
    
    typedef struct myStack
    {
        int *data;
        int topIndex;  // 指向栈顶元素的指针
        int maxSize;   // 栈容量
    } myStack;
    
    void initStack(myStack &stk, int maxSize)
    {
        int *s = (int *)malloc(maxSize * sizeof(int)); // 分配空间
        stk.data = s;
        stk.topIndex = -1;
        stk.maxSize = maxSize;
    }
    
    bool empty(myStack stk)
    {
        return stk.topIndex == -1;
    }
    
    bool push(myStack &stk, int e)
    {
        if (stk.topIndex == stk.maxSize - 1)
            return false; // 栈满,返回入栈失败
        stk.data[++stk.topIndex] = e;
        return true;
    }
    
    bool pop(myStack &stk)
    {
        if (empty(stk))
            return false; // 栈空,返回出栈失败
        --stk.topIndex;
        return true;
    }
    
    int top(myStack stk)
    {
        return stk.data[stk.topIndex];
    }
    
    int getStackSize(myStack stk)
    {
        return stk.topIndex + 1;
    }
    
    int main()
    {
        myStack stk;
        initStack(stk, 100);
        for (int i = 1; i <= 10; i += 1)
        {
            push(stk, i * i);
        }
        while (!empty(stk))
        {
            printf("%d\t", top(stk));
            pop(stk);
        }
    }
    
    

    image-20221027235723909

  • 您还可以看一下 尹成老师的C语言系列之 数组与算法实战课程中的 10.二维数组分析小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    问题解答:

    使用C语言编写一个程序,让用户输入10名学生的成绩并求出总分和平均分,代码如下:

    #include <stdio.h>
    
    int main() {
        int n = 10;
        int scores[n];
        int sum = 0;
        for (int i = 0; i < n; i++) {
            printf("请输入第%d名学生的成绩:", i + 1);
            scanf("%d", &scores[i]);
            sum += scores[i];
        }
        double average = (double) sum / n;
        printf("总分为:%d,平均分为:%.2f\n", sum, average);
        return 0;
    }
    

    该程序通过定义一个长度为10的整型数组scores存储学生的成绩,使用for循环让用户输入每个学生的成绩,并求出总分和平均分。其中,scanf函数用于从控制台输入数据,sum用于存储总分,average用于存储平均分,计算平均分时需要将sum强制转换为double类型,然后除以n的值。

    若用户希望增加学生的数量,只需将变量n的值改为相应的数量即可,程序的可扩展性较好。

    回到参考资料中的内容,段落0讲解的是判断一个整数是否是回文数的问题,与本问题无关,可以忽略。段落1和段落2讲解的是C语言中关于冒泡排序和字符数组初始化的问题,与本问题无关,不需要参考。