C零基础自学笔记<4>

第四部分

数组

#include <stdio.h>

int main()

{   
int a[5]={1,2,3,4,5};
//a是数组的名字,5表示数组元素的个数,并且这5个元素分别用a[0]a[1]...a[4]表示
int i;
for(i=0;i<5;++i)
  printf("%d\n",a[i]); //输出1 2 3 4 5  a[i]表示第i+1个元素
printf("%d\n",a[100]); //输出1 2 3 4 5 4176  没有a[100]这个元素,输出了没有给它分配的空间

    return 0;
}

/*----输出结果-----------

1
2
3
4
5
4176

-------------------------*/

为什么需要数组

为了解决大量同类型的使用数据的存储和使用问题
为了模拟现实世界
 

数组的分类

一维数组

a[i]  数组名[个数]

怎样定义一维数组


  为n个变量连续分配存储空间   不连续一定不是数组

  所有的变量数据类型必须相同  

  所有变量所占的字节大小必须相同

例子:


int a[5]  
一组数组名不代表数组中所有的元素
一维数组名代表数组第一个元素的地址

有关一维数组的操作:


初始化

  完全初始化
    int a[5]={1,2,3,4,5};

  不完全初始化
不完全初始化,未被初始化的元素自动为零
    int a[5]={1,2,3};

  不初始化
不初始化,所有元素是垃圾值
    int a[5];

   清零

    int a[5]={0};

  注意的三个错误写法 

 错误写法1
  int a[5];
    a[5]={1,2,3,4,5}//错误  
  故:只有在定义数组的同时才可以整体赋值,其他情况下整体赋值都是错误的。
  只有在定义时,[]里的数字是个数,其他地方[]里的数字为下标

  错误写法2
    int a[5]={1,2,3,4,5};
    a[5]=100; //错误  没有a[5]这个元素,最大到a[4]
 错误写法3

  

int a[5]={1,2,3,4,5};

    int b[5]; //错误  没有a[5]这个元素,最大到a[4]
     //若要即将a数组中全部的值复制给b数组,
    //b=a ;  错误写法
    for(i=0;i<5;++i)
     b[i]=a[i];  
赋值
#include <stdio.h>
int main()
{ 
	int a[5];
	scanf("%d\n",&a[0]);
	printf("a[0]=%d\n",a[0]);
	
	scanf("%d\n",&a[3]);
	printf("a[3]=%d\n",a[3]);
    int i;
    for(i=0;i<5;++i)
        printf(" %d\n",a[i]);
	return 0;
}

排序

求最值

倒置
//把一个数组的元素全部给倒过来
#include <stdio.h>

int main()

{ 
	int a[7]={1,2,3,4,5,6,7};
	int i,j;
	int t;
	i=0;
	j=6;
	while(i<j)
	{
		t=a[i];
		a[i]=a[j];
		a[j]=t;
		i++;
		--j;
	}
	for(i=0;i<7;++i)
		printf("%d\n",a[i]);
	return 0;
}

/*----输出结果-----------
7
6
5
4
3
2
1


-------------------------*/

查找

...

二维数组

int a[3][4];

总共是12个元素,可以当做3行4列来看待

这12个元素的名字依次是
a[0][0]  a[0][1]  a[0][2]  a[0][3]

a[1][0]  a[1][1]  a[1][2]  a[1][3]

a[2][0]  a[2][1]  a[2][2]  a[2][3]

所以  a[i][j]表示第i+1行  第j+1列的元素


int [m][n];该二维数组右下角位置的元素只能是a[m+1][n-1]


初始化


写法一:
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};

写法二:
	int a[3][4]={
		{1,2,3,4},
		{5,6,7,8},
		{9,10,11,12},
	};
//写法二一定注意格式
输出二维数组内容:

#include <stdio.h>

int main()

{ 
	int a[3][4]={
		{1,2,3,4},
		{5,6,7,8},
		{9,10,11,12},
	};
	int i,j;
	for(i=0;i<3;++i)
	{
		for(j=0;j<4;++j)
			printf("%d  ",a[i][j]);  //若想要对齐,可写为%-5d 负数表示左对齐
		printf("\n");
	}
	return 0;
}
/*----输出结果-----------
1  2  3  4  
5  6  7  8  
9  10  11  12  
-------------------------*/


对二维数组排序
求每一行的最大值
判断矩阵是否对称

多维数组

是否存在多维数组

不存在


  因为内存是线性一维的

  n维数组可以当做每个元素是n-1数组的一维数组

  比如:
   

    int a[3][4];
    该数组是含有3个元素的一维数组
    只不过每个元素都可以再分成4个小元素
  
    int a[3][4][5];
    该数组是含有3个元素的一维数组
    只不过每个元素都是4行5列的二维数组
  
    int a[3][4][5][6];
    该数组是含有3个元素的一维数组
    只不过每个元素都是个三维数组


 

——第四部分完——

下一篇从  函数 开始

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值