C语言随机初始化数组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言随机初始化数组相关的知识,希望对你有一定的参考价值。

#include <stdio.h>#include <stdlib.h>
void random_initialize(int a[], int _size)int _size = rand()%20;int num = rand();int i;for(i=0; i<=_size; i++) a[_size] = num; printf("%d", a[]);
代码在这里,错误在下面

搞不懂,求大神指点

参考技术A void random_initialize(int a[], int _size)
int _size = rand()%20;
int num = rand();
int i;
for(i=0; i<=_size; i++)

a[_size] = num;
printf("%d", a[]);

可改为
void random_initialize(int a[], int _size)

//int _size = rand()%20;
//int num = rand();
int i;
for(i=0; i<=_size; i++)

a[i] = rand();
printf("%d ", a[]);

参考技术B 以下是使用 C 语言随机初始化数组的代码实现:

```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define SIZE 10 // 定义数组长度

int main()
int arr[SIZE];
srand(time(NULL)); // 初始化随机数种子
for (int i = 0; i < SIZE; i++)
arr[i] = rand() % 100; // 生成 0 至 99 之间的随机整数

// 输出数组中的元素
printf("随机初始化的数组为:");
for (int i = 0; i < SIZE; i++)
printf("%d ", arr[i]);

printf("
");
return 0;

```

代码解释:

1. 定义常量 `SIZE` 表示数组长度。
2. 在 `main` 函数中定义数组 `arr`,用于存储随机生成的整数。
3. 使用 `srand` 函数初始化随机数种子,以确保每次运行程序生成的随机数序列不同。
4. 循环生成随机整数,并将它们存入数组 `arr` 中。
5. 再次遍历数组 `arr`,将其中的每个元素依次输出。

运行结果:

```
随机初始化的数组为:47 81 92 94 20 68 74 64 35 16
```

可以看到,这段 C 语言代码输出了一个长度为 10 的随机初始化数组。实际上,每次运行程序生成的数组都是不同的,具有随机性。
参考技术C 没看懂,连个main方法都没有追问

我就是按照自己思路随便乱写,问题要求随机初始化数组,我就想先随机确定数组的长度,也就是_size随机从0~20选取,然后数组里面的数也是随机的,直接rand(),没加限制,所以是这样,请问怎么实现随机初始化数组

学习C语言的数组

C语言的数组

数组声明的实例:int num[3];只要记下这个模板就好。

不建议使用变量定义数组,如果使用了变量定义数组,作为数组的元素的个数,不初始化的情况下是随机值,如果初始化会直接报错

注意:如果定义的同时进行初始化,那么元素的个数可以省略
省略之后,初始化赋值几个数据,那么数组的长度就是几,也就是说数组将来就能存储几个数据。
int scores[] = {1,3};//只有两个存储空间了
如果没有进行初始化,就不能省略元素个数:
    错误的:int scores[];

可以通过[]索引指定赋值
int scores[100] = {[87] = 1,[34] = 29};

获得数组的长度可以用sizeof

技术分享
1 #include <stdio.h>
2 
3 int main(int argc, const char * argv[]) {
4     
5     int a[5];
6     printf("数组的长度:%i\n",(int)(sizeof(a)/sizeof(a[0])));
7     return 0;
8 }
技术分享


当数组名作为函数参数时, 因为自动转换为了指针类型,所以在函数中无法动态计算除数组的元素个数

1 void printArray(int array[])
2 {
3   printf("printArray size = %lu\n", sizeof(array)); // 8
4   int length = sizeof(array)/ sizeof(int); // 2
5   printf("length = %d", length);
6 }

