今天十月一日, 上午看阅兵激情澎湃, 但是下午还是要继续写 C 语言, 前面的这块很简单
- int number[100];
- scanf("%d" , &number[i]);
一, 定义数组
<类型> 变量名称[元素数量]
元素数量必须是整数
数组特点
所有的元素具有相同的数据类型
一旦创建, 就不能改变大小
(数组中的元素在内存中是连续以此排序的)
二, 数组例子
写一个程序, 输入数量不确定的 [0,9] 范围内的整数, 统计每一种数字出现的次数, 输入 - 1 表示结束
通常用到数组都是下面的步骤:
- #include <stdio.h>
- int main(void)
- {
- // 数组的大小
- const int number = 10;
- int x;
- // 定义数组
- int count[number];
- int i;
- // 初始化数组
- for (i = 0; i <number; i++)
- {
- count[i] = 0;
- }
- scanf("%d" , &x);
- while( x != -1){
- if(x>= 0 && x <= 9){
- // 数组参与运算
- count[x] ++;
- }
- scanf("%d" , &x);
- }
- // 遍历数组输出
- for (i = 0; i <number; i++)
- {
- printf("%d:%d\n", i , count[i]);
- }
- return 0;
- }
三, 数组运算
数组的集成初始化
int a[] = {2,4,6,7,1,3,5,9,11,13,23,14,32};
集成初始化时定位
- int a[10] = {[0] = 2 , [2] = 3,6};
- int i;
- for (i = 0; i < 10; ++i)
- {
- printf("%d\t", a[i]);
- }
- // 2 0 3 6 0 0 0 0 0 0
用 [n] 在初始化数据中给出定位
没有定位的数据接在前面的位置后面
其他位置的值补零
也可以不给出数组大小, 让编译器算
特别适合初始数据稀疏的数组
数组大小
sizeof 给出整个数组所占据的内容的大小, 单位是字节
sizeof(a)/sizeof(a[0]);
sizeof(a[0])给出数组中单个元素的大小, 于是相除就得到了数组的单元个数
这样的代码, 一旦修改数组中的初始的数据, 不需要修改遍历的代码
数组的赋值
数组变量本身不能被赋值
要把一个数组的所有元素交给另一个数组, 必须采用遍历
四, 数组中查找元素
数组作为函数参数时, 往往必须再用另一个参数来传入数组的大小
数组作为函数的参数时:
不能在 [] 中给出数组的大小
不能再利用 sizeof 来计算数组的元素个数
- #include <stdio.h>
- int main(void)
- {
- int a[] = {2,4,6,7,1,3,5,9,11,13,23,14,32,};
- int x;
- int loc;
- printf("请输入一个数字:\n");
- scanf("%d" , &x);
- loc = search(x, a, sizeof(a)/sizeof(a[0]));
- if (loc != -1)
- {
- printf("%d 在第 %d 个位置上 \ n", x , loc);
- }else{
- printf("%d 不存在 \ n", x);
- }
- return 0;
- }
- int search(int key , int a[] , int length)
- {
- int ret = -1;
- int i;
- for (i = 0; i <length; i++)
- {
- if (a[i] == key)
- {
- ret = i;
- break;
- }
- }
- return ret;
- }
五, 素数
判断是否能被已知的且 < x 的素数整除
- #include <stdio.h>
- int main(void)
- {
- const int number = 10;
- int prime[10] = {2};
- int count = 1;
- int i = 3;
- while(count < number){
- if (isPrime(i,prime,count))
- {
- prime[count++] = i;
- }
- // 进行调试
- {
- printf("i=%d \tcnt=%d\t", i , count );
- int i;
- for (i = 0; i < number; i++)
- {
- printf("%d\t", prime[i]);
- }
- printf("\n");
- }
- i++;
- }
- for ( i = 0; i < number; i++)
- {
- printf("%d", prime[i]);
- if ( (i+1)%5)
- {
- printf("\t");
- }else{
- printf("\n");
- }
- }
- return 0;
- }
- int isPrime(int x, int knownPrimes[], int numberofKnowPrimes)
- {
- int ret = 1;
- int i;
- for (i = 0; i <numberofKnowPrimes ; i++)
- {
- if ( x % knownPrimes[i] == 0)
- {
- ret = 0;
- break;
- }
- }
- return ret;
- }
六, 二维数组
- int a[3][5]
- // 通常可以理解为 a 是一个 3 行 5 列的矩阵
二维数组的遍历
- for(i = 0; i<3; i++){
- for(j = 0; j<5; j++){
- a[i][j] = i * j;
- }
- }
- // a[i][j]是一个 int, 表示第 i 行第 j 列上的单元
二维数组的初始化
- int a[][5] = {
- {0,1,2,3,4,},
- {2,3,4,5,6,},
- };
列数是必须给出的, 行数可以有编译器来定
每行一个{}, 逗号分隔
最后的逗号可以存在
如果省略, 表示补零
来源: https://www.cnblogs.com/mengd/p/11615667.html