学习总结:今天学的字符数组上的是云里雾里,在老师不断狂轰乱炸彻底举白旗投降了,但是还是在努力挣扎,勇敢zaizai不怕困难。
今天是写博客的第五天了,每天坚持写一篇博客是写作目标,学期1w行代码是学术目标,目前正在努力中,开始写博客是抱着当学习日志在写,但没想到有那么多友友会看这个小白写的低级烂文(万分感谢)
二维数组基本类型为a[ ] [ ],且下标最大为行列值减一(命名下标从0开始)
最常见的为排序问题,个人感觉选择排序较为使用方便。
(1)选择排序
首先将选择排序拆分为选择和排序
即 选择+排序=选择排序
在解决问题时首先解决的是算法再决定代码的选择
【1】选择问题
选择常见的为最大,最小,中位数等等。
例如选择最大 max
1.输入 (scanf)有n个数的数组a
2.逐一比较a中数大小假定第一个为最大
max=a[1];k=1
3.for i=2 to n do
4.if max<a[i]
5.then max=a[i] k=i
再n-1次比较后就可以选出最大值,这种算法在时间是为最短的最优方案。
2.排序
(1)快速排序
排序的大致思想与选择一样,都在与比较后将大小判断,但排序可以有更灵活的解决方案。
在高中就学习过排列组合问题,其中捆绑法为本次重点,将一部分数划分为一部分,剩下为第二部分,两组同时判断再合并。
(2)冒泡排序法 ------- 求最大值且指出所在行列
#include <stdio.h>
int main()
{
int i,j,row=0,colum=0,max;
int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; //定义数组并赋初值
max=a[0][0]; //先认为a[0][0]最大
for(i=0;i<=2;i++)
for(j=0;j<=3;j++)
if(a[i][j]>max) //如果某元素大于max,就取代max的原值
{
max=a[i][j]; row=i; //记下此元素的行号
colum=j; //记下此元素的列号
}
printf("max=%d\nrow=%d\ncolum=%d\n",max,row,colum);
return 0;
}
下题将在下章给出练习结果
(3)二维数组互换元素
#include<stdio.h>
int main()
{
int a[2][3]={{1,2,3},{4,5,6}};
int b[3][2],i,j;
printf("array a:\n");
for(i=0;i<=1;i++)
{for(j=0;j<=2;j++)
{
printf("%5d",a[i][j]);
b[j][i]=a[i][j];
}
printf("\n");
}
printf("array b:\n");
for(i=0;i<=2;i++)
{
for(j=0;j<=1;j++)
printf("%5d",b[i][j]);
printf("\n");
}
return 0;
}