第七周:数组运算---1-数组运算
视频 1:数组运算
#include<stdio.h> /** 找出 key 在数组 a 中的位置 @param key 要寻找的数字 @param a 要寻找的数组 @param length 数组 a 的长度 @return 如果找到,返回其在 a 中的位置;如果找不到则返回 -1 */ int search (int key,int a[],int length); int main(void) { //int a[]={2,4,6,7,1,3,5,9,11,13,23,14,32}; //int a[13]={2}; //int a[13]={0} 调皮的做法,和初始化效果一样 //int a[13]= {[2]=6,3,[5]=8} ; /*{ int i; //假如一段调试用的代码,看看数组的集成初始化 for(i=0;i<13;i++){ printf("%d\t",a[i]); } printf("\n"); } */ /* int a[]= {[2]=6,3,[5]=8} ; { int i; for(i=0;i<6;i++){ printf("%d\t",a[i]); } printf("\n"); } */ int a[]={2,4,6,7,1,3,5,9,11,13,23,14,32}; //不想自己一个个数,用 sizeof printf("%lu\n",sizeof(a)); printf("%lu\n",sizeof(a[0])); //这样 13 就可以用sizeof(a)/sizeof(a[0]) 代替 { int i; for(i=0;i<13;i++){ printf("%d\t",a[i]); } printf("\n"); } int x; int loc; printf("请输入一个数字:"); scanf("%d",&x); loc=search(x,a,sizeof(a)/sizeof(a[0])); if (loc != -1){ printf("%d在第%d个位置上\n",x,loc); } else{ printf("%d不存在\n",x); } return 0; } search (int key,int a[],int length) { int ret =-1; int i; for( i=0;i<length;i++){ if ( a[i] == key){ ret=i; break; } } return ret; }
视频 2:数组例子函数
#include<stdio.h> int isPrime(int x); int main(void) { int x; scanf("%d",&x); if(isPrime(x)==1){ printf("%d是素数\n",x); }else{ printf("%d不是素数\n",x); } return 0; } //从 2 到 x-1 测试是否可以整除 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; } //去掉偶数后,从 3 到 x-1 ,每次加 2 int isPrime(int x) { int ret = 1; int i; if(x == 1|| x%2== 0 && x!=2) ret = 0; for(i=3;i<x;i+=2){ if(x%i == 0){ ret=0; break; } } return ret; } //无须到 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; }
#include<stdio.h> int isPrime (int x,int knownPrimes[],int numberOfKnownPrimers) { int ret = 1; int i; for (i=0;i<numberOfKnownPrimers;i++){ if(x % knownPrimes[i]==0){ ret = 0; break; } } return ret; }; int main (void){ const int number =100; int prime[number] = {2}; //视频中是这么写的 //编译显示 //[Error] variable-sized object may not be initialized //[Warning] excess elements in array initializer [enabled by default] //[Warning] (near initialization for 'prime') [enabled by default] //在C中,使用变量来定义数组长度时,这个数组可以定义,却不能同时进行初始化赋值,需要在之后赋值 //改成以下这样还是不行 //int prime[number]; //prime[100]={2}; //[Error] expected expression before '{' token //不知道为啥 //改成以下这样可以了 int prime[100]={2}; int count = 1; int i = 3; while( count < number){ if (isPrime(i,prime,count)){ prime[count++] = i; } //调试 { printf("i=%d \tcnt=%d\t",i,count); int i; for ( i=0; i<number; i++){ printf("%d\t",prime[i]); } printf("\n"); } i++; } for (i=0;i<number;i++){ printf("%d",prime[i]); if ((i+1)%5==1) printf("\t"); else printf("\n"); } return 0; }