一、一维数组 1.1、定义一维数组 1.1.1、一般形式为:类型符 数组名[常量表达式],如:int a[n] 说明:(1)数组名的命名规则遵循标识符命名规则 (2)数组下标从0开始,如a[10]下标为0-9,不存在a[10] (3)C语言规定,常量表达式不允许做动态定义,如下面这样定义数组是不允许的,数组的大小不能依赖于程序运行过程中变量的值
int n; scanf("%d",&n); int a[n];1.2、引用一维数组 1.2.1、引用数组的表示形式 数组名[下标],如a[0]表示数组序号为0的元素 注意:引用数组只能引用数组元素,而不能一次整体调用整个数组全部元素的值
1.2.2、一维数组的初始化 (1)在定义数组时对全部数组元素赋予初值: int a[10] = {0,1,2,3,4,5,6,7,8,9}; (2)可以只给数组中的一部分元素赋值: int a[10] = {0,1,2,3,4};系统给未赋值的元素赋初值为0 (3)在对全部数组元素赋初值时,由于数据的个数已经确定,因此可以不指定数组长度: int a[5] = {1,2,3,4,5};等价于int a[] = {1,2,3,4,5}虽然没有指定长度,但是系统会根据花括号中的数据个数自动确定a数组有5个元素
二、字符数组 2.1、定义字符数组,与定义数值型数组类似: char c[10] = {'a','b','c'}; 需要注意的是字符型数据是以ASCII码的形式存放的,因此也可以用整型数组来存放字符,如:int c[10] = {'a','b','c'};是合法的,但是浪费存储空间
2.2、字符串和字符串的结束标志 2.2.1、C语言中,是将字符串作为字符数组来处理的 2.2.2、以字符’\0’作为字符串的结束标志
#include <stdio.h> int main() { int i; char c[5] = {'a','b','\0','c','d'}; printf("%s",c); printf("\n"); } //输出为ab2.3、字符数组的输入输出 2.3.1、单个字符输入输出
int i; char c[5] = {'a','b','c','d','e'}; for(i = 0;i < 5;i++) { printf("%c",c[i]); } //输出为abcde2.3.2、将整个字符串一次输入或输出
#include <stdio.h> int main() { int i; char c[5]; scanf("%s",c); for(i = 0;i < 5;i++) { printf("%c ",c[i]); } printf("\n"); printf("%s\n",c); }注意:scanf无法录入空格
2.4、使用字符串处理函数 2.4.1、puts函数——输出字符串的函数
char str[] = {"china"}; puts(str); //输出china2.4.2、gets函数——输入字符串的函数
gets(str); //可以输入空格2.4.3、strlen函数——测字符串长度的函数
char str[10] = "China" printf("%d\\n",strlen(str)); //输出为52.4.4、strcat函数——字符串连接函数
char a[100] = {"abcd"}; char b[] = {"efgh"}; printf("%s\n",strcat(a,b)); //输出为abcdefgh注意:strcat的作用是把b字符串接到a字符串后面,结果放到a中,所以a一定要足够大 2.4.5、strcpy和strncpy函数——字符串复制函数
char a[10] = {"abcd"}; char b[] = {"efgh"}; char c[] = {"ijkl"}; printf("%s\n",strcpy(a,b));//输出efgh,将b复制给a并替换a中原有的字符串 printf("%s\n",strncpy(a,c,2));//输出ijgh,将c中的前两个字符复制给a中的前两个字符注意:(1)a字符必须足够大容纳b字符 (2)复制完后的结果是放到a字符中 (3)使用strncpy注意复制的字符个数n应小于本身长度且小于a的长度 2.4.6、strcmp函数——字符串比较函数
char a[] = {"abcd"}; char b[] = {"efgh"}; printf("%d\n",strcmp(a,b)); //输出-1注意:(1)以第1对不相同的字符的比较结果为准 (2)如果a=b,返回0 (3)如果a>b,返回1 (4)如果a<b,返回-1