一维数组:
当数组中每个元素只带有一个下标时,我们称这样的数组为一维数组。
定义格式:
类型标识符 数组名[常量表达式]
说明:
a.数组名的命名规则与变量名的命名规则一致。
b.常量表达式表示数组元素的个数。可以是常量和符号常量,但不能是变量。
例:
int a[10];
a数组共有十个元素组成。在内存中十个数组元素共占十个连续的存储单元。a数组最小下标为0,最大下标为9.
按定义,a数组所有元素都是整型变量。
一维数组元素的引用格式:数组名[下标]
一维数组的初始化:格式:
类型标识符 数组名[常量表达式]={值1,值2,……}
该方法仅对数组的前5个元素依次进行初始化,其余值为0。
对数组元素全部初始化为零,可以简写为{}。
数组定义在int main()之内,初始值是随机的;数组定义放在int main()之外,其初始值是0值;数组定义放在int main()之内,只给前面的赋值,后面自动赋0值。
数组越界:
a.数组元素的下标值为正整数。
b.在定义元素个数的下标范围内使用。
一维数组的应用:
数组的声明只有放在外面时才可以开的很大,放在函数内,数组稍大就会异常退出。
memcpy函数要包含头文件cstring;setw要调用iomanip;(memcpy(b,a,sizeof(int)*k))
有趣的跳跃
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<math.h>
using namespace std;
int main()
{
int n,i;
int a[3010],b[3010];
bool flag=0;
cin>>n;
for(i=0;i<n;i++)
cin>>a[i];
if (n==1)
cout<<"Jolly"<<endl;
else
{
for(i=0;i<n-1;i++)
b[i]=abs(a[i+1]-a[i]);
sort(b,b+n-1);
flag=0;
if (b[0]==1)
flag=1;
for(i=0;i<n-2;i++)
{
if(b[i+1]-b[i]==1)
continue;
else
{
flag=0;
break;
}
}
if(flag)
cout<<"Jolly"<<endl;
else
cout<<"Not jolly"<<endl;
}
return 0;
}
寻找配对数
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int main()
{
int n,sum=0;
int a[1001];
cin>>n;
for(int i=0;i<n;i++)
cin>>a[i];
for(int i=0;i<n;i++)
for(int j=i+1;j<n;j++)
for(int s=j+1;s<n;s++)
if(a[i]*a[j]==a[s]||a[i]*a[s]==a[j]||a[j]*a[s]==a[i])
sum++;
cout<<sum;
return 0;
}
二维数组:
定义的一般格式:数据类型 数组名[常量表达式1][常量表达式2]
相似的定义三维数组和四位数组。
二维数组元素的引用格式:<数组名>[下标1][下标2]
二维数组的初始化:二维数组的初始化和一维数组类似,可以将每一行分开来写在各自括号里,也可以把所有数据写在一个括号里。
变换的矩阵
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
int N,i,j,c[6]={0};
char a[11][11],b[11][11];
cin>>N;
for(i=1;i<=N;i++)
for(j=1;j<=N;j++)
cin>>a[i][j];
for(i=1;i<=N;i++)
for(j=1;j<=N;j++)
cin>>b[i][j];
for(i=1;i<=N;i++)
for(j=1;j<=N;j++)
{
if(a[i][j]!=b[j][N+1-i])
c[0]=1;
if(a[i][j]!=b[N+1-j][i])
c[1]=1;
if(a[i][j]!=b[N+1-i][N+1-j])
c[2]=1;
if(a[i][j]!=b[i][j])
c[3]=1;
}
for(i=0;i<5;i++)
{
if(!c[i])
{
cout<<i+1<<endl;
break;
}
}
return 0;
}
计算鞍点
#include<iostream>
using namespace std;
#define N 5
int a[N][N];
int main()
{
int Max,Min,Ni,Nj;
int q=0;
for(int i=0;i<N;i++)
{
for(int j=0;j<N;j++)
cin>>a[i][j];
}
int i,j;
for(i=0;i<N;i++)
{
Max=a[i][0];
for(j=0;j<N;j++)
{
if(a[i][j]>=Max)
{
Ni=i;
Nj=j;
Max=a[i][j];
}
}
Min=Max;
for(int k=0;k<N;k++)
{
if(a[k][Nj]<Min)
Min=a[k][Nj];
}
if(Max==Min)
{
q=1;
cout<<Ni+1<<" "<<Nj+1<<" "<<Max<<endl;
break;
}
}
if (q==0)
cout<<"not found";
return 0;
}
字符类型和字符数组
字符类型:字符类型唯由一个字符组成的字符常量和字符变量。
字符常量的定义:const字符常量='字符'
字符变量定义:char字符变量
字符类型是一个有序类型,字符的大小顺序按其ASCII代码的大小而定。
字符数组
字符数组是指元素为字符的数组。字符数组是用来存放字符序列和字符串的。字符数组也有一维,二维和三维之分。
1.字符数组的定义格式
字符数组定义格式同于一般数组所不同的是数组类型是字符型第一个元素同样是从chl[0]开始,而不是chl[1]。
[存储类型]char数组名[常量表达式1]
字符数组的赋值。
用字符初始化数组;
用字符串初始化数组;
数组元素赋值;
字符常量和字符串常量的区别;1-4
字符串的输入与输出
输入:scanf语句;gets语句
输出:printf语句;puts语句 对于已经声明过的字符串a,printf("%s\n",a)和puts(a)是等价的。
字符串string类型
字符串处理函数
函数格式 | 函数功能 |
strcat(字符串名1,字符串名2) | 将字符串2连接到字符串1后面,返回字符串1的值 |
strncat(字符串名1,字符串名2,长度n) | 将字符串2前n个字符连接到字符串1后边,返回字符串1的值 |
strcpy(字符串名1,字符串名2) | 将字符串2复制到字符串1,返回字符串1的值 |
strncpy(字符串名1,字符串名2,长度n) | 将字符串2前n个字符复制到字符串1,返回字符串1的值 |
strcmp(字符串名1,字符串名2) | 比较字符串1和字符串2的大小,比较的结果由函数带回; 如果字符串1>字符串2,返回一个正整数 如果字符串1=字符串2,返回0 如果字符串1<字符串2,返回一个负整数 |
strncmp(字符串名1,字符串名2,长度n) | 比较字符串1和字符串2的前n个字符,函数返回值的情况同strcmp函数 |
strlen(字符串名) | 计算字符串的长度,终止符'\0'不算在长度之内 |
strlwr(字符串名) | 将字符串中大写字母换成小写字母 |
strupr(字符串名) | 将字符串中小写字母换成大写字母 |