C语言整型数组-笔记(六)

一、数组

1、数组概念

(1)数组定义:数组是一段连续的内存区域,一组有序的、类型相同的数据的集合。换句话说,数组是用来存储多个类型相同的数据的数据结构。数组是数据的容器,而非数据本身。
(2)数组名:数组的名字,数组名代表数组的起始地址。数组名代表数组首地址,引用时可不必再加&,加也可以。
(3)数组元素:索引或下标标识,索引或下标从0开始。
(4)数组长度: 数组中元素的个数被称为数组的长度。只能是常量和常量表达式(大于0)。动态计算数组长度:sizeof(arr)/sizeof(arr[0]);
(5)数组在内存中的存放: 存放时先存放到低字节,再存到高字节。每个数据元素占用的字节数,就是基类型的字节数,一个整型数组元素占4个字节
(6)允许使用变量的地方都可以使用数组元素,可以使用整型表达式引用数组的元素:如–数组名[整型表达式]
普通变量赋值:int b; b=5;
数组变量赋值:int a[4]; a[2]=5;
(7)不能直接将一个数组赋给另一个数组,即不能为数组整体赋值。

二、一维整型数组

1、一维整型数组初始化

(1) extern和static数组元素自动初始化为0。
(2)数组初始化是在数组定义时给元素赋初值
(3)一般形式:类型 数组名[常量表达式]={值,值…};
数组初始化时注意点:
①元素之间用逗号隔开;如:int ary[10]={1,2,3};
②可以只给部分元素赋值,剩余元素赋0值;int ary[10]={0,1,2,3,4,5,6,7,8,9};
③给全部元素赋值时,可以不说明元素的个数;如:int ary[ ]={0,1,2,3,4,5,6,7,8,9}
④初始化的数据个数允许少于数组的长度,但不能多于数组的长度

printf ("%d", arr[10]); //越界
arr[10]=100; //可能引发错误
arr[12]=200; //可能引发错误
//超出数组的长度,将导致段错误或者覆盖其它变量。

⑤初始化没有显示指明初始值的元素,一律初始化为零。

int arr[10]={0}; //全部初始化为0
int arr[10]={}; //全部初始化为0
int arr[10]; //不做初始化

(5)一维数组初始化用法
①一般初始化

#include <stdio.h>
int main()
{
	//数组初始化方式1
	int ID[3];
	ID[0]=1;//下标=数组元素个数-1
	ID[1]=2;
	ID[2]=3;
	printf("%d%d%d\n",ID[0],ID[1],ID[2]);
	//数组初始化方式2
	int ID[3]={1,2,3}; 
    printf("%d%d%d\n",ID[0],ID[1],ID[2]);
	return 0;
}

② for循环初始化

#include <stdio.h> 
int main()
{
	char alpha[26]; 
    int ary[10];
	int i, j; 
	for(i = 65,j = 0; i < 91; i++,j++) 
	{ 
		alpha[j] = i; 
		printf("The character is %c \n", alpha[j]); 
	} 
	for(i=0;i<10;i++)
	{
		printf("请输入整型数组元素初始值:");
		scanf("%d",&ary[i]);
	}
	for(i=0;i<10;i++)
	{
		printf("ary数组元素值为:");
		printf("%d\n",ary[i]);
	}
	return 0;
}

2、一维整型数组应用

(1) 输出一维整型数组元素的地址

#include <stdio.h>
int main()
{
   	int ID[3]={1,2,3};//数组初始化
	int i;//i可先定义,在for循环内定义有可能报错
   	for(i=0;i<3;i++)
	{
	  printf("%p\n",&ID[i]);//%p 表示输出的结果是指针(即变量的地址值)
	}
	return 0;
}
运行结果:
0019FF34
0019FF38
0019FF3C

结果说明,一个int数组元素占4字节,数组元素地址相差4Byte,若换为double型,则数组地址相差8Byte。
(2)输入一无符号整数num,要求通过计算,得到它的二进制方式,并输出在显示屏上(如输入10,结果:1010,不可直接调用除标准输入输出外的库函数)。

#include <stdio.h>

