int main(int argc, const char * argv[])
{
@autoreleasepool {
#pragma mark-----------二维数组
int a[3][4]={
{1,2,3,4},
{5,6,7,8},
{12,10,11,12}
};
//打印二维数组
for (int i = 0; i<3; i++) {
for (int j =0; j<4; j++) {
printf(" %d ",a[i][j]);
}
printf("\n");
}
//把行和列交换,放到新的二维数组
int b[4][3]={0};
for (int i = 0; i<3; i++) {
for (int j =0; j<4; j++) {
b[j][i]=a[i][j];
}
}
printf("\n");
for (int i =0; i<4; i++) {
for (int j =0; j<3; j++) {
printf(" %d ",b[i][j]);
}
printf("\n");
}
//找出二维数组中的最大值,并把行和列表示出来
int max = 0;
for (int i =0; i<3; i++) {
for (int j =0; j<4; j++) {
if (max
max=a[i][j];
}
}
}
printf("max=%d",max);
for (int i = 0; i<3; i++) {
for (int j = 0; j<4; j++) {
if (max==a[i][j]) {
printf("第%d行,第%d列 ",i+1,j+1);
}
}
}
#pragma mark--------------总结
/**
* 1:求和算法(累加)
* 2:求最大值算法是(逐一比较)
* 3:排序算法是(先比较再交换)
* 4:二维数组运用,地图,扫雷,电影院,(选了就是1,没选就是0)
*/
#pragma mark--------------字符串数组
/**
* 1:访问某个字符串(数组名[第一维下标])
* 2:访问某个字符(数组名[第一维下标][第二维下标])
*/
char str[3][10]={"iPhone","Android","Win8"};
//1操作字符串(拷贝strcpy 拼接strcat 长度strlen 比较strcmp)
strcpy(str[2], "lanou");
printf("\n%s ",str[2]);
//2操作单个字符,数组名[第一维下标][第二维下标]
//通过双下标精确定位 要操作的字符
//字符串可以直接strcpy
//字符可以直接赋值
str[1][3]='a';
printf("\n%s",str[1]);
//练习题
//1,输入三个单词,找出最长的单词
long length = 0;
for (int i =0; i<3; i++) {
if (length
length=strlen(str[i]);
}
}
//%lu
printf("\n%ld",length);
for (int i =0; i<3; i++) {
if (length == strlen(str[i])) {
printf("\n最长的单词:%s \n",str[i]);
}
}
//2,十个单词,排序(小--大)
for (int i = 0; i<3-1; i++) {
//注意
for (int j =0; j<3-1-i; j++) {
if (strcmp(str[j], str[j+1])>0) {
char temp[10]={0} ;
strcpy(temp, str[j]);
strcpy(str[j], str[j+1]);
strcpy(str[j+1], temp);
}
}
}
for (int i = 0; i<3; i++) {
printf(" %s ",str[i]);
}
#pragma mark-------------多维数组
//1:多维数组,维数大于2
//2:for循环,第一层层数,第二层行数,第三层列数
//3:多个一维成二维,多个二维成三维
#pragma mark--------------作业
//1、(**)有一个3行4列的二维数组,要求编程找出最大的元素,并输出所在的行和列。
//2、(**)输入6个字符串,并对它们按从小到大的顺序排序后输出.
//3、(****)找出一个二维数组中的“鞍点”,即该位置上的元素在该行中最大,在该列中最小(也可能没有“鞍点”),打印有关信息。(提示:注意特殊情况
//解题思路(分析)
//4 3 2 1
//5 1 3 9
//6 7 8 3
//1,定义一个二维数组
//2,判断有无鞍点
//3,在该行中最大(最大值)
//4,在该列中最小(最小值)
//5,打印输出
//1,定义一个二维数组
// int c[3][4]={
// {4,3,2,1},
// {5,1,3,9},
// {6,7,8,3},
// }, min = 0,maxs = 0,d = 0,e = 0;//maxs行最大数,min为列最小数,d,e为记下下标的变量.
// int flag = 0;
//
// for (int i = 0; i<3; i++) {
// maxs = c[i][0];//行最大数
// for (int j = 0; j<4; j++) {
// if (maxs
// maxs = c[i][j];
// //d,e为记下下标的变量
// d=i;
// e=j;
// }
//
// min = c[0][e];//min为列最小数
// for (int k = 0; k<3; k++) {
// if (min > c[k][e] ) {
// min=c[k][e];
// }
// }
// }
//
// if (min ==maxs) {
// printf("\n鞍点为:%d,位于%d行,%d列",maxs,d+1,e+1);
// flag=1;
// }
// }
// if (flag == 0) {
// printf("该二维数组无鞍点");
// }
//2,判断有无鞍点
//3,在该行中最大(最大值)
//4,在该列中最小(最小值)
//5,行和列相等
// for (int i=0 ; i<3; i++) {
// for (int j = 0; j<4; j++) {
// if (min>c[j][j]) {
// min = c[j][j];
// }
// }
// if (min
// min = c[i][i];
// }
// }
// printf("\n %d ",min);
int a1[2][3]={
{1,2,3},
{4,5,6},
};
int max1 = 0;
int min1 = 0;
int index1=0;
int index2=0;
for (int i =0; i<2; i++) {
max1=a1[i][0];
for (int j = 0; j<3; j++) {
if (max1
max1=a1[i][j];
index1 = i;
index2 = j;
}
min1=a1[0][index2];
for (int k =0; k<2; k++) {
if (min1>a1[k][index2]) {
min1=a1[k][index2];
}
}
}
if (max1==min1) {
printf("\n鞍点是%d,在第%d行,在第%d列",min1,index1,index2);
}
}
}
return 0;
}