深技大c++实验2-指针1

这篇博客详细介绍了深技大C++实验中关于指针的五个练习,包括货币兑换、成绩查询、动态数组、数组循环右移和报数问题。通过常量指针、指针运算和指针与数组的结合,展示了C++中指针的多种用法。
摘要由CSDN通过智能技术生成

前言

我打算在这个学期写一下我的SZTU c++实验的代码,以供参考,也是方便自己复习的时候知道自己当时的想法,非常欢迎各位大佬提出宝贵的意见。
尽量能做到每次都更新吧,怎么这么早就立flag。

这次实验是指针第一部分,考察了常量指针,指针运算,指针与数组的相关操作。

A. 货币兑换(指针与常量)

题目描述

设定以下汇率常量:

  • 美元汇率为6.2619,表示1美元兑换6.2619元人民币
  • 欧元汇率为6.6744,表示1欧元兑换6.6744元人民币
  • 日元汇率为0.0516,表示1元日元兑换0.0516元人民币
  • 港币汇率为0.9200,表示1元港币兑换0.92元人民币

定义一个常量指针,根据需求指针指向不同的汇率,然后计算出各种货币兑换为人民币的数量。要求:不能直接使用汇率常量进行计算,必须使用常量指针,只能使用一个指针。

输入

输入一个t表示有t个测试实例。

每行先输入一个字母,表示货币类型,然后再输入一个数字(正浮点数),表示货币数量。

  • D表示美元
  • E表示欧元
  • Y表示日元
  • H表示港币

依次输入t行。

输出

每行输出兑换后的人民币数量,保留4位小数。

样例

在这里插入图片描述

题解

在c++中,我们没法像c语言中的 printf 那样控制浮点数位数,只能使用 fixed << setprecision(n) 来控制输出小数点后n位数, 需要加上 iomanip 这个头文件。

这里你们可以选择 #include <bits/stdc++.h>, 也就是竞赛选手常用的万能头,关于万能头的利弊我就不在这里赘述了,大家可以自行搜索。

这道题没什么可讲的,就是使用了常量指针来进行计算,代码如下:

#include <iostream>
#include <iomanip>

using namespace std;

int main()
{
   
    int t;
    cin >> t;

    double d = 6.2619, e = 6.6744, y = 0.0516, h = 0.9200;

    while (t--)
    {
   
        char type;
        double n;
        cin >> type >> n;

        const double *RATE = nullptr; // 初始化为空

        if (type == 'D')
        {
   
            RATE = &d;
        }
        else if (type == 'E')
        {
   
            RATE = &e;
        }
        else if (type == 'Y')
        {
   
            RATE = &y;
        }
        else
        {
   
            RATE = &h;
        }

        cout << fixed << setprecision(4) << *RATE * n << endl;
    }

    return 0;
}

提一嘴,如果你使用 c++20 的话,你可以使用 std::format 来进行格式控制,需要加上 format 这个头文件,输出的那一行就能改写成 cout << format("{:.4f}\n", *rate * n);,我认为会更加清晰。

B. 成绩查询(指针运算)

题目描述

已知一组学生成绩,然后根据输入的序号查询成绩。

要求:

  1. 使用一个整数数组存储学生成绩。
  2. 使用一个指针指向数组中间元素。
  3. 使用++--运算符,求出数组中间元素的前一个成绩和后一个成绩。
  4. 输入一个序号,然后计算这个序号的元素和中间元素的距离,然后使用指针去访问。例如,有11个学生,指针指向中间的学生也就是第6个学生,若输入序号3,即查询第3个学生的成绩,第3和第6之间距离为3,那么指针应该怎么运算?
  5. 整个程序除了输入时可以使用数组下标,其他部分尽量使用指针进行访问。

输入

  • 第一行输入t表示有t个测试实例。
  • 第二行先输入n,表示有n个学生,然后再输入n个成绩(正整数)。
  • 第三行输入1个序号,表示要查询成绩的学生的序号。

依次输入t个实例。

按自然意义,序号是从1开始计算。

输出

对于每个测试实例:

  • 第一行输出数组中间元素的前一个成绩和后一个成绩。
  • 第二行根据序号输出1个成绩。

样例

在这里插入图片描述

题解

这题也是考察基本功的,用指针来代替数组下标,代码如下:

#include <iostream>

using namespace std;

int main()
{
   
    int t;
    cin >> t;

    while (t--)
    {
   
        int n;
        cin >> n;

        int *a = new int[n];
        int *p 
  • 15
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值