Сожмите массив, «выбросив» каждый второй его элемент - C (СИ)

Узнай цену своей работы

Формулировка задачи:

короче есть написанная программа, но она не работает, «Сожмите» массив, «выбросив» каждый второй его элемент (до* полнительные массивы использовать не разрешается).
#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
char str[100],str1[100]="",str2[20];int o,n;
gets(str);
char *ptr = strtok(str," \t");
while(ptr != NULL){//пока не конец строки
    strcpy(str2,ptr);//копируем слово в новую переменную
    n=strlen(str2);
    for (int i=0;i<n;i++){
    o=str2[i];//берем i-ый символ и сравниваем с буквами 
    if (o==90){o=65;//если i-ая буква = Z , то меням ее на А
    str2[i]=o;}
    if (o==87){o=66;//W ==> B
    str2[i]=o;}
    if(o==88){o=67;//X==>C
    str2[i]=o;}
    }
    strcat(str1,str2);//копируем слово в строку для вывода
    strcat(str1," ");//вставляем пробел
    ptr = strtok(NULL," \t");//переход на новое слово
}
puts (str1);
    return 0;
}
а, не тот текст скопировал вот это не работает
#include <stdio.h>

int main(int argc, char *argv[])
{
int n,j=0,m=0;
scanf ("%d",&n);
int a[n];
for (int i=0;i<n;i++)scanf ("%d",&a[i]);
    for (int i=0;i<n;i++)if(i%2==0){
            a[j]=a[i];
            m++;
            j++;}
for(int j=0;j<m;j++)printf("%d ",a[j]);
printf("\n");
    return 0;
}

Решение задачи: «Сожмите массив, «выбросив» каждый второй его элемент»

textual
Листинг программы
#include <stdio.h>
#define size 100
int main(){
    int n,a[size],i=0;
    scanf("%d",&n);
    while (i < n)
        scanf("%d",&a[i++]);
    for (i=1; i < n; i++)
        for (int j=i; j <n; j++)
            a[j]=a[j+1];
    if (n%2) n++;
    for (i=0; i < n/2; i++)
        printf("%d ",a[i]);
    return 0;
}

Объяснение кода листинга программы

В этом коде:

  1. Объявляются переменные:
    • n - для хранения количества элементов массива
    • a - для хранения массива
    • i - для контроля количества считываемых элементов
  2. Считывается количество элементов массива с помощью функции scanf().
  3. В цикле считываются элементы массива с помощью функции scanf().
  4. В двух вложенных циклах элементы массива выбрасываются каждый второй.
  5. Если количество элементов массива нечетное, то к нему добавляется единица, чтобы выйти из цикла с четным количеством элементов.
  6. В цикле выводятся элементы массива через пробел.
  7. Возвращается 0, чтобы указать, что программа успешно завершилась.

Оцени полезность:

11   голосов , оценка 3.727 из 5
Похожие ответы