Рубрики

Вывод программ на C | Набор 2

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

Вопрос 1

#include<stdio.h>

char *getString()

{

    char str[] = "Will I be printed?";    

    return str;

}

int main()

{

    printf("%s", getString());

    getchar();

}

Вывод: некоторая ценность мусора
Вышеуказанная программа не работает, потому что переменные массива хранятся в секции Stack. Таким образом, когда getString возвращает значения в str, они удаляются и str становится висячим указателем.

вопрос 2

#include<stdio.h>

int main()

{

    static int i=5;

    if(--i){

        main();

        printf("%d ",i);

    }   

}

Выход: 0 0 0 0
Объяснение: Поскольку i является статической переменной и хранится в разделе данных, все обращения к основному общему ресурсу совпадают с i.

Вопрос 3

#include<stdio.h>

int main()

{

    static int var = 5;

    printf("%d ",var--);

    if(var)

        main();                   

}

Выход: 5 4 3 2 1
Пояснение: То же, что и в предыдущем вопросе. Единственная разница здесь в том, что последовательность вызова main и printf изменена, поэтому вывод отличается.

Вопрос 4

#include<stdio.h>

int main()

{

    int x;

    printf("%d",scanf("%d",&x)); 

    / * Предположим, что задано входное значение

        для вышеуказанного scanf составляет 20 *

    return 1;

Выход: 1
scanf возвращает нет. входов он успешно прочитал.

Вопрос 5

# include <stdio.h>

int main()

{

   int i=0;

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

   {

     switch(i)

     {

       case 0:

         i+=5;

       case 1:

         i+=2;

       case 5:

         i+=5;

       default:               

         i+=4;

         break;

     }

     printf("%d  ", i);

   }

  

   getchar();

   return 0;

}   

Выход: 16 21
Объяснение:
Первоначально i = 0. Так как случай 0 истинен, i становится 5, и так как нет оператора break до последнего оператора блока switch, i становится 16. Теперь в следующей итерации ни один случай не является true, поэтому выполнение переходит к значению по умолчанию, и i становится 21 ,

В C, если один случай истинен, блок переключателя выполняется до тех пор, пока не найдет оператор break Если нет оператора break, все дела выполняются после истинного случая. Если вы хотите знать, почему переключатель реализован таким образом, эта реализация полезна для ситуаций, подобных приведенным ниже.

 switch (c)
 {
    case 'a':
    case 'e':
    case 'i' :
    case 'o':
    case 'u':
      printf(" Vowel character");
      break;
    default : 
      printf("Not a Vowel character");; break;    
  }

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

Вывод программ на C | Набор 2

0.00 (0%) 0 votes