2013-11-27 5 views
0

Школьный проект для компьютерных наук. Мне нужно создать программу, в которой пользователь объявляет размер массива, а затем заполняет массив численным, неубывающим порядком, затем объявляет значение x. Затем X присваивается соответствующему месту, поэтому весь массив находится в числовом, неубывающем порядке. Затем массив выводится.C Справка по программе: Неожиданный вывод

Код строится должным образом без ошибок, но выход испорчен.

#include <stdio.h> 

int main (void) { 

//Local Declarations 
int size; 
int ary[100]; 
int x; 
int i; 
int j; 

//Statements 
printf("Enter the size of the array: "); 
scanf("%d", &size); 

printf("\nEnter digits to fill the array, in numerical order: "); 
for (i = 0; i < size; i++) { 
    scanf("%d", &ary[i]); 
} 
size++; 

printf("\nInput x, the value to add to the array: "); 
scanf("%d", &x); 

while(i=0 <= x && x > ary[i]){ 
i++; 
j = size - 1; 
    while(j >= i) { 
     ary[j++] = ary[j]; 
     j--; 
    } 
} 
for(i = 0; i < size; i++) { 
printf("%d,", ary[i]); 
} 

return 0; 
} //main 

Результат:

Enter the size of the array: 5 

Enter digits to fill the array, in numerical order: 1 
2 
3 
4 
5 

Input x, the value to add to the array: 6 
1,2,3,4,5,1630076519, 
Process returned 0 (0x0) execution time : 8.585 s 
Press any key to continue. 

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

+2

Что ваша цель здесь 'я = 0 <= x'? Похож на логическую ошибку. –

+0

'ary [j ++] = ary [j];' также нелогично: строка присваивает одно значение самому себе. – rae1

+0

Мне нужно вернуть я обратно в 0, но программа сработает, если я просто сделаю заявление выше цикла while «i = 0;» –

ответ

0

Для цикла while, вы можете попробовать это вместо того, чтобы,

i = 0; 
while (i < x && x > ary[i]) { 
    i++; 
    j = size - 1; 
    while (j >= i) { 
     j++; 
     ary[j] = ary[j]; // Equivalent to ary[j++] = ary[j];, yet easier to read 
     j--; 
    } 
} 
+0

Я не уверен, почему, но в любое время я добавляю оператор, возвращающий значение i обратно в 0 до этого цикла while, программа зависает. –

+0

Возможно, это часть 'x> ary [i]'. Что именно должно делать назначение? – rae1

0

Попробуйте это:

#include <stdio.h> 

int main (void) { 

//Local Declarations 
int size; 
int ary[100]; 
int x; 
int i; 
int j; 
int temp1,temp2; 

//Statements 
printf("Enter the size of the array: "); 
scanf("%d", &size); 

printf("\nEnter digits to fill the array, in numerical order: "); 
for (i = 0; i < size; i++) { 
scanf("%d", &ary[i]); 
} 


printf("\nInput x, the value to add to the array: "); 
scanf("%d", &x); 

for(i=0;i<size;i++) 
{ 
    if(ary[i]>x) 
    { 
     temp1 = ary[i]; 
     ary[i] = x; 
     break; 
    } 
} 
if(i==size) 
{ 
    ary[i]= x; 
} 
else 
{ 

    for(j=i+1;j<size+1;j++) 
    { 
     if(j==size) //Last element of the new array 
     { 
      ary[j] = temp1; 
      break; 
     } 

     temp2 = ary[j]; 
     ary[j] =temp1; 
     temp1 = temp2; 


    } 
} 

for(i = 0; i < size+1; i++) { 
printf("%d,", ary[i]); 
} 

return 0; 
} //main 
Смежные вопросы