//
// main.m
// 1-19课程笔记
// 二维数组、字符串数组、多维数组
// 讲师:小辉
// 笔者:王学文
// Created by lanouhn on 15/1/19.
// Copyright (c) 2015年 lanouhn. All rights reserved.
//
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
/*
//一维数组
int a[10] = {1, 2, 3, 4, 5};
//二维数组,比起一维数组,多了一个维度(多了一个元素下标)
int b[2][3] = {1, 2, 3, 4, 5, 6};
//二维数组的定义
//格式:
//数据类型 数组名[行数][列数] = {值1,值2,…};
// 二维数组的元素个数 = 行数 * 列数;
//定义的其他形式
//1.赋值的时候可以省略,默认值为0
int array1[2][3] = {1, 2, 3};
//2.行数可以省略,由赋值的元素个数 与 列数 决定;
int array2[][3] = {1, 2, 3, 4};
//列数是不能省略的
//int array3[2][] = {1, 2, 3, 4, 5}; //error
//int array4[][] = {1, 2, 3, 4}; //error
//二位数组的使用
//元素的获取格式
//数组名[行数][列数]
//注:行数和列数从0开始
int array[3][2] = {1, 2, 3, 4, 5, 6};
//获取元素
// array[0][0];
// array[0][1];
// array[1][0];
// array[1][1];
// array[2][0];
// array[2][1];
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 2; j++) {
printf("array[%d][%d] = %d\n", i, j, array[i][j]);
}
}
//给数组的某个元素赋值
//定义一个5行6列的数组,并随机给每个数组赋值,取值范围[55,88],并求出最大值和最小值所在的位置
//清理缓存command + shift + k;
int a[5][6] = {0};
int max = 0, min = 89;
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 6; j++) {
a[i][j] = arc4random() % 34 + 55;
printf("a[%d][%d] = %d ", i, j, a[i][j]);
if (max < a[i][j]) {
max = a[i][j];
}
if (min > a[i][j]) {
min = a[i][j];
}
}
}
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 6; j++) {
if (max == a[i][j]) {
printf("\n最大值a[%d][%d] = %d\n", i, j, a[i][j]);
}
if (min == a[i][j]) {
printf("最小值a[%d][%d] = %d\n", i, j, a[i][j]);
}
}
}
int a[3][4] = {0};
int b[4][3] = {0};
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
a[i][j] = arc4random() % 11 + 50;
printf("a[%d][%d] = %d ", i, j, a[i][j]);
} printf("\n");
}
printf("交换后:\n");
for (int j = 0; j < 4; j++) {
for (int i = 0; i < 3; i++) {
b[j][i] = a[i][j];
printf("b[%d][%d] = %d ", j, i, b[j][i]);
}printf("\n");
}
//字符数组;数组内容存放的元素是字符(char)
//字符串数组:数组内存放的元素是字符串
//字符数组,又叫字符串
//字符串数组:数组内存放的元素是字符数组,数组套数组,所以字符串数组是一个二维的数组
//字符数组
char string1[6] = {'a', 'p', 'p', 'l', 'e', '\0'};
//字符串
char string2[6] = "apple";
//字符串数组
char string3[3][7] = {"apple", "xiaomi", "nokia"};
//输出字符串数组
printf("%s\n", string1);
//1.字符输出
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 7 && string3[i][j] != '\0'; j++) {
printf("%c", string3[i][j]);
}printf("\n");
}
printf("%s\n", string2);
for (int i = 0; i < 3; i++) {
printf("%s\n",string3[i]);
}
//创建一个数组,用于存放周围同学的姓名,并求出谁的名字最长。
char a[4][20] = {"weizijian", "wanhao", "yaochengzheng", "wangxuewen"};
unsigned long max = 0;
for (int i = 0; i < 4;i++) {
if (max < strlen(a[i])) {
max = strlen(a[i]);
}
}
for (int i = 0; i < 4; i++) {
if (max == strlen(a[i])) {
printf("姓名最长的时:%s\n", a[i]);
}
}
//输入字符串
char c = 0;
scanf("%c", &c);
//输入字符串
char m[10] = {0};
scanf("%s", m); //不需要加&,
//输入字符串数组
char k[3][10] = {0};
for (int i = 0; i < 3; i++) {
scanf("%s", k[i]);
}
scanf("%s %s %s", k[0], k[1], k[2]);
//对周围的学生姓名,进行排序
char name[][20] = {"wanhao", "weizijian", "wangxuewen", "yaochengzheng"};
for (int i = 0; i < 4 - 1; i++) {
for (int j = 0; j < 4- 1 - i; j++) {
if (strcmp(name[i], name[i+1]) > 0) {
char a[20] = {0};
strcpy(a, name[i]);
strcpy(name[i], name[i + 1]);
strcpy(name[i + 1], a);
}
}
}
//输出结果
for (int i = 0; i < 4; i++) {
printf("%s\n", name[i]);
}
//冒泡排序
int array[5] = {12, 33, 22,1, 20};
for (int i = 0;i < 5 - 1; i++) {
for (int j = 0; j < 5 - 1 - i; j++) {
if (array[j] > array[j + 1]) {
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
for (int i = 0; i < 5; i++) {
printf("%d\n", array[i]);
}
*/
//1、(**)有一个 3 行 4 列的二维数组,要求编程找出最大的元素,并输出所 在的行和列。
// int a[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 5, 4, 8, 3};
// int max = 0;
// for (int i = 0; i < 3; i++) {
// for (int j = 0; j < 4; j++) {
// if (max < a[i][j]) {
// max = a[i][j];
// }
// }
// }
// for (int i = 0; i < 3; i++) {
// for (int j = 0; j < 4; j++) {
// if (max == a[i][j]) {
// printf("最大值在%d行%d列\n", i + 1, j+ 1);
// }
// }
// }
//2、(**)输入 6 个字符串,并对它们按从小到大的顺序排序后输出。
// char a[6][20] = {0};
// printf("请输入6个字符串:");
// for (int i = 0; i < 6; i++) {
// scanf("%s", a[i]);
// }
// for (int i = 0; i < 6 - 1; i++) {
// for (int j = 0; j < 6 - 1 - i; j++) {
// if (strcmp(a[j], a[j + 1])) {
// char b[20] = {0};
// strcpy(b, a[j]);
// strcpy(a[j], a[j + 1]);
// strcpy(a[j + 1], b);
// }
// }
// }
// for (int i = 0; i < 6; i++) {
// printf("%s\n", a[i]);
// }
//3、(**)随机生成一个三维数组,编程求深度的平均值,保存在一个二维数组 中(相当于一个魔方从上面看)。
// int a[4][5][6] = {0};
// float b[4][5] = {0};
//
// for (int i = 0; i < 4; i++) {
// for (int j = 0; j < 5; j++) {
// for (int k = 0; k < 6; k++) {
// a[i][j][k] = arc4random() % 20;
// printf("a[%d][%d][%d] = %3d ", i, j, k, a[i][j][k]);
// }printf("\n");
// }
// }
// for (int j = 0; j < 5; j++) {
// for (int k = 0; k < 6; k++) {
// float sum = 0.0;
// for (int i = 0; i < 4; i++) {
// sum = sum + a[i][j][k];
// b[j][k] = sum;
// }
// printf("b[%d][%d] = %5.2f ", j, k, b[j][k] / 4);
// }printf("\n");
// }
return 0;
}