1.定义数组
类型 变量名称 [元素数量];
(元素数量必须是整数)
2.数组特点
用于放东西
所有元素具有相同的数据类型
一旦创建,不能改变大小
内存里,按顺序紧密排列
数组的每个单元就是数组类型的一个变量
使用数组时放在[]中的数字叫做下标或索引,下标时从0开始计数的(便于编译器执行)
范围:[0,数组的大小-1] (超出数组范围则崩溃)
#include <stdio.h>
int main()
{
int x;
double sum=0;
int cnt=0;
int num[100];
scanf("%d",&x);
while(x!=-1){
num[cnt]=x;
cnt++;
sum+=x;
scanf("%d",&x);
}
if(cnt>0)
{
int i;
double average=sum/cnt;//输出平均数
for(i=0;i<cnt;i++)
{
if(num[i]>average)
{
printf("%d",num[i]);//输出大于平均数的值
}
}
}
return 0;
}
但此程序限定了numberl的范围100;
const
特点:关键字const用来定义常量,如果一个变量被const修饰,那么它的值不能再被改变。
好处:编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得他成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也提高。
统计个数(10以内的数)->利用数组
#include <stdio.h>
int main()
{
const int num=10;//数组大小
int x;
int cnt[num];//定义数组
int i;
scanf("%d",&x);
for(i=0;i<num;i++)//初始化数组
{
cnt[i]=0;
}
while(x>-1)
{
if(x>=0&&x<=9)
{
cnt[x]++;//数组参与运算
}
scanf("%d",&x);
}
for(i=1;i<num;i++)
{
printf("%d:%d\n",i,cnt[i]);//遍历数组,输出
}
return 0;
}
在给定的数据中,如何找出某个数据是否存在?
数组集成初始化
int a[]={}
没有赋值的单元会自动补零
数组的大小
sizeof给出整个数据所占据的内容的大小,单位是字节。
sizeof(a)/sizeof(a[0])
这样的代码,即便修改数组中初始的数据,不需要修改遍历的代码。
数组的赋值
数组变量本身不能被赋值;
若要把一个数组的所有元素交到另一个数组,必须采用遍历;
for(i=0;i<length;i++){ b[i]=a[i]; }
遍历数组
通常用for循环,糖=让循环变量从i从0到<数组的长度,使i恰好为有效数组。
数组作为函数参数,往往必须在再用另一个参数来传入数组的大小。
数组例子->素数
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;
}
当n很大时,循环效率差。
方法一:先判断是否是偶数,去掉偶数 + sqrt()
方法二:拿比x小的素数来测试是否是素数
算法:(先得有素数表)令x为2;将2x 3x 4x直至ax<n的数标记为非素数;令x为下一个没有被标记为非素数的数,重复上述操作;直至所有的数都已经尝试完毕。