Где ошибка? подскажите - C (СИ)

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

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

В С Удалить цифры 0, 3, 6, 9 из элементов массива.
Листинг программы
  1. #include <stdio.h>
  2. int main()
  3. {
  4. int a[100], b[100] , n, m, s, z, i;
  5. printf("Vvedite razmer masiva:\n");
  6. scanf_s("%d", &n);
  7. if(n<0 || n>100){
  8. printf("Nedopystimay masiv");
  9. return 1;
  10. }
  11.  
  12. printf("Vvedite elementay masiva:\n");
  13. for (i=0; i<n; i++)
  14. scanf_s("%d", &a[i]);
  15. for (i=0;i<n;i++)
  16. {s=0; z=0;
  17. while(a[i]%10!=0 || a[i]>=10 )
  18. {z=a[i]%10;
  19. a[i]=(a[i]-z)/10;
  20. if (z==0 || z==3 || z==6 || z==9);
  21. else
  22. { if (s!=0)
  23. s=z*10+s;
  24. else s=z;
  25. } } };
  26. s=z*100+s;
  27. printf("%d", a[i]);
  28. return 0;
  29. }

Решение задачи: «Где ошибка? подскажите»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. int removing(int d);
  6.  
  7. int main(void)
  8. {
  9.     unsigned n;
  10.     int i;
  11.     char s[80];
  12.    
  13.     do {
  14.     printf("Enter size of array (0<n<100): ");
  15.     gets(s);
  16.     } while ( atoi(s) < 1 || atoi(s) > 100 );
  17.     n = atoi(s);
  18.    
  19.     int arr[n];
  20.    
  21.     /* Генерируем массив случаяными значениями (не больше 1000) */
  22.     srand(time(NULL));
  23.     for (i = 0; i < n; ++i)
  24.     printf("%-5d%c", arr[i] = rand() % 1000, (i % 10 == 9) ? '\n' : ' ');
  25.     putchar('\n');
  26.    
  27.     /* Поиск чисел содержащих символ 0, 3, 6, 9 */
  28.     for (i = 0; i < n; ++i) {
  29.     arr[i] = removing(arr[i]);
  30.     printf("%-5d%c", arr[i], (i % 10 == 9) ? '\n' : ' ');
  31.     }
  32.    
  33.     return 0;
  34. }
  35.  
  36. int removing(int d)
  37. {
  38.     int i, j;
  39.     char s[80];
  40.    
  41.     for (i = 0; i < 80 && d != 0; ++i) {
  42.     s[i] = d % 10 + '0';
  43.     d /= 10;
  44.     }
  45.    
  46.     char cp_s[i];
  47.    
  48.     s[i--] = '\0';
  49.     for (j = 0; i >= 0; ) {
  50.     if (s[i] == '0'+0 || s[i] == '0'+3 || s[i] == '0'+6 || s[i] == '0'+9)
  51.         --i;
  52.     else
  53.         cp_s[j++] = s[i--];
  54.     }
  55.     cp_s[j] = '\0';
  56.    
  57.     d = atoi(cp_s);
  58.    
  59.     return d;
  60. }

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

  1. Программа сначала запрашивает у пользователя размер массива (n) и сохраняет его в переменную s.
  2. Затем происходит проверка введенного значения размера массива: оно должно быть больше 0 и меньше 100.
  3. Если условие выполняется, то значение n преобразуется в целое число и используется для создания массива arr.
  4. Далее генерируются случайные значения для каждого элемента массива и выводятся на экран.
  5. После этого происходит поиск чисел, содержащих символы '0', '3', '6', '9', и их удаление из массива.
  6. В функции removing происходит преобразование десятичного числа в строку, затем удаляются нужные символы и преобразуется обратно в число.
  7. Возвращаемое значение функции используется для обновления значений элементов массива arr.
  8. Наконец, обновленные значения массива выводятся на экран.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

11   голосов , оценка 3.909 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут