第七周:数组运算---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;
}
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务