字符数组和二维数组

字符数组

用来存放字符数据的数组就是字符数组,字符数组一个元素存放一个字符。

例”ADSD123\n”字符串 C语言会默认在字符串末尾加个/0 作为字符串结束,该字符串共有9个字节。

可以用 char s[10] = “Hello”; 来初始化 如果未完全初始化,剩余的字符数组元素全部补0(/0的ASCII码也是0)。初始化字符数组大小要算上最后一个结束标志/0。

打印字符数组时可以用 s[i] != ‘\0’ 来作为结束条件。

也可以用 puts(const char *s); 来打印字符串。s = &s[0]

输入字符可以用 gets(char *s); 来进行输入字符。

Scanf(“%s”,s); 也可以用来输入字符串,但是不能带空格和tab,scanf会将空格作为结束标志

size_t strlen(const char *s); size_t  ó unsigned long

可以用strlen来计算字符串有效字符个数。使用时需要包含头文件#include<string.h>

sizeof(s)计算的是s数组的容量。

“1234”与1234的区别 1234为int整形 占四个字节  “1234”为字符串 为数组 占5个字节是匿名数组 ,为常量 只能为右值,不能被修改。

可以使用char *strcpy(char *dest, const char *src); 来进行复制字符数组。

例 s1[100] = “Hello”  s2[100];  strcpy(s2,s1); //将s1数组里的元素复制到s2中。

可以使用char *strcat(char *dest, const char *src); 来进行数组连接      

例 strcat (s1,s2); 可以将s2字符数组 放在 s1的后面。

  int strcmp(const char *s1, const char *s2); 可以用来进行字符数组比较,比较方式是从第一个元素开始比较 字符ASCII码大小,如果相等则比较第二个元素,如果完全相等则两个字符数组相同。

返回值为 int 型 ,返回值大于0 则s1 > s2 ,小于0 则s1 < s2 ,等于0则 s1 = s2。

返回值为 s1[i]里的ASCII码减s2[i]里的ASCII码

代码练习:

e1.定义一个数组s[100] 将整形 i = 1234 转换为字符型 存入 s[100]中。

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

int main(int argc, const char *argv[])
{
	int i = 1234;
	char s[100];
	int n,j = 0;

	while ( i != 0)
	{
		n = i % 10;
		s[j] = n + '0';
		i /= 10;
		j++;
	}

	s[j] = '\0';
	puts(s);

	int len = strlen(s);
	for(j = 0; j < len / 2; ++j)
	{
		char t = s[j];
		s[j] = s[len -j - 1];
		s[len - j - 1] = t;
	}
	puts(s);
	
	return 0;
}

二维数组

二维数组定义的一般形式为:

类型名 数组名【 常量表达式 】【 常量表达式 】;

例: int a[3][4];

可以将a[3][4]看成一个有3个一维数组 每个数组有4个整形。

a[0] 代表着a[0][0]~a[0][3]整个一维数组。

二维数组具有  1.单一性:a[0] – a[2]内都是有4个整形

                       2.有序性:a[0]的内存空间小于a[1]

                       3.连续性:a[0] – a[2]在内存空间内是连续的没有被打断

无论是几维数组都可以递归到一位数组来解释。

二维数组初始化如下:int a[3][4]

语法规定,初始化时可以省略靠近变量名[]内的常量;如int a[ ][4];

求二维数组行数可以用 sizeof(a) / sizeof(a[0]);

求二维数组列数可以用 sizeof(a[0]) / sizeof(a[0][0]);

a[0] 表示的是 a[0][0]~a[0][3] 四个整形。

代码练习:

e2.创造一个二维数组a[][4] = {1,2,3,4,5,6,7,8,9,10,11,12,13};求出该二维数组每个元素的平均值。

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

int main(int argc, const char *argv[])
{
	int a[][4] = {1,2,3,4,5,6,7,8,9,10,11,12,13};
	int rows = sizeof(a) / sizeof(a[0]);
	int cols = sizeof(a[0]) / sizeof(a[0][0]);
	int i, j, sum = 0;

	for(i = 0; i < rows ; ++i)
	{
		for(j = 0; j < cols ; ++j)
		{
			sum += a[i][j];
		}
	}

	printf("%f\n",sum / (float)(rows * cols));

	
	return 0;
}

  • 26
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值