一、数组结构知识点总结
(一)一维数组
1.定义 数据类型 数组名[整数1][整数2]…[整数n]
eg:int a[5];
注: ①下标从零开始且数组大小必须是值为正的常量,不能为变量;
②数组定义后的初值仍为随机数一般需要初始化;
③下标越界是大忌;
2.容错处理
例:编程实现显示用户输入的月份(不包括闰年的月份)拥有的天数
#include<stdio.h>
#define MONTHS 12
int main()
{
int DAYS[MONTHS]={31,28,31,30,31,30,31,31,30,31,30,31};
int month;
do{
scanf("%d",month);
}while(month<1||month>12);
printf("The number of days is %d\n",days[months-1];
return 0;
}
3.c++ sort函数
#include<algorithm>
using namespace std;
默认的sort函数是按升序排的
sort(a,a+m);//两个参数分别为待排序数组的首地址和尾地址
4.例题
(1)约瑟夫问题
(2)求10个数中的最大值,并记录在数组中的位置
#include<iostream>
using namespace std;
int main()
{
int a[100000];
cin>>n;
for(i=1;i<n;i++)
{
cin>>a[i];
}
max=a[0];l=0;
for(i=1;i<n;i++)
{
if(max=a[i])
{
max=a[i];
l=i;
}
cout<<l<<endl;
}
return 0;
}
(3)数组的选择排序
#include<iostream>
using namespace std;
int main()
{
int a[100000];
int i,j,max,l;
cin>>n;
for(i=0;i<n;i++)
{
cin>>a[i];
}
for(j=0;j<n-1;j++)
{
l=j;
for(i=1;i<n;i++)
{
if(a[l]<a[i])
l=l;
if(l!=j) i=a[l],a[l]=a[j],a[j]=i;
}
}
return 0;
}
(二)二维数组
1.定义 数据类型 数组名[常量表达式1][常量表达式2]
eg: int a[4][10];(a数组实质上是一个有4行10列的表格,可储存40个元素)
注:二维数组存储若干段文字、字符节
2.引用
与一维数组引用类似,区别在于二维数组元素的引用必须给出两个下标
格式为 <数组名>[下标1][下标2]
3.初始化
和一维数组类似,可以将每一行分开来写在各自的括号里,也可以把所有数据写在一个括号里
eg: int direct[4][2]={{1,0},{0,1},{-1,0},{0,-1}}
4.例题
杨辉三角
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int a[11][11];
a[1][1]=1;
for (int i=2; i<=10; ++i)
{
a[i][1]=1; a[i][i]=1;
for (int j=2; j<=i-1; ++j)
{
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
}
for (int i=1; i<=10; i++)
{
if(i!=10) cout<<setw(30-3*i)<<" ";
for(int j=1;j<=i; j++) cout<<setw(6)<<a[i][j];
cout<<endl;
}
return 0;
}
(三)字符数组和字符串类型
1.字符数组的定义及格式
定义:是指元素为字符的数组,用来存放字符序列或字符串的,也有一维、二维之分
格式: char 数组名[常量表达式1]…
2.字符数组的赋值
(1)存放字符:char chr[5]={'a','b','c','d','e'}
存放字符串: char chr[5]={'a','b','c','d','\0'}
(2)赋值 char chr[3];
chr[0]='a';chr[1]='b';chr[2]='c';
注:字符常量只能是单个字符,字符串常量可以是多个字符
3.字符串的输入输出
(1)输入
①scanf语句 scanf("%s",字符数组名);
② gets语句 gets(字符数组名);
(2)输出
①printf语句 printf("%s",字符数组名);
②puts语句 puts(字符数组名);
二、数组结构可以解决的问题
1.数组逆序重放
2.倒置排序
3.数学中的逻辑运算问题
4.与矩阵有关的问题
5.扫雷游戏地雷数的计算
三、学习的感受
在一开始接触到数组结构,做练习题的前几个的时候还感觉挺容易的,到后面的练习题就感觉越来越难了,数组结构涉及到的知识面也不亚于循环结构,知识点也很广泛,也更考察学生的数学逻辑判断能力和运算能力。对于我来说,还是有些力不从心的,有时候就只会写个开头结尾,最核心的程序写不出来,不知道怎么用程序去表达。还是要坚持,不坚持怎么知道你行不行,一定不要放弃,所以我会经常问同学问题,问学习c语言厉害的同学。所以要通过多做题去提高自己,丰富自己。加油吧!