Как выбрать несколько элементов в массиве с помощью C?

Есть ли способ выбрать несколько элементов в массиве, используя одну строку кода на C? Например, предположим, что у меня есть следующий код (при условии, что я уже запросил у пользователя двадцать чисел, первые десять я попросил быть положительными, а последние десять я попросил отрицательными):

if (myArray[0 through 9] > 0)
{
  printf("Thank you for providing positive numbers!");
}
else
{
  printf("Sorry, please try again!");
}

if (myArray[10 through 19] < 0)
{
  printf("Thank you for providing negative numbers!");
}
else
{
  printf("Sorry, please try again!");
}

Каким кодом я могу заменить «через»? Я довольно новичок в этом языке и никогда не слышал о способе сделать это. Я знаю, что с помощью этого конкретного кода я мог бы создать два массива, один для положительных чисел, а другой для отрицательных, но мне любопытно узнать для других проектов программирования.

Спасибо, что прочитали и ответили!


person Terryn    schedule 17.07.2014    source источник
comment
Там нет нарезки массива, вам придется сделать это самостоятельно, с циклом, скорее всего   -  person Ben    schedule 17.07.2014


Ответы (3)


Там нет ничего встроенного, что делает это, вам нужно написать цикл. Не забывайте, что индексы массива начинаются с 0.

int all_positive = 1;
int i;
for (i = 0; i < 10; i++) {
    if (myArray[i] <= 0) {
        all_positive = 0;
        break;
    }
}
if (all_positive) {
    printf("Thank you for providing positive numbers!\n");
}
person Barmar    schedule 17.07.2014
comment
Хорошо, спасибо, я не был уверен, есть это или нет, поэтому вместо этого я буду использовать циклы. И спасибо, что указали, что я написал единицу вместо нуля! Я исправлю это. - person Terryn; 17.07.2014

int a[20];

// entering values for the array

_Bool first_positive = 1;

for ( size_t i = 0; i < 10 && first_positive; i++ )
{
   first_positive = 0 < a[i];
}

if ( first_positive ) puts( "Hura, first 10 elements are positive" );

_Bool last_negative = 1;

for ( size_t i = 10; i < 20 && last_negative; i++ )
{
   last_negative = a[i] < 0;
}

if ( last_negative ) puts( "Hura, last 10 elements are negative" );

Вместо имени типа _Bool вы можете использовать тип int, если ваш компилятор не поддерживает _Bool

person Vlad from Moscow    schedule 17.07.2014

Программа запрашивает количество строк (массив 1D). Затем запрашивает 2 целых числа, целые числа. Затем просит пользователя выбрать 2 строки. Затем добавляется сумма двух выбранных строк.

   #include <stdio.h>
   int main ()
   //1D_Array. Load Element and Add Sumline .
   //KHO2016.no5. mingw (TDM-GCC-32) . c-ansi .
   {
   //declare
   int a,b,c,d,e,sum1=0;
   int array[50];
   int i,j,elm1,elm2;

   //valuate
   printf ("Plot a number of elements [1 - 20]: ");
   scanf ("%d",&a);
   printf ("Plot a value : ");
   scanf ("%d",&b);
   printf ("Plot an increment value : ");
   scanf ("%d",&c);

   //calculate
   {for (i<0;i<=a;i++)
   {array[i] =(b+(++c)); // set value for variable [i], inside the array subscript. the vairable [i] must have an INT, and an increment to function !
   sum1 = (sum1 + array[i]);
   printf ("Row [%.2d] : %.2d + %.2d = %d\n",i,b,c,array[i]);}
   printf ("\nSum total = %d\n",sum1);} 
   printf ("\nRow [%.2d] = %d\n",b,array[b]);
   printf ("Row [%.2d] = %d\n",a,array[a]);
   printf ("Select 2 Rows :\n");
   scanf ("%d%d",&elm1,&elm2);
   d=elm1;
   e=elm2;

   printf ("You selected Row [%.2d] = %d\n",d,array[d]);
   printf ("You selected Row [%.2d] = %d\n",e,array[e]);
   printf ("The sum of two selected Rows [%d]+[%d] : %d + %d = %d\n",d,e,array[d],array[e],array[d]+array[e]);
   //terminate
   return 0;
   }
person Radar Blue    schedule 27.08.2016
comment
Кажется, вы отвечаете на другой вопрос. - person David Ranieri; 28.08.2016