为什么需要数组???
int a[2];
int b[2*2];
const int x = 2; // const 是常变量标识符
int c[2*x]; //方括号里相当于个整型常量表达式
int e[(int)3.1]; // 强制类型转换也可以哦
int f['A']; //相当于65
int g[true]; //相当于1
int a[5]={1,2,3,4,5};
int b[5]={1,2,3};
//没被赋值的元素,系统会给赋一个默认值0
只定义不初始化,里面全是垃圾值。
int c={0};
1.
int m[5];
m[5]={1,2,3,4,5};
//只能在定义时初始化这样赋值,其他情况都表示下标。
2.
int n[5]={1,2,3,4,5};
n[5]= 100;//没有a[5]这个元素,最大只有a[4]
3.
int a[5]={1,2,3,4,5};
int b[5];
//如果要把a数组中的值全部赋值给b数组
错误写法:
b=a;
正确写法:
for(i=0;i<5;++i)
b[i]=a[i];
int main(void)
{
int a[5]={1,2,6,4,5};
int i;
int len = 5;
int j,k,m;
for(j=0;j<len-1;++j)
for(k=0;k<len-1-i;++k)
{
if(a[k]<a[k+1])//倒序,由大到小排序
{
m=a[k];
a[k]=a[k+1];
a[k+1]=m;
}
}
for(i=0;i<len;++i)
{
printf("%d\n",a[i]);
}
system("pause");
return 0;
}
先比较所有数组元素的最大值,并记录最大元素所在的位置,一次比较结束后,将整个最大值放到后边。
int main(void)
{
int a[8]={1,4,10,3,5,7,2,2};
int i;
int len = 8;
int k;
int x=0;
for(int k = 0; k < len-1;++k)
{
int c=0;
//int i;
for(i = 1; i < len-k; ++i)
{
if(a[c] < a[i])
c = i;
}
int b = a[c];
a[c] = a[i-1];
a[i-1] = b;
}
for(x=0;x<len;++x)
{
printf("%d\n",a[x]);
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define LEN 10
/*
1. 统计数组中有效元素的个数
*/
int length(int a[])
{
int i=0;
while(i<LEN)
{
if(a[i]==0)
break;
else
{
++i;
}
}
return i;
}
/*
2. 输出数组中有效元素
*/
void show(int a[])
{
int len = length(a);
int i;
for(i=0;i<len;++i)
{
printf("%d\n",a[i]);
}
}
/*
3. 删除数组中指定位置的某个元素
*/
bool del(int a[],int index)
{
int len = length(a);
int i;
int m=0;
if(index<(len+1) && index>0 && len>0)
{
for(i=index-1;i<len;++i)
{
a[i]=a[i+1];
}
a[len-1]=0;
return true;
}
else
{
return false;
}
}
/*
4.在数组指定位置中增加一个有效元素
*/
bool add(int a[],int index,int x)
{
int len = length(a);
int i;
int m=0;
if(index<=(len+1) && index>0 && len>0)
{
for(i=len;i>(index-1);--i)
{
a[i]=a[i-1];
}
a[index-1]=x;
return true;
}
else
{
return false;
}
}
/*
5.将数组元素倒置
*/
bool invert (int a[])
{
int len = length(a);
int i,m;
if(len>=0)
{
for(i=0;i<(len/2);++i)
{
m=a[i];
a[i]=a[len-i-1];
a[len-i-1]=m;
}
return true;
}
else
{
return false;
}
}
/*
为了满足下面二分法的要求
*/
int sort(int a[])
{
int i;
int len = length(a);
int k;
for(int k = 0; k < len-1;++k)
{
int c=0;
//int i;
for(i = 1; i < len-k; ++i)
{
if(a[c] < a[i])
c = i;
}
int b = a[c];
a[c] = a[i-1];
a[i-1] = b;
}
return 0;
}
/*
6.普通查找:查找某个指定的数字是否在数组中,找到则返回所在位置(下标+1),没找到返回-1
*/
int find1(int a[],int x)
{
int len = length(a);
int i;
int y=-1;
sort(a);//没必要,只是为了验证两种查找方式的结果是否一样
if(len>0)
{
for(i=0;i<len;++i)
{
if(a[i]==x)
{
int y=i+1;
return y;
}
}
}
return -1;
}
/*
7.二分法查找:查找某个指定的数字是否在数组中,找到则返回所在位置(下标+1),没找到返回-1
*/
int find2(int a[],int x)
{
//必须先排好序,从小到大
sort(a);
int len = length(a);
int from = 0;
int end = len-1;
while(from <= end)
{
if(x == a[(from+end)/2])
return (from+end)/2+1;
else if(x > a[(from+end)/2])
from = (from+end)/2 + 1;
else
end = (from+end)/2 - 1;
}
return -1;
}
int main(void)
{
int a[LEN]={1,4,10,3,5,7,2,2};
//del(a,3);
//add(a,2,9);
//invert(a);
//show(a);
printf("法一查找的结果是:%d\n",find1(a,10));
printf("法二查找的结果是:%d\n",find2(a,10));
printf("数组中有效元素个数是:%d\n",length(a));
system("pause");
return 0;
}
本文章使用limfx的vsocde插件快速发布