C语言--数组-创新互联
- 一.数组
- 二.一维数组
- 1.定义一维数组
- 2.引用一维数组
- 3.初始化一维数组
- (1).全部赋值
- (2).部分赋值
- (3).全部赋为0
- (4).数据个数确定可不指定数组长度
- 4.例子
- 三.二维数组
- 1.定义二维数组
- 2.引用二维数组
- 3.二维数组的初始化
- (1)分行赋初值
- (2)整体赋值
- (3)部分赋值
- (4)全部赋值
- 4.举例
- 四.字符数组
- 1.定义字符数组
- 2.初始化字符数组
- 3.引用字符元素中的元素
- 4.字符串和字符串结束标志
- 使用字符串常量使字符数组初始化
- 5。字符串的输入输出
- 6.使用字符串处理函数
- 1.puts函数--输出字符串
- 2.gets函数--输入字符串
- 4.strcat--字符串连接函数
- 4.strcpy和strncpy函数--字符串复制函数
- 5.strcmp函数--字符串比较函数
- 6.strlen函数——测字符串长度的函数
- 7.strupr函数和strlwr函数——转化为大小写的函数
- 五.实例
一维数组是数组中最简单的,它的元素只需要用数组名加一个下标,就能唯一地确定元素。如s[9]就是一个一维数组中的元素。s[9][0]代表二维数组中的元素,s[9][0][1]代表三维数组中的元素。
1.定义一维数组int A[10]
//定义了一个整型数组,数组名为A,包含十个元素。
定义一维数组的一般形式:
类型说明符+数组名[常量表达式]
⚠️⚠️⚠️
(1).数组名的命名遵循标识符命名规则。
(2).定义数组时,需要指定数组中元素的个数,[]内的常量表达式用来表示元素的个数,即数组长度。⚠️下标从0开始而不是从1开始。
(3).[]内的内容可以是常量加符号常量加常量,但不能是变量
⚠️只能引用数组元素而不能调用整个数组的元素。
引用数组元素的表示形式:
数组名[下标]
例:逆序输出0,1,2,3,4,5,6,7,8,9
#includeint main()
{int i,a[10];
for(i=0;i<=9;i++)
a[i]=i;
for(i=9;i>=0;i--)
printf(" %d",a[i]);
printf("\n");
return 0;
}
//运行结果
9 8 7 6 5 4 3 2 1 0
3.初始化一维数组为啥程序简洁,常在定义数组时给数组中的元素赋值,这称为数组的初始化。
(1).全部赋值int A[10]={1,2,3,4,,5,6,7,8,9}
数组长度是多少就要提供多少元素
(2).部分赋值int A[10]={1,2,3,4,5}
在数组长度范围内,想给前面多少元素赋初值就提供多少元素
(3).全部赋为0int A[10]={0,0,0,0,0,0,0,0,0,0}
//或
int A[10]={0}
未赋值部分自动设定为0
(4).数据个数确定可不指定数组长度int A[10]={1,2,3,4,,5,6,7,8,9}
//等价于
int A[]={1,2,3,4,,5,6,7,8,9}
⚠️有且仅当数据个数等于数组长度时可这样使用
💡定义数值型数组时,凡未被初始化的的元素,系统会自动将它们初始化为0.
若为字符型数组,则为’\0’,
若为指针型数组,则为NULL,即空指针。
#includeint main()
{int a[10];
int i,j,t;
printf("请输入十个数字:\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
printf("\n");
for(j=0;j<9;j++)
for(i=0;i<9-j;i++)
if(a[i]>a[i+1])
{t=a[i];a[i]=a[i+1];a[i+1]=t;}
printf("从小到大的排列:\n");
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}
//运行结果
请输入十个数字:
1 3 5 2 6 8 3 9 10 7
从小到大的排列:
1 2 3 3 5 6 7 8 9 10
三.二维数组二维数组常被称为矩阵。把二维数组写成行(row)和列(column)的排列方式,有助于理解二维数组的逻辑结构。
1.定义二维数组方法和定义一维数组类似。
二维数组数组的一般形式为:
类型说明符 数组名[常量表达式][常量表达式]
如:
float a[2][3]
定义a为2x3的数组。
2.引用二维数组二维数组元素的表示形式为:
数组名 [下标][下标]
数组元素可以出现在表达式中,也可以被赋值,
如:B[2][3]=A[1][2]/2
int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
这种方法直观,不易遗漏。第一个花括号的数据赋给第一行,其他行以此类推
(2)整体赋值int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
所有元素放在一个花括号内,按数据的排列顺序对各元素赋初值。和第一个方法相比,第一个方法更好一些,一行对一行,界限清楚。
(3)部分赋值int a[3][4]={{1},{2},{3}};
只对各行第一列序号为0的元素赋初值,其余元素值为0。
int a[3][4]={{1},{0,4},{0,0,8}}
对各行中某一个元素赋初值,在非零元素少时比较方便。
int a[3][4]={{1,2},{},{3,4}};
对某几行元素赋初值。
int a[][4]={0,0,3},{},{0,10}};
可以省略一维长度,但要分行赋值
(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};
一维的长度可以省略不写,但二维的不能省。系统会根据二维长度推算出一维长度。
4.举例二维数组元素互换
#includeint main()
{int a[2][3]={{1,2,3},{4,5,6}};
int b[3][2],i,j;
printf("数组 a:\n");
for(i=0;i<=1;i++)
{for(j=0;j<=2;j++)
{printf("%5d",a[i][j]);
b[j][i]=a[i][j];
}
printf("\n");
}
printf("数组 b:\n");
for(i=0;i<=2;i++)
{for(j=0;j<=1;j++)
printf("%5d",b[i][j]);
printf("\n");
}
return 0;
}
//运行结果
数组 a:
1 2 3
4 5 6
数组 b:
1 4
2 5
3 6
3x4矩阵求大值,以及他的行列号
#includeint main()
{int i,j,row=0,colum=0,max;
int a[3][4]={{1,2,3,4},{9,8,7,6},{-10,10,-5,2}};
max=a[0][0];
for(i=0;i<=2;i++)
for(j=0;j<=3;j++)
if(a[i][j]>max)
{max=a[i][j];
row=i;
colum=j;
}
printf("max=%d\nrow=%d\ncolum=%d\n",max,row,colum);
return 0;
}
//运行结果
max=10
row=2
colum=1
四.字符数组字符型数据以ASCII码的形式存储在存储单元中,一般占一个字节。
1.定义字符数组用来存放字符数据的数组就是字符数组。在字符数组中的一个元素内存放一个字符。
定义字符数组的方法和定义数值型数组的方法类似。
如:
char a[11]={'I',' ','a','m',' ','L','i','M','i','n','g'};
上面定义了a为字符数组,包含11个元素。
2.初始化字符数组对字符数组初始化,最易理解的方式是使用‘初始化列表’,把各个字符依次赋给数组中个元素。
如:
char a[11]={'I',' ','a','m',' ','L','i','M','i','n','g'};
将11个字符依次赋给a0~a10这11个元素。
若提供的初值个数和预定的数组长度相同,在定义时可以省略数组长度,系统会自动根据初值个数确定数组长度。
如:
char a[]={'I',' ','a','m',' ','L','i','M','i','n','g'};
也可以定义和初始化一个二维字符数组。
如:
char a[4][5]={{' ','*',' ','*' ' '},{'*',' ','*',' ','*'},{' ','*',' ','*',' '},{' ',' ','*',' ',' '}};
3.引用字符元素中的元素可以引用字符数组中的元素得到一个字符。
如:
例一:输出爱心图案
#includeint main()
{char a[4][5]={{' ','*',' ','*',' '},{'*',' ','*',' ','*'},{' ','*',' ','*',' '},{' ',' ','*',' ',' '}};
int i,j;
for(i=0;i<4;i++)
{for(j=0;j<5;j++)
printf("%c",a[i][j]);
printf("\n");
}
return 0;
}
//运行结果
* *
* * *
* *
*
将*号连起来,可以看到一个爱心。
例二:输出字符串
#includeint main()
{char a[11]={'I',' ','a','m',' ','L','i','M','i','n','g'};
int i;
for(i=0;i<11;i++)
printf("%c",a[i]);
printf("\n");
return 0;
}
//运行结果
I am LiMing
4.字符串和字符串结束标志在C语言中,将字符串作为字符数组来处理。
在实际工作中,人们关心的往往是字符串的有效长度而不是字符数组的长度。所以为了测定字符串的实际长度,C语言规定了一个字符串结束标志。以字符’\0’作为结束标志。
若字符数组中存在若干个字符,前面的9个字符都不是('\0'
),而第10个字符是'\0'
则认为数组中有一个字符串,有效字符有9个。换而言之,'\0'
前面的字符组成一个字符串。
💡💡💡'\0'
代表ASCII码中为0的字符。这是一个空操作符,即它什么也不做。起一个供辨别的标志。
char d[]={"I am LiMing"};
//等于
char d[]="I am LiMing";
//等价于(长度为11)
char a[]={'I',' ','a','m',' ','L','i','M','i','n','g','\0'};
//不等价于(长度为10)
char a[]={'I',' ','a','m',' ','L','i','M','i','n','g'};
若有
char c[10]={"China"}
则数组中前五个元素为:‘C’,‘h’,‘i’,‘n’,‘a’。后面的元素自动设定为’\0’。
💡💡💡
字符数组并不要求它的最后一个字符必须是’\0’,像下面这样写完全可以:
char c[5]={'C','h','i','n','a'};
是否需要添加’\0’,需要根据实际判断。但是由于系统在存储字符串常量时会自动添加一个’\0’,所以为了使处理方法一致,便于测定字符串的实际长度,常认为的加上一个’\0’。
如:
char c[6]={'C','h','i','n','a','\0'};
这样做便于引用字符数组中的字符串
如:
//定义如下数组
char c[]={"Chinese"};
使用Hello替换原来的字符串,在不加'\0'
的情况下。
数组中存储的字符是Hellose'\0'
。加上'\0'
后,再输出字符串,就会只输出Hello
。这就是加上了'\0'
的作用
#includeint main()
{char c[]={"China",};
char a[]={'H','e','l','l','o','\0'};
printf("%s\n",a);
printf("%s\n",c);
return 0;
}
//运行结果
Hello
China
没有’\0’
#includeint main()
{char c[]={"China",};
char a[]={'H','e','l','l','o'};
printf("%s\n",a);
printf("%s\n",c);
return 0;
}
//运行结果
HelloChina
China
5。字符串的输入输出两种方法
(1)逐个输入输出,使用格式符“%c”输入输出一个字符。
(2)整个输入输出,使用格式符“%s”输入输出一个字符串
如:
#includeint main()
{char c[]={"China",};
printf("%s\n",a);
return 0;
}
//运行结果
China
6.使用字符串处理函数
1.puts函数–输出字符串一般形式:puts(字符数组)。
将一个字符串输出到终端。
作用和printf函数相同,所以可以用printf函数代替puts函数。所以puts函数不常使用。
用puts函数输出的字符串中可以包含转义字符。
一般形式:gets(字符数组)
作用是:从终端输入一个字符串到字符数组,并且得到一个函数值。
puts函数和gets函数都只能输入或输出1个字符串,不能写成
puts(str1,str2);或gets(str1,str2);
4.strcat–字符串连接函数一般形式:
strcat(字符数组1,字符数组2)
作用是将两个字符数组中的字符串连接在一起,将字符数组2接到字符数组1的后面。字符数组1的长度必须能包含字符数组2,即字符数组1除了有存储本省存储的字符串,还要有能容纳字符数组2内字符串的空间。
一般形式:
strcpy(字符数组1,字符串2)
作用是将字符串2复制到字符数组中
字符数组1的长度至少等于字符串2的长度。字符数组1必须为字符数组名,字符串2可以是字符串常量也可以是字符数组名。
.一般形式:
strcmp(字符串1,字符串2)
作用是比较字符串1和字符串2的大小。
💡字符串比较的规则是将两个字符串自左至右逐个字符比较(按ASCII码值大小比较),只到出现不同的字符或遇到’\0’为止。
(1)字符全部相同,两个字符串相等
(2)出现不同字符,则以第一对不相同的字符比较的结果为准。
💡若比较中两个字符都是由英文字母组成,那么在英文字典中位置在后面的为大。小写字母>大写字母。
比较结果由函数值带回:
相同为0, a>b为正整数,a6.strlen函数——测字符串长度的函数
一般形式:
strlen(字符串)
作用是测量字符串的实际长度。
一般形式:
大写:strupr函数(字符串)
小写:strlwr函数(字符串)
作用是将字符串中的大小写字母转化为对应的小大写字母
100以内的素数
#include#includeint main()
{int i,j,n,a[101];
for (i=1;i<=100;i++)
a[i]=i;
a[1]=0;
for (i=2;iif(a[i]!=0 && a[j]!=0)
if (a[j]%a[i]==0)
a[j]=0;
}
printf("\n");
for (i=2,n=0;i<=100;i++)
{if(a[i]!=0)
{printf("%5d",a[i]);
n++;
}
if(n==10)
{printf("\n");
n=0;
}
}
printf("\n");
return 0;
}
//运行结果
开始运行...
2 3 5 7 11 13 17 19 23 29
31 37 41 43 47 53 59 61 67 71
73 79 83 89 97
运行结束。
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
本文名称:C语言--数组-创新互联
分享链接:http://pwwzsj.com/article/dpgeig.html