第八章数组总结
一、数组的定义和初始化
数组基类型
数组名称 数组长度
1.[
]中的数既数组的下标,下标的个数表示数组的维度
2.C++语言中的数组下标都是从0开始的,这个数上的数组没有定义
3.在定义数组时不能使用变量定义数组的大小,可以在头部通过定义宏常量来定义不确定长度的数组。
4.二维数组的定义: 类型 数组名[第一维长度][第二维长度];(不能忽略第二维数组的长度)
二、数组的输入,赋值与输出
用循环语句将需要的值挨个输出输入赋值
三、排序
1.选择排序
第i次选择排序通过n-1次数组值的比较,从中选出最大或最小的一个放在第i个位置上,即第一次排序从所有数中挑出最大(小)的数放在第一个的位置上,第二次从第二个到最后一个中跳出来……以此类推
例题
#include
#define N 100
int a[N];
int main()
{
int
k,n,t;
for(int
i=0;i<n-1;i++)
{
k=i;
for(int
j=k+1;j<n;j++)
{
if(a[j]<a[k]) k=j;/*选择的过程*/
if(i!=k)
{
t=a[i];
a[i]=a[k];
a[k]=t;
}/*交换的过程*/
}
}
}
2二分查找
思想:将数组分开,通过与中间值得比较,每次将查找范围缩小一半,大大缩小了时间
先排序,后查找
#include
#define N 100
int a[N];
using namespace std;
int main()
{
int
n,low,high,mid,temp;
low=0,high=n-1,mid=0;
while(low<=high)
{
mid=(low+high)/2;
if(a[mid]>temp)
high=mid-1;
else if(a[mid]<temp)
low=mid+1;
}
cout<<“Not
Found!”<<endl;
}
字符数组的定义格式
字符数组定义格式同于一般数组,所不同的是数组类型是字符型,第一个元素同样是从ch1[0]开始,而不是ch1[1]
[存储类型] char 数组名[常量表达式1]…
例如
char ch1[5]; //数组ch1是一个具有5个字符元素的一维字符数组
2.字符串的输入
从键盘输入一个字符数组可以使用scanf语句或gets语句。
(1)scanf语句 格式:scanf(“%s”,字符数组名);
说明:①系统会自动在输入的字符串常量后添加‘\0’标志,因此输入时,仅输入字符串的内容即可。②输入多个字符串时,以空格分隔。
(2)gets语句 格式:gets(字符数组名);
说明:使用gets只能输入一个字符串。读入的是一整行,包括空格。
3、输出
向屏幕输出一个字符串可以使用printf语句或puts语句。
(1)printf语句
格式:printf(“%s”,字符数组名);
说明:puts语句输出一个字符串和一个换行符。对于已经声明过的字符串a,printf(“%s\n”,a)和 puts(a)是等价的。
个人总结:遇到错误,先要自己反复研读(走查,甚至在纸上写出每一步的循环过程),分析代码有没有问题。有时怎样也找不出错误,看的头疼,是因为没有跳出之前的代码,一直在原来的代码中,读来读去也感觉没有问题。这时要及时跳出自己的代码,回去再看看题,而看题的时候,要当成新题来读,以免陷入原来的代码中。同时要多次回去分析题目要求,因为在分析原题的过程中,往往会产生新的想法。然而,遇到问题也不要走另一个极端——反复想也想不出来,仍然反复的想,这样虽然看起来很坚持,但也浪费时间。
另外,检查程序的时候,如果有数据,要首先检查数组的编号是否一致、语法是否有错误。
但是再怎样细致的检查都不如最初写代码时的仔细来的重要,所以不论写什么样的代码,都应该仔仔细细,不在细节上犯马虎。