第八章数组课程笔记

第八章数组课程笔记
本章主要内容包括一维数组、二维数组、简单的排序和查找算法、字符串数组。

一维数组(数组)
数组是一组具有相同类型的变量的集合。
一维数组定义格式
类型 数组名[元素个数]
假设定义一数组 int a[10] 则a就为数组名,10表示有十个数据,但数组下标是从 0 到 9 ,且数据都为整数。
注意
(1)c语言中数组的下标都是从0开始的。
(2)定义数组时不能使用变量定义数组的大小。列如 int a[n] 则n必须是确定的数。
(3)一般定义数组是都要比要求的大一部分,这样可以防止数组数据溢出。
(4)因为同一数组在程序中会出现多次,当修改元素个数时,会很麻烦。所以我们可以把维数定义为宏常量。这样修改时会很方便。
列如 #define n 100;
int a[n];
一维数组的例子
oj中数组06数组逆序重放
#include
using namespace std;
int main()
{
int n,m,b;
int a[1000];
cin>>n;
for(b=0;b<n;b++)
cin>>a[b];
m=n-1;
for(;m>=0;m–)
cout<<a[m]<<" ";
return 0;
}

二维数组
二维数组一般定义格式
类型 数组名[第一维长度][第二维长度]
二维数组类似于一个表格,第一维的长度代表数组每一列的元素个数,第二维长度代表数组每一行的元素个数。
例如 int a[3][4]
注 一维数组的注意事项也适用于二维数组
二维数组的例子
oj中数组14计算矩阵边缘元素之和
#include
using namespace std;
int main()
{
int m,n;
int a,b,c,d,e,f,g;
int x[110][110];
cin>>m>>n;
for(a=1;a<=m;a++)
{
for(b=1;b<=n;b++)
{
cin>>x[a][b];
}
}
for(c=1;c<=m;c++)
{
for(d=1;d<=n;d++)
{
if((c!=1&&d!=1)&&(c!=m&&d!=n))
x[c][d]=0;
}
}
e=0;
for(f=1;f<=m;f++)
{
for(g=1;g<=n;g++)
{
e=e+x[f][g]
}
}
cout<<e;
return 0;
}

排序和查找
排序
主要有选择排序、冒泡排序、插入排序以及sort排序。
选择排序
#include
using namespace std;
int main()
{
int a[100],i,k;
k=0;
cin>>i;
for(int j=1;j<=i;j++)
cin>>a[j];
for(int j=1;j<i;j++)
{
k=j;
for(int s=j+1;s<=i;s++)
{
if(a[s]>a[k])
k=s;
}
if(k!=j)
swap(a[k],a[j]);
}
for(int j=1;j<=i;j++)
cout<<a[j]<<" ";
cout<<endl;
return 0;
}

冒泡排序
#include
using namespace std;
int main()
{
int a[100],i,max;
cin>>i;
for(int b=1;b<=i;b++)
{
cin>>a[b];
}
for(int j=1;j<=i-1;j++)
{
for(int k=1;k<=i-j+1;k++)
{
if(a[k]<a[k-1])
{
max=a[k-1];
a[k-1]=a[k];
a[k]=max;
}
}
}
for(int c=1;c<=i;c++)
{
cout<<a[c]<<" “;
}
return 0;
}
插入排序
#include
using namespace std;
int main()
{
int n,a[1000],b,l;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
for(int i=2;i<=n;i++)
{
l=i;
b=a[i];
for(int s=i-1;s>=1;s–)
if(b>=a[s])
{
l=s;
break;
}
if(l!=i)
{
for(int k=i-1;k>=l;k–)
a[k+1]=a[k];
a[l+1]=b;
}
}
for(int c=1;c<=n;c++)
{
cout<<a[c]<<” “;
}
return 0;
}
c++中sort排序
#include
#include
using namespace std;
int main()
{
int n,a[1000];
cin>>n;
for(int b=0;b<n;b++)
{
cin>>a[b];
}
sort(a,a+n);
for(int c=0;c<n;c++)
{
cout<<a[c]<<” ";
}
return 0;
}
查找
推荐折半查找
相较于顺序查找,折半查找更快捷。

字符数组
字符数组是指元素为字符的数组。字符数组是用来存放字符序列或字符串的。
普通数组的基本规则也适用于字符数组,字符数组也分一维、二维、三维。
1一般定义格式
char x[n];
于一般数组,所不同的是数组类型是字符型,第一个元素同样是从ch1[0]开始,而不是ch1[1]。
2 字符数组的赋值
(1)用字符初始化数组
例如 char chr[4]={‘a’ ,‘b’,‘c’,‘d’}
字符数组中也可以存放若干个字符,也可以来存放字符串。两者的区别是字符串有一结束符\0。即在一维字符数组中存放着带有结束符的若干个字符称为字符串。

字符串是一维数组,但是一维字符数组不等于字符串。

char chr[5]={‘a’,‘b’,‘c’,‘d’,’\0’};即在数组chr2中存放着一个 字符串"abcd" 。
(2).用字符串初始化数组
用一个字符串初始化一个一维字符数组,可以写成下列形式 char chr[5]=“abcd”
对二维字符数组来讲,可存放若干个字符串。可使用由若干个字符串组成的初始值表给二维字符数组初始化。
例如: char chr[3][4]={“abc”,“mno”,“xyz”}在数组chr中存放3 个字符串,每个字符串的长度不得大于3。
(3)数组元素赋值
字符数组的赋值是给该字符数组的各个元素赋一个字符值。
例如:
char chr[3];
char[0]=‘a’ ;chr[1]=‘b’;chr [2]=‘c’;
对二维、三维字符数组也是如此。
3字符串的输入与输出
1、输入
输入一个字符数组可以使用 scanf语句或gets语句。
scanf语句
格式:scanf("%s",字符数组名);
说明
(1)系统会自动在输入的字符串常量后添加’\0’标志,因此输入时,仅输入字符串的内容即可。
(2)输入多个字符串时,以空格分隔。
gets语句
格式:gets(字符数组名)
说明 使用gets只能输入ー个字符串。读入的是一整行,包括空格。
例如: scanf("%s",s1); gets(s2);
对于相同的输入Hello World。s1获取的结果仅是Hello,而s2获取的结果则是Hello World!
2、输出
输出一个字符串可以使用 printf语句或puts语句
printf语句
格式: printf("%s",字符数组名)
puts语句
格式:puts(字符串名称)
说明:puts语旬输出一个字符串和一个换行符。
对于已经声明过的字符串a, printf("%s\n",a)和puts(a)是等价的。

总结
数组主要适用于大量数据的问题,尤其与循环语句相配和。用来解决程序中大量数据变换的情况。数组中每个数据都可以被定位,从而可以对数据进行更详细复杂的计算。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值