当前位置:
文档之家› C语言程序设计(谭浩强编)第七章数组
C语言程序设计(谭浩强编)第七章数组
第一次冒泡 排序的结果
n个数经过一次冒泡排序后,最大数(最小数)将被交换到 确定位置,但前面n-1数仍然无序。
8
5
5
5
5
第 1
5
8
4
4
4
趟
4
4
8
2
2
冒 泡
2
2
2
8
0
排
0
9
9
9
9
第一次 比较
第二次 比较
第三次 比较
第四次 比较
第二次冒泡 排序的结果
从上述我们可以得出: 如果n个数参加冒泡排序,则共要进行n-1趟排序。在第j
言 程 序
例 6.4 将ifno一tr (b个i[3=二][02维;] i数,<i组=, 行1j;和;i +列+元)素互换,存到 一个二{维f数or组( j中=。0 ;如j <: = 2 ; j + + )
{ printf(“%5d”,a[i][j] ) ;
设
1 2 b[3j][i] = a[i]行[j]列;互换结1果 4
六
较的次数,因此可用循环嵌 套控制语句来完成。
章
4、输出经排序后的十个数
} 四川理工学院
*main ( ) {
int a[10];
输入n个数给a[0]到a[n-1] for j=0 to n-2
int i,j,t;
for i=0 to n-j-1
printf(“input 10 numbers:\n”);
a[2][0] a[2][1] a[2][2] a[2][3]
四川理工学院
C
语 言 程
3.
对二维或高维数组可看成其元素也是数组的数组。 如:a[3][4]可看成由三个元素 a[0],a[1],a[2]组成。 而每个元素又是一个包含4个元素的一维数组。即
序
a[0] – – – – a00 a01 a02 a03
a[i] >a[i+1]
for (i=0;i<10;i++)
scanf(“%d”,&a[i]);
a[i]与a[i=1]
printf(“\n”);
交换
for (j=0;j<9;j++) for(i=0;i<9-j;i++)
输出a[1]到a[n]
if(a[i]>a[i+1])
{ t=a[i];a[i]=a[i+1];a[i+1]=t;}
语
1000
言
5600
程
0000
序
(4) int a[3][4] = {{1} , { } , {9}} ;
设
1000
计
0000
9000
第 4. int a[3][4] = {1, 2, 3, …… 12} ;
六
int a[ ][4] = {1, 2, 3, …… 12} ; 但不能写成: int a[3][ ] = {1, 2, 3, …… 12} ;
计
a=
} }
array a :b = 2 5
第
p4rint5f ( “6\n ”) ;1 2 3 3 6 printf ( “\narra4y b5: \n 6” ) ;
六 章
源算程法序f{:orbfp(o[rirji]=n[(ipt0j]fr=;i(=n“0itaf<\;[n(i=a12]j“”[r<j)2r%];a=;y5451id+;b”+,j:b+)[i+][j)]) ;
序 设 计
说明:1. 多维数组的下标仍从0计起。
例如:a[2][3]其元素个数为 6个,即:
a[0][0] , a[0][1] , a[0][2]
a[1][0] , a[1][1] , a[1][2]
第
2. C 语言中,二维(或高维)数组中的元素是按行
六
存放。如: a[3][4] 数组
章
a[0][0] a[0][1] a[0][2] a[0][3] a[1][0] a[1][1] a[1][2] a[1][3]
序 3. 部分赋值
设
(1) int a[3][4] = {{1 } , {5} , {9}} ;
计
1000
5000
第
9000
六
(2) int a[3][4] = {{1} , {0, 6} ,{0, 0, 11}};
章
1000
0600
0 0 11 0
四川理工学院
C
(3) int a[3][4] = {{1} , {5, 6}} ;
趟比较中有n-j个数参加排序,要进行n-j-1次两两比较。本例中 第1趟有5个数参加排序,进行了4次比较。
C 程序的结构:
语 main ( )
言{
程
1、定义相关的数组和相关变量
序
设
2、输入待排序的十个数
计
3、按冒泡算法对其升序排序
由于在排序中涉及到总共所
第
需的趟次和每一趟中具体比
设
a[3][4] a[1] – – – – a10 a11 a12 a13
计
a[2] – – – – a20 a21 a22 a23
二、二维数组元素的引用
第 格式: 数组名[下标][下标]
六
注意: 下标值同数组大小的匹配。 如:
章
int a[3][4] ; …….
a[3][4] = 3 ; (是错误的)
※例7.3 用冒泡法对10个数排序(由小到大)。 冒泡法:对将进行排序的数,两两比较,如果不满足次序要求,
则交换位置;
第9
8
08
9
趟 冒
5
5
泡4
4
排2
2
序
0
0
第一次 第二次
比较
比较
8 5 9 4 2 0
第三次 比较
8 5 4 9 2 0
第四次 比较
8 5 4 2 9 0
第五次 比较
8 5 4 2 0 9
printf(“the sorted numbers:\n”);
for(i=0;i<10;i++)
printf(“ %d”,a[i]);
}
C
§6.2 二维数组的定义和ww引w.s用
语 一、定义
言 格式: 类型说明符数组名[常量表达式][常量表达式]
程
如: int a[3][4] ; float b[5][6] ;
章 5. int a[3][4] = {{0, 0, 3}, { } , {0, 10}};
int a[ ][4] = {{0, 0, 3}, { } , {0, 10}};
四川理工学院
C main ( )
语 四、{ 二in维t 数a[2组][程3]序= 举{ {列1 , (2p,836}), {4 , 5 , 6 } } ;
四川理工学院
C 1. 分行赋初值 (即按行赋值) 如:
语
int a[3][4]={{1,2,3,4},{5,6 ,7,8},{9,10,11,12}};
言 2. 按数组排列的顺序对各元素赋值 如:
程
int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};