如何打印数组的元素,但包含特定数字的元素除外?

How to print elements of an array except those containing a specific digit?

我刚开始学习C语言,我做了这个程序,它按降序打印数组的元素,然后按降序打印同一数组的2位元素。现在我想打印该数组的元素,但包含数字 5 的元素除外。这是我编写的程序:

#include<stdio.h>
#include<conio.h>
int main(void)
{
    int array[20] = {2,5,1,3,4,10,30,50,40,20,70,90,80,60,100,150,130,110,120,140};

    printf("original array:\n");

    for(int i=0;i<20;i++)
    {
        printf("%i\n", array[i]);
    }

// To sort elements of array in descending order

int i,j,temp;

for(i=0;i<20;i++)
{
        for(j=i+1;j<20;j++)
        {
           if(array[i]>array[j])
           {
               temp = array[i];

               array[i] = array[j];

               array[j] = temp;
           }
        }
}

// Now to print the sorted array

printf("arranged array in descending order:\n");

for(int x = 19;x>=0;x--)
{
    printf("%i\n", array[x]);
}

// To print only 2-digit elements of the array

printf("following are only 2-digit elements of array in descending order:\n");

for(int k = 19;k>=0;k--)
{
    if(array[k]>9 && array[k]<100)
    {
        printf("%i\n", array[k]);
    }
}
}

我应该采用什么逻辑才能不打印包含“5”的元素? 提前致谢:)

这些是以二进制形式存储的整数,因此测试数字(以 10 为底)实际上取决于它的显示方式。

尝试

char str [33];
for(int k = 19;k>=0;k--)
{
    //convert to a string first
    sprintf(str, "%d", array[k])
    //test for presence of ASCII '5'
    if(!strstr(str, '5'))
    {
        printf("%i\n", array[k]);
    }
}

此函数 returns 1 如果数字包含数字 d0 如果没有。

int has(int x, int d)
{
    while(x)
    {
        if(abs(x % 10) == d)
        {
            return 1;
        }
        x /= 10;
    }
    return 0;
}

使用函数更好地组织代码。首先定义一个swap()函数:

void swap(int *a, int *b)
{
    int tmp = *a;
    *a = *b;
    *b = *a;
}

然后,写一个排序算法。关注您的案例:

void bubble_sort(int *array, int size)
{
    int i, j, swap_oper;
    for (i = 0; i < size - 1; ++i) {
        swap_oper = 0;

        for (j = 0; j < size - i - 1; ++j) {
            if (array[j] > array[j+1]) {
                swap(&array[j], &array[j+1]);
                swap_oper = 1;
            }
        }

        if (swap_oper == 0)
            break;
    }
}

要打印除包含 5 以外的所有数字,请定义一个函数来检查数字中是否包含 5:

int contains_five(int n)
{
    while (n != 0) {
        if (n % 10 == 5)
            return 1; // true

        n /= 10;
    }
    return 0; // false
}

那么你可以这样使用它:

void print_array(int *array, int size)
{
    int i;
    for (i = 0; i < size; ++i) {
        if (!contains_five(array[i]))
            printf("%d ", array[i]);
    }
}