回原点(......?)当我没讲,好难
1. 编写函数,要求用指针做形参,实现将二维数组(行列相同)的进行转置(行列数据互换):
...不会写
/*1. 编写函数,要求用指针做形参,实现将二维数组(行列相同)的进行转置(行列数据互换)*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>// 函数声明
void transpose(int *matrix, int n);int main()
{int n = 3; // 假设是3x3的数组int matrix[3][3];// 初始化随机数种子srand((unsigned int)time(NULL));// 随机生成数组for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {matrix[i][j] = rand() % 100; // 生成0到99之间的随机数}}printf("原始数组:\n");for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {printf("%d ", matrix[i][j]);}printf("\n");}transpose((int *)matrix, n); // 调用函数进行转置printf("转置后的数组:\n");for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {printf("%d ", matrix[i][j]);}printf("\n");}return 0;
}// 函数定义,实现转置
void transpose(int *matrix, int n)
{int i, j;for (i = 0; i < n; i++) {for (j = i + 1; j < n; j++) {int temp = *(matrix + i * n + j);*(matrix + i * n + j) = *(matrix + j * n + i);*(matrix + j * n + i) = temp;}}
}
虽然代码有了,但是我暂时还不是很会,留着后面补,嘿嘿先发布啦,嘿嘿嘿嘿
2 编写函数,要求用指针做形参,实现统计二维数组上三角中的0 的数量:(3*3好看0的数量)
注意:上三角包括主对角线以上的元素,不包括对角线本身。
/*2 编写函数,要求用指针做形参,实现统计二维数组上三角中的0 的数量*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>#define R 3
#define C 3//函数声明
void arr(int (*a)[C]); //用于初始化数组
int countZeros(int (*a)[C]); //统计上三角的0的个数int main()
{int a[R][C];srand((unsigned int)time(NULL));arr(a);printf("初始化后的数组:\n");int i = 0,j = 0;for(i = 0;i < R;i++){for(j = 0;j < C;j++){printf("%d",a[i][j]);}printf("\n");}int zeroCount = countZeros(a); // 调用函数统计上三角中的0的数量printf("上三角中的0的数量: %d\n",zeroCount);return 0;}//函数定义 初始化数组
void arr(int (*a)[C])
{for(int i = 0;i < R;i++){for(int j = 0;j < C;j++){a[i][j] = rand() % 2; //生成0或1的随机数}}}//函数定义 统计上三角的0的数量
int countZeros(int (*a)[C])
{int zeroCount = 0;for(int i = 0;i < R;i++) //循环遍历数组找出上三角的数值看是否为0,为0,进入循环,zeroCount加1{for(int j = i + 1;j < C;j++){if(a[i][j] == 0){zeroCount++;}}}return zeroCount;
}
3. 编写一个指针函数,返回二维数组中最大元素的地址。
/*3. 编写一个指针函数,返回二维数组中最大元素的地址。*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>#define R 3
#define C 3// 函数声明
int *findMaxElementAddress(int (*array)[C]);int main() {int array[R][C] = {0};// 初始化随机数发生器srand((unsigned int)time(NULL));// 随机初始化数组for (int i = 0; i < R; i++) {for (int j = 0; j < C; j++) {array[i][j] = rand() % 100; // 生成0到99之间的随机数}}// 打印随机初始化的数组for (int i = 0; i < R; i++) {for (int j = 0; j < C; j++) {printf("%d ", array[i][j]);}printf("\n");}// 调用函数找到并打印最大元素的地址和值int *maxAddress = findMaxElementAddress(array);if (maxAddress != NULL) {printf("最大元素的地址是: %p\n", maxAddress);printf("最大元素的值是: %d\n", *maxAddress);} else {printf("没有元素\n");}return 0;
}// 函数定义:返回二维数组中最大元素的地址
int *findMaxElementAddress(int (*array)[C])
{int INT_MIN = 0;int maxElement = INT_MIN; // 初始化为最小整数值int *maxAddress = NULL; // 初始化地址为NULLfor (int i = 0; i < R; i++) {for (int j = 0; j < C; j++) {if (array[i][j] > maxElement) {maxElement = array[i][j];maxAddress = &array[i][j]; // 更新最大元素的地址}}}return maxAddress; // 返回最大元素的地址
}