我们在编程时往往需要存储很多数,这个时候我们就需要数组这个工具了
1.数组的声明:
<类型>变量名称[元素数量]
double weight[20]; (元素数量必须是整数)
定义:是一种容器(放东西的东西),特点是 1.其中所有的元素具有相同的数据类型 2.一旦创建,不能改变大小 3.数组中的元素在内存中是连续依次排列的。
例题:写一个程序,输入数量不确定的[0,9]范围的整数,统计每一个数字出现的次数,输入-1表示结束
{
const int number=10;
int x;
int count[number];
int i;
for(i=0;i<number;i++){
count[i]=0;
}
scanf("%d",&x);
while(x!=-1){
if(x>=0&&x<=9){
count[x]++;
}
scanf("%d",&x);
}
for(i=0;i<number;i++){
printf("%d:%d\n",i,count[i]);
}
}
2.数组的运算
2.1判断数组中某个数是否存在并找到它的位置
进行这个运算很重要的一点就有找到数组长度
1.数组的大小
int a[]={1,2,3,4,5};
double b=sizeof(a)/sizeof(a[0]);
//这个b就是数组a的长度
//sizeof给出整个数组所占据的内容的大小,单位是字节,sizeof(a[0])给出数组中单个元素的大小,于是相除就得到了数组的单元个数。
2.数组的初始化
我们可以直接用大括号给出数组中所有元素的吃醋是值
int a[]={1,2,3,4,5}
3.数组的赋值
int b[]=a; 这是错误的,数组变量本身不能被赋值,我们只能采用遍历的方式将一个数组的所有值交给另一个数组
例题:判断素数
int isprime(int x);
int main()
{
int x;
scanf("%d",&x);
if(isprime(x)){
printf("%d是素数\n",x);
} else{
printf("%d不是素数",x);
}
return 0;
}
int isprime(int x){
int ret=1;
int i;
if(x==1)ret =0;
for(i=2;i<x;i++){
if(x%i==0){
ret=0;
break;
}
}
return ret;
}
//我们可以对这个isprime函数进行修改,因为偶数肯定不是素数,而且次数无需到x-1,到sqrt(x)就够了
int isprime(int x){
int ret=1;
int i;
if(x==1||(x%2==0&&x!=2)) ret=0;
for (i=3;i<sqrt(x);i+=2){
if(x%i==0){
ret=0;
break;
}
}
return ret;
}
3.二维数组
3.1 二维数组的声明
int a[][5]={
{0,1,2,3,4},
{2,3,4,5,6},
};
注意:二维数组的列数是必须要给的;每行一个{},逗号分隔;最后的逗号可以存在;如果省略则表示补零
例题:连线游戏 读入一个3乘3的矩阵,矩阵中的数字为1则表示该位置有一个x,为0则表示为o,我们编写程序判断有没有哪一方胜利,输出表示获胜一方的o或x,或输出无人获胜
int main()
{
const int size=3;
int board[size][size];
int i,j;
int numofx;
int numofo;
int result=-1; //-1 表示没人赢,1表示x赢,0表示o赢
//读入矩阵
for(i=0;i<size;i++){
for(j=0;j<size;j++){
scanf("%d",&board[i][j]);
}
}
//检查行
for(i=0;i<size&&result=-1;i++){
numofo=numofx=0;
for(j=0;j<size;j++){
if(board[i][j]==1){
numofx++;
}
else{
numofo++;
}
}
if(numofo==size){
result=0;
}else if(numofo==size){
result=1;
}
}
//检查列
if(result==-1){
for(j=0;j<size&&result==-1;j++){
numofo=numofx=0;
for(j=0;i<size;i++){
if(board[i][j]==1){
numofx++;
}else{
numofo++;
}
}
if(numofo==size){
result=0;
}else if(numofx==size){
result=1;
}
}
}
//检查对角线
numofo=numofx=0;
for(i=0;i<size;i++){
if(board[i][j]==1){
numofx++;
}
else{
numofo++;
}
}
if(numofo==size){
result=0;
}
else if(numofx==size){
result=1;
}
numofo=numofx=0;
for(i=0;i<size;i++){
if(board[i][size-i-1]==1){
numofx++;
}
else{
numofo++;
}
}
}