C语言_二维数组
二维数组的创建
类型修饰符数组名[包含几个小数组][每个小数组有多少个元素] = {初始值};
初始值如何写?可以写n个一维数组的初始值
int array[3][4] = {{1,2, 3, 4},
{5,6, 7, 8},
{9,10, 11, 12}};一维数组可以省略元素个数,二维数组只能省略第一维
int array[][4] = {{1,2, 3, 4},
{5,6, 7, 8},
{9,10, 11, 12}};
第二种初始值写法
int array[3][4] = {1,2, 3, 4, 5, 6,7, 8, 9, 10, 11,12};
printf("%d",array[1][2]);
定义一个二维数组循环赋值
int array[3][4] = {0};
// 第一重循环, 遍历小数组
for (int i =0; i < 3; i++) {
// 第二重循环, 遍历小数组的元素
for (int j =0; j < 4; j++) {
// 给每个元素赋值, 随机范围是0 ~ 49
array[i][j] =arc4random() % 50;
// 输出每个元素
printf("%2d ", array[i][j]);
}
//在这相当于是小数组遍历完毕, 添加换行符
printf("
");
}
例一:将⼀个⼆维数组的行和列交换,存储到另外一个数组中去。
int array[3][4] = {0};
//第一重循环, 遍历小数组
for (int i =0; i < 3; i++) {
// 第二重循环, 遍历小数组的元素
for (int j =0; j < 4; j++) {
// 给每个元素赋值, 随机范围是0 ~ 49
array[i][j] =arc4random() % 50;
// 输出每个元素
printf("%2d ", array[i][j]);
}
//在这相当于是小数组遍历完毕, 添加换行符
printf("
");
}
int dest[4][3];
for (int i =0; i < 4; i++) {
for (int j =0; j < 3; j++) {
// 赋值过程要注意,
dest[i][j] = array[j][i];
printf("%2d ", dest[i][j]);
}
// 美观
printf("
");
}
例二:有⼀个3行4列的⼆维数组,要求编程找出最大元素,并输出所在的行和列。
// 方法一
// 定义一个二维数组,
int array[3][4] = {0};
//定义三个整型变量, 分别存储最大值,行, 列
int max = 0 ,row =0, col = 0;
//第一重循环, 遍历小数组
for (int i =0; i < 3; i++) {
// 第二重循环, 遍历小数组的元素
for (int j =0; j < 4; j++) {
// 给每个元素赋值, 随机范围是0 ~ 49
array[i][j] =arc4random() % 50;
// 输出每个元素
printf("%2d ", array[i][j]);
// 判断当前元素大于max
if (array[i][j] > max) {
// 如果当前元素大于max, 存储当前元素的值, 和所在的行和列
max = array[i][j];
row = i;
col = j;
}
}
//在这相当于是小数组遍历完毕, 添加换行符
printf("
");
}
// 输出最大值, 行, 列
printf("max = %d 行:%d列:%d
", max, row, col);
// 方法二
//定义两个整型变量, 记录最大值的位置
int maxRow = 0, maxCol =0;
for (int i =0; i < 3; i++) {
for (int j =0; j < 4; j++) {
if (array[i][j] > array[maxRow][maxCol]) {
maxRow = i;
maxCol = j;
}
}
}
printf("max = %d row = %d col = %d
", array[maxRow][maxCol], maxRow, maxCol);
测试元素补齐, 不足的用 0补齐
int array[][3] ={{1,2},{8, 9}};
for (int i =0; i < 2; i++) {
for (int j =0; j < 3; j++) {
printf("%d ", array[i][j]);
}
printf("
");
}
二.字符串数组
定义字符串数组
char strings[几个字符串][每个字符串的空间大小] = {初始值列表};
char strings[4][50] = {"iOS", "Cocos2D-X","Android", "Unity3D"};
strings[0] 就是第一个数组的首地址
可以理解为恒等于&strings[0][0]
循环输出字符串数组
printf("%s
", &strings[0][0]);
for (int i =0; i < 4; i++) {
printf("%s
", strings[i]);
}如果输出单个字符, 需要用%c
printf("%c
", strings[2][2]);
例一:创建⼀个字符串数组(内容是你周围⼀圈⼈的姓名),输出最⻓字符串的⻓度。
char strings[4][50] = {"iOS", "Cocos2D-X","Android", "Unity3D"};
//定义一个变量来存储最长的长度
int maxlength = 0;
// 遍历字符串数组
for (int i =0; i < 4; i++) {
// 进行判断
if (strlen(strings[maxlength]) <strlen(strings[i])) {
maxlength = i;
}
}
// 输出
printf("最长字符%s长度是%d
", strings[maxlength], maxlength);
例二:创建⼀个字符串数组(内容是你周围一圈⼈的姓名),对字符串 (英⽂)从小到大排序。
char strings[4][50] = {"iOS", "Cocos2D-X","Android", "Unity3D"};
for (int i =0; i < 4 - 1; i++) {
for (int j =0; j < 4 - i -1; j++) {
//条件判断 当strcmp的返回值大于0的时候,是按照升序排列的, 需要交换位置
if (strcmp(strings[j], strings[j +1]) > 0) {
// 交换字符串
// 字符串不能直接赋值, 需要用字符串拷贝函数strcpy
char temp[50] = {0};
strcpy(temp, strings[j]);
strcpy(strings[j], strings[j + 1]);
strcpy(strings[j + 1], temp);
}
}
}
// 循环输出
for (int i =0; i < 4; i++) {
printf("%s
", strings[i]);
}声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: C语言 二维数组
- 下一篇: Android多线程-----同步锁