int main()
{
	int a,buf[16],i=0;//定义数组,变量
	printf("请输入十进制整数:\n");
	scanf("%d",&a);//输入十进制整数
	while(a>0)
	{
		buf[i++]=a%2;
		a=a/2;
	}
	printf("输出二进制数:\n");
	for(i--;i>=0;i--)//逆序输出
	{
		printf("%d",buf[i]);//输出二进制数
	}
	printf("\n");
	return 0;
}

输出:
在这里插入图片描述

三、二维整型数组

1、概念

(1)定义:可看成是由两个一维数组组成的数组,类似于一个由行和列组成的表格。
定义:int a[2][3];
(2)存储形式:二维数组在内存中是按行的顺序存放的,即先存放第一行的元素,再存放第二行的元素。如下:
a00 a01 a02
a10 a11 a12
a20 a21 a22

2、二维整型数组的初始化

格式:数据类型 数组名[常量表达式1][常量表达式2]={初始化数据}
(1)分行给二维数组赋初值。
如: int a[2][3]={{1 , 2 , 3 } , { 4 , 5 , 6 }};//{1 , 2 , 3 }相当于1个一维数组
(2)可以将所有数据写在一个花括弧内,按数组排列的顺序对各元素赋初值。
如: int a[2][3]={1 , 2 , 3 , 4 , 5 , 6 };
(3) 可以对部分元素赋初值,未被初始化的数组元素将自动赋 0。
如:int a[3][4]={{1},{5},{9}};
如:int a[3][4]={{1},{0,6},{0,0,11}};//对各行中的某一元素赋初值
如:int a[3][4]={{1},{5,6}};//只对某几行元素赋初值。
(4)如果对全部元素都赋初值,则定义数组时对第一维的长度可以不指定,但第二维的长度不能省。
如:int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
等价:int a[ ][4]={1,2,3,4,5,6,7,8,9,10,11,12};
(5)在定义时也可以只对部分元素赋初值而省略第一维的长度,但应分行赋初值。如:int a [][4]={{0,0,3},{},{0,10}};
(6)使用for循环初始化数组

#include <stdio.h>
int main( )
{ 	
	int a[3][3]={0};
	int i=0,j=0,temp=0;
	for(i=0;i<3;i++)
	{
		for(j=0;j<3;j++)
		{
			a[i][j]=temp;
			temp+=1;
			printf("b[%d][%d]=%d ",i,j,temp-1);
            printf("a[%d][%d]=%d ",i,j,a[i][j]); 
		}
		printf("\n");
	}
	return  0;
}
运行输出:
b[0][0]=0 b[0][1]=1 b[0][2]=2
b[1][0]=3 b[1][1]=4 b[1][2]=5
b[2][0]=6 b[2][1]=7 b[2][2]=8

3、二维整型数组应用

int a[][3]={1,2,3,4,5,6,7,8,9};和int a[][4]={{1,2},{3,4,5,6},{7}};//数组为3行4列
引用格式:数组名[行下标][列下标] 例如:ary[1][3] = 12;
(1) 输出数组元素值

#include <stdio.h>
int main( )
{ 	
	int a[3][3]={0,1,2,3,4,5,6,7,8};
	int i=0,j=0;
	for(i=0;i<3;i++)
	{
		for(j=0;j<3;j++)
		{
			printf("b[%d][%d]=%d ",i,j,a[i][j]);
		}
		printf("\n");
	}
	return  0;
}

(2) 模拟登陆界面-多个账号明码登陆

#include <stdio.h>
#include <string.h>

int main()
{   
	char sn[2][5]={"admin","user"};
	char sp[2][5]={"123","456"};
	char name[5]={0};
	char pwd[8]={0};
	printf("请输入姓名:");
	scanf("%s",name);
	printf("请输入密码:");
	scanf("%s",pwd);
	if((strcmp(name,sn[0])==0)&&(strcmp(pwd,sp[0])==0))
	{
		printf("登录成功\n");
	}
	else if((strcmp(name,sn[1])==0)&&(strcmp(pwd,sp[1])==0))
	{
		printf("登录成功\n");
	}
	else
	{
		printf("登录失败\n");
	}
	return 0;
}

编辑 2020-04-24 23:37 首次编辑
修改 2021-07-03 23:38 内容结构修改

注:本文旨于作为自己的学习笔记,不作他用。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值