Результаты прохождения теста C основы пользователем Валерий_Жбанов

Результат прохождения теста "C основы" - Не пройден

+91

Скомпилируется ли следующий фрагмент кода?
int  _; 
for(_ = 0; _ < 10; _++) 
  printf("%d\n", _); 
Ваши ответы
Да
Объяснение:

Подчеркивание в идентификаторах - полноправная буква.

В каких строчках кода находятся ошибки?
#include <stdio.h> 
 
int main() { 
 if (0)  // 1 
 if (1)  // 2 
 for(;;)  // 3 
 while (1);  // 4 
 else printf("foo");  // 5 
 else printf("bar");  // 6 
 return 0; 
} 
Ваши ответы
тут нет ошибок
Как правильно обратиться к элементу a переменной st:
struct Structure { 
   int a; 
} st; 
Ваши ответы
st.a
Корректно ли следующее описание структуры:
struct node {  
   int data; 
   struct node * next;  
}; 
Ваши ответы
Да
Что выведет программа:
int a; 
double b = 2; 
a = 2 * (b * 5/2) / (5/2); 
printf("%d", a); 
Ваши ответы
5
Объяснение:

(5 / 2) равно 2, так как 5 и 2 - это целые числа

В одном файле объявлены следующие переменные, укажите строчки в которых есть ошибки (если они есть)
int count;                      //1 
int count;                      //2 
extern int ext_val;             //3 
extern short ext_val;           //4 
extern int value;               //5 
extern int value;               //6 
Ваши ответы
2,4
Объяснение:

Ошибки:
//2 - повторное объявление
//4 - несоответствие типов
Класс памяти extern показывает, что переменная является ссылкой на переменную с тем же именем. А в //4 ошибка, т.к. типы переменной не совпадают(это ведь как-никак одна переменная)

Чему равно значение выражения: x = 0; --x ? --x : ++x;
Ваши ответы
-2
Объяснение:

Тернарный оператор вычисляет значение выражения --x, а затем в зависимости от его значения выполняет ту или иную инструкцию. Если оно не равно нулю, то выполнится --x, иначе ++x. В данном случае -1 не равно 0, следовательно выполняется строка --x.
(выражение) ? (выполняется эта часть кода, если выражение не равно 0) : (или эта, если выражение равно 0)

Что произойдет в результате компиляции и выполнения следующего кода:
#include <stdio.h> 
int main() { 
   int a = 5; 
   int* b = &a;          // 1 
   printf("%d", a**b);   // 2 
   return 0; 
} 
Ваши ответы
Будет напечатано число 25
Чему будет равно значение x: int x = (3, --x + 2);
Ваши ответы
Не определено
Объяснение:

Значение x в стеке не инициализируется. Оператор запятая возвращает правый аргумент, т.е. --x + 2. Следовательно значение не определено.

Как правильно в данном случае передать массив в описанную ниже функцию?
void func(int** array); 
 
int main() 
{ 
 // массив 
 int array[50]; 
 ... 
Ваши ответы
func(&array);
Объяснение:

Массив представляет собой указатель на первую переменную массива в памяти.

Что произойдет в результате выполнения следующего кода?
#include <stdio.h> 
 
int main() { 
   int x = !5; 
 
   if(!x) { 
       puts("Hello"); 
   } 
 
   return 0; 
} 
Ваши ответы
Программа не напечатает ничего
Объяснение:

int x = !5 аналогично x = 0 см. логический оператор отрицания

Какие из ниже перечисленных объявлений корректны?
Ваши ответы
int b[255];
int c[];
int d[*];
Объяснение:

Массивы нулевой длины разрешены стандартом. int с[] разрешен в объявлении функции, а int d[*] только в объявлении прототипа функции.

что выведет эта программа?
#include <stdio.h> 
 
#define A(b) "" #b "" "c" 
 
int main() { 
 printf("%s", A(a)A(A(a))); 
 return 0; 
} 
Ваши ответы
" #b "" "c
Что выведет следующая программа?
#include <stdio.h> 
func () { 
  return 1, 2, 3; 
} 
main () { 
  int a, b, c; 
  a, b, c = func(); 
  printf("%d %d %d\n", a, b, c); 
  return 0; 
} 
Ваши ответы
0 0 3
Что выведется на экран в результате выполнения?
#include <stdio.h> 
main(void) 
{ 
 int a=5; 
 int b=7; 
 a^=b^=a^=b; 
 printf("%d%d",a,b); 
} 
Ваши ответы
Ошибка компиляции