Рубрики

Вывод программ на С | Комплект 8

Прогнозировать выход программ ниже C.
Вопрос 1:

#include<stdio.h>

int main()

{

    int x = 5, p = 10;

    printf("%*d", x, p);

  

    getchar();

    return 0;

}

Выход:

   10

Объяснение:
Пожалуйста, смотрите определение стандартной функции printf

       int printf ( const char * format, ... );

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

       %[flags][width][.precision][length]specifier

Вы можете увидеть подробности всех вышеперечисленных частей здесь http://www.cplusplus.com/reference/clibrary/cstdio/printf/ .

Главное, что нужно отметить — ниже строки о точности
* (звездочка) : точность указывается не в строке формата, а в качестве дополнительного целочисленного аргумента, предшествующего аргументу, который должен быть отформатирован.

Таким образом, в приведенном выше примере 5 — это точность, а 10 — фактическое значение, которое будет напечатано. (Спасибо Ajay Mishra за предоставленное решение)

вопрос 2

int main()

{

  char arr[]  = "geeksforgeeks";

  char *ptr  = arr;

  

  while(*ptr != '\0')

      ++*ptr++;

  printf("%s %s", arr, ptr);

  

  getchar();

  return 0;

}

Вывод: hffltgpshfflt

Объяснение:
Суть этого вопроса заключается в выражении ++ * ptr ++.

Если кто-то знает приоритет и ассоциативность операторов, то ничего больше не остается. Ниже приведен приоритет операторов.

   Postfixx ++            left-to-right
   Prefix  ++             right-to-left
   Dereference *          right-to-left

Поэтому выражение ++ * ptr ++ имеет следующий эффект
Значение * ptr увеличивается
Значение ptr увеличивается

Вопрос 3

int main()

{

  signed char i=0;

  for(; i >= 0; i++);

  printf("%d\n", i);

  

  getchar();

  return 0;

}

Выход: -128

Объяснение:
Здесь первое, что нужно заметить, это точка с запятой в конце цикла for. Так что, в принципе, нет тела для цикла for. И printf напечатает значение i, когда управление выйдет из цикла for. Также обратите внимание, что первый оператор, т.е. инициализатор в цикле for, отсутствует. Но я был инициализирован во время объявления. Поскольку я — символ со знаком, он может принимать значение от -128 до 127. Так что в цикле for я буду увеличивать и увеличивать условие до тех пор, пока не произойдет пролонгация. При пролонгации я стану -128 после 127, в этом случае условие не будет выполнено, и управление выйдет из цикла for.

Вопрос 4

#include <stdio.h>

void fun(const char **p) { }

int main(int argc, char **argv)

{

   fun(argv);

   getchar();

   return 0;

}

Вывод: ошибка компилятора.

Объяснение:
Параметр, передаваемый fun (), и параметр, ожидаемый в определении, имеют несовместимые типы. fun () ожидает const char **, в то время как переданный параметр имеет тип char **.

Теперь попробуйте следующую программу, она будет работать.

void fun(const char **p) { }
int main(int argc, char **argv)
{
   const char **temp;
   fun(temp);
   getchar();
   return 0;
}

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

Вывод программ на С | Комплект 8

0.00 (0%) 0 votes