Anagha M Ответов: 4

Найдите сумму всех четырехзначных четных чисел no в данном массиве с помощью функции. (Звонок по ссылке )


#include<stdio.h> 
int b=0,c=0; 
void sum(int *p,int *m) 
{ 
int i,z=0;
for(i=0;i<*m;i++)
{ 
 if(*p>999&&*p<10000&&*p%2==0) 
z=z+*p; 
p=(p+1);
}

for(i=0;i<*m;i++)
{    
    if(*p<-999&&*p>-10000&&(*p%2)==0) 
    Z=z+*p; 
    p=(p+1);

}
printf("Sum is %d",z);

} 


         
int main() 
{ 
 int n,a[100],i; 
 
 printf("enter the number of elements"); 
 scanf("%d", &n); 
 printf("enter the elements "); 
 for(i=0;i<n;i++) 
  scanf ("%d",&a[i]); 
 sum(a,&n); 
 
 
 } 


Что я уже пробовал:

я тоже пытался


#include<stdio.h> 
int b=0,c=0;
void sum(int p[100],int m) 
{ int i,j,l=0,l1=0,a=0,h=0,z=0,x;
for(i=0;i<*m;i++)
{ 
if(p[i]<0 && p[i]%2==0)
{    x=p[i];
    l=x;
    for(j=0;j<4;j++)
 {
    
    if(l>=1)
      {  a++;
    l=l/10;     }
    if(a==4)
    {
    z=z+*p;
    }
    
    }

    
p=(p+1);
a=0;
    
  }
    
else if (*p>0&&*p%2==0)
    l1=*p;
    for(j=0;j<4;j++)
 {    {if(l1>=1)
    h++;
    l1=l1/10;}    }

    if(h==4) 
    {z=z+*p;
     }
p=(p+1);
h=0;
    
}
printf("Sum is %d",z);
} 




Выход не получается когда какой либо из входных данных в массиве является четырехзначным отрицательным нет

Patrice T

Покажите пару примеров входных данных, фактических выходных данных и ожидаемых выходных данных.

4 Ответов

Рейтинг:
1

KarstenK

Для вашего домашнего задания вам нужно Изучайте C++ Это действительно хороший учебник, так что время хорошо потрачено.

Совет: вызов по ссылке-это нечто другое. Эта статья объясняет звоните по ссылке правильно.


CPallini

Это C на самом деле (я знаю , что название вопроса вводит в заблуждение).

Рейтинг:
1

Patrice T

Научитесь правильно делать отступы в вашем коде, это покажет его структуру, и это поможет чтению и пониманию. Это также помогает выявлять структурные ошибки.

#include<stdio.h>
int b=0,c=0;
void sum(int p[100],int m)
{
  int i,j,l=0,l1=0,a=0,h=0,z=0,x;
  for(i=0;i<*m;i++)
  {
    if(p[i]<0 && p[i]%2==0)
    {
      x=p[i];
      l=x;
      for(j=0;j<4;j++)
      {
        if(l>=1)
        {
          a++;
          l=l/10;
        }
        if(a==4)
        {
          z=z+*p;
        }
      }
      p=(p+1);
      a=0;
    }

    else if (*p>0&&*p%2==0)
      l1=*p;
    for(j=0;j<4;j++)
    {
      { // this line is useless
        if(l1>=1)
          h++;
        l1=l1/10;
      } // this line is useless
    }

    if(h==4)
    {
      z=z+*p;
    }
    p=(p+1);
    h=0;

  }
  printf("Sum is %d",z);
}

Профессиональные редакторы программистов имеют эту функцию и другие, такие как сопоставление скобок и подсветка синтаксиса.
Блокнот++ Главная Страница[^]
личные[^]
Цитата:
Выход не получается когда какой либо из входных данных в массиве является четырехзначным отрицательным нет

Попробуйте показать пример ввода, фактический вывод и ожидаемый вывод, это поможет понять, для чего предназначен код, а что неправильно.


Рейтинг:
0

OriginalGriff

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

int sum(int* data, int length)
   {
   ...
   }
(Нет необходимости передавать ссылку на количество элементов, это просто подразумевает, что функция изменит его, чего она совершенно определенно не должна делать). Если функция возвращает значение, это означает, что она может быть использована повторно, а результат напечатан в вашем main метод.
Затем вы можете позвонить ему из main подобный этому:
printf("Sum is %d\n", sum(a, m));
поскольку имя массива является указателем на его первый элемент (вам не нужно брать адрес этого первого элемента, имя массива делает это за вас.)

Пока вы делаете это, отсортируйте отступы, чтобы они были согласованными - опять же, это делает ваш код более читабельным и более понятным.

Тогда вы можете начать его чинить.
Это ваше домашнее задание, и заставить его работать-часть задачи. К счастью, у вас есть инструмент, который поможет вам выяснить, что происходит: отладчик. Как вы его используете, зависит от вашей компиляторной системы, но быстрый поиск в Google имени вашей IDE и "отладчика" должен дать вам необходимую информацию.

Поместите точку останова в первую строку функции и запустите код через отладчик. Затем посмотрите на свой код и на свои данные и определите, что должно произойти вручную. Затем по одному шагу в каждой строке проверяйте, что то, что вы ожидали, произойдет именно так, как и произошло. Когда это не так, тогда у вас есть проблема, и вы можете вернуться назад (или запустить ее снова и посмотреть более внимательно), чтобы выяснить, почему.

Извините, но мы не можем сделать это за вас - пришло время вам освоить новый (и очень, очень полезный) навык: отладку!


Рейтинг:
0

CPallini

Фактическая ошибка в вашем коде заключается в проверке отрицательных чисел после проверки положительных (указатель p находится в конце массива: больше не действует).
Вы должны проверять в одном и том же цикле как положительные, так и отрицательные числа (также по соображениям производительности).
Попробуй

#include <stdio.h>

#define MAXSIZE 100

int sum_for_digit_even (int array[], size_t size);

int main()
{
  int size;
  int  a[MAXSIZE];

  printf("please enter the number of elements\n");
  if ( scanf("%d", &size) != 1 || size > 100)
    return -1;
  
  printf("please enter the elements\n");
  
  int i = 0;
  
  while ( i < size )
  { 
    int x;
    if ( scanf ("%d",&x) == 1)
    {
      a[i] = x;
      ++i;
    }
  }
  
  printf("the sum of the four-digit, even numbers is %d\n", sum_for_digit_even( a, size));
  
  return 0;
}

int sum_for_digit_even (int array[], size_t size)
{
  size_t n;
  int sum = 0;

  for ( n = 0; n < size; ++n)
  {
    int x = array[n];

    if ( x < 0 ) x = -x;

    if ( x >= 1000 && x < 10000 && ( x % 2 == 0) )
      sum += array[n];
  }
  return sum;
}