C语言—指针(2)

回原点(......?)当我没讲,好难

1. 编写函数,要求用指针做形参,实现将二维数组(行列相同)的进行转置(行列数据互换): 

...不会写

/*1. 编写函数,要求用指针做形参,实现将二维数组(行列相同)的进行转置(行列数据互换)*/
#include 
#include 
#include 

// 函数声明
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;
        }
    }
}

虽然代码有了,但是我暂时还不是很会,留着后面补,嘿嘿先发布啦,嘿嘿嘿嘿

C语言—指针(2)_第1张图片
2 编写函数,要求用指针做形参,实现统计二维数组上三角中的0 的数量:(3*3好看0的数量)

C语言—指针(2)_第2张图片

注意:上三角包括主对角线以上的元素,不包括对角线本身。

/*2 编写函数,要求用指针做形参,实现统计二维数组上三角中的0 的数量*/
#include 
#include 
#include 

#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. 编写一个指针函数,返回二维数组中最大元素的地址。

C语言—指针(2)_第3张图片

/*3. 编写一个指针函数,返回二维数组中最大元素的地址。*/
#include 
#include 
#include 

#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;  // 初始化地址为NULL

    for (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; // 返回最大元素的地址
}

你可能感兴趣的:(c语言,开发语言)