ctry L :清屏
进入夹目录的三种命令: cd ~ cd home/hq/ cd
cat test.c无行号 nl test.c带行号
数组是具有一定顺序关系的若干个变量的集合,组成数组的各个变量称为数组的元素。
数组中各元素的数据类型要求相同,用数组名和下标确定。
一、一维数组
1、定义与使用
一维数组:<存储类型> <数据类型><数组名> [<表达式>];
#include<stdio.h>
int main(){
int a[6],i;
for (i=0;i<6;i++) //只能逐个引用数组元素,不能一次性引用整个数组;
printf("%p",&a[i]); //打印数组各元素的地址
printf("%p",a); //打印数组的起始地址,打印数组用%p
printf("%d\n",sizeof(a)); //打印数组占用的总空间
return 0;
}
int a[5]={1,2,3,4,5}; int a[]={1,2,3,4,5};
//数组不初始化,其元素值为随机值
//对static数组元素不赋初值,数组会自动赋以0值
//只给部分数组元素赋初值,剩下的默认为0;
2、练习:冒泡排序
#include<stdio.h>
int main(){
int a[]={1,3,4,2,45,9}; //冒泡排序
int t;
n=sizeof(a)/sizeof(int);
for (i=0;i<n-1;i++) {
for(j=0;j<n-i-1;j++){
if(a[j]>a[j+1]){
t=a[j+1];
A[j+1]=a[j];
a[j]=t;
}
}
}
for (i=0;i<n;i++)
printf("%d\n",a[i]);
puts("");
return 0;
}
二、 二维数组
定义方式: 数组类型 数组名[常量表达式][常量表达式]
声明时行数可以省略,列数不可以省略
数组元素的存放顺序是以行序优先的原则进行存储的,因为内存是一维的。
a[0] a[0][0] a[0][1] a[0][2]
a[1] a[1][0] a[1][1] a[1][2]
a[2] a[2][0] a[2][1] a[2][2]
相当于多个一维数组构成
#include<stdio.h>
int main(){
int a[7][5];
int i,j;
for (i=0;i<7;i++) { //只能逐个引用数组元素,不能一次性引用整个数组;
for (j=0;i<5;i++)
putchar('/n');
}
printf("%p",&a[i][j]); //打印数组各元素的地址
printf("%p",a); //打印数组的起始地址
printf("%d\n",sizeof(a)); //打印数组的总长度
return 0;
}
二维数组元素的初始化:
int a[2]3]={{1,2,3},{4,5,6}};
部分初始化,其它补0;
#include<stdio.h>
int main(){
int a[2][3]={{},{2}};
int i,j;
for (i=0;i<2;i++) {
for (j=0;i<3;i++)
printf("%d",a[i][j]);
putchar('/n');
}
return 0;
}
三、多维数组
具有两个或两个以上下标的数组称为多维数组。
int main(int argc,const char *argv[]) //杨辉三角
int a[10][10]={{0}}; //定义十行十列数组,并全部置为0
int i,j;
for(i=0;i<10;i++ ){
a[i][0]=1; //第一列全部置为1
for(j=1;j<=i;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j]; //第i行i列的值置为第i-1行,j-1列和i-1行,j列的和
}
for(i=0;i<10;i++ ){
for(j=0; j<=i;j++)
printf(”%8d" ,a[i][j]);
printf("\n");
return 0:
#include <stdio.h>
int main(int argc, const char *argv[ ] ) //求数组中的最大值
int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};
inti,j,row,cloumn;
roW= cloumn=0 ;
for(i=0;i<3;i++){
for(j=0;j<3; j++ ){
if(a[row][clounn]<a[i][j]){
row=i ;
cloumn=j;
}
}
}
printf("max-%d 最大值所在行为%d行%d列\n",a[ row][clounn], row,cloumn);
return 0;
}