利用数组处理批量数据
-
数组是一组有序数据的集合,每一个元素都属于同一个数据类型
怎样定义一维数组
-
一维数组的一般形式为
类型说明符 数组名[常量表达式]
-
数组名的命名规则和变量名相同,遵循标识符命名规则
-
在定义数组时需要指定数组中元素的个数,方括号中的常量表达式就是用来表达元素的个数的,即数组长度
-
常量表达式中可以包括常量和符号变量,不能包含变量,C语言不允许对数组的大小做动态定义
怎样引用一维数组元素
-
引用数组元素的表示形式为
数组名[下标]
-
注意:定义数组时和引用数组时形式相同但是含义同
-
注意:**数组下标从 0开始,如果用int[10]定义一个数组,则最大下标值为9,不存在数组元素a[10]
-
eg
#include<stdio.h> int 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; }
一维数组的初始化
-
为使程序简洁,常在定义数组的同时给各数组元素赋值,这叫做数组的初始化
-
int a[10]={0,1,2,3,4,5,6,7,8,9};各数组元素顺序放在一对花括号内,数据间用逗号分开
-
也可以只给一部分元素赋值
int a[10]={0,1,2,3,4,};a数组中有十个元素,但是花括号内只提供5个初值,即给前五个赋初值,后5个元素赋初值为0
-
若数组元素初值全为0
int a[10]={0}
-
利用数组排序问题(冒泡法)
#include<stdio.h> int main() { int a[10]; int i, j, t; printf("input 10 numbers:\n"); for (i = 0; i < 10; i++) scanf("%d", &a[i]); printf("\n"); for(j=0;j<9;j++)//进行9次循环,实现9趟比较 for(i=0;i<9-j;i++)//在每一趟中进行9-j次比较 if (a[i] > a[i + 1])//相邻两个数比较 { t = a[i]; a[i] = a[i + 1]; a[i + 1] = t; } printf("the sorted numbers:\n"); for (i = 0; i < 10; i++) printf("%d", a[i]); printf("\n"); return 0; }
怎么定义二维数组
-
二维数组定义的一般形式为:
类型说明符 数组名[常量表达式] [常量表达式]
-
a[3][4] a[0][0] a[0][1] a[0][2] a[0][3] a[1][0] a[1][1] a[1][2] a[1][3] a[2][0] a[2][1] a[2][2] a[2][3] -
在内存中,各元素是连续存放的,不是二维的,是线性的
怎样引用二维数组的元素
-
数组元素可以出现在表达式中,也可以被赋值
a[1][2]=b[2][3]/2; -
引用数组元素时,下标值应在已定义的数组大小的范围内
int a[3][4]; a[3][4]=3;//这是错的引用,不存在a[3][4]元素
二维数组的初始化
-
int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; -
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; -
int a[3][4]={{1},{5},{9}};//只给各行第一列的元素赋初值,其余元素自动为0(部分元素赋初值) -
eg
#include<stdio.h> int 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; }
怎么定义字符数组
-
用来存放字符数据的数组是字符数组,一个元素存放一个字符
char c[10]; c[0]='I';c[1]=' ';c[2]='a';c[3]='m';c[4]=' ';c[5]='h';c[6]='a';c[7]='p';c[8]='p';c[9]='y'; -
由于字符数据是以整形形式存放的(ASCII代码),因此也可以用整形数组来存放字符数据,虽然合法但是会浪费存储空间
字符数组的初始化
-
最容易理解的方式就是“初始化列表”
char c[10]={'I',' ','a','m',' ','h','a','p','p','y'}; -
如果初值个数大于数组长度,会出现语法错误,如果初值个数小于数组长度,其余的元素自动定为空字符
怎么引用字符数组中的元素
#include<stdio.h>
int main()
{
char c[15]={'I',' ','a','m',' ','h','a','p','p','y'};
int i;
for(i=0;i<=15;i++)
printf("%c",c[i]);
printf("\n");
return 0;
}
字符串和字符数组
-
在c语言中,是将字符串作为字符数组来处理的
-
c系统再用字符数组存储字符串常量时会自动加一个'\0'作为结束符
-
有了结束标志'\0'之后,字符数组的长度就显得不那么重要了,程序中往往通过检测'\0'的位置老判定字符串是否结束,而不是数组长度
-
'\0'代表ASCII码为0的字符,只起一个供辨别的作用
-
char c[]={"I am happy"}; //可以省略花括号 char c[]="I am happy"; //这里不用单个字符作为字符数组的初值,而是用一个字符串作为初值。注意:数组的长度不是10而是11,因为字符串常量的最后由系统加了一个'\0'。 //在执行printf函数时,每输出一个字符检查一次,看下一个字符是否为'\0',遇'\0'就停止输出
字符数组的输入输出
-
逐个字符输入输出,用格式符%c
-
整个字符串一次输入或输出用%s
-
char c[]={"China"}; printf("%s\n",c);在内存中数组c的存储情况为
C h i n a \n 输出时,遇结束符'\0'就停止输出,输出结果为
China
-
用"%s"格式符输出字符串时,printf函数中输出项是字符数组名,而不是数组元素名
printf("%s",c); ✔
printf("%s",c[0]); ❌
-
如果数组长度大于字符串的实际长度,也只输出到遇'\0'结束
-
可以用scanf函数输入一个字符串
scanf(“%s”,c);//输入项c是已定义的字符数组名
-
用一个scanf函数输入多个字符串,则应在输入时以空格分隔
char str1[5],str2[5],str3[5]; scanf("%s%s%s",str1,str2,str3);输入数据:How are you
str1: H o w \0 \0 str2: a r e \0 \0 str3: y o u \0 \0 -
scanf函数中的输入项如果是字符数组名,不要再加地址符&
scanf("%s",&str); ❌
使用字符串输入函数
-
puts函数---输出字符串的函数
puts(字符数组)
-
gets函数---输入字符串的函数
gets(字符数组)
-
用gets和puts函数只能输出或输入一个字符串,不能写成
gets(str1,str2)
-
strcat函数---字符串连接函数
一般形式为:strcat(字符数组1,字符数组2)
作用是把两个字符数组中的字符串连接起来,把字符串2接到字符串1的后面
char str1[30]={"People's Republic of"}; char str2[]={"China"}; printf("%s",strcat(str1,str2)); //输出结果是 People's Republic of China
-
strcpy和strncpy函数---字符串复制函数
一般形式为:
strcpy(字符数组1,字符串2)
作用是将字符串2复制到字符数组1中去
char str1[10],str2[]="China"; strcpy(str1,str2); //执行后,str1输出为:China-
“字符数组1”必须写成数组名形式(如str),“字符串2”可以是字符数组名,也可以是一个字符串常量:
strcpy(str1,"China");
-
-
不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组。字符数组名是一个地址常量,它不能改变值
str="China";❌ str1=str2 ; ❌ -
strcmp函数---字符串比较函数
一般形式:
strcmp(字符串1,字符串2)
strcmp(str1,str2); strcmp("China","Korea"); strcmp(str1,"Beijing");-
字符串的比较的规则是:将两个字符串自左至右逐个字符相比(按ASCII码值大小比较),直到出现不同的字符或遇到'\0'为止
-
若str1=str2,则函数值为0
-
若str1>str2,则函数值大于0
-
若str1<str2,则函数值小于0
-
if(strcmp(str1,str2)>0) printf("Yes");
-
-
strlwr函数---测字符串长度的函数
一般形式:
strlen(字符数组)
char str[10]=“China”; printf("%d",strlen(str)); //测出结果不是10,而是5,函数的值为字符串中的实际长度(不包括'\0'在内) -
strlwr函数---转换为小写的函数
一般形式:
strlwr(字符串)
-
strupr函数---转换为大写的函数
一般形式:
strupr(字符串)
-
注意:在使用字符串处理函数时,应在程序文件的开头用
#include<string.h>
本文详细介绍了C语言中数组的定义、引用、初始化以及一维、二维数组和字符数组的操作。讲解了如何定义一维和二维数组,引用数组元素,以及如何初始化数组。同时,还探讨了字符数组的特性,包括字符串的处理,如输入输出、字符串连接、复制和比较等。此外,还提到了常用的字符串处理函数,如puts、gets、strcpy、strcat、strcmp等。
1150

被折叠的 条评论
为什么被折叠?



