第六讲数组本节学习目标
理解一维数组
了解二维数组
理解字符数组课前回顾
循环结构
– while循环
– do…while 循环
– for循环
– 循环嵌套
– 转向语句回顾
什么是变量?
变量的声明:
– 数据类型 变量名
[=初始值 ];
课堂练习
– 求 5个整数的和。
求 5个整数的和。
#include <stdio.h>
void main()
{
int a1,a2,a3,a4,a5;
int sum=0;
printf("请输入 a1的值,");
scanf("%d",&a1);
printf("请输入 a2的值,");
scanf("%d",&a2);
printf("请输入 a3的值,");
scanf("%d",&a3);
printf("请输入 a4的值,");
scanf("%d",&a4);
printf("请输入 a5的值,");
scanf("%d",&a5);
sum=a1+a2+a3+a4+a5;
printf("sum=%d\n",sum);
}
#include <stdio.h>
void main()
{
int a,sum=0;
int i;
for (i=1;i<=5;i++)
{
printf("请输入
a%d的值,",i);
scanf("%d",&a);
sum+=a;
}
printf("sum=%d\n",sum);
}
变量的不足之处
程序中变量过多,使程序不够灵活
程序中重复代码比较多,造成工作冗余。
循环结构与数组的结合使工作简单化范例
#include <stdio.h>
void main()
{
int a[5];
int i,sum=0;
for (i=0;i<5;i++)
{
printf("请输入 a[%d]的值,",i);
scanf("%d",&a[i]);
sum+=a[i];
}
for (i=0;i<5;i++)
{
printf("a[%d]=%d\n",i,a[i]);
}
printf("sum=%d\n",sum);
}
数组
什么是数组?
– 即相同类型的数据元素的集合。
变量与数组之间的区别:
– 变量只能存储一个数据。
– 数组可以存储一组数据。
– 数组内的元素具有相同的数据类型
– 数组中的元素存储在一个连续的内存区域中。
数组与变量的区别一维数组
一维数组的声明格式:
数据类型 数组名 [常量表达式 ]
例如,int sum[10],char a[6]
一维数组声明注意事项
数据类型,int,float,double,char
数组名与变量名相同,声明必须符合标识符的有关规定。
常量表达式中可以是常量或常量表达式,
绝不能是变量。
其决定了数组元素的个数。
课堂练习
定义一个有 8个元素的整型数组
定义一个有 12个元素的浮点型数组
定义一个有 3个元素的字符型数组一维数组的初始化
在数组声明时初始化
– Int a[5]={1,2,3,4,5}
在使用时进行初始化
– Int a[5];int[0]=1;int[1]=2
部分初始化
– Int a[5]={1,2,3}
直接初始化
– Int a[]={1,2,3,4}
数组元素的引用
引用格式数组名 [下标 ]
例如,a[0],a[5]
数组元素引用说明
每个数组元素就是一个变量,数组元素只能逐个引用。
只能引用数组中的元素,不能整体引用数组。
不能使用越界的数组元素
数组的下标必须以 0开始,到 N-1结束。
– 例如,a[10]下标,a[0],a[1]……a[8],a[9]
数组的引用(续)
例,int a[3]={4,8,9};
– a[0]=4;a[1]=8;a[2]=9;
char b[]={?c‘,‘h‘,‘i‘,‘n‘,‘a‘};
– b[0]=?c‘ b[1]= ‘h‘,b[2]= ‘i‘,b[3]= ‘n‘,b[4]= ‘a‘
数组引用范例
#include <stdio.h>
void main()
{
int a[5]; //定义一个有 5个元素的整型数组
int i;
for (i=0;i<5;i++)
{
printf("a[%d]:",i);
scanf("%d",&a[i]);
} //为数组赋初值
printf("-----------\n");
for (i=4;i>=0;i--)
{
printf("a[%d]=%d\n",i,a[i]);
} //将数组元素转置显示
}
课堂练习
定义一个有 5个元素(数组元素,10,20,
30,40,50)的整型数组,显其每个元素显示出来。
输入 5个整数,显示其平均值。(用数组)
接受 5个整数进行排序二维数组
什么是二维数组?
– —有两个下标的数组。相当于多个一维数组。
二维数组
声明:
– 数据类型 数组名 [常量表达式 ][常量表达式 ]
例如,int a[2][3]
二维数组初始化
1、分组初始化例如,a[2][3]={{1,2,3},{4,5,6}}
2、一次性初始化例如,a[2][3]={1,2,3,4,5,6}
3、对数组中部分元素初始化例如,a[2][3]={{5},{6}}
二维数组引用
引用格式:
– 数组名 [行标 ][列标 ]
课堂练习
定义一个 4*3的二维表格,数组元素为下图:
物理 化学 数学
J ulia 45 60 90
Ben 20 67 92
Nicho la s 90 35 56
De m i 78 50 80
指出下列的值,(数组声明,int a[4][3])
a[0][0];a[1][2];a[3][3];a[4][1]
二维数组范例
显示一个二维数组(如下图),并将其数组元素进行列互换。
1 2 3
4 5 6
1 4
2 5
3 6
a b
范例
#include <stdio.h>
void main()
{
int a[2][3]={{1,2,3},{4,5,6}};//初始化数组
int i,j;
for (i=0;i<2;++i)
{
for (j=0;j<3;j++)
{
printf("%d\t",a[i][j]);
} //原样输出二元数组
putchar('\n');
}
putchar('\n');
for (j=0;j<3;j++)
{
for (i=0;i<2;i++)
{
printf("%d\t",a[i][j]);
}// 转置输出二元数组
putchar('\n');
}
}
课堂练习
输出下方二维表格。(无边框)
6 1 8
7 5 3
2 9 4
字符数组
什么是字符数组?
– 用来存放字符数据的数组。
声明格式
– char 数组名 [常量表达式 ]
– 例如,char ch[10]
字符数组的初始化
1,char ch[9]={?a‘,‘b‘,‘c‘,‘d‘,‘e‘,‘f‘,‘g‘,‘h‘};
2,char ch[8]=―chinese‖;
字符串数组范例
#include <stdio.h>
void main()
{
char ary[5];
int i;
printf("\n Enter string,");
scanf(“%s”,ary); //为字符数组赋值
printf(“\n The string is %s \n\n”,ary); //输出字符串
for (i=0; i<5; i++)
printf("\t%d",ary[i]);
}
空字符
什么是空字符?
—以叫结束字符,是对一个字符串输入的结束标志。
例如,char ch[]= ―china‖ (注内存图 )
字符数组的使用说明
#include <stdio.h>
void main()
{
char name[10];
char sex[3];
printf("请输入姓名,");
scanf("%s",name);
printf("性别,");
scanf("%s",sex);
printf("姓名,%s\t",name);
printf("性别,%s\n",sex);
}
二维字符型数组
定义格式
char [5][10]
5:
数组中有 5个字符串
10:
每个字符串有 10个字符字符串函数
puts输出函数
– 格式 puts(字符数组 )
gets输入函数
– 格式 gets (字符数组 )
#include <stdio.h>
#include <string.h>
void main()
{
char ch[20];
gets(ch);
puts(ch);
}
字符串函数 (续 )
strcpy函数
格式:
– Strcpy(数组 1,数组 2)
功能:
– 将数组 2的字符复制到数组 1中
范例:
include <stdio.h>
#include <string.h>
void main()
{
char a[10],[b]={"china"};
strcpy(a,b);
puts(a);
}
字符串函数 (续 )
strcat函数
格式:
– strcat(数组 1,数组 2)
功能:
– 连接两个数组,将数组 2的字符连接到数组 1中
范例
#include <stdio.h>
#include <string.h>
void main()
{
char a[12]={"leaf"};
char b[6]={"apple"};
strcat(a,b);
puts(a);
}
字符串函数 (续 )
Strcmp函数
格式
– Strcmp(数组 1,数组 2)
功能
– 数组 1与数组 2之间的大小比较( ASCII码)
注意事项:
– 数组 1>数组 2,返回值 >0
– 数组 1=数组 2,返回值 =0
– 数组 1<数组 2,返回值 <0
strcmp范例
#include <stdio.h>
– #include <string.h>
– void main()
– {
– char a[10]="china";
– char b[6]="apple";
– int c;
– c=strcmp(a,b);
– printf("%d\n",c);
– }
字符串函数 (续 )
strlen函数
格式:
– strlen(字符串 )
功能
– 测试字符串长度(不包括空字符)
strupr函数
格式
– strupr(字符串 )
功能
– 将小写字母转换成大写字母。
课堂练习
接受 5个字符串进行递增排序。