C语言基础篇四——数组
int main() { int id[18] = {}; int arr[17] = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2}; int compare[11] = {1,0,'X',9,8,7,6,5,4,3,2}; //将身份证存进id数组中 for (int i=0; i<18; ++i) { printf("输入%d位身份证号:\n",i+1); scanf("%d",&id[i]); } //计算相应的结果 int result = 0; for (int i=0; i<17; ++i) { result += id[i] * arr[i]; } //比较验证 if (id[17] == compare[result%11]) { printf("身份证有可能是真的 !\n"); } else { printf("这张身份证一定是假的!\n"); } return 0; }
什么是数组
同类型的一些数字连续排列形成的一个数字集合(没有空隙)
声明一个数组
类型 数组 数组名 【常量表达式】
类型---数组中的单个数字(数组元素)的类型
常量表示数组中元素的个数
int main() { int array[5] = {1,2,3,4,5}; //数据的个数与数组的容量相等, 完全初始化 float array1[3] = {3.14}; //数据个数小于数组容量, 用数据依次初始化每一个位置多出来的位置自动为0. int array2[4] = {1,2,3,4,5,6,7,8}; int array3[5] = {}; int number = 10; int array4[number];//变长数组 ,不可以被初始化 }
//int array[5] = {1,2,3,4,5};//使用数组中的单个元素
//下标 index
//所以的下标都是从0开始依次递增
//int number = array[0];//通过下标0 引用第一个元素
/*array[0] = 100;
printf("%d",array[0]);
scanf("%d",&array[1]);*/
//int array[5] = {};
//array[5];//下标不合法 数组越界
//array1 = array;数组不能直接整体赋值
//利用循环给复制数组
int main() { int number; printf("input a number:\n"); scanf("%d",&number); int arr[32] = {};//记录所有的余数 //利用循环将每一次的循环写入数组中,在将其逆序遍历数组。 for (int i=0; i<32; ++i) { arr[i] = number % 2; number /= 2; if (!number) { break; } } // 逆序遍历数组 也就是将脚坐标的值换一个顺序 printf("0b"); for (int j=31; j>=0; j--) { printf("%d", arr[j]); } printf("\n"); }
随机输入一列数,将其升序,降序排列
#include <stdlib.h> int main() { int arr[7]; printf("排序前:\n"); for (int i=0; i<7; ++i) { arr[i] = arc4random() % 34; printf("%d ",arr[i]); } printf("\n"); //排序 //冒泡排序 升序 /* 第一轮 20 16 6 5 8 21 15 16 20 6 5 8 21 15 16 6 20 5 8 21 15 16 6 5 20 8 21 15 16 6 5 8 20 21 15 16 6 5 8 20 21 15 16 6 5 8 20 15 21 第二轮 6 16 5 8 20 15 6 5 16 8 20 15 6 5 8 16 20 15 6 5 8 16 20 15 6 5 8 16 15 20 ... */ for (int i=0; i<6; ++i) { for (int j=0; j<6-i; ++j) { if (arr[j]>arr[j+1])//if语句执行为真时执行括号内的语句。 { int temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } printf("升序后:\n"); for (int i=0; i<7; ++i) { printf("%d ",arr[i]); } printf("\n"); //选择排序 降序 for (int i=0; i<6; ++i) { for (int j=i+1; j<7; ++j) { if (arr[i]<arr[j]) { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } } //遍历 printf("降序后:\n"); for (int i=0; i<7; ++i) { printf("%d ",arr[i]); } printf("\n"); return 0; }
乱序
#include <stdlib.h> int main() { int arr[8] = {1,2,3,4,5,6,7,8}; int brr[8] = {}; for (int i=0; i<8; ++i) { int index = arc4random() % (8-i); brr[i] = arr[index]; int temp = arr[index]; arr[index] = arr[7-i]; arr[7-i] = temp; } }
二维数组
以一维数组为元素的数组
类型 数组名 [常量表达式]
int main() { int arr[3]; int array[5][3]; int array1[3][2] = { 1,2, 3,4, 5,6 }; int array2[3][4] = {1,2}; int arr1[] = {1,2,3,4,5,6};//默认为完全初始化 int array4[][3]= {1,2,3,4,5,6,7,8,9};//个数是可以省的,数值不能省。数值少了就补0. }
#include <string.h> int main() { int m; printf("输入m的值(m是奇数)"); scanf("%d",&m); int arr[m][m]; //初始化数组 memset(arr,0,m*m*4); int indexCol = 0; int indexRol = m / 2; for (int i=0; i<m*m; ++i) { arr[indexCol][indexRol] = i+1; int col = indexCol; int rol = indexRol; indexRol -= 1; indexCol -= 1; if (indexCol < 0) { indexCol = m - 1; } if (indexRol < 0) { indexRol = m - 1; } if (arr[indexCol][indexRol] != 0) { indexCol = col + 1; indexRol = rol + 1; } } for (int i=0; i<m; ++i) { for (int j=0; j<m; ++j) { printf("%2d",arr[i][j]); } printf("\n"); } }
浙公网安备 33010602011771号