稀奇古怪 | C/C++输出printf()函数的自增自减问题

本文探讨了C/C++中使用printf()函数时遇到的自增自减问题。通过实例代码展示,当printf()接收包含自增自减运算的参数时,由于参数传递的特性,导致实际输出与预期不符。作者指出,这种现象源于自增自减运算符在函数调用中参数传递的行为,即参数在传入函数前已完成运算。

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

文章目录


引入

先看这段程序:

#include<stdio.h>

int main(){
   
   
	int x=0;
	printf("%d %d %d",x,++x,x--
### C++ 实现最大连通区域问题 为了帮助农场主约翰计算卫星照片中最大的连续牧场面积,可以通过广度优先搜索(BFS)或深度优先搜索(DFS)来解决问题。以下是基于 DFS 的解决方案。 #### 解决方案描述 通过遍历整个矩阵,当遇到一个未访问过的牧场像素 `'*'` 时,启动 DFS 来标记该牧场的所有相连部分,并统计其面积大小。最终记录并返回所有牧场的最大面积[^1]。 #### 完整代码实现 以下是一个完整的 C++ 程序: ```cpp #include <iostream> #include <vector> using namespace std; // 辅助函数:执行深度优先搜索 void dfs(int x, int y, vector<string>& grid, vector<vector<bool>>& visited, int& area) { int rows = grid.size(); int cols = grid[0].size(); // 如果超出边界或者当前单元格不是牧场 ('*') 或已被访问,则退出 if (x < 0 || x >= rows || y < 0 || y >= cols || grid[x][y] != '*' || visited[x][y]) { return; } // 标记当前位置为已访问,并加面积计数器 visited[x][y] = true; area++; // 向四个方向扩展:上下左右 dfs(x + 1, y, grid, visited, area); // 下 dfs(x - 1, y, grid, visited, area); // 上 dfs(x, y + 1, grid, visited, area); // 右 dfs(x, y - 1, grid, visited, area); // 左 } int largestPastureArea(vector<string> grid) { int rows = grid.size(); if (rows == 0) return 0; int cols = grid[0].size(); // 创建访问数组 vector<vector<bool>> visited(rows, vector<bool>(cols, false)); int max_area = 0; // 遍历网格中的每一个位置 for (int i = 0; i < rows; ++i) { for (int j = 0; j < cols; ++j) { if (!visited[i][j] && grid[i][j] == '*') { // 找到一个新的牧场起点 int current_area = 0; dfs(i, j, grid, visited, current_area); max_area = max(max_area, current_area); // 更新最大牧场面积 } } } return max_area; } int main() { // 输入处理 int W, H; cin >> W >> H; vector<string> grid(H); for (int i = 0; i < H; ++i) { cin >> grid[i]; } // 计算最大牧场面积 cout << largestPastureArea(grid) << endl; return 0; } ``` #### 代码说明 1. **输入读取** 使用标准输入流获取矩阵的高度 `H` 宽度 `W`,随后逐行读入字符矩阵 `grid` 表示卫星图像。 2. **辅助数据结构** 构建了一个二维布尔型数组 `visited`,用于跟踪哪些节点已经被访问过,防止重复计算[^1]。 3. **核心逻辑——DFS 函数** 当找到新的牧场起始点时,调用递归的 DFS 方法探索所有的相邻牧场像素,并累加面积值。 4. **全局变量更新** 在每次完成对新牧场的探索后,比较当前牧场面积与之前记录的最大面积,保留较大的那个作为结果。 5. **输出结果** 将最终得到的最大牧场面积打印至控制台。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值