------
Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
1.创建长度为10的随机数字数组,并且数字不能重复
数组
今天学习了数组的知识,课上同学们也积极思考,在“生成10个不重复的随机数的数组”这道题中,同学的解决办法都很好。后来老师又进行了点评和优化。受益匪浅。
一、数组的基本概念
在程序中常常需要定义很多同一类型的变量,那么为例简化此操作,将这些相同类型的变量用一种特定的数据结构进行存储。将他们按照一定顺序存储在一起,用一个名字和一个序号进行表示,它就是数组。
例如:
int num1, num2, num3, num4, …;
int num[4];
很显然使用数组可以大大简化代码。
很显然使用数组可以大大简化代码。
不仅如此,数组的序号特征可以实现很多非常灵活的数据结构。
相关概念
数组:即同一数据类型的变量的集合,其中每一个数据按照指定顺序存储在一段连续的内存上。
数组元素:数组中存储的单个数据
下标:数据存储的序号
维度:数组下标的层级数。
二、数组的分类
1)按照存储数据的类型分:
数值数组
字符数字
指针数组
结构数组
2)按照维度分:
一维数组
二维数组
多维数组
三、一维数组的存储方式
数组的存储模型
存储方式
1)连续存储空间
2)大小有类型与个数决定
3)元素大小相同
4)数组名是首地址
5)每一个元素使用偏移
一维数组元素地址
1)数组与数组间地址不一定连续
2)数组内元素是连续的
四、数组名作为函数参数
将数组名作为函数参数
1)函数的形参需要与数组一致
2)数组名的传递为地址传递
3)一般函数参数有两个,一个是数组名,另一个是数组长度
4)传递数组名,可以在函数结束后保留数组处理的结果
代码练习:
1.创建长度为10的随机数字数组,并且数字不能重复
// main.c
// 10-练习-创建随机数字数组
//
// Created by george on 15-4-4.
//
//
#include <stdio.h>
#include <stdlib.h>
#define LEN 10
int length = 0;
int array[LEN];
// 写一个函数,判断数字是否在函数中
// 判断数字num在数组array中的下标,如果不存在返回-1
int indexOf(int num) {
for(int i = 0; i < length; i++) {
if(array[i] == num) {
return i;
}
}
return -1;
}
int main(int argc, const char * argv[]) {
int num;
while(length < 10) {
num = arc4random_uniform(10);
if(indexOf(num) == -1) {
array[length++] = num;
}
}
for (int i = 0; i < 10; i++) {
printf("%d\n", array[i]);
}
return 0;
}
2.上题同学的另一种思路算法(另一种思路)
//
// main.c
// 创建随机数字的数组
//
// Created by 传智播客 on 15-4-4.
//
//题目内容:创建一个随机数组
#include <stdio.h>
#include<stdlib.h>
int main(int argc, const char * argv[]) {
int random;
int Number=1234567890;
int repeat[10]={0};
int number[10]={0};
for(int i=0;i<10;i++){
while(1){
random=arc4random_uniform(10);
if(repeat[random]==0){
repeat[random]=1;
break;
}
}
number[random]=Number%10;
Number/=10;
}
for(int i=0;i<10;i++)
printf("%d\n",number[i]);
return 0;
}
3.关于数组名作为函数的参数的一些说明
// main.c
// 14-数组名作为函数参数的补充-重要
//
// Created by apple on 15-4-4.
//
//
#include <stdio.h>
void func(int nums[], int length) {
// printf("%lu\n", sizeof(nums));
}
int main(int argc, const char * argv[]) {
// 1,函数参数的写法
// 如果数组名作为函数参数,可以直接写成指针形式
// 2,数组长度
// sizeof可以计算出数组的长度
// 一维数组作为函数参数的时候,方括号的数字可以省略
// 传入的数组长度信息会丢失
// 使用数组名作为函数参数的时候,应该附带一个int参数表示数组的长度
// 3,(扩展)
// 数组名是一个常量
// 指针是一个可以改变的量
// 如果数组名传递给函数后,函数内部使用加[]的形式修改,那么内外均改
// 如果只是对函数中数组名作整体赋值,那么函数中就表示的是另外一个数组,与原数组无关
int nums[10];
int nums1[10];
// nums = nums1;
func(nums, 10);
return 0;
}