用c语言写一个找出矩阵中最大元素的代码
时间: 2023-11-22 21:54:15 浏览: 86
以下是使用 C 语言编写的查找矩阵中最大元素的代码:
```c
#include <stdio.h>
#define ROWS 3
#define COLS 4
int main() {
int matrix[ROWS][COLS] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
int max = matrix[0][0];
int i, j;
for (i = 0; i < ROWS; i++) {
for (j = 0; j < COLS; j++) {
if (matrix[i][j] > max) {
max = matrix[i][j];
}
}
}
printf("The maximum element in the matrix is %d\n", max);
return 0;
}
```
上述代码中,我们首先定义了一个 3 行 4 列的矩阵 `matrix`。然后,我们将矩阵中第一个元素作为最大值 `max` 的初始值。接着,我们使用两个 for 循环遍历整个矩阵,并比较每个元素是否大于当前的最大值。如果是,就将该元素的值赋给 `max`。最后,我们输出 `max` 即可。
请注意,此代码仅适用于矩阵中的所有元素均为整数的情况。
相关问题
用C语言写一个3*4的矩阵,并找出矩阵的最大值,行号和列号
Ok,我理解了你的问题。以下是答案:
首先,你需要使用 C 语言中的数组来创建一个 3 x 4 的矩阵,并初始化它的元素值。代码如下:
int matrix[3][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
接下来,你需要遍历这个矩阵,找到它的最大值,以及对应的行号和列号。代码如下:
int max = matrix[0][0];
int row = 0;
int col = 0;
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 4; j++) {
if(matrix[i][j] > max) {
max = matrix[i][j];
row = i;
col = j;
}
}
}
最后,你可以打印出最大值以及对应的行号和列号:
printf("The maximum value is %d, at row %d column %d.", max, row + 1, col + 1);
注意,由于 C 语言中数组的下标从 0 开始计数,所以在打印行号和列号时需要加 1。
已知一个5×5矩阵,用函数实现:(1)找出该矩阵中的鞍点,“鞍点”指的是一个位置,该位置上的元素在该行上最大,在该列上最小,也可能没有鞍点。(2)将矩阵中最大的元素放在中心,四个角分别放四个最小的元素。用C语言写
### 回答1:
以下是CSDN开发的C知道的回答:
1. 鞍点的实现代码如下:
```c
#include <stdio.h>
#define ROW 5
#define COL 5
int matrix[ROW][COL] = {
{1, 2, 3, 4, 5},
{6, 7, 8, 9, 10},
{11, 12, 13, 14, 15},
{16, 17, 18, 19, 20},
{21, 22, 23, 24, 25}
};
void findSaddlePoint(int matrix[ROW][COL])
{
int i, j, k, min, max, flag;
for (i = 0; i < ROW; i++) {
min = matrix[i][0];
flag = 1;
for (j = 1; j < COL; j++) {
if (matrix[i][j] < min) {
min = matrix[i][j];
k = j;
}
}
max = matrix[i][k];
for (j = 0; j < ROW; j++) {
if (matrix[j][k] > max) {
flag = 0;
break;
}
}
if (flag) {
printf("鞍点为(%d, %d),值为%d\n", i, k, max);
}
}
}
int main()
{
findSaddlePoint(matrix);
return 0;
}
```
2. 将矩阵中最大的元素放在中心,四个角分别放四个最小的元素的实现代码如下:
```c
#include <stdio.h>
#define ROW 5
#define COL 5
int matrix[ROW][COL] = {
{1, 2, 3, 4, 5},
{6, 7, 8, 9, 10},
{11, 12, 13, 14, 15},
{16, 17, 18, 19, 20},
{21, 22, 23, 24, 25}
};
void findMaxAndMin(int matrix[ROW][COL], int *max, int *min)
{
int i, j;
*max = matrix[0][0];
*min = matrix[0][0];
for (i = 0; i < ROW; i++) {
for (j = 0; j < COL; j++) {
if (matrix[i][j] > *max) {
*max = matrix[i][j];
}
if (matrix[i][j] < *min) {
*min = matrix[i][j];
}
}
}
}
void swap(int *a, int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
void sort(int arr[], int len)
{
int i, j;
for (i = 0; i < len - 1; i++) {
for (j = 0; j < len - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
swap(&arr[j], &arr[j + 1]);
}
}
}
}
void replace(int matrix[ROW][COL], int max, int min)
{
int i, j, x, y;
for (i = 0; i < ROW; i++) {
for (j = 0; j < COL; j++) {
if (matrix[i][j] == max) {
x = i;
y = j;
}
}
}
matrix[x][y] = matrix[ROW / 2][COL / 2];
matrix[ROW / 2][COL / 2] = max;
int arr[4] = {matrix[0][0], matrix[0][COL - 1], matrix[ROW - 1][0], matrix[ROW - 1][COL - 1]};
sort(arr, 4);
matrix[0][0] = arr[0];
matrix[0][COL - 1] = arr[1];
matrix[ROW - 1][0] = arr[2];
matrix[ROW - 1][COL - 1] = arr[3];
for (i = 0; i < ROW; i++) {
for (j = 0; j < COL; j++) {
printf("%d ", matrix[i][j]);
}
printf("\n");
}
}
int main()
{
int max, min;
findMaxAndMin(matrix, &max, &min);
replace(matrix, max, min);
return 0;
}
```
### 回答2:
1)找鞍点的函数实现如下:
```c
#include <stdio.h>
#include <stdbool.h>
#define ROWS 5
#define COLS 5
bool isSaddlePoint(int matrix[ROWS][COLS], int row, int col)
{
for (int i = 0; i < COLS; i++) {
if (matrix[row][i] > matrix[row][col]) {
return false;
}
}
for (int i = 0; i < ROWS; i++) {
if (matrix[i][col] < matrix[row][col]) {
return false;
}
}
return true;
}
void findSaddlePoints(int matrix[ROWS][COLS])
{
bool hasSaddlePoint = false;
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
if (isSaddlePoint(matrix, i, j)) {
printf("鞍点位置:(%d, %d),值:%d\n", i, j, matrix[i][j]);
hasSaddlePoint = true;
}
}
}
if (!hasSaddlePoint) {
printf("矩阵中没有鞍点。\n");
}
}
int main()
{
int matrix[ROWS][COLS] = {{5, 2, 3, 4, 1},
{6, 3, 2, 1, 5},
{4, 1, 6, 5, 3},
{3, 5, 4, 2, 6},
{2, 4, 5, 6, 1}};
findSaddlePoints(matrix);
return 0;
}
```
2)最大元素放中心、四个最小元素放角的函数实现如下:
```c
#include <stdio.h>
#define ROWS 5
#define COLS 5
void swap(int* a, int* b)
{
int temp = *a;
*a = *b;
*b = temp;
}
void findMinAndMax(int matrix[ROWS][COLS], int* min, int* max)
{
*min = matrix[0][0];
*max = matrix[0][0];
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
if (matrix[i][j] < *min) {
*min = matrix[i][j];
}
if (matrix[i][j] > *max) {
*max = matrix[i][j];
}
}
}
}
void rearrangeMatrix(int matrix[ROWS][COLS])
{
int min, max;
findMinAndMax(matrix, &min, &max);
// 寻找最大元素的位置
int maxRow, maxCol;
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
if (matrix[i][j] == max) {
maxRow = i;
maxCol = j;
}
}
}
// 将最大元素放在矩阵中心
swap(&matrix[maxRow][maxCol], &matrix[ROWS/2][COLS/2]);
// 寻找最小元素的位置
int minRow = 0, minCol = 0;
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
if (matrix[i][j] == min) {
minRow = i;
minCol = j;
break;
}
}
}
// 将四个最小元素放在角
if (minRow != 0) {
swap(&matrix[minRow][minCol], &matrix[0][0]);
}
if (minRow != 0 && minCol != COLS - 1) {
swap(&matrix[minRow][minCol], &matrix[0][COLS - 1]);
}
if (minRow != ROWS - 1 && minCol != COLS - 1) {
swap(&matrix[minRow][minCol], &matrix[ROWS - 1][COLS - 1]);
}
if (minRow != ROWS - 1 && minCol != 0) {
swap(&matrix[minRow][minCol], &matrix[ROWS - 1][0]);
}
}
int main()
{
int matrix[ROWS][COLS] = {{5, 2, 3, 4, 1},
{6, 3, 2, 1, 5},
{4, 1, 6, 5, 3},
{3, 5, 4, 2, 6},
{2, 4, 5, 6, 1}};
rearrangeMatrix(matrix);
printf("重新排列后的矩阵:\n");
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
printf("%d ", matrix[i][j]);
}
printf("\n");
}
return 0;
}
```
### 回答3:
首先,我们可以定义一个函数来找出矩阵中的鞍点。该函数接收矩阵作为参数,并返回一个包含鞍点位置的结构体。
```c
#include <stdio.h>
typedef struct {
int row;
int column;
} Position;
Position findSaddlePoint(int matrix[5][5]) {
Position saddlePoint;
saddlePoint.row = -1;
saddlePoint.column = -1;
for (int i = 0; i < 5; i++) {
int maxRow = matrix[i][0];
int colIndex = 0;
for (int j = 1; j < 5; j++) {
if (matrix[i][j] > maxRow) {
maxRow = matrix[i][j];
colIndex = j;
}
}
int minColumn = matrix[0][colIndex];
for (int k = 1; k < 5; k++) {
if (matrix[k][colIndex] < minColumn) {
minColumn = matrix[k][colIndex];
}
}
if (maxRow == minColumn) {
saddlePoint.row = i;
saddlePoint.column = colIndex;
break;
}
}
return saddlePoint;
}
int main() {
int matrix[5][5] = {
{3, 2, 1, 5, 4},
{4, 5, 6, 2, 1},
{1, 3, 2, 4, 5},
{6, 4, 3, 1, 2},
{2, 1, 4, 3, 6}
};
Position saddlePoint = findSaddlePoint(matrix);
if (saddlePoint.row == -1 && saddlePoint.column == -1) {
printf("矩阵中没有鞍点。\n");
} else {
printf("鞍点位置:第%d行,第%d列\n", saddlePoint.row + 1, saddlePoint.column + 1);
}
return 0;
}
```
接下来,我们可以定义一个函数来将矩阵中的最大元素放在中心,四个角分别放四个最小元素。
```c
#include <stdio.h>
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
void rearrangeMatrix(int matrix[5][5]) {
// 找出最大元素的位置
int maxRow = 0, maxColumn = 0;
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
if (matrix[i][j] > matrix[maxRow][maxColumn]) {
maxRow = i;
maxColumn = j;
}
}
}
// 交换最大元素与中心元素的位置
swap(&matrix[2][2], &matrix[maxRow][maxColumn]);
// 找出四个最小元素的位置
int minPositions[4][2] = {{0, 0}, {0, 4}, {4, 0}, {4, 4}};
for (int k = 0; k < 4; k++) {
int minRow = minPositions[k][0];
int minColumn = minPositions[k][1];
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
if (matrix[i][j] < matrix[minRow][minColumn]) {
minRow = i;
minColumn = j;
}
}
}
// 交换最小元素与角落元素的位置
swap(&matrix[minPositions[k][0]][minPositions[k][1]], &matrix[minRow][minColumn]);
}
}
int main() {
int matrix[5][5] = {
{3, 2, 1, 5, 4},
{4, 5, 6, 2, 1},
{1, 3, 2, 4, 5},
{6, 4, 3, 1, 2},
{2, 1, 4, 3, 6}
};
rearrangeMatrix(matrix);
printf("重排后的矩阵:\n");
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
printf("%d ", matrix[i][j]);
}
printf("\n");
}
return 0;
}
```
希望这些代码能帮助到你!
阅读全文