WY c语言入门 (6)
6.1.1 数组
如何记录输入的很多数字?
int number[100] 数组
1 #include<stdio.h> 2 3 int main() 4 { 5 int x; 6 double sum = 0; 7 int cnt = 0; 8 int number[100];//引入数组 9 scanf("%d", &x); 10 while ( x!= -1 ){ 11 number[cnt] = x;//对数组赋值 12 sum += x; 13 cnt ++; 14 scanf("%d", &x); 15 } 16 if ( cnt > 0 ){ 17 printf("%f\n", sum/cnt); 18 int i;//遍历数组 19 for ( i=0; i<cnt; i++){ 20 if ( number[i] > sum/cnt){ 21 printf("%d\n", number[i]); 22 } 23 } 24 } 25 return 0; 26 }
6.1.2 定义数组
类型 变量名称[元素数量]; 数量为整数 下标索引从0开始
需保证只使用下标不越界[0,数组最大值-1 ]
越界提示 segmentation fault
6.1.3 例:统计个数
#include<stdio.h> int main() { 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]); }//遍历 return 0; }
6.2.1 数组计算
搜索
数组的集成初始化
int a[] = {2,4,6,7,1,3,5,9,11,13,23,14,32};
数组大小 sizeof[a]/sizeof[a0]
数组的赋值 本身不可直接赋值 可用遍历(做遍历时 循环结束条件<值)
for ( i=0; i<length; i++ ){
b[i] = a[i];
}
数组传导参数 须引入另一参数
6.2.2 例:素数
1 #include<stdio.h> 2 int isprime(int x, int knownprimes[], int number0fknownprimes) 3 { 4 int ret = 1; 5 int i; 6 for ( i=0; i<number0fknownprimes; i++){ 7 if ( x % knownprimes[i] == 0){ 8 ret = 0; 9 break; 10 } 11 } 12 return ret; 13 } 14 int main(void) 15 { 16 const int number = 100; 17 int prime[number] = {2}; 18 int count = 1; 19 int i =3; 20 while ( count < number ){ 21 if ( isprime(i, prime, count)){ 22 prime[count++] = i; 23 } 24 i++; 25 } 26 for ( i=0; i<number; i++ ){ 27 printf("%d", prime[i]); 28 if( (i+1)%5 )printf("\t"); 29 else printf("\n"); 30 31 } 32 return 0; 33 }
构造素数表
构造n以内 素数表
开辟prime[n],初始化所有元素为1,prime[x]为1
令x = 2
如果x是素数 则对于(i=2;x*i<n;i++)令prime[i*x]=0
令x++ 如果x<n 重复 否则结束
6.2.2二维数组
int a[3][5]三行五列
遍历
for ( i=0; i<3; i++){
for ( j=0; j<5; j++){
a[i][j] = i*j;}
}
初始化定义 int a[][5] = {
{0,1,2,3,4},
{2,3,4,5,6},
};