2018-19学年第一学期程序设计A课程笔记
18-数学类-3班-贾子言-2018216489
2018年12月24日 第3篇
Part 1知识点概述
1 数组的定义
int sore [5] 基类型 数组名 下标
//方括号内的数字表示该维度上数组中元素的个数,实际应用时一般定义一个略大于所需元素个数的数
//下标的个数表示数组的维度的数量
//只能使用常量来定义数组的大小,在实际应用中一般直接定义一个足够大的数组
//将数组定义为全局变量(在主函数之外定义),其中元素会自动被初始化为0,否则主函数内的数组默认不被初始化
//在定义数组时初始化的格式:int a[5] = {1,2,3,4,5}
2 数组元素的访问
数组名加下标的格式
//一个有N个元素的数组,数组元素下标从0开始,到N-1结束
//数组的越界访问可能会引起严重的后果,在实际应用中要注意保证数据的合理性
3 字符型数组
//字符要加单引号
//输入时可在格式控制符前加一个空格,避免读入回车符等
4 字符串
//不加取地址符
//scanf读入不带空格
//puts读入一整行包括空格
Part 2 常见的应用
1 选择排序法
int a[10000];
int i,j,max,l;
cin>>n;
for(i=0;i<n;i++) cin>> a[i];
for(j=0;j<n-1;j++)
{
I=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;
}
2 插入排序法
for(i=1;i<num;i++)
{
I= i-1;
temp=a[i];
while(I>=0&&a[l]>temp)
{
a[l+1]=a[l];
l-;
}
a[l+1]=temp;
}
3 冒泡排序
for (int j=1; j<=n-1; ++j) //冒泡法排序
for (int i=1; i<=n-j; ++i) //两两相比较
if (a[i]<a[i+1]) //比较与交换
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
4 折半查找法
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;
else
couture<<a[mid]<<endl;
}
cout< <"Not Found!"<<endl;
}
5 筛法(用于给数据做预处理)
求1-100内的素数
const int n=100;
int t;
bool a[n+1];
int main()
for (int i=0; i<=n; ++i) a[i]=true;
a[1]=false;
for (int i=2; i<=sqrt(n); ++i)
if (a[i])
for (int j=2; j<=n/i; ++j) a[i*j]=false;
for (int i=2; i<=n; ++i)
if (a[i]) cout<<i;
)
Part3 近期学习感想
数组这一部分在做题时要注意一些细节,计数要从下标为一开始,让下标和序数统一起来,减少不必要的错误(此时数组要定义足够大)。注意对模拟题中第一个最后一个等特殊位置的处理。这一阶段会经常出现超时的错误,所以我们解决问题时,不仅要找到可行的思路,还要使算法尽量简洁,减少循环次数,例如对数据进行预处理,先排序再选择等