411一维数组的引出及使用 例4-4:用筛选法求1100间的素数 2 45678 °0 12131415161718 第1步:先将1筛掉 0023456789101112131415161718… 第2步:将2的倍数都筛掉 00230507090110130150170 第3步:将3的倍数都筛掉 0023050700011013000170 逐步将5..11的倍数都筛掉,最后数组中的非零数就是素数
4.1.1 一维数组的引出及使用 例4-4: 用筛选法求1—100间的素数 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 … 0 0 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 … 0 0 2 3 0 5 0 7 0 9 0 11 0 13 0 15 0 17 0 … 0 0 2 3 0 5 0 7 0 0 0 11 0 13 0 0 0 17 0 … 第1步 : 先将1筛掉 第2步 : 将2的倍数都筛掉 第3步 : 将3的倍数都筛掉 逐步将5… 11的倍数都筛掉,最后数组中的非零数就是素数
411一维数组的引出及使用 #include<stdio.h> #include<math.h> void main( f int i,g, n, a[101 for(i=0;i<=100;i++)→对数组a的每个元素赋值, aFi 其值恰好等于其下标值 a[1=0;→第1步:将1°掉 for(i=2;i<sqrt(100);i+)→每次循环,筛掉i的倍数 for(=i+1;j=100;j++)÷j从计+1开始逐渐变化到10, {if(ai!=0&&alj!=0)依次判断是否是i的倍数 if(all%a==0) a[jl=0 (见下页)
#include<stdio.h> #include<math.h> void main( ) { int i, j, n, a[101]; for(i=0; i<=100; i++) a[i]=i; a[1]=0; for( i=2; i<sqrt(100); i++) for(j=i+1; j<=100; j++) { if(a[i]!=0&&a[j]!=0) if(a[j]%a[i]==0) a[j]=0; } … (见下页) 4.1.1 一维数组的引出及使用 → 第1步 : 将1筛掉 → 每次循环, 筛掉 i 的倍数 → j 从i+1开始逐渐变化到100, 依次判断j是否是i 的倍数 →对数组a的每个元素赋值, 其值恰好等于其下标值
411一维数组的引出及使用 #includesstdio h> #includesmath.h> void main() { n=0;→n是计数器,统计素数的个数 for(i=1;i<=100;计+)→i从1变化到100 if(a[i!=0) 判断数组元素a是否等于0 i printf(%04d", aiD; n++; if(n%10=0) printf("n");→每输出10个换行
#include<stdio.h> #include<math.h> void main( ) { … n=0; for(i=1;i<=100;i++) { if(a[i]!=0) { printf("%4d",a[i]); n++; } if(n%10==0) printf("\n"); } } → n是计数器, 统计素数的个数 → i 从1变化到100, 判断数组元素a[i] 是否等于0 → 每输出10个换行 4.1.1 一维数组的引出及使用
411一维数组的引出及使用 例4-5:输入一个数据,在已知数组中查找是否有该数据 #include <stdio.h> 9 5|a[0 void main() 8a[l] i int i,x; inta[10}={5,8,0,1,9,2,6,3,7,4}; 0|a2 scanf(“%d”,&x); 3 for(i=0;i<10;i++) 9|a|4 if(x==aiD) { printf((“find!a%d=xmn”,j); 2|a5l b reaK, a 6 找到x后结束循环 3al if(i==10) 7a 8 printf( no find!n”);
找到x后结束循环 例4-5: 输入一个数据,在已知数组中查找是否有该数据 5 8 0 1 9 2 6 3 7 4 x 9 a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] #include <stdio.h> void main( ) { int i , x ; int a[10]={ 5, 8, 0, 1, 9, 2, 6, 3, 7, 4 }; scanf(“%d”, &x); for ( i=0 ; i<10 ; i++) if ( x= =a[i] ) { printf(“find! a[%d]=x\n”, i); break; } if ( i= =10 ) printf(“no find!\n”); } 4.1.1 一维数组的引出及使用
411一维数组的引出及使用 例4-6:用冒泡排序法对6个数进行排序(从小到大) a0]9 2 2 4 a[2 725 2541 4 3 725419 5 a|44 7 579 124579 511 9 初始状态第1轮第2轮第3轮第4轮第5轮 冒泡排序方法:依次比较相邻的两个数,将小数放前面, 大数放后面.n个数排序需要进行n-1轮比较,从第1轮到 第n-1轮,各轮的比较次数依次为:n-1次、n-2次∴.1次
例4-6: 用冒泡排序法对6个数进行排序(从小到大) 9 7 2 5 4 1 a[0] a[1] a[2] a[3] a[4] a[5] 7 2 5 4 1 9 2 7 7 5 4 71 2 5 4 1 7 9 4 51 5 2 4 1 5 7 9 2 1 4 5 7 9 1 4 1 2 冒泡排序方法: 依次比较相邻的两个数,将小数放前面, 大数放后面. n个数排序需要进行n-1轮比较, 从第1轮到 第n-1轮, 各轮的比较次数依次为:n-1次、n-2次 … 1次 9 7 2 5 4 91 9 9 9 9 7 2 5 4 1 初始状态 第1轮 第2轮 第3轮 第4轮 第5轮 7 4.1.1 一维数组的引出及使用