5_1 数组的概念
注:(1)在定义数组时,数组的元素个数(又称数组长度)必须是确定的,即只能是整型常量表达式。
(2)完成数组的定义,引用元素时,下标从0开始计数。
5_2 一维数组
2.1 一维数组的定义
2.2 一维数组的使用
1. 两种方法初始化
(1)在定义数组时同时初始化数组元素
注:①可以只部分元素初始化
②只能给元素逐个赋值,不能整体赋值。
(2)先定义,再初始化:采用循环结构如:
#include
int main()
{
int i,score[10];
for (i=0;i<10;i++)
{
scanf("%d",&score[i]);/*也可以是对元素直接赋值如:score[i]=i+2;*/
}
return 0;
}
2.C语言中只能逐个地引用数组元素,而不能对数组进行整体引用。如:
for (i=0;i<50;i++)
printf("%d",score[i]);/*而不是printf("%d",score);*/
3.删除数组元素
简要分析:功能实现 ①查找定位 ②移动
#include
#define N 10
int main()
{
int a[N]={1,2,3,4,5,6,7,8,9,10},x,i,k,flag=0;
printf("原数组值:");
for(i=0;i
printf("%4d",a[i]);
printf("输入要删除的元素值:");
scanf("%d",&x);
for(i=0;i
if (a[i]==x) {k=i;flag=1;break;}
if (flag==0) printf("不存在为%d的元素值!\n",x);
else
{
if (k==N-1) a[N-1]=0;
else
{
for (i=k;i
a[i]=a[i+1];
a[i]=0;
}
printf("\n删除元素%d后的数组值:",x);
for(i=0;i
printf("\n");
}
return 0;
}
2.一维数组的排序
【5-4】输入N个整数,将其按升序排列
①冒泡排序法:
#include
#define N 5
int main()
{
int a[N],t,i,j;
printf("请输入%d个数:",N);
for (i=0;i
scanf("%d",&a[i]);
for (i=0;i
for (j=0;j
if (a[j]>a[i])
{
t=a[j];a[j]=a[j+1];a[j+1]=t;
}
printf("升序排列结果如下:\n");
for(i=0;i
printf("%4d",a[i]);
printf("\n");
return 0;
}
②选择排序法:
#include
#define N 5
int main()
{
int a[N],t,i,j,k;
printf("请输入%d个数:",N);
for (i=0;i
scanf("%d",&a[i]);
for (i=0;i
{ k=i;
for (j=i+1;j
if (a[j]
k=j;
if (k!=i)
{
t=a[k];a[k]=a[i];a[i]=t;
}
}
printf("升序排列结果如下:\n");
for(i=0;i
printf("%4d",a[i]);
printf("\n");
return 0;
}
2.3.数组中递推的应用
【5-5】利用一维数组,输出斐波拉契数列:1,1,2,3,5,8,13,21,34,55,89……
#include
#define N 20
int main()
{
int a[N]={1,1},i;
for (i=2;i
a[i]=a[i-1]+a[i-2];
for(i=0;i
{
printf("%d\t",a[i]);
if((i+1)%5==0)
printf("\n");
}
return 0;
}
5_3 二维数组
_3-1.二维组的定义
_3-2.二维数组的使用
1.二维数组的初始化
2.二维数组元素的引用
3.二维数组的应用举例
5_4 字符数组
_4-1 字符数组的定义
_4-2 字符数组和字符串
_4-3 字符数组的初始化
①逐一赋值:char str[10]={C',' ','p','r','o','g','r','a','m'};
②字符串赋给指定的数组:char str[10]={"C progaram"}
_4-4. 字符数组的输入输出
1. 用格式符“%c”逐个输入输出数组中的字符
【例5-8】逐个输入/输出数组中的字符
#include
#include
int main()
{
char c[10];
int i;
printf("请输入10个字符:");
for(i=0;i<10;i++)
scanf("%c",&c[i]);
printf("您输入的10个字符为:");
for (i=0;i<10;i++);
printf("%c",c[i]);
printf("\n");
return 0;
}
2. 用格式符“%s”将整个字符串一次输出,遇到‘\0’停止输出(停止后不会自动换行)。
(1)【例5-9】
#include
int main()
{
char c[]="Program";
printf("%s\n",c);
c[4]='\0';
printf("%s\n",c);
return 0;
}
注:数组下标从0开始计数,所以c[4]是第五个数即‘\0’,结束。
(2)用“%s”输出字符时,printf 函数中的输出项为元素的地址如:
char c[]="Program";
printf("%s",&c[1]); /*结果为:rogram*/
(3) 可用scanf输入一个字符串,系统默认以空格作为一个串的输出结束标志如:
char c[20];
scanf("%s",c);
printf("%s",c);
键盘输入:you are a student.
结果为:you
注:如果要输入的字符串中本来就有空格字符,则不能使用格式控制符“%”将整个字符串输入。此时,通常可采用格式符“%c”逐个输入数组中的字符或字符串处理函数gets来接收字符串。
_4-5 常用的字符串处理函数
头文件stdio.h 包含:输入、输出、合并、修改、比较、转换、复制、搜索等几类。
而其他字符串函数应包含头文件“string.h”
1.字符串输出函数puts
2.字符串输入函数gets
#include
int main()
{
char str [15];
printf("请输入一个字符串:");
gets (str)
puts("您输入的字符串如下:");
puts (str);
return 0;
}
①当输入的字符串中含有空格时,输出仍为全部字符串。使用gets函数接受字符串时,只以回车作为结束标 志。这是与scanf函数不同的。
②使用puts函数输出字符串时,其参数可以是字符数组名,也可以是字符串常量。
③puts函数完全可以由printf函数取代,当需要按比较灵活的格式输出时,通常使用printf函数。
3.字符串连接函数strcat
功能:把字符数组2中的字符串连接到字符数组1中字符串的后面,字符串1的串结束标志'\0'自动删去。字符数组名2可以字符串常量。
一般调用格式:strcat(字符数组名1,字符数组名2)如:
#include
#include
{ char str1[30]="This a";
char str2[10]="book";
strcat(str1,str2);
puts(str1)
return 0;
}
4. 字符串复制函数strcpy
功能:把字符数组2中的字符串复制到字符数组1中。串结束标志'\0'也一同拷贝。"字符数组名2"可以字符串常量。
格式:strcpy(字符数组名1,字符数组名2)
#include
#include
int main()
{
char str1[15],str2[]="C Language";
strcpy (str1,str2);
puts(str1);
return 0;
}
5. 字符串比较函数strcmp
功能:两个数组(字符串)按照ASC‖码顺次比较,并由函数返回值比较结果。
字符串1=字符串2,函数返回0值;
字符串1>字符串2,函数返回>0值
字符串1
格式:strcmp (字符数组名1,字符数组名2)
6.求字符串长度的函数strlen
功能:测出字符串的实际长度(不含字符串结束标志‘\0’)并作为函数返回值
格式:strlen(字符数组名)
5_5 数组的应用举例