首页 > 其他分享 >[good]c语言数组的运算

[good]c语言数组的运算

时间:2023-11-29 09:55:07浏览次数:33  
标签:arr good 运算 int cols ++ rows 数组 printf

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX 10

int **createRandom2DArray(int rows, int cols)
{
    srand(time(NULL)); // 初始化随机数生成器

    int **arr = (int **)(malloc(sizeof(int *) * rows));
    if (arr == NULL)
    {
        printf("Memory allocation failed.\n");
        exit(1);
    }
    for (int i = 0; i < rows; i++)
    {
        arr[i] = (int *)(malloc(sizeof(int) * cols));
        if (arr[i] == NULL)
        {
            printf("Memory allocation failed.\n");
            exit(1);
        }
        for (int j = 0; j < cols; j++)
        {
            arr[i][j] = rand() % 100; // 生成一个0到99的随机数
        }
    }
    return arr;
}

int *create1DArray(int size)
{
    int i;
    int *arr = (int *)(malloc(sizeof(int) * size));
    for (i = 0; i < size; i++)
    {
        arr[i] = 0;
    }
    return arr;
}

int *create2DArray(int rows, int cols)
{
    int i, j;
    int **arr = (int **)(malloc(sizeof(int *) * rows));
    if (arr == NULL)
    {
        printf("Error allocating memory\n");
        exit(1);
    }
    for (i = 0; i < rows; i++)
    {
        arr[i] = (int *)(malloc(sizeof(int) * cols));
        if (arr[i] == NULL)
        {
            printf("Error allocating memory\n");
            exit(1);
        }
        for (j = 0; j < cols; j++)
        {
            arr[i][j] = 0;
        }
    }
    return arr;
}

int *transTo1DOnesArray(int *arr, int size)
{
    int i;
    for (i = 0; i < size; i++)
    {
        arr[i] = 1;
    }
    return arr;
}

int **transTo2DOnesArray(int **arr, int rows, int cols)
{
    int i, j;
    for (i = 0; i < rows; i++)
    {
        for (j = 0; j < cols; j++)
        {
            if (i == j)
            {
                arr[i][j] = 1;
            }
        }
    }
    return arr;
}

int sum1DArray(const int *arr, const int size)
{
    int i = 0;
    int sum = 0;
    for (i = 0; i < size; i++)
    {
        sum += arr[i];
    }
    return sum;
}

int sum2DArray(const int **arr, const int rows, const int cols)
{
    int sum = 0;
    int i = 0, j = 0;
    for (i = 0; i < rows; i++)
    {
        for (j = 0; j < cols; j++)
        {
            sum += arr[i][j];
        }
    }
    return sum;
}

int sum2DArrayByPointers(int *start, int *end)
{
    int sum = 0;
    int *p = start;
    while (p < end)
    {
        sum += *p;
        p++;
    }
    return sum;
}

void print2DArray(int **p, int rows, int cols)
{
    printf("2D Array:\n");
    for (int i = 0; i < rows; i++)
    {
        printf("[");
        for (int j = 0; j < cols; j++)
        {
            printf("%d", p[i][j]);
            if (j != cols - 1)
            {
                printf(", ");
            }
        }
        printf("]\n");
    }
}

void print1DArray(int *p, int size)
{
    printf("Array: [");
    for (int i = 0; i < size; i++)
    {
        printf("%d", p[i]);
        // 不在最后一个元素后面打印逗号
        if (i != size - 1)
        {
            printf(", ");
        }
    }
    printf("]\n");
}

int **transpose2DArray(int **p, int rows, int cols)
{
    int **p_trans = (int **)malloc(sizeof(int *) * cols);
    if (p_trans == NULL)
    {
        printf("malloc failed\n");
        exit(1);
    }
    for (int i = 0; i < cols; i++)
    {
        p_trans[i] = (int *)malloc(sizeof(int) * rows);
        if (p_trans[i] == NULL)
        {
            printf("malloc failed\n");
            exit(1);
        }
    }
    for (int i = 0; i < rows; i++)
    {
        for (int j = 0; j < cols; j++)
        {
            p_trans[j][i] = p[i][j];
        }
    }
    return p_trans;
}

int main()
{
    int *p_arr1d = create1DArray(10);
    print1DArray(p_arr1d, 10);
    int rows = 3;
    int cols = 4;
    int **p_arr2d = create2DArray(rows, cols);
    print2DArray(p_arr2d, rows, cols);
    int sum2 = 0;

    int *p1darr_ones = transTo1DOnesArray(p_arr1d, 10);
    print1DArray(p1darr_ones, 10);
    int **p2darr_ones = transTo2DOnesArray(p_arr2d, rows, cols);
    print2DArray(p2darr_ones, rows, cols);
    int sum1d = sum1DArray(p1darr_ones, 10);
    int sum2d = sum2DArray(p2darr_ones, rows, cols);
    printf("sum1d=%d, sum2d=%d\n", sum1d, sum2d);

    int **p2d = createRandom2DArray(3, 5);
    print2DArray(p2d, 3, 5);
    int **p2d_tr = transpose2DArray(p2d, 3, 5);
    print2DArray(p2d_tr, 5, 3);

    // free memory
    free(p_arr1d);
    for (int i = 0; i < rows; i++)
    {
        free(p_arr2d[i]);
    }
    free(p_arr2d);

    printf("all done");

    return 0;
}

 

标签:arr,good,运算,int,cols,++,rows,数组,printf
From: https://www.cnblogs.com/dogingate/p/17863833.html

相关文章

  • 位运算的实现及应用场景
    在.NET6中使用枚举类(enum)实现位运算是一个相对直接的过程。首先,你需要定义一个枚举类型,通常是使用[Flags]属性标记,这样可以更清楚地表明该枚举用于位运算。以下是如何进行这一操作的步骤:定义带有[Flags]属性的枚举:这个属性用于指示枚举值可以组合。枚举的每个成员应该是......
  • 一维数组模拟堆
    1.1/如何手写一个堆?完全二叉树5个操作2//1.插入一个数heap[++size]=x;up(size);3//2.求集合中的最小值heap[1]4//3.删除最小值heap[1]=heap[size];size--;down(1);5//4.删除任意一个元素heap[k]=heap[size];size--;......
  • (查找)02-二维数组中的查找
    1importjava.util.*;23publicclassSolution{4/**5*@paramtargetint整型6*@paramarrayint整型二维数组7*@returnbool布尔型8*/9publicbooleanFind(inttarget,int[][]array){10//判空矩阵1......
  • 数组(3)二维数组
    <1>二维数组的基本内容(1)基本了解举例:inta[3][5];概念:可以将a理解为一个三行五列的矩阵;(由此证明3代表行,5代表列)(2)二维数组的遍历代码:for(i=0;i<3;i++){for(j=0;j<5;j++){a[i][j]=i*j;}}a[i][j]是一个int;表示第i行和第j列上的单元;提出问题:a[i,j]表示的含......
  • python基础之基本运算符
    参考网站​ 参考网站(菜鸟教程):https://www.runoob.com/python/python-operators.html算术运算符以下假设变量a=10,变量b=21:运算符描述实例+加-两个对象相加a+b输出结果31-减-得到负数或是一个数减去另一个数a-b输出结果-11*乘-两个数相乘......
  • 基本运算符
    算数运算符以下假设变量a为10,变量b为2:运算符描述实例+加-两个对象相加a+b输出结果12-减-得到负数或是一个数减去另一个数a-b输出结果8*乘-两个数相乘或是返回一个被重复若干次的字符串a*b输出结果20/除-x除以yb/a输出结果......
  • 数组(2)数组运算及典例(求解素数的方法)
    <1>数组运算1)数组的集成初始化1.形式示例1-inta[]={1,2,3...};2-inta[13]={2};————第一个单元内中的a0=2,剩下的单元都默认赋为0;2.集成初始化时的定位——仅适用于C99举例:inta[10]={[0]=2,[2]=3,6,};特点:用[n]在初始化数据中给出定位;没有定位的数......
  • 自学day7 数组
    typora-copy-images-to:media数组一、概念对象中可以通过键值对存储多个数据,且数据的类型是没有限制的,所以通常会存储一个商品的信息或一个人的信息:varobj={goodsname:"手机",price:"5000",introduce:"手机很时尚,很漂亮!"}varperson={name:"张......
  • 运算符
    运算符【1】算数运算符运算符描述+加-减*乘/除%返回除法的余数**幂次//返回商的部分整数【2】比较运算符运算符描述==比较值是否相等!=比较值是否不相等>大于<小于>=大于等于<=小于等于【3】赋值运算......
  • 基本运算符
    基本运算符(一)算数运算符(1)加法运算符+#1.加法x=20y=10print(x+y)#30(2)减法运算符-#2.减法x=20y=10print(x-y)#10(3)乘法运算符*#3.乘法x=20y=10print(x*y)#200(4)除法运算符/#4.除法x=20y=10print(x/y)#2.0(5)取整数运算符//#5.取整数//x=20y=6print(x//y)#......