C&C++数组实训(国防科大)

本文介绍了C&C++编程中关于数组的实战练习,包括销售波动统计、最大销售增幅计算、猴子选大王算法、犯二程度评估和队列变换等。通过这些关卡,读者可以深入理解数组的使用,包括数组的声明、访问、初始化、遍历以及在函数中的传递。每个关卡都提供了具体的编程任务和测试用例,旨在提升编程技能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第1关:销售波动统计

100

  • 任务要求
  • 参考答案
  • 评论472

任务描述

本关任务:假定有一组数据记录着卖场每天(不超过30天)的销售额(假设都是整数),要求你统计并输出销售的波动情况,即计算每天相对于前一天的销售额的增减情况(即后项减前项的差值)。

例如连续5天的销售额分别是:23 56 12 76 43,则销售波动情况的输出为:33 -44 64 -33

其中:33 = 56 - 23-44 = 12 - 56,以此类推。

相关知识

一段时间内每天销售额的记录需要由一组数据来完成,其中,数据的个数可能为0到30中的任何一个数,尽管我们可以用30个变量来存储它们,但这显然很不方便。

使用数组则不仅简单直观,而且逻辑清晰。本关我们就一起来学习数组的运用。

一维数组

声明一维数组的一般形式为:

 
  1. <元素类型> <数组名>[<元素个数>];
  • <元素类型>指明了数组元素的类型,可以是整型、实型、布尔型和字符型等简单数据类型,也可以是用户定义的复合数据类型,包括数组类型;

  • <数组名>由标识符充当,是整个数组的名字;<数组名>后面的方括号是必须的,C 和 C++ 把[]作为运算符处理,其优先级与括号相同,左结合;

  • 方括号中的<元素个数>是整常量表达式,可以省略,表示数组元素的个数,注意数组元素的下标是从零开始计数的。

例如:

 
  1. int a[10];

上述声明了一个数组名为 a 的整型数组,它有10个整型元素,下标的变化范围是0~9。

数组元素的访问

给定一个数组,我们可以采用以下形式访问数组里的元素:

 
  1. <数组名>[<下标表达式>]
  • <下标表达式>是值为整型的表达式,它指明了拟访问的数组元素的下标。

例如,数组 a 的10个元素可以依次表示为:a[0] ,a[1] ,a[2] ,…… ,a[9]。

注意:如果访问数组元素时使用的下标超出了元素的数目,会导致访问越界错误。C 和 C++ 不检查访问越界,如果发生了访问越界,有可能导致程序在运行时发生错误。

数组的各元素按顺序存储在一片连续的内存单元中。数组int a[10]的内存分配见下图所示:

 

数组的初始化

数组初始化的方法是把初始值按顺序放在花括号中,数值之间用逗号分开。

例如:

 
  1. int a[10]={4};
  2. float r[20]={0.1, 5.1};
  3. double d[3]={10.0,5.0,1.0};

需要注意以下两点:

  1. 如果初始值的数目小于数组元素的数目,数组剩余的元素被自动初始化为 0。

例如:

 
  1. int n[5]={0}; //将数组 n 的所有数组元素都初始化为 0

注意:初始值的数目不能超过数组中元素的数目。

  1. 声明数组时可以省略数组元素的数目,这时系统会根据初始值的数目来确定数组元素的数目。

例如:

 
  1. int x[]={ 1, 2, 3, 4, 5 };

实际上声明了一个包含了5个整型元素的数组 x :x[0] …… x[4] ,其值分别被初始化为 1 ,…… ,5。

这里再强调一下:我们不能直接操作某个数组,只能对数组中的某一个元素进行操作。也就是说,数组需要“拆开来用”,每次只能操作一个数组元素,操作数组元素的方法和操作普通变量的方法相同,“拆开数组”的方法就是数组名加下标访问数组元素的方式。

例如:

 
  1. a[7]= 4; // 给数组元素 a[7] 赋值
  2. x = 2 * a[i+2]; // 数组元素作表达式的运算量

数组的遍历

对于数组而言,最常见的用法是使用循环语句来操作数组,对数组元素进行遍历和处理。

例如下面的程序对数组 n 中的元素求和:

 
  1. int n[10] = {12,34,55,71,1,65,423,19,540,10}; // 声明数组n并初始化
  2. int i, sum = 0; // 定义循环变量和累加和变量
  3. // 循环遍历数组并求和
  4. for (i = 0; i <= 10-1; i++)
  5. {
  6. sum += n[i];
  7. }
  8. cout << "The summary is: " << sum << endl; // 输出求和结果

编程要求

在右侧编辑器中的Begin-End之间补充代码,程序给出计算几天的销售额分并给出这些天的额分(数据由平台提供,已获取,直接使用即可),统计并输出销售的波动情况,即计算每天相对于前一天的销售额的增减情况(即后项减前项的差值)。

温馨提示:这里要求输出的每个数字之间用一个空格隔开,最后一个数字后面没有空格。

测试说明

平台会对你编写的代码进行测试,比对你输出的数值与实际正确数值,只有所有数据全部计算正确才能通过测试:

测试输入:8 34 56 234 87 43 98 109 234(第一个数据表示有 8 天的销售额分,剩下的数据为具体额分) 预期输出:22 178 -147 -44 55 11 125

测试输入:4 0 89 190 289 预期输出:89 101 99


开始你的任务吧,祝你成功!

#include <stdio.h>
#include <iostream>
using namespace std;

int main()
{
    int n, a[30], i;     // 定义变量及数组,n-销售额个数,a-销售额
    cin >> n;     // 输入销售额数量,n <= 30
    // 输入n个销售额,分别存入a[0]到a[n-1]
    for(i = 0; i < n; i++)
        cin >> a[i];
    // 请在此添加代码,计算并输出销售额的波动情况
    /********** Begin *********/
	for(i=0;i<n;i++){
        int sum;
        sum=a[i+1]-a[i];
        if(i+1!=n){
        printf("%d ",sum);
        }
    }
    /********** End **********/
    return 0;
}

第2关:最大销售增幅

200

  • 任务要求
  • 参考答案
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值