数组
数组是一组有序数字的集合
数组中的每一个元素都属于同一个数据类型(数组元素类型称为数组基类型)
用一个数组名和下标来唯一确定数组中的元素
数组定义
定义:类型说明符 数组名 [常量表达式]
int a[2]={1,2}
类型说明符为数组的类型
数组命名规则遵守标识符命名规则
常量表达式不能包含变量(即不能有int n=1; a[n] )
常量表达式中指明元素的个数必须大于0 (数组成员为数组元素)
下标为数组维度 比如 a[2][3] 有两个下标为二维数组
数组定义时,为数组元素赋初值称为数组初始化
例: a[4]={1,3,5,7} 元素长度可以不定义
当给元素赋值时,不为其赋值的会自动默认赋值为0
数组引用
数组名[下标]
例 引用的时候 a[3]为序号为3的元素,即第4个(从0开始,到n-1结束)
ps:这是引用的,不是定义
一维数组的输入输出
数组的运用离不开循环
输入
#include <stdio.h>
int main()
{
int a[2],i;
for(i=0;i<2;i++)
{
scanf("%d",&a[i]);
}
return 0;
}
输出
#include <stdio.h>
int main()
{
int a[2]={1,2},i;
for(i=0;i<2;i++)
{
printf("%d",a[i]);
}
return 0;
}
二维数组
类型说明符 数组名 [ 常量表达式1] [ 常量表达式2]
常量表达式1代表行数 常量表达式2代表列数
例 int a[1] [2]表示为
a[0]-----a[0] [0],a[0] [1]
a[1]-----a[1] [0],a[1] [1]
a[2]-----a[2] [0],a[2] [1]
二维数组中各个元素是连续存放的,不是二维的,是线性的,只是在逻辑上的概念用矩阵形式
二维数组的初始化
定义时,一维数组的长度可以省略,但二维长度不能省略
(1)赋值时可以分行赋值
例:int a[3] [2]={{1,2},{3,4},{5,6}};
(2)赋值时可以写在一个花括号内,会自动按顺序为各元素赋值
例: int a[3] [2]={1,2,3,4,5,6};
引用时,数组名不能进行赋值
二维数组的输入输出
同一维数组一样,但需要采用双重循环的方式
输入
#include <stdio.h>
int main()
{
int a[2][2],i,j;
for(i=0;i<2;i++)
{
for(j=0;j<2;j++)
{
scanf("%2d",&a[i][j]);
}
}
return 0;
}
输出
#include <stdio.h>
int main()
{
int a[2][2]={1,2,3,4},i,j;
for(i=0;i<2;i++)
{
for(j=0;j<2;j++)
{
printf("%2d",a[i][j]);
}
}
return 0;
}
二维数组的运用
行列的转换 关键点在于 双重循环 和 转换
转换行列其实为b[j] [i] = a[i] [j]
#include <stdio.h>
int main()
{
int a[2][3] = { {1,2,3},{4,5,6} }, b[3][2], i, j;
printf("队列a=\n");
for (i = 0; i < 2; i++)
{
for (j = 0; j < 3; j++)
{
printf("%4d", a[i][j]);
b[j][i] = a[i][j];
}
printf("\n");
}
printf("队列b=\n");
for (i = 0; i < 3; i++)
{
for (j = 0; j < 2; j++)
{
printf("%4d", b[i][j]);
}
printf("\n");
}
return 0;
}
字符数组
用于存放字符数据的数组
c语言用字符数组用来存放字符串,字符数组中的各元素依次存放字符串的各字符
格式:char c[常量表达式]
字符串实际占有单元个数等于字符串长度+1 (最后一个结束符 \0 需要占用一个元素)
字符数组初始化
(1)用单个字符对字符数组初始化
例 char c[4]={‘c’,’ ',‘p’}
缺点:1.不进行初始化,数组中各元素会无法预料
2.花括号初值大于数组长度,则出现语法错误
3.如果初值个数小于数组长度,则后面的元素会自动被赋值为空(即\0)
4.预定的数组长度与初值个数一样时,系统会自动省略数组长度,根据初值个数来自动确定数组长度
(2)用字符串常量对字符数组初始化
例 char str[6]={“CHINA”}
1.可以省略花扩号
2.可以省略长度值
ps:字符数组利用结束符\0来结束循环
字符数组的输入输出
和前面一样,采用循环方式
不同的点是将%d改成%c,&d改成&c
所以不提了
字符数组整体或部分输入输出
char str[6];
scanf(“%s”,str);
ps:输入输出必须以字符串地址形式,也可以是字符串常量“…”,输入时不能输入 “空格” “\t” “\n”,如果需要输入空格则需要gets函数,输入数组名前不加&
字符串处理函数
puts 输出字符串
puts(字符数组)
gets 输入字符串
gets(字符数组) --可以输入带空格的字符串
加入#include <string,h>后使用以下函数
strcat 字符串连接
strcat(字符数组1,字符数组2)
将字符数组2连接到字符数组1后
#include <stdio.h>
#include <string.h>
int main()
{
char str1[30]="hello ";
char str2[30]="world";
printf("%s",strcat(str1,str2));
}
strcpy 字符串复制
strcpy(字符数组1,字符串2)
ps:不能使用赋值
字符数组1长度不能小于字符串2长度
复制时同时复制\0
strcmp 字符串比较
strcmp(字符串1,字符串2)
比较字符串1和2
结果:字符串1=字符串时 函数值为0
字符串1<字符串2 函数为一负整数
字符串1>字符串2 函数为一正整数
strlen 字符串长度
strlen(字符数组)
测试字符串长度,但不包括\0
char str[10]="apple"
printf("%d",strlen(str));
结果为5
strlwr 将字符串中大写字母换成小写字母
strupr 将字符串中小写字母换成大写字母
感谢收看笔记