网站历史快照,网站建设和网络营销区别,成都专做婚介网站的公司,给小孩做辅食的网站数组#xff1a;
什么是数组#xff1a;变量的组合#xff0c;是一种批量定义变量的方式。
定义#xff1a;类型 数组名[数量];int arr[5];
使用#xff1a;数组名[下标];下标#xff1a;从零开始#xff0c;范围#xff1a;0~数量-1。
遍历#xff1a;与for循环配合…数组
什么是数组变量的组合是一种批量定义变量的方式。
定义类型 数组名[数量];int arr[5];
使用数组名[下标];下标从零开始范围0~数量-1。
遍历与for循环配合使用循环变量i当作数组的下标。
初始化类型 数组名[数量] {1,2,3,4,5,...};1、数组与普通变量一样默认值是随机的为了安全要对进行初始化。2、这种初始化语法只能在定义数组时使用而且必须使用常量初始化。3、初始化数据过多编译器会丢弃并产生警告。4、初始化数据不够编译器则会补0。5、初始化数组时长度可以省略编译器会自动统计数据的个数然后告诉数组。sizeof(arr)/sizeof(arr[0]) 数组的长度练习1定义一个长度为10的数组并初始化计算出最大值最小值以及平均值。
#include stdio.hint main(int argc,const char* argv[])
{int arr[10] {1,9,0,7,6,5,3,4,8,2};int max arr[0] , min arr[0];float sum arr[0];for(int i1; i10; i){if(arr[i] max){max arr[i];}if(arr[i] min){min arr[i];}sum arr[i];}printf(%d %d %g\n,min,max,sum/10);} 练习2定义一个长度为10的数组并初始化进行升序排序。 for(int i0; ix-1; i) { for(int ji1; jx; j) { if(i j) { swap i j; } } }
#include stdio.hint main(int argc,const char* argv[])
{int arr[10] {1,9,0,7,6,5,3,4,8,2};for(int i0; i9; i){for(int ji1; j10; j){if(arr[i] arr[j]){int t arr[i];arr[i] arr[j];arr[j] t;}}}for(int i0; i10; i){printf(%d ,arr[i]);}
}数组越界
越界为了程序的运算效率是不会检查数组的下标。 数组越界的后果 1、一切正常。 2、段错误 3、脏数据
练习3定义一个长度为10的数组并初始化找出数组中第二个大的值。
#include stdio.hint main(int argc,const char* argv[])
{int arr[10] {20,19,0,7,6,5,3,4,38,2};int max arr[0]arr[1]?arr[0]:arr[1];int max2 arr[0]arr[1]?arr[1]:arr[0];for(int i2; i10; i){if(arr[i] max){max2 max;max arr[i];}else if(arr[i] max2){max2 arr[i];}}printf(%d %d\n,max,max2);
}
二维数组
一维数组相当于把变量排成一排通过编号访问。
二维数组相当于把变量排成矩阵通过行号和列号访问。
定义类型 数组名[行数][列数];int arr[3][5];[0,0][0,1][0,2][0,3][0,4][1,0][1,1][1,2][1,3][1,4][2,0][2,1][2,2][2,3][2,4]
使用数组名[行下标][列下标]行下标0 ~ 行数-1列下标0 ~ 列数-1
遍历需要与双层for循环配合外层循环负责遍历行内层循环负责遍历列。for(int i0; i3; i){for(int j0; j5; j){printf(%d ,arr[i][j]);}printf(\n);}
初始化类型 数组名[行数][列数] {{第一行},{第二行},{第三行}};练习4、定义一个5*5的数组找出其中的最小值下标计算周的和是多少。
#include stdio.hint main(int argc,const char* argv[])
{int arr[5][5] {{-1,3,5,7,9},{0,2,4,6,8},{1,2,13,4,5},{6,7,8,9,0},{4,5,6,7,8}}; int min_x 0 , min_y 0;for(int i0; i5; i){for(int j0; j5; j){if(arr[i][j] arr[min_x][min_y]){min_x i;min_y j;}}}int sum 0;min_x0 (sumarr[min_x-1][min_y]); // 上min_x4 (sumarr[min_x1][min_y]); // 下min_y0 (sumarr[min_x][min_y-1]); // 左min_y4 (sumarr[min_x][min_y1]); // 右min_x0 min_y0 (sumarr[min_x-1][min_y-1]); // 左上min_x0 min_y4 (sumarr[min_x-1][min_y1]); // 右上min_x4 min_y0 (sumarr[min_x1][min_y-1]); // 左下min_x4 min_y4 (sumarr[min_x1][min_y1]); // 右下printf(sum%d\n,sum);
}
变长数组
定义数组时使用变量当作它长度在代码编译期间数组的度是不确定的当执行到数组的定义语句时它的长度才家有确定下来一旦确定就无法更改了。优点可以根据实际情况来确定数组长度达到节约内存目的。
缺点不可以初始化#include stdio.hint main(int argc,const char* argv[])
{int n 0;// 数组长度可以 变化printf(请输入数组的长度);scanf(%d,n);int arr[n] {};printf(%d\n,sizeof(arr)/sizeof(arr[0]));
}
练习5显示N层杨辉三角形。 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1
#include stdio.hint main(int argc,const char* argv[])
{int n 0;printf(请输入n的值);scanf(%d,n);int arr[n][n];for(int l0; ln; l){arr[l][0] 1;arr[l][l] 1;for(int c 1; cl; c){arr[l][c] arr[l-1][c]arr[l-1][c-1];}}for(int i0; in; i){for(int j0; ji; j){printf(%d ,arr[i][j]);}printf(\n);}
} 下期
进制转换、原反补 函数 类型限制const static volatile register extern 指针 字符串 堆内存管理