C语言笔记(数组)

本文档详细介绍了C语言中数组的概念及应用,包括一维数组、二维数组和多维数组的操作方法,如初始化、赋值、排序等,并通过实例说明如何进行有效使用。

C语言数组笔记

笔记内容为自学郝斌老师C语言课程时所作
如果对于基础知识点有遗忘可以借鉴下


作者:

辽宁工业大学 电子202 宋家盛


如有错误, 可通过jff_16@163.com联系


数组:

数组类型 数组名[元素个数]  = {1, 2, 3, 4, 5};
例如:int a[2] = {1, 2};
元素表示:a[0] == 1; a[2] == 2;
即a[i]表示第i+1个元素

为什么使用数组?
1.解决大量同类型的数据存储和使用问题
2.模拟现实世界(一维,二,N维)

数组不是学习重点的原因:
原始数组操作复杂

一维数组:
特点;
1.为N个变量连续分配存储空间
2.所有元素的数据类型必须相同
3.所有变量所占的字节大小必须相等
操作:
1.初始化
	完全初始化
	 int a[3] = {1, 2, 3};
	不完全初始化 未被初始化的元素自动为零
	 int a[3] = {1,2};
	清零
	 int a[5] = {0};
	错误写法:
	1.int a[3];
	  a[3] = {1, 2, 3}; //错误,a[3]表示数组a的第四个元素
	  只有在定义数组的同时才可以整体赋值
	  其他情况下整体赋值都是错误的
	2.int a[3] = {1, 2, 3};
		int b[3];
		如果要把a数组中的值全部复制给b数组
		错误写法:
		b = a; //a代表a[0]的地址
		正确写法:
		for (i = 0; i < 5; ++i)
		{
			b[i] = a[i];
		}  
2.赋值
	scanf("%d" , &a[0]);
	printf("%d\n", a[0]);
下面几乎会有工具使用
3.排序
4.求最值
5.倒置
6.查找
7.删除 

二维数组:
 int a[3][4]总共是12个元素,可以当作3行4列看待
 元素名:a[0][0]到a[2][3]
 即a[i][j]表示第i+1行第j+1列的元素
 	 a[i][j]数组最后的元素只能是a[i-1][n-1]
 1.初始化:
  1.int a[2][2] = {1,2,3,4};
  2.int a[2][2] = {
	   {1, 2},
	   {3, 4},
    } ;
 2.输出元素(使用嵌套for循环)
 for (i=0; i<3; ++i)
 {
 	for (j=0; j<4; ++j)
 	{
 		printf("%-5d  ", a[i][j]) //-5表示左对齐占五个光标的位置
 		}
 		printf("\n");
 	}

多维数组:
1.是否存在多维数组?
不存在
因为内存是线性一维的
n维数组可以当作每个元素是n-1维数组的一维数组
例如:
int a[3][4][5]
该数组是含有3个元素的一维数组
只不过每个元素都是4行5列的二维数组    
### C语言数组练习题 #### 字符串大小计算 考虑字符串 `"abcdef"` 的存储方式,`sizeof(arr[1])` 计算的是单个字符所占字节数。由于 `arr` 是一个字符数组,因此每个元素占用 1 个字节。 ```c #include <stdio.h> int main() { char arr[] = "abcdef"; printf("%d\n", sizeof(arr[1])); } ``` 这段代码展示了如何获取并打印字符数组中单个字符的大小[^1]。 #### 输入一组整数求平均分、最高分和最低分 此程序通过循环读取用户输入的一系列整数值,并计算这些值中的最大值、最小值以及它们的平均分数。注意初始化变量时应确保逻辑正确性,比如 `min` 应该被设置成一个极大值来保证任何实际输入都能更新它;同样地,在除法之前要转换数据类型以获得精确的小数结果。 ```c #include <stdio.h> #define SIZE 10 int main() { int i; int sum = 0, max = -2147483648, min = 2147483647; // 初始化为可能的最大/最小边界值 int c[SIZE]; float ave; for (i = 0; i < SIZE; ++i) { // 循环从索引0开始到9结束共十个位置 scanf("%d", &c[i]); sum += c[i]; if (c[i] > max) max = c[i]; if (c[i] < min) min = c[i]; } ave = (float)sum / SIZE; printf("平均分为:%f, 最高分为:%d, 最低分为:%d\n", ave, max, min); } ``` 上述代码修正了原版中存在的几个问题:一是数组下标的起始点应该从零而不是一;二是当定义常量如数组长度时最好使用宏定义提高可维护性和清晰度;三是对于浮点运算前的数据类型的强制转换处理得更加严谨[^2]。 #### 查找二维数组中的最大元素及其坐标 下面的例子演示了一个简单的算法用于在一个给定的三维矩阵内找到其内部存在的最大正整数值连同它的行列号一起输出出来: ```c #include <stdio.h> int main(void){ int matrix[][4]={{1,2,3,4},{9,7,4,6},{-1,2,0,8}}; int rows=3, cols=4; int maxValue=matrix[0][0], rowIndex=0, colIndex=0; for(int r=0;r<rows;++r){ for(int c=0;c<cols;++c){ if(matrix[r][c]>maxValue){ maxValue=matrix[r][c]; rowIndex=r; colIndex=c; } } } printf("数组中最大的元素位于第 %d 行第 %d 列, 值为 %d.\n",rowIndex+1,colIndex+1,maxValue); return 0; } ``` 这里实现了遍历整个二维数组寻找其中绝对值最大的成员的功能,并且指出了这个成员的具体位置。值得注意的是这里的行列表达是从人类习惯的角度出发即从1计数而非编程传统上的从0开始[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值