Есть несколько проблем с кодом, который вы упомянули. Во-первых здесь
int N;
double array[N];
что такое значение N
?Так как N
не инициализирован, он может принять ненужные данные и попытаться создать массив из такого количества элементов, что вызывает неопределенное поведение .Итак, сначала определите значение N
.например,
#define N 5
Или делает следующие два утверждения printf ("Пожалуйста, введите максимальный размер массива:");зсапЕ ( "% d", & N);до объявления array
.Например,
int N;
printf("Please enter maximum size of the array: ");
scanf("%d",&N);
double array[N];/* this works if compiler supports VLA */
Во-вторых , когда вы делаете array[i]=arr[j];
, что содержит arr[j]
?Это фигня.Так что, например,
arr[j] = array[i];
, поскольку array[i]
содержит данные, отсканированные пользователем.
Также рассмотрим вариант использования, например, Предположим, что пользователь вводит N
как 5
, а если пользовательнажатие y
внутри while(1)
более чем в 5
раз, чем доступ к граничным данным в массиве, вызывает неопределенное поведение .Например, давайте рассмотрим приведенный ниже код
int N;
printf("Please enter maximum size of the array: ");
scanf("%d",&N); /* let say 5 */
double array[N]; /* max you can store 5 elements */
while(1){ /* it breaks when user press n or N */
printf("Do you want to enter a number? ");
scanf(" %c",&YesNo); /* what if user didn't press n or N after 5 times, loop doesn't break which makes array[i] going out of bound */
if(YesNo =='y' || YesNo == 'Y'){
scanf("%f", &array[i]); /* this cause problem if user has press y or Y more than N(5) times */
arr[j] = array[i];
/* some code */
}
}
И наконец, для нахождения среднего значения
for (i=0; i<count; i++) {
sum = sum + arr[i];
average = sum/count;
Number = count;
}
почему выполняется average = sum/count;
count
раз, так как он выполняет операцию, вместо этого выполните average = sum/count;
только одинвремя после расчета sum
.Например,
for (i=0; i<count; i++) {
sum = sum + arr[i];
}
average = sum/count; /* do only once */
Number = count;
Пример кода (Изменено на основе вашего кода)
int main(void) {
int N=0,i=0 ,c=0;
double sum, average, min, max;
printf("Please enter maximum size of the array: ");
scanf("%d",&N);
double array[N];
double arr[N];
char YesNo = 'y';
int count = 0;
while(count < N) {
printf("Do you want to enter a number? ");
scanf(" %c",&YesNo);
if(YesNo =='y' || YesNo == 'Y'){
printf("Enter number: ");
scanf("%lf", &array[count]);
arr[count]=array[count];
count++;
}
else
break;
}
max = arr[0];
for (c = 1; c < count; c++) {
if (arr[c] > max)
{
max = arr[c];
}
}
printf("max ele in array : %lf \n",max);
min = array[0];
for (c = 1; c < count; c++) {
if (array[c] < min)
{
min = array[c];
}
}
printf("min ele in array : %lf \n",min);
for (i=0; i<count; i++) {
sum = sum + arr[i];
}
average = sum/count;
printf("Avg of array elements : %lf\n",average);
return 0;
}