小何说两句:
    1.看样子,在C语言中无法将动态计算数组长度的方法模块化编程
    2.在java中中的数组是可以这样的:
        public class Main{
        public static void main(String[] args){
            int n = 10;
            int a[] = new int[n];
            System.out.println(a.length);
        }
      但是在C语言中,是不能用变量如上面Java代码这样可以动态指定数组声明时的长度的。
        int a = 10;
        int b[a];
      但是在java语言中,数组的声明不能指定长度,也就是不能这样int[3] a或者int a[3],java只能在初始化的时候指定数组长度。

      在C++中声明数组也是和C语言一样的,声明格式:
      数据类型 数组名[常量表达式] 例如:int array[10];常量表达式中可以包括整型常量和整型表达式,但不能是变量。
      C++和C语言不允许对数组的大小作动态定义。

      在Swift和Objective-C中,数组的长度是动态可变的。
    3.但是C语言在访问数组的时候,指定索引可以用变量来指定。比如;
        int a[3]={1,2,3};
        int n = 2;
        printf("%d\n", a[n]);

小何说两句习题的一个知识亮点:
虽然这是一个很简单的习题,但是其中的小思想是可以积累的。
##1.设计一个函数int arrayMax(int a[], int count)找出数组元素的最大值

技术分享
 1 int getMax(int ages[], int length)
 2 {
 3 //    注意:不要假设数组以外的值位最大值,会出现意想不到的问题
 4 //    int max = 0;
 5 //    假设数组中的第0个元素是最大
 6     int max = ages[0];
 7 
 8     for (int i = 0; i < length; i++) {
 9 //        判断从数组中取出的值是否大于max
10         if (max < ages[i]) {
11 //            如果大于max就把当前索引对应的元素设置成最大值
12             max = ages[i];
13         }
14     }
15 
16     return max;
17 }
技术分享

 

技术分享
 1 int getMax(int ages[], int length)
 2 {
 3 //    把数组中的第0个索引作为最大值
 4     int max = 0;// 是一个索引
 5     for (int i = 1; i < length; i++) {
 6         if (ages[max] < ages[i]) {
 7             max = i;
 8         }
 9     }
10     return ages[max];
11 }
技术分享

前面一个算法,也是我开始的思路,不过我采用三元运算符替代了条件语句,虽然代码看起来精简,但是本质上没有啥改变。
然后我看到第二个算法,相比第一个算法思想,就是直接面向最大值编程,而第二个算法是面向最大值的索引编程,也就是说,如果这个值是最大的,那我就操作这个值得索引好了,反正通过索引就一定能够得到这个最大值。
不过第二种面向索引写算法的思想一般用在这种集合元素不变动的情况,如果集合在算法中变动的话,就有可能出现通过索引获取不正确的值。

好,阅读到这里,不管读者是重新阅读这段内容还是第一次阅读这段内容都尝试着不看源代码自己面向索引写这个小题的算法吧。
以下就是作者的练习代码:

技术分享
 1 #include <stdio.h>
 2 
 3 //设计一个函数int arrayMax(int a[], int count)找出数组元素的最大值
 4 //面向元素具体值写算法
 5 int arrayMax(int a[],int count)
 6 {
 7     int max = a[0];
 8     for (int i=0; i<count; i++) {
 9         max = (max>a[i])?max:a[i];
10     }
11     return max;
12 }
13 
14 //面向索引写算法
15 int arrayMax2(int a[],int count)
16 {
17     //定义一个最大值的索引,比如这里的最大值索引是数组中的第一个
18     int max = 0;
19     
20     for (int i=0; i<count; i++) {
21         max = (a[max]>a[i])?max:i;
22     }
23     return a[max];
24 }
25 
26 int main(int argc, const char * argv[]) {
27     int a[5] = {12,2,2,3,23};
28     printf("最大值是:%d\n",arrayMax2(a,5));
29     return 0;
30 }
技术分享

面向索引值写的算法在集合类的使用中可以起到减少算法空间复杂度的作用。
因为索引所占的空间往往就是int的所占的空间。

以上是关于C语言随机初始化数组的主要内容,如果未能解决你的问题,请参考以下文章

C语言一维数组赋值方法

C ++初始化数组最后一个值是随机的[关闭]

学习C语言的数组

C中结构体内有一个成员是二维数组,可以直接赋值另一个一维数组吗?

C中如何实现数组的传值引用

c语言中怎样实现对二维数组元素进行赋值并输出。