练习7—数组求值

简介: 练习7—数组求值

题目

编写程序,实现如下功能:一个学习小组有5个人,每个人有Math,C,Database三门课的考试成绩,求该组各科成绩的平均分及所有成绩的平均分并输出到屏幕。

解题步骤

(1)给出结构体

(2)分析变量;

(3)计算总 / 各科成绩平均分;

(4)输出结果;

Java

import java.util.Scanner;
public class Demo {
    static class Student {
        private float Math;
        private float C;
        private float Database;
        private float Sum = 0;
        public void SetValue(float Math, float C, float Database) {
            this.Math = Math;
            this.C = C;
            this.Database = Database;
            Sum = Math + C + Database;
        }
        public float GetMath() {
            return Math;
        }
        public float GetC() {
            return C;
        }
        public float GetDataBase() {
            return Database;
        }
        public float GetSum() {
            return Sum;
        }
    }
    public static void main(String[] args) {
        float Math = 0, C = 0, Database = 0, Total = 0, MathSum = 0, CSum = 0, DatabaseSum = 0;
        Student[] student = new Student[5];
        Scanner user = new Scanner(System.in);
        for (int i = 0; i < 5; i++)
        {
            System.out.format("Please enter the math score of the %d student:", i + 1);
            Math = user.nextFloat();
            System.out.format("Please enter the C language score of the %d student::", i + 1);
            C = user.nextFloat();
            System.out.format("Please enter the database score of the %d student::", i + 1);
            Database = user.nextFloat();
            student[i] = new Student(); 
            student[i].SetValue(Math, C, Database);
        }
        for (int i = 0; i < 5; i++) {
            MathSum += student[i].GetMath();
            CSum += student[i].GetC();
            DatabaseSum += student[i].GetDataBase();
            Total += student[i].GetSum();
        }
        System.out.format("MathAverage=%f     CAverage=%f     DatabaseAverage=%f", MathSum / 5.0, CSum / 5.0, DatabaseSum / 5.0);
        System.out.format("\nTotalScoreAverage=%.3f", Total / 5.0);
    }
}

说明

  1. Java是一种高级语言,它舍弃了C/C++中容易出错的指针、一些莫须有的语言结构(其中就包含结构体),所以这道题如果我们用Java语言解决,就需要用到类和对象。
  2. 我们在类中包含其属性和方法,不太容易想到的是三门科目的成绩从键盘接收并且需要循环五次的操作:使用对象数组Student[] student = new Student[5];并对其进行实例化实现动态接收数据。
  3. 在类和对象中,只要有需求,我们就添加方法解决问题。例如本题中设置返回三个科目成绩的方法实现单科成绩平均分、总成绩平均分求算。
  4. 对象数组需要进行实例化student[i] = new Student();,否则报错:空指针错误!!!

C语言

#include <stdio.h>
struct Student
{
    float Math;
    float C;
    float Database;
} student[5];
int main()
{
    float Math, C, Database, Sum;
    for (int i = 0; i < 5; i++)
    {
        printf("please enter the three door subject grades of the first %d name classmate:", i + 1);
        scanf("%f%f%f", &student[i].Math, &student[i].C, &student[i].Database); //注意 &
        Sum += student[i].Math + student[i].C + student[i].Database;
        Math += student[i].Math;
        C += student[i].C;
        Database += student[i].Database;
    }
    printf("MathAverage=%f     CAverage=%f     DatabaseAverage=%f", Math / 5.0, C / 5.0, Database / 5.0);
    printf("\nTotalAverage=%f", Sum / 5.0);
    return 0;
}

说明

  1. 关键点在于如何将不同科目的成绩和同学进行区分。这里我们采用结构体数组的方式解决:有5个元素的结构体数组student[5]包含MathCDatabase三个变量对应不同科目成绩。考虑到这点,题目就变得非常简单,只要接收输入值,计算方可。
  2. 计算中,要考虑周全,成绩有可能是float类型。而计算平均值时用到的/号,结果为整型,所以我们做除法的时候,除数应该是5.0而不是5

异同点:

下面这道题目和本题类似,需要注意的点是使用scanf()时,若结构体中包含数组,就需要关注&是否需要存在。对比源码,进一步加深理解。

#include <stdio.h>
struct student
{
    int num; 
    char name[20];
    float score[3];
};
void main()
{
    struct student s[3]; //struct student 等价于int,实质:编写了一个数据类型
    int i, j;
    float sum, avg[3];
    for (i = 0; i < 3; i++)
    {
        sum = 0;
        printf("请输入学号:\n");
        scanf("%d", &s[i].num); // num 为int类型,是普通变量,不代表地址
        printf("请输入姓名:\n");
        scanf("%s", s[i].name); // 不需要  &s.name  因为数组名name代表首地址
        printf("请输入三门科目成绩:\n");
        for (j = 0; j < 3; j++) 
        {
            scanf("%f", &s[i].score[j]);
            sum = sum + s[i].score[j];
        }
        avg[i] = sum / 3.0;
    }
    printf("输出信息:\n");
    for (i = 0; i < 3; i++)
        printf("学号:%d,姓名:%s,平均分:%.2f\n", s[i].num, s[i].name, avg[i]);
}

文章知识点与官方知识档案匹配,可进一步学习相关知识

算法技能树leetcode-数组59-螺旋矩阵 II7557 人正在系统学习中



相关文章
|
弹性计算 开发工具 git
GitLab的安装及使用教程
GitLab是利用Ruby on Rails一个开源的版本管理系统,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目,与Github类似。本篇教程将教你如何安装部署及使用GitLab。
131272 1
|
JSON 网络协议 安全
阿里云公共DNS安全传输服务介绍(DoH/DoT)
传统的DNS查询和应答采用大都采用UDP明文传输,存在网络监听、DNS劫持、中间设备干扰的风险。为了应对以上挑战,阿里公共DNS对外提供支持DoH/DoT的云服务,为广大的互联网用户提供快速、稳定和安全的DNS解析,欢迎大家使用!
阿里云公共DNS安全传输服务介绍(DoH/DoT)
|
7月前
|
XML 存储 Java
Vim操作指令全解析
Vim是Linux环境中高效文本编辑的强大工具,支持多种模式(普通、插入、可视、命令行)以实现灵活操作。本文全面解析Vim的基础移动、编辑指令,搜索替换功能,窗口分屏技巧,寄存器与宏使用,以及高级文本对象操作和批量处理方法。同时,提供实用配置建议和插件推荐(如NERDTree、vim-airline),帮助用户提升效率。学习资源包括内置教程`vimtutor`及官方文档,助您从新手成长为Vim高手。
430 7
|
5月前
|
传感器 机器人 开发者
ROS服务(Service)通信中的模型与实际应用: 初识Hello World并予以扩展
总而言之,ROS服务提供的是一种可靠而灵活的通信方式。每一次服务的请求和应答都会阻塞,直至应答完成。这意味着在调用服务之后,你可以确保你的请求被正确处理。这也是它在机器人系统中如此重要的原因,因为在许多情况下,我们需要获取实时、准确的结果,例如控制机器人执行精确的运动。
256 1
|
自然语言处理 算法 Python
自然语言处理(NLP)在文本分析中的应用:从「被动收集」到「主动分析」
【10月更文挑战第9天】自然语言处理(NLP)在文本分析中的应用:从「被动收集」到「主动分析」
331 4
|
11月前
|
人工智能 分布式计算 数据处理
MaxCompute Data + AI:构建 Data + AI 的一体化数智融合
本次分享将分为四个部分讲解:第一部分探讨AI时代数据开发范式的演变,特别是MaxCompute自研大数据平台在客户工作负载和任务类型变化下的影响。第二部分介绍MaxCompute在资源大数据平台上构建的Data + AI核心能力,提供一站式开发体验和流程。第三部分展示MaxCompute Data + AI的一站式开发体验,涵盖多模态数据管理、交互式开发环境及模型训练与部署。第四部分分享成功落地的客户案例及其收益,包括互联网公司和大模型训练客户的实践,展示了MaxFrame带来的显著性能提升和开发效率改进。
|
传感器 芯片
如何在 Arduino 中使用多个 PWM 引脚
在Arduino中使用多个PWM引脚可以实现对多个设备的精确控制。通过设置不同引脚的PWM值,可以调节电机速度、LED亮度等。本文将介绍如何配置和使用多个PWM引脚,实现多任务控制。
|
容灾
《应用多活技术白皮书》电子版地址
目的是帮助企业解决多活容灾的落地第一步问题。希望通过应用多活技术,可以帮助您的系统稳定性更上一层楼!
293 0
《应用多活技术白皮书》电子版地址
|
数据可视化 算法 BI
【中级ECharts技术】transform进行数据转换和dataZoom在项目中的使用(可视化非常的强劲)
【中级ECharts技术】transform进行数据转换和dataZoom在项目中的使用(可视化非常的强劲)
【中级ECharts技术】transform进行数据转换和dataZoom在项目中的使用(可视化非常的强劲)
|
JSON NoSQL Shell
buildah进阶
buildah进阶
556 0