对数器的关键函数(C/Java)

目录

C

randomArray

copyArray

Java

randomArray

copyArray

涉及到的基础知识

C语言中的 rand() 函数

Java中的 Math.random() 函数

C和Java函数返回类型以及传递的参数的区别

函数返回类型区别

传递的参数的区别

C语言中的 malloc() 函数

C

randomArray

int* randomArray(int length, int maxValue) {
    srand(time(NULL));
    int* arr = (int*)malloc(length * sizeof(int));
    for (int i = 0; i < length; i++) {
        arr[i] = rand() % maxValue + 1;
    }
    return arr;
}

copyArray

int* copyArray(int arr[], int length) {
    int* copy = (int*)malloc(length * sizeof(int));
    if (copy == NULL) {
        // 内存分配失败
        return NULL;
    }
    for (int i = 0; i < length; i++) {
        copy[i] = arr[i];
    }
    return copy;
}

Java

randomArray

public static int[] randomArray(int n, int v) {
		int[] arr = new int[n];
		for (int i = 0; i < n; i++) {
			arr[i] = (int) (Math.random() * v) + 1;
		}
		return arr;
	}

copyArray

public static int[] copyArray(int[] arr) {
		int n = arr.length;
		int[] copy = new int[n];
		for (int i = 0; i < n; i++) {
			copy[i] = arr[i];
		}
		return copy;
	}

涉及到的基础知识

C语言中的 rand() 函数

rand() 函数的使用规则

  1. 包含头文件: 首先需要包含 <stdlib.h> 头文件,因为 rand() 函数被声明在这个头文件中

  2. 初始化随机数种子: 在使用 rand() 函数之前,通常需要调用 srand() 函数来初始化随机数生成器的种子。如果不初始化种子,每次程序运行时都会生成相同的随机数序列。通常使用当前时间作为种子,因为时间在每次运行时都会不同; srand(time(NULL));这里time(NULL) 返回当前时间的秒数,可以确保每次运行程序时都会有不同的种子

  3. 返回值:调用 rand() 函数来生成伪随机数。rand() 函数会返回一个在 [0,RAND_MAX) 范围内的整数RAND_MAX 是一个宏,表示在给定平台上 rand() 函数能够生成的最大随机数值。一般情况下,RAND_MAX 的值至少是 32767

  4. 控制生成范围: 如果你需要生成一定范围内的随机数,可以使用取模运算符来实现

    int randomNumberInRange = rand() % (maxValue - minValue + 1) + minValue;
    //可以生成在 [minValue, maxValue] 范围内的随机整数
    //不要使用 (rand() / RAND_MAX) * k 的方式来获取 [0, k] 范围内的整数
    //因为由于整数除法的特性,这个表达式大部分情况下会得到 0,除非 rand() 返回的值刚好是 RAND_MAX
    
    //eg.
    int num1 = rand() % k;        //生成[0,k)之间的整数
    int num2 = rand() % (k + 1);  //生成[0,k]之间的整数
    
    //生成[0,1]之间的浮点数
    double num3 = (double)rand() / RAND_MAX;
    //生成[0,k]之间的浮点数
    double num4 = ((double)rand() / RAND_MAX) * k;
    

Java中的 Math.random() 函数

  1. 语法

    double randomValue = Math.random();
    
  2. 返回值Math.random()函数返回一个在 [0,1) 范围内的伪随机双精度浮点数

  3. 控制生成范围:如果你需要生成一定范围内的随机数,可以使用乘法运算符来实现

    int randomNumber = (int)(Math.random() * (max - min + 1) + min);
    //可以生成在 [minValue, maxValue] 范围内的随机整数
    
    //eg.
    int num1 = (int)(Math.random() * k);        //生成[0,k)之间的整数
    int num2 = (int)(Math.random() * (k + 1);  //生成[0,k]之间的整数
    
    //生成[0,k)之间的浮点数
    double num4 = (Math.random()  * k;
    

C和Java函数返回类型以及传递的参数的区别

函数返回类型区别

Java中函数可以直接返回数组,可以在函数中创建一个数组,填充它,并直接返回它。这是因为Java中的数组是对象,函数可以返回对象引用

C语言中函数不能直接返回数组,C语言不支持将数组作为函数的返回值,因为C语言不允许返回数组的地址。如果需要返回一个数组,通常的做法是通过传递数组的指针作为参数,并在函数内部修改这个数组,而不是直接返回数组

传递的参数的区别

在Java中,数组是对象,而对象引用传递的是对象的地址。当您将一个数组作为参数传递给函数时,实际上传递的是数组的引用,这个引用指向数组在内存中的位置。因为传递的是数组的引用,所以在函数内部可以通过这个引用访问数组的属性,比如 length 属性,来获取数组的长度

在 C 语言中,数组作为函数参数传递时会被隐式转换为指向数组首元素的指针。因此,int* copyArray(int arr[]) 中的 arr 其实是一个指向整数的指针,而不是数组本身。在函数中使用 sizeof(arr) 来获取数组的长度是不正确的。因为在函数中,arr 只是一个指针,sizeof(arr) 实际上会返回指针的大小,而不是整个数组的大小。在 C 语言中,没有办法直接获取传递给函数的数组的长度

C语言中的 malloc() 函数

malloc()的使用规则 在C语言中,malloc() 函数用于动态分配内存

//eg.
int *ptr;
ptr = (int *)malloc(10 * sizeof(int));
//分配了足够的内存空间来存储10个整数,并将指向该内存空间的指针赋值给了 ptr
/*(int*) 将 malloc() 返回的 void* 类型的指针转换为 int* 类型的指针
		具体来说,malloc() 函数返回的是 void* 类型的指针,
    因为它不知道要分配的内存空间是什么类型的数据。
    而在实际使用中,我们通常需要将分配的内存空间视为某种特定类型的数据,
    比如 int 类型的数组
*/
  1. 包含头文件:在使用 malloc() 函数之前,需要包含 <stdlib.h> 头文件
  2. 分配内存malloc() 函数的原型为:void *malloc(size_t size); 它接受一个参数,即要分配的内存空间的字节数。返回一个指向分配内存空间起始地址的指针,或者在分配失败时返回 NULL。分配的内存大小应该是正整数
  • 7
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值