如何打印数组的元素,但包含特定数字的元素除外?
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
如果数字包含数字 d
或 0
如果没有。
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]);
}
}
我刚开始学习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
如果数字包含数字 d
或 0
如果没有。
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]);
}
}