Рубрики

Выход программы C | Комплект 27

Прогнозировать выход следующих программ на Си.

Вопрос 1

#include <stdio.h>

  

int main(void)

{

    int i;

    int power_of_ten[5] = {

                            00001,

                            00010,

                            00100,

                            01000,

                            10000,

                        };

      

    for (i = 0; i < 5; ++i)

        printf("%d ", power_of_ten[i]);

    printf("\n");

      

    return 0;

}

В приведенном выше примере мы создали массив из 5 элементов, элементы которого имеют степень десяти (т.е. 1, 10, 100, 1000 и 10000), и мы печатаем эти элементы с помощью простого цикла for. Таким образом, мы ожидаем, что выход вышеупомянутой программы будет «1 10 100 1000 и 10000», но вышеупомянутая программа не показывает этот вывод, вместо этого он показывает

"1 8 64 512 10000" 

Давайте обсудим вышеупомянутую программу более подробно. Внутри массива мы объявили элементы, которые начинаются с «0», и это восьмеричное представление десятичного числа (подробнее см. Этот GFact ).
Вот почему все эти числа в восьмеричном представлении. «010» является восьмеричным представлением десятичной дроби «8», «0100» является восьмеричным представлением десятичной дроби «64» и так далее.
Последний элемент «10000», который не начинается с «0», поэтому он находится в десятичном формате и печатается как есть.

вопрос 2

#include <stdio.h>

  

int main(void)

{

     https://www.geeksforgeeks.org

  

     printf("Hello, World !!!\n");

  

     return 0;

}

На первый взгляд, похоже, что приведенная выше программа выдаст ошибку компиляции, но она будет работать нормально (но выдаст предупреждение компиляции). Внимательно соблюдайте вышеуказанную программу, в этой программе «http:» будет рассматриваться как метка goto, а две косые черты будут действовать как однострочный комментарий. Поэтому программа будет работать правильно.

Вопрос 3

      
#include <stdio.h>

  
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof(arr[0]))

  

int main(void)

{

    int i;

    int arr[] = {1, 2, 3, 4, 5};

  

    for (i = -1; i < ARRAY_SIZE(arr) - 1; ++i)

        printf("%d ", arr[i + 1]);

  

    printf("\n");

  

    return 0;

}

В вышеприведенной программе макрос «ARRAY_SIZE» подставляет выражение, чтобы получить общее количество элементов, присутствующих в массиве, и мы печатаем эти элементы с помощью цикла for. Но программа ничего не печатает. Давайте посмотрим, что не так с кодом.
Значение, возвращаемое замещенным выражением, имеет формат unsigned int, и внутри цикла for мы сравниваем unsigned 5 со -1. В этом сравнении -1 переводится в целое число без знака. -1 в формате без знака представляется как все его биты установлены в 1 (т. Е. 0xffffffff), что является слишком большим числом

После подстановки значения макроса цикл выглядит следующим образом.

 для (я = -1; 0xffffffff

В вышеприведенном цикле действительно 0xffffffff не меньше 5, поэтому условие цикла не выполняется, и программа выходит из цикла, ничего не печатая.

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

Рекомендуемые посты:

Выход программы C | Комплект 27

0.00 (0%) 0 votes