《C语言学习:数组》11

写在前面:本笔记为个人学习各平台C语言系列课程所作,仅供交流学习,不得作他用。

1. 数组定义

cpp 复制代码
int NUM[100];

上面的代码表示:定义了一个装int类型的数组NUM,这个数组有100个元素,索引是0~99。如果确定数组中的所有元素,也可以如下定义(集成初始化):

cpp 复制代码
int NUM1[]={1,2,3,4,5,6,7,8,9};

C99之前,数组大小必须是一个确定的数字,不能是运行中的变量。(一般考试也这么认为)

注意:定义了数组需要给数组初始化!没有特殊要求可以直接接上={0}。如果数组大小与所给元素个数不相符,用0补齐。

上图这种方式也可以,相当于把非0的单独标出了,适合数字稀疏的数组。

通过下面这段代码,可以实现在输入-1之前,每输入一个数都被依次放到数组里。这样写时,在终端输入数字不用一个一个敲,可以输入多个数字并用空格隔开,最后回车,会一次性读入。

但这样有个隐患:输入的数字个数(cnt)如果超出数组索引极限,怎么办?

2. 数组特点

数组里的元素在内存里是紧密排列的。在赋值左边叫左值,右边叫右值。

一般有两种方式来解决:一是在代码运行时注意判断,达到最大下标就跳出。二是利用C99特点,在代码开头使用变量来定义数组大小。

长度为0的数组可以存在,但无用。

3. 数组运算

(1)求数组大小/元素个数

可以利用sizeof,读出整个数组的内存,再除以第一个元素的内存,就可以算出有几个元素。

在遍历和数组大小有关的循环时,这种方式用于循环条件中,与直接给一个确定数字的方式相比不需要频繁修改代码。

(2)数组赋值

小tip:和数组有关的遍历,一般写成从0开始到小于数组长度。

(3)搜索元素

cpp 复制代码
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;
}

这个代码可以实现搜索数组a里有没有key这个元素,有的话输出索引,没有的话输出-1。

注意:数组作为函数参数时,不能在[]中给出大小,也不能再用sizeof测大小!往往还需要传入另外一个长度参数length。

4. 二维数组

一维数组只需要一重循环,二维数组需要两重循环。a[i,j]括号里是一个表达式,逗号相当于运算符,因此a[i,j]=a[j]。

二维数组初始化:

写成这样只是为了让读者更好看懂。也可以写成一行,只要给了列数,编译器会自动分行。

二维矩阵读入:

检查行和列:(例子来源井字棋)

代码基本一样,区别在于检查行时,外层循环行内层循环列。反之先列后行。

检查对角线:(正对角线和反对角线)

5. 数组举例

(1)统计个数

输入0~9的数字,不限输入多少个,输入-1停止。统计每个数字出现了多少次。

cpp 复制代码
int num[10] = {0};
int x;
scanf("%d",&x);
while (x != -1) {
	if (x >= 0 && x <= 9) {
		num[x]++;
	}
	scanf("%d",&x);
}
for (int i = 0;i<=9;i++) { printf("%d出现了%d次。\n", i, num[i]); }

(2)素数

判断一个数字是否为素数时,一般做法是让小于1/2它或者sqrt(x)的数字尝试去除,但这样会耗费许多循环。上述代码可以得到前100个素数,之后判断别的数字只需要拿已知的素数去除它就行。

注意这里的prime[count++]=i;,这行代码相当于一个指针,把一个素数填入数组对应位置的同时count推到下一个位置上。

构造素数表的思路演进:[1] 基本原则

2\] 伪代码 ![](https://i-blog.csdnimg.cn/direct/4c35f7ce8bb24ed6ae645b95c2c9350e.png) \[3\] 代码 ![](https://i-blog.csdnimg.cn/direct/830d195e1bc94ab5825efc08679b244b.png)

相关推荐
jerryinwuhan44 分钟前
基于各城市站点流量的复合功能比较
开发语言·php
迈巴赫车主1 小时前
Java基础:list、set、map一遍过
java·开发语言
智者知已应修善业2 小时前
【51单片机89C51及74LS273、74LS244组成】2022-5-28
c++·经验分享·笔记·算法·51单片机
·醉挽清风·2 小时前
学习笔记—MySQL—库表操作
笔记·学习·mysql
南 阳3 小时前
Python从入门到精通day66
开发语言·python
白小沫3 小时前
TortoiseSVN是什么?
学习
weixin_451431564 小时前
【学习笔记】微博视频页面ajax请求与响应数据分析
笔记·学习·音视频
十八旬4 小时前
快速安装ClaudeCode完整指南
开发语言·windows·python·claude
前进的李工4 小时前
EXPLAIN输出格式全解析:JSON、TREE与可视化
开发语言·数据库·mysql·性能优化·explain
清辞8534 小时前
尾盘选股法程序开发学习初期
学习