数组null第五章 数组第五章 数组一维数组
二维数组及多维数组字符数组和字符串数组概念数组概念数组概念构造数据类型之一
数组:有序数据的集合,用数组名标识
元素:属同一数据类型,用数组名和下标确定
5.1 一维数组
一维数组的定义
定义方式: 数据类型 数组名[常量表达式]; 合法标识符表示元素个数
下标从0开始[ ] :数组运算符
单目运算符
优先级(1)
左结合
不能用( )例 int a[6];编译时分配连续内存
内存字节数=数组维数*
sizeof(元素数...
null第五章 数组第五章 数组一维数组
二维数组及多维数组字符数组和字符串数组概念数组概念数组概念构造数据类型之一
数组:有序数据的集合,用数组名标识
元素:属同一数据类型,用数组名和下标确定
5.1 一维数组
一维数组的定义
定义方式: 数据类型 数组名[常量表达式]; 合法标识符表示元素个数
下标从0开始[ ] :数组运算符
单目运算符
优先级(1)
左结合
不能用( )例 int a[6];编译时分配连续内存
内存字节数=数组维数*
sizeof(元素数据类型)数组名表示内存首地址,
是地址常量5.1 一维数组
一维数组的引用
数组必须先定义,后使用
只能逐个引用数组元素,不能一次引用整个数组
数组元素表示形式: 数组名[下标]
其中:下标可以是常量或整型表达式例 int i=15;
int data[i]; (不能用变量定义数组维数)例 int a[10];
printf(“%d”,a); ()
必须 for(j=0;j<10;j++)
printf(“%d\t”,a[j]); ()例 int data[5];
data[5]=10; //C语言对数组不作越界检查,使用时要 注意一维数组的引用一维数组的初始化
初始化方式 在定义数组时,为数组元素赋初值
(在编译阶段使之得到初值) int a[5]={1,2,3,4,5};
等价于:a[0]=1; a[1]=2; a[2]=3; a[3]=4; a[4]=5;说明:
数组不初始化,其元素值为随机数
对static数组元素不赋初值,系统会自动赋以0值当全部数组元素赋初值时,可不指定数组长度如 int a[5]={6,2,3};
等价于: a[0]=6; a[1]=2;a[2]=3; a[3]=0; a[4]=0;
如 int a[3]={6,2,3,5,1}; ()static int a[5];
等价于:a[0]=0; a[1]=0; a[2]=0; a[3]=0; a[4]=0;只给部分数组元素赋初值 int a[]={1,2,3,4,5,6};
编译系统根据初值个数确定数组维数一维数组的初始化例 用冒泡法对10个数排序排序过程:
(1)比较第一个数与第二个数,若为逆序a[0]>a[1],则交换;然
后比较第二个数与第三个数;依次类推,直至第n-1个数和第
n个数比较为止——第一趟冒泡排序,结果最大的数被安置在
最后一个元素位置上
(2)对前n-1个数进行第二趟冒泡排序,结果使次大的数被安置在
第n-1个元素位置
(3)重复上述过程,共经过n-1趟冒泡排序后,排序结束例 用冒泡法对10个数排序例 用冒泡法对10个数排序(图解)例38497697139797273097137676762730136527653065131349493049273827383038例 用冒泡法对10个数排序(图解)例 用简单选择法对10个数排序排序过程:
(1)首先通过n-1次比较,从n个数中找出最小的, 将它与第一个数
交换—第一趟选择排序,结果最小的数被安置在第一个元素位置上
(2)再通过n-2次比较,从剩余的n-1个数中找出关键字次小的记录,
将它与第二个数交换—第二趟选择排序
(3)重复上述过程,共经过n-1趟排序后,排序结束例 用简单选择法对10个数排序例 用简单选择法对10个数排序例初始: [ 49 38 65 97 76 13 27 ]i=11349一趟: 13 [38 65 97 76 49 27 ]i=22738六趟: 13 27 38 49 65 76 [97 ]例 用简单选择法对10个数排序5.2 二维数组及多维数组
二维数组的定义
定义方式:
数据类型 数组名[常量表达式][常量表达式];数组元素的存放顺序
原因:内存是一维的
二维数组:按行序优先
多维数组:最右下标变化最快例 int a[3][4];
float b[2][5];
int c[2][3][4];
int a[3,4]; ()行数列数元素个数=行数*列数5.2 二维数组及多维数组二维数组理解每个元素a[i]由包含4个元素
的一维数组组成二维数组a是由3个元素组成二维数组理解二维数组元素的引用
形式: 数组名[下标][下标]
二维数组元素的初始化
分行初始化:按元素排列顺序初始化 二维数组元素的引用程序举例
例 将二维数组行列元素互换,存到另一个数组中程序举例例 求二维数组中最大元素值及其行列号
#include
main()
{ int a[3][4]={{1,2,3,4},
{9,8,7,6},
{-10,10,-5,2}};
int i,j,row=0,colum=0,max;
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,row=%d, \
colum=%d\n",max,row,colum);
}例 求二维数组中最大元素值及其行列号
5.3 字符数组和字符串
字符数组
定义 字符数组的初始化
逐个字符赋值
用字符串常量
字符数组的引用
例 char c[10], ch[3][4];5.3 字符数组和字符串例子例子字符串
字符串及其结束标志
无字符串变量,用字符数组处理字符串
字符串结束标志:‘\0’字符串字符串的输入输出
逐个字符I/O: %c
整个字符串I/O: %s例 用%c
main()
{ char str[5];
int i;
for(i=0;i<5;i++)
scanf(“%c”, &str[i]);
for(i=0;i<5;i++)
printf(“%c”, str[i]);
}例 用%s
main()
{ char str[5];
scanf(“%s”, str);
printf(“%s”, str);
}用字符数组名,不要加&
输入串长度<数组维数
遇空格或回车结束
自动加‘\0’用字符数组名,
遇‘\0’结束字符串的输入输出
例子main()
{
int i;
char a[5];
scanf("%s",a);
for(i=0;i<5;i++)
printf("%d,",a[i]);
}运行情况:
(1)若输入 hel , 正常
(2)若输入 hell , 正常
(3)若输入 hello , 用%s 输出时,会出现问题输入字符串长度<数组维数例子例 字符串输入举例#include
main()
{ char a[15],b[5],c[5];
scanf("%s%s%s",a,b,c);
printf("a=%s\nb=%s\nc=%s\n",a,b,c);
scanf("%s",a);
printf("a=%s\n",a);
}运行情况:
输入:How are you?
输出:a=How
b=are
c=you?
输入:How are you?
输出:a=Howscanf中%s输入时,遇空格或回车结束运行情况:
输入:How are you?例 字符串输入举例常用的字符串处理函数
包含在头文件 string.h
字符串输出函数puts
格式:puts(字符数组)
功能:向显示器输出字符串(输出完,换行)
说明:字符数组必须以‘\0’结束字符串输入函数gets
格式:gets(字符数组)
功能:从键盘输入一以回车结束的字符串放入字符数组中,
并自动加‘\0’
说明:输入串长度应小于字符数组维数例 #include
main( )
{ char string[80];
printf(“Input a string:”);
gets(string);
puts(string);
}
输入: How are you?
输出: How are you ? 常用的字符串处理函数
常用的字符串处理函数(1)字符串连接函数strcat
格式:strcat(字符数组1,字符数组2)
功能:把字符数组2连到字符数组1后面
返值:返回字符数组1的首地址
说明:字符数组1必须足够大
连接前,两串均以‘\0’结束;连接后,串1的‘\0’取消,
新串最后加‘\0’字符串拷贝函数strcpy
格式:strcpy(字符数组1,字符串2)
功能:将字符串2,拷贝到字符数组1中去
返值:返回字符数组1的首地址
说明:字符数组1必须足够大
拷贝时‘\0’一同拷贝
不能使用赋值语句为一个字符数组赋值例 char str1[20],str2[20];
str1={“Hello!”}; ()
str2=str1; ()常用的字符串处理函数(1)常用的字符串处理函数(2)字符串比较函数strcmp
格式:strcmp(字符串1,字符串2)
功能:比较两个字符串
比较规则:对两串从左向右逐个字符比较(ASCII码),
直到遇到不同字符或‘\0’为止
返值:返回int型整数,a. 若字符串1< 字符串2, 返回负整数
b. 若字符串1> 字符串2, 返回正整数
c. 若字符串1== 字符串2, 返回零
说明:字符串比较不能用“==”,必须用strcmp字符串长度函数strlen
格式:strlen(字符数组)
功能:计算字符串长度
返值:返回字符串实际长度,不包括‘\0’在内例 对于以下字符串,strlen(s)的值为:
(1)char s[10]={‘A’,‘\0’,‘B’,‘C’,‘\0’,‘D’};
(2)char s[ ]=“\t\v\\\0will\n”;
(3)char s[ ]=“\x69\082\n”; :1 3 1常用的字符串处理函数(2)例 strcmp与strlen举例
How are you?Hello!
Len1=6,Len2=12,Len3=18例 strcmp与strlen举例
应用举例
例 输入一行字符,统计其中有多少个单词#include
main()
{ char string[81];
int i,num=0,word=0;
char c;
gets(string);
for(i=0;(c=string[i])!='\0';i++)
if(c==' ') word=0;
else if(word==0)
{ word=1; num++; }
printf("There are %d words \
in the line\n",num);
}应用举例
例子图解例子图解例 有十个学生的成绩,求平均分
#include
main()
{ int k , a[10];
for(k=0;k<10;k++)
scanf(“%d”,&a[k]);
for(k=0;k<10;k++)
sum+=a[k];
printf(“Average is %d\n”,sum/10);
}例 有十个学生的成绩,求平均分
本文档为【数组】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。