c矩阵从⼩到⼤排序_怎样⽤c语⾔来解决排序问题
定义⼀维数组
假如给你⼀个问题,让你输⼊10个地区的⾯积(⾯积为整数),对它们由⼩到⼤进⾏排序,并且输出排序的结果。
从⼩到⼤排⼀排
那么,要搞清楚这个问题之前,我们得先来看看,怎么定义⼀个⼀维数组?
是这样的,int a[5]
a就是数组的名字,5就是这个数组的个数,a[5]⾥⾯放着a[0],a[1],a[2],a[3],a[4]这样的数
可以这样理解,a[5]是房⼦的名字,房⼦⾥住着a[0],a[1],a[2],a[3],a[4]这样的租客。
为什么明明房⼦叫a[5],⾥⾯却没有住着a[5]这样的数字呢你有见过跟房⼦叫同名的⼈吗。哈哈哈,开个玩笑。主要呢,计算机是从0开始算起的,⽐如说有3个数,如果没有特别说明的话,那么他们会是0,1,2
好了。明⽩什么怎么定义⼀纬数组了,那么我们怎么样来赋值呢??
可以这样,int a[5]={2,4,6,8,10}
这样⼦的意思是,我们的a[0]租客跟2产⽣了联系,a[0]=2;同样的,a[1]=4,a[2]=6
假如说我们这样,定义了5个⼈,却只有3个被赋予了值,其他的没说,那要怎么办??
⽐如 int a[5]={2,4,6}
我房⼦⾥住了5个⼈,但是却只给我3个数,好⽐就只有⼈交了房租。
这样其实有可能是,你给后⾯那⼏个没收到数的免租了,也就是a[3]和a[4]都等于0。
数的排序
好了,再来这样⼀道问题,我给你10个数,分别是0,1,2,3,4,5,6,7,8,9。然后我现在想让
你倒序把他们输出来。
int i,a[10]={0,1,2,3,4,5,6,7,8,9};
for(i=9;i>=0;i--)
printf("%d\t",a[i]);
printf("\n");
现在给你5个数,然后让他们进⾏从⼩到⼤排序,你会怎么排??
其实我们有⼀种⽅法,叫选择法。
⽐如这样,1,5,4,2,6
这样5个数,第⼀个数和第⼆个数⽐较,谁⼩谁就放第⼀个数的位置,再跟第三,第四和第五⽤同样的⽅法,这样就能保证我们第⼀个⼀定是最⼩的了。
同样的,第⼆⼩的也⽤同样的⽅法,第三⼩的也是。这样就能保证我们的输出了。既然这样的话,我们来看看⼀开始问到的那道题。
开始做题
假如给你⼀个问题,让你输⼊10个地区的⾯积(⾯积为整数),对它们由⼩到⼤进⾏排序,并且输出排序的结果。
⾸先,我们来输⼊10个数
int a[10];
int i;
printf("请输⼊10个⾯积:\n");
for(i=0;i<=9;i++)
scanf("%d",&a[i]);
然后,得到数后,我们就该开始进⾏排序了。
for(i=0;i<=8;i++)
for(j=i+1;i<=9;j++)
if(a[i]>a[j])
{
t=a[i];
a[i]=a[j];
a[j]=a[t]
}
最后的最后,只要把这些数都输出就可以啦。
printf("排序后的⾯积依次是:\n");
for(i=0;i<=9;i++)
printf("%d\t",a[i]);
printf("\n");
其实呢,排序除了选择法,还有另外⼀种,冒泡法(⼜叫沉底法)
道理是这样的,就是左右两个数⽐较,⼤的就放后⾯,这样,我们就会发现。到最后的那个数,就是最⼤的了。
我们来看⼀下程序吧,这个过程稍微有点复杂,看不懂也没关系。
for(j=0;j<=8;j++)
for(i=0;i<=8-j;i++)
if(a[i]>a[i+1])
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t
}
定义⼆维数组
刚学习了⼀纬数组,现在我们来定义⼀下⼆维数组把
int a[2][3]={{1,2,3},{4,5,6}}
这⾥就是,2⾏3列的意思,有多少⾏就有多少个⼩括号(当然可以省略,但是考试的时候要知道它的存在。尽管你看不到,但是它依然存在)在这⾥⾯,我们第⼀⾏就有a[0][0],a[0][1],a[0][2]这样的存在,同样的,第⼆⾏也会有a[1][0],a[1][1],a[1][2]这样的存在。
当然对于他们的赋值,可以参考⼀纬数组,或者在后台留⾔~
然后如果遇到了
int a[2][3]={{1,2,3},{}}这样的,第⼆⾏空⽩的,就是类似第⼀数组的免租,emm没错,就是3个0。房东太懒了,懒得写~接下来我们来做⼀道题
将⼀个⼆维数组a={{1,2,3},{4,5,6}}的⾏列元素互换,存到另⼀个⼆维数组b中并输出。
这⾥我们分成三步来写吧~
⾸先,也就最简单最重要的第⼀步,定义
int a[2][3]={{1,2,3},{4,5,6}};
int b[3][2];
第⼆步,就是让他们互换
这⾥我们必须要知道,我们想要实现的结果就是,让a[i][j]=b[j][i]
就是让a[0][1]=b[1][0]嘛
那我们就⼀起来写⼀下吧,也刚好熟悉⼀下⼆维数组的代码
int i,j;
for(i=0;i<=1;i++)
for(j=0;j<=2;j++)
b[j][i]=a[i][j];
这⾥可以先暂停⼀下下,好好看
最后⼀步,就是把我们互换好的数输出就可以了
printf("数组b为:\n");
for(j=0;j<=2;j++)
{
for(i=0;i<=1;i++)
printf("%d\t",b[j][i]);
printf("\n");
}
已知矩阵a={{1,2,3},{9,8,7},{-10,10,5}},请编写程序求出其中值最⼤的那个元素int i,j,max;
int a[3][3]={{1,2,3},{9,8,7},{-10,10,5}};
max=a[0][0];
for(i=0;i<=2;i++)
for(j=0;j<=2;j++)
if(a[i][j]>max)
max=a[i][j];
定义字符数组
字符数组其实跟前⾯的好像
⽐如你要输⼊⼀个“I L U”
可以写成char c[5]={'I',' ','L',' ','Y'}
或者也可以⽤⼆维数组,输出⼀个很好看的图案
⽐如char c[3][3]={{' ','*',' '},{'*',' ','*'},{' ','*',' '}}
输出数组
接下来我们来了解⼀下,怎么样输出字符数组吧
(1)简单粗爆,挨个输出,printf("%c",)
⽐如,定义⼀个字符串“I Have”,然后输出这个字符串。char c[6]={'I','','H','a','v','e'}
int i;
for(i=0;i<=9;i++)
printf("%c",c[i]);怎么定义二维数组c语言
printf("\n");
(2)整体输出printf("%s")或puts()
char c[6]={'I','','H','a','v','e'}
printf("%s\n",c);
或者把printf("%s\n",c)直接换成puts(c)
神奇的\0
char c[5]={'I','','L','',\0,'Y'}
puts(c)
这样⼦输出来的,就只会是"I L "了
因为\0后⾯的不输出
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论