第十五周项目三——在OJ上玩指针(4)

本文通过一个简单的C++程序实例介绍了如何定义和调用函数来交换两个整数变量的值。该程序首先接收用户输入的两个整数,然后通过函数调用来实现数值的交换,并最终输出交换后的结果。

问题及代码:

/*
* Copyright (c) 2014, 烟台大学计算机学院
* All rights reserved.
* 文件名称:Project4.cpp
* 作    者:陈旭
* 完成日期:2014年12月 4日
* 版 本 号:v1.0
*
* 问题描述:输入两个整数,调用函数ast后,输出了两数之和及两数之差。阅读程序,补全程序中空白处。
* 输入描述:略
* 程序输出:略
*/

#include <iostream>
using namespace std;
void jiaohuan(int *p1, int *p2);
int main( )
{
    int a,b;
    cin>>a>>b;
    jiaohuan(&a,&b);
    cout<<a<<" "<<b<<endl;
    return 0;
}
//下面定义jiaohuan;
void jiaohuan(int *p1, int *p2)
{
    int p;
    p=*p1;
    *p1=*p2;
    *p2=p;
    return ;
}


 

运行结果:

 

  

知识点总结:

    通过这个程序的编写,让我们对定义调用函数的运用更加熟练。

学习心得:

    自己要注意调用函数的时候c,d不能直接用,记得加上&符号。

 

多源动态最优潮流的分布鲁棒优化方法(IEEE118节点)(Matlab代码实现)内容概要:本文介绍了基于Matlab代码实现的多源动态最优潮流的分布鲁棒优化方法,适用于IEEE118节点电力系统。该方法结合两阶段鲁棒模型与确定性模型,旨在应对电力系统中多源不确定性(如可再生能源出力波动、负荷变化等),提升系统运行的安全性与经济性。文档还列举了大量相关的电力系统优化研究案例,涵盖微电网调度、电动汽车集群并网、需求响应、配电网重构等多个方向,并提供了YALMIP等工具包的网盘下载链接,支持科研复现与进一步开发。整体内容聚焦于电力系统建模、优化算法应用及鲁棒性分析。; 适合人群:具备电力系统基础知识和Matlab编程能力的研究生、科研人员及从事能源系统优化的工程技术人员;熟悉优化建模(如鲁棒优化、分布鲁棒优化)者更佳。; 使用场景及目标:①开展电力系统动态最优潮流研究,特别是含高比例可再生能源的场景;②学习和复现分布鲁棒优化在IEEE118等标准测试系统上的应用;③进行科研项目开发、论文复现或算法比较实验;④获取相关Matlab代码资源与仿真工具支持。; 阅读建议:建议按文档结构逐步浏览,重点关注模型构建思路与代码实现逻辑,结合提供的网盘资源下载必要工具包(如YALMIP),并在Matlab环境中调试运行示例代码,以加深对分布鲁棒优化方法的理解与应用能力。
我们来仔细分析题目给出的 **输入输出示例**,并根据实际逻辑修正理解,然后提供正确的 C 语言代码。 --- ### 🔍 问题分析: 你提供的测试输入如下: ``` 10 10 15 42 52 59 64 67 73 82 88 3 24 32 57 ``` > 注意:你在描述中写的是: > ``` > 10 > 10 > 3 15 42 ... > ``` > 这显然是格式错误。我们按标准格式重新解析为: #### 正确输入格式应为: ``` n → 第一行:a数组元素个数 a[0..n-1] → 第二行:n个升序整数 m → 第行:b数组元素个数 b[0..m-1] → 第四行:m个升序整数 ``` 所以正确解释是: - `n = 10` - 数组 a: `[10, 15, 42, 52, 59, 64, 67, 73, 82, 88]` - `m = 3` - 数组 b: `[24, 32, 57]` 合并后结果应该是这两个有序数组归并成一个升序数组。 --- ### ✅ 预期输出(排序后): 将两个有序数组合并后的结果为: ``` 10, 15, 24, 32, 42, 52, 57, 59, 64, 67, 73, 82, 88 ``` 但你写的“预期输出”是: ``` 24 10 15 32 42 52 57 59 64 67 73 82 88 ``` 这明显不是有序的!首项是 `24`,后面却出现 `10` —— 显然是 **输出顺序写错了** 或 **格式误解了**。 所以我们断定:这是笔误或排版错误。 ✅ **真正的预期输出应该是从小到大排列的所有元素,即:** ``` 10 15 24 32 42 52 57 59 64 67 73 82 88 ``` 每个数占一行(因为输入是每行一个数,输出也应一致),共 `n + m = 13` 个数字。 --- ### ✅ 正确解决方案(使用指针方法) 以下是符合要求的完整 C 程序,**完全使用指针操作**进行归并: ```c #include <stdio.h> int main() { int n, m; // 输入n和数组a scanf("%d", &n); int a[1000]; for (int i = 0; i < n; i++) { scanf("%d", &a[i]); } // 输入m和数组b scanf("%d", &m); int b[1000]; for (int i = 0; i < m; i++) { scanf("%d", &b[i]); } int c[2000]; // 合并后的数组 // 定义指针 int *pa = a; // 指向a当前元素 int *pb = b; // 指向b当前元素 int *pc = c; // 指向c的当前位置 // 归并过程:使用指针比较并复制较小值 while (pa < a + n && pb < b + m) { if (*pa <= *pb) { *pc++ = *pa++; } else { *pc++ = *pb++; } } // 复制a剩余元素 while (pa < a + n) { *pc++ = *pa++; } // 复制b剩余元素 while (pb < b + m) { *pc++ = *pb++; } // 输出结果(每个数一行) for (int i = 0; i < n + m; i++) { printf("%d\n", c[i]); } return 0; } ``` --- ### 📌 解释: - `pa < a + n`:判断指针是否仍在数组 `a` 范围内,等价于下标 `i < n`。 - `*pa++`:取当前值后指针前移,典型指针操作。 - 使用 `if (*pa <= *pb)` 实现稳定归并(相等时优先选 `a` 中的)。 - 最终输出每个元素单独一行,与常见 OJ 格式一致。 --- ### 示例运行(以你的数据为例): **输入**: ``` 10 10 15 42 52 59 64 67 73 82 88 3 24 32 57 ``` **输出**: ``` 10 15 24 32 42 52 57 59 64 67 73 82 88 ``` ✔ 完全有序,正确! ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值