模块化思想:创建一个数组, 实现函数init()初始化数组、 实现empty()清空数组、 实现reverse()函数完成数组元素的逆置。 要求:自己设计函数的参数,返回值。

本文探讨了在编程中如何合理地使用函数调用,特别是通过传址方式修改实参的方法。文章详细解释了传值与传址的区别,通过具体实例展示了如何利用指针实现数组元素的逆序排列。

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

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">(一)思考思路</span>

1:一个复杂功能的程序,如果将所有的功能都写在主函数内,这样的程序的可读性太差,而且在理解的过程中很容易出现问题,所以将一些复杂功能,分块写入子函数,利用函数调用来实现模块功能是一个程序员必备的能力

2:函数调用:

   主函数调用子函数包括这几部分:

   1):子函数的类型(int  void等),依据函数功能来使用函数类型,比如说 调用一个数组,想对其数据进行逆置,那么我们不用返回值,那么就用void就好啦,当需要子函数给主函数返回值的时候 就用int

   2):调用的方式: 传址 ,传值

         一些功能性的子函数(比如 将x,y的数值对换,数组的逆置等等)利用传值办法是无法实现对实参的改变的,通俗的将 形参就是对实参的一份拷贝,我们对copy的数据进行任何加工,对于原数据是没有任何办法的!比如说 现在有一个空水缸1,找一个copy的空水缸2(大小  容积等等的要素一模一样),无论我们对水缸2进行什么操作,对于水缸1都是没有意义的

         于是我们引入指针这个概念,什么是指针,指针就是地址,我们通过指针找到实参,就可以对实参进行操作,通俗的将  在一个宾馆里,每一个房间都有一个标号(103,104等),前台通过这个标号通知里面的住户一系列的消息,指示用户做事情,这就是传址的用法

  3):子函数如果要被主函数使用,那么在主函数必须对子函数进行声明,并且在需要实现子函数功能的地方对子函数进行传递实参,如

        int main()

{

         void copy(int x,int y);     函数的声明

         ............................

         copy(a,b);                      传递实参

}

3:注意事项(见代码)

(二)代码实现

#include <stdio.h>
#include <string.h>
void initialize(int *x,int n)
{

	int i=0;
	for(i=0;i<n;i++)
		scanf("%d",x+i);
	for(i=0;i<n;i++)
		printf("%d ",*(x+i));
	printf("\n");
}
void reverse(int arr, int *x,int n)
{
	int i=0,sqm=(n-1)/2;
	int temp=0;
	int *l=NULL;    <span style="color:#ff0000;">//对于空指针,一般是将NULL赋予指针</span>
	l=x+n-1;
    for(i=0;i<=sqm;x++,l--,i++)
	{
		temp=*x;
		*x=*l;
		*l=temp;
	}
<pre name="code" class="cpp" style="font-size: 24px; font-weight: bold;">      <span style="color:#ff0000;">     //   千万注意,此处x指向的arr[5]的存储空间</span>
x=arr; for(i=0;i<n;i++)printf("%d ",*(x+i));printf("\n");}void empty(int *x,int n){ int i=0; for(i=0;i<n;i++) { *(x+i)=0; //千万不能写成*x;那么在后面的for循环中每次

<span style="color:#ff0000;">执行的都是将arr[0]=0</span>
	     printf("%d ",*(x+i));
	 }
	printf("\n");
}
int main()
{
	int n = 8, i = 0;
	int arr[8];
	int *p=NULL;
	p=arr;

	initialize(p,8);
	reverse(arr,p,8);
	empty(p,8);

    system("pause");
	return 0;
}




### 实现A*算法的Python教程 #### A*算法简介 A* (A-star) 是一种用于图遍历和路径寻找的强大算法。该算法通过启发式方法来估计从当前节点到目标节点的成本,从而有效地找到最短路径。 #### 初始化环境设 为了实现此算法,在开始之前需导入必要的库: ```python import heapq from collections import defaultdict ``` #### 定义辅助函数与类 定义一个`PriorityQueue` 类以便管理待处理节点队列;以及创建表示地图上位的 `Node` 类[^1]。 ```python class PriorityQueue: def __init__(self): self.elements = [] def empty(self): return len(self.elements) == 0 def put(self, item, priority): heapq.heappush(self.elements, (priority, item)) def get(self): return heapq.heappop(self.elements)[1] class Node: def __init__(self, position=None, parent=None): self.position = position self.parent = parent self.g = 0 self.h = 0 self.f = 0 def __eq__(self, other): return self.position == other.position ``` #### 编写核心逻辑 接下来编写实际执行搜索过程的方法。这包括计算两个点之间的曼哈顿距离作为启发式的估算成本函数,并最终完成整个A * 寻路功能[^2]。 ```python def heuristic(a, b): # Manhattan distance on a square grid (x1, y1) = a (x2, y2) = b return abs(x1 - x2) + abs(y1 - y2) def astar_search(graph, start, goal): frontier = PriorityQueue() start_node = Node(start) goal_node = Node(goal) frontier.put(start_node, 0) came_from = {} cost_so_far = {} came_from[start] = None cost_so_far[start] = 0 while not frontier.empty(): current = frontier.get() if current == goal_node: break for next in graph.neighbors(current.position): new_cost = cost_so_far[current.position] + graph.cost(current.position, next) neighbor_node = Node(next, current) if next not in cost_so_far or new_cost < cost_so_far[next]: cost_so_far[next] = new_cost priority = new_cost + heuristic(goal, next) frontier.put(neighbor_node , priority ) came_from[next] = current path = [] node = goal_node while node != start_node : path.append(node.position) node = came_from[node.position] path.reverse() return path ``` 上述代码实现了完整的A*寻径流程,其中包含了优先级队列管理和路径重建等功能模块。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值