Программирование на языке C в Microsoft Visual Studio 2010

Ответы на курс: Программирование на языке C в Microsoft Visual Studio 2010

Какой фрагмент кода определяет минимальное из двух чисел?

В каком случае окончанием ввода строки будет служить нажатие клавиши Enter?

В каком случае память выделяется динамически?

		
	int arr1[10] = {1,2,3,4,5};				(1)
	int *arr2 = (int *)calloc(10, sizeof(int));		(2)
	int *arr3 = (int *)malloc(10*sizeof(int));		(3)

Каким образом необходимо выполнить открытие файла для того, чтобы для каждого запуска программы сохранялся отдельный файл лога, содержащий описание всех действий, выполненных в программе (при условии, что программа запускается не более одного раза в минуту)?

#include <stdio.h>
#include <math.h>
#include <time.h>
#include <string.h>

void AddToLog(FILE*, char*);
char* GenerateFileName();

int main (void) 
{
	FILE *fp;
	char *strFile, strFn[30] = "";
	double (*pFunc) (double);
	int c = 1;
	double y;

	strFile = GenerateFileName();
	strcpy(strFn, strFile);

	<Открытие файла>

	while(1) {
		printf("Выберите функцию (0-выход): 1-sqrt, 2-sin, 3-tan\n");
		scanf("%d", &c);
		switch(c) {
			case 1: 
				pFunc = sqrt; 
				AddToLog(fp, "Пользователь выбрал функцию 1 (вычисление квадратного корня)\n");
				break;
			case 2: 
				pFunc = sin; 
				AddToLog(fp, "Пользователь выбрал функцию 2 (вычисление синуса)\n");
				break;
			case 3: 
				pFunc = tan; 
				AddToLog(fp, "Пользователь выбрал функцию 3 (вычисление тангенса)\n");
				break;
			case 0: 
				AddToLog(fp, "Пользователь завершил выбор функции\n\n");
				printf("Лог сохранен в файл %s\n", strFn);
				return;
			default: 
				AddToLog(fp, "Пользователь задал неверный номер функции\n\n");
				continue;
		}
	
		y = pFunc(1.1);
		AddToLog(fp, "Вычислено значение выбранной функции\n");
		printf("f(1.1) = %.2f\n", y);
		AddToLog(fp, "Результат вычисления выведен на экран\n");
	}

	if (fp != NULL) fclose(fp);	
	return 0;
}

void AddToLog(FILE *fp, char *str)
{
	if (fp != NULL) fputs(str, fp);
}

char* GenerateFileName()
{
	char strTime[10] = "";
	char strDate[10] = "";
	char strFile[30] = "g:\\log_";
	char *token;

	_strdate(strDate);
	_strtime(strTime);

	token = strtok(strDate, "/");
	while( token != NULL ) {
		strncat(strFile,token,2);
		token = strtok( NULL, "/" );
	}
	strncat(strFile,"_",1);

	token = strtok(strTime, ":");
	while( token != NULL ) {
		strncat(strFile,token,2);
		token = strtok( NULL, "/" );
	}
	strncat(strFile,".txt",4);
}

Какая программа не содержит ошибок?

Что такое битовое поле?

Какой разряд байта является младшим?

В результате выполнения какого фрагмента кода значение переменной y будет равно 11?

В результате выполнения какого фрагмента кода на экран будет выведено одно число?

В каком случае сумма всех элементов массива будет подсчитана правильно?

Почему к указателю типа void* неприменима операция разыменования?

Какая запись с использованием указателя эквивалента заданной записи инкремента?

	int x = 20;
	x++;

В приведенной программе происходит инициализация структуры данных о студенте и последующий вывод этих данных:

struct student {
	char fio[30];
	int group;
	float average;
};

struct student Init(char*, int, float);
void Print(struct student*);

int main(void)
{
	struct student s, *st;
	int i;

	st = Init("Ivanov I.", 3801, 5.00);
	Print(st);

	return 0;
}

struct student Init(char* n, int i, float f)
{
	struct student s, *st;
	st = &s;
	strcpy(st->fio, n);
	st->group = i;
	st->average = f;

	return s;
}

void Print(struct student *st)
{
	printf("\nName: %s", st->fio);
	printf("\nGrouproup: %d", st->group);
	printf("\nAverage mark: %.2f\n", st->average);
}

Какие утверждения являются верными для приведенной программы?


В приведенной программе функция Copy выполняет копирование одной структуры типа sale в другую и возвращает структуру этого же типа:

typedef struct sale_struct {
	char *title;
	int price;
} sale;

sale Copy(sale);

int main(void)
{
	sale s1,s2;
	struct sale_struct s3, s4;

	s1.title = "Book";
	s1.price = 200;

	s3.title = "Cake";
	s3.price = 60;

	return 0;
}

sale Copy(sale s) {
	sale s1;
	s1 = s;
	return s1;
}

Какие из перечисленных вызов функции Copy являются верными?


Какая программа выполняет поразрядную операцию И над двумя целыми числами, представленными в двоичной системе счисления для 16-разрядного компьютера?

Какие статические переменные видны в функции main()?

int f();
static int d = 5, e = 8;

int main(void)
{
	int n = 1, m = 1;
	int s;
	s = f();	
	return 0;
}

int f()
{
	int p;
	static int c = 0;
	p = c;
	printf("d = %d",d);
	return p;
}

Чем отличаются функции printf() и puts() при консольном выводе информации?

Какие утверждения будут верными после выполнения приведенной программы?

#include <stdio.h>
#include <string.h>
#define N 10

int main()
{	
	int i = 0;
	char ch;
	char str1[N] = "test";
	char str2[N];

	ch= str1[0];
	while (ch!='\0')
	{
		str2[i] = str1[i];
		i++;
		ch= str1[i];
	}
	
	return 0;
}

Требуется написать программу, в которой будет использоваться указатель на функции, которые выполняют сортировку целочисленного массива «методом пузырька»: функция PuzSortInc() выполняет сортировку по возрастанию, функция PuzSortDec() — по убыванию. В какой программе предусмотрено корректное завершение работы программы, независимо от номера алгоритма, который задаст пользователь?

Частным случаем какого типа данных являются объединения (union)?

Какая программа содержит ошибку?

В каком случае приведено верное описание выполнения операции побитового отрицания ~ для числа 0х92С4?

Задана программа, исполняемый файл которой имеет имя Example.exe:

int main(int argc, char* argv[])
{
	int n1, n2, m, sum;
	m = argc;
	n1 = atoi(argv[1]);
	n2 = atoi(argv[2]);
	sum = n1 + n2;
	printf("sum = %d\n", sum);

	return 0;
}

Программа запускается из командной строки командой Example.exe 2 3 5. Чему будет равно значение переменной m?


Какая папка предназначена для хранения файлов с исходным кодом в проекте, созданном в среде Microsoft Visual Studio 2010?

Какую информацию содержит файл Example.suo проекта, созданного в Microsoft Visual Studio 2010?

В результате выполнения какого программного кода после ввода пользователем Иван Иванов, 30 будет выведено сообщениеПриятно познакомиться, Иван Иванов!?

Какой дипазон значений имеет тип int на 32-разрядных платформах?

Какие утверждения являются верными?

Почему язык С относится к языку среднего уровня?

Какой тип будет иметь переменная ch после выполнения приведения типов для вычисления значения d?

	char ch = 'a';
	int a;
	float b;
	double c = 4.5;
	double d;

	printf("Enter a:");
	scanf("%d", &a);
	printf("Enter b:");
	scanf("%lf", &b);
	d = (double)ch + a + b + c;

Каким образом пользователь должен ввести данные о себе, чтобы в результате выполнения приведенного фрагмента кода программа вывела приветствие Приятно познакомиться, Иван Иванов!?

	char FirstName[100], LastName[100];
	int Age;

	printf("Введите Ваши имя, фамилию и возраст: \n");
	scanf("%s %[^,]s %d", FirstName, LastName, &Age);

	printf("Приятно познакомиться, %s %s!\n", FirstName, LastName);

Какой дипазон значений имеет тип unsigned int на 32-разрядных платформах?

Чему будет равен результат вычисления b — a, если переменные имеют заданные значения?

	int a = 2*SCHAR_MAX;
	int b = UCHAR_MAX;

Каким будет значение переменной d после выполнения заданных операций и почему?

	int a = 15, b = 2;
	float c = 1.0F;
	float d;

	d = c*(a/b);

Что является недостатком языка С?

Какое утверждение является верным?

Переменные x и y объявлены следующим образом:

	int x;
	short y;

Какие утверждения являются верными при выполнении арифметического выражения x + y?


Для чего предназначена папка External Dependencies в проекте, созданном в среде Microsoft Visual Studio 2010?

Какой фрагмент кода содержит ошибки?

В программе объявлены переменные:

	int x = 15, y = 2;
	float z;
	z = x/y;
	printf("z = %f\n", z);

В результате выполнения какой операции будет выведено значение z = 7?


Размер (в байтах) объектов каких типов данных не зависит от разрядности процессора?

Какую информацию содержит файл Example.sln проекта, созданного в Microsoft Visual Studio 2010?

Что будет выведено на экран в результате выполнения приведенного фрагмента кода на 32-битной платформе?

		
	printf("\n  Maximum integer: %d\n ", INT_MAX);

Какой фрагмент кода содержит не более одной ошибки?

Чему будет равен результат вычисления a + b, если переменные имеют заданные значения?

	int a = SCHAR_MIN;
	int b = SCHAR_MAX;

Какой файл проекта, созданного в Microsoft Visual Studio 2010, содержит настройки среды Visual Studio (информацию об открытых окнах, их расположении и прочих пользовательских параметрах)?

Какой фрагмент кода не содержит ошибок?

Заданы переменные:

	char ch = 'a';
	int a;
	float b;
	double c = 4.5;

Какой тип получит арифметическое выражение ch + a + b + c?


Чему будет равен результат вычисления a + b, если переменные имеют заданные значения?

	int a = INT_MIN;
	int b = INT_MAX;

Сколько раз будет выполнен цикл for?

		
	int x;
	printf("Угадайте число:\n");
	for (x=0; x!=123; ) 
		scanf("%d", &x);

Какой цикл реализует приведенную структурную схему?

Необходимо написать программу для проверки пароля, вводимого пользователем. Программа должна предоставлять пользователю только три попытки ввода пароля. Верный пароль — число 95. Какой фрагмент кода реализует поставленную задачу?

Сколько раз будет выполнен цикл for?

		
	int x=123;
	printf("Угадайте число:\n");
	for (x=0; x==123; ) 
		scanf("%d", &x);

В результате выполнения какого фрагмента кода значение переменной y будет равно 10?

Необходимо написать программу для проверки пароля, вводимого пользователем. Программа должна предоставлять пользователю только три попытки ввода пароля. Верный пароль — число 95. Какой фрагмент кода реализует поставленную задачу?

В результате выполнения какого фрагмента кода на экран будет выведена таблица чисел от 1 до 9 и их квадратов?

Что будет выводиться на экран во время выполнения приведенного фрагмента кода?

	int x, n = 1;
	while (n<=10)
	{
		x = n*n;
		printf("%d %d\n", n, x);
	}

Чему будет равно значение переменной y в результате выполнения приведенного фрагмента кода?

		
	int x = 5, y;
	for(y=1; y<=x; ++y)  
		printf("%d ", y);
		y = x*2;	

Ниже приведены несколько вариантов программы для нахождения всех делителей целого положительного числа (условный оператор if (!(num % div)) определяет, делится ли число num на div без остатка). В каком случае цикл будет выполнен хотя бы один раз для переменной num = 3?

Как организовать бесконечный цикл while?

Игра «Угадай число» заканчивавается, если задуманное число угадано, или количество попыток достигло определенного значения, например, 10. Какой фрагмент кода реализует эту игру неверно, если c — число попыток, n — задуманное число?

Необходимо написать программу для проверки пароля, вводимого пользователем. Программа должна предоставлять пользователю только три попытки ввода пароля. Верный пароль — число 95. Какой фрагмент кода реализует поставленную задачу?

Какое утверждение является верным для приведенного фрагмента кода?

		
	int x;
	printf("Угадайте число:\n");
	for (x=0; x!=123; ) 
		scanf("%d", &x);

В результате выполнения какого фрагмента кода на экран будет выведена таблица чисел от 1 до 10 и их квадратов?

Какой оператор цикла обычно используется в случаях, когда цикл требуется обязательно выполнить хотя бы один раз?

В результате выполнения какого фрагмента кода на экран будут выведены 5 строк, в каждой из которых будет на 1 звездочку меньше, чем в предыдущей?

При вводе каких значений выполнение цикла не будет завершено?

	int num; 
	do {
		scanf("%d", &num);
	} while (num > 100);	

Каким будет значение переменной FirstName после выполнения приведенного фрагмента кода, если в запросе программы пользователь введет данные о себе в виде Иван Иванов,30?

	char FirstName[100], LastName[100];
	int Age;

	printf("Введите Ваши имя, фамилию и возраст: \n");
	scanf("%[^,]s %s %d", FirstName, LastName, &Age);

В результате выполнения какого фрагмента кода на экран будут выведены 5 строк, в каждой из которых будут содержаться звездочки, причем в каждой последующей строки будет на одну звездочку больше, чем в предыдущей?

Ниже приведены несколько вариантов программы для нахождения всех делителей целого положительного числа (условный оператор if (!(num % div)) определяет, делится ли число num на div без остатка). Пользователь ввел значение переменной num = 3. В каком случае цикл не выполнится ни одного раза?

Игра «Угадай число» заканчивавается, если задуманное число угадано, или количество попыток достигло определенного значения, например, 10. Главный цикл игры реализован следующим образом:

	int c = 0, n = 100, m;
	do {
		printf("Ваш вариант: ");
		scanf("%d", &m);
		c++;
	} while <Условие>

c — число попыток, n — задуманное число. Каким должно быть условие завершения игры?


Игра «Угадай число» заканчивавается, если задуманное число угадано, или количество попыток достигло определенного значения, например, 10. Какой фрагмент кода правильным образом реализует эту игру, если c — число попыток, n — задуманное число?

Какой цикл реализует приведенную структурную схему?

При вводе каких значений выполнение цикла завершится?

int num; 
do {
	scanf("%d", &num);
} while (num > 100);	

Какое назначение может иметь в программе приведенный цикл без тела?

	for(t=0; t<SOME_VALUE; t++) ;

Ниже приведены несколько вариантов программы для нахождения всех делителей целого положительного числа (условный оператор if (!(num % div)) определяет, делится ли число num на div без остатка). Пользователь ввел значение переменной num = 3. В каком случае значение переменной div не изменится?

Структурная схема какого оператора представлена ниже?

В результате выполнения какого фрагмента кода на экран будут выведены числа от 0 до 10?

В какой программе ситуация деления на нуль обрабатывается некорректно?

Почему применение оператора goto не является хорошим стилем программирования?

Дана программа определения дня недели:

	int x;
	printf("Введите число от 1 до 7: ");
	scanf_s("%d", &x);

	switch (x<=5 ? 1 :
			x==6 ? 2 : 3)
	{
	case 1:
		printf("Сегодня рабочий день"); 
		break;
	case 2:
		printf("Сегодня суббота"); 
		break;
	case 3:
		printf("Сегодня воскресенье"); 
		break;
	default:
		printf("Ошибка! Вы ввели неверное число");
		break;
	}

Какое сообщение будет выведено на экран, если в запросе ввода пользователь задаст число 8?


В результате выполнения какого фрагмента кода значение переменной m будет равно 8?

Чему будет равно значение переменной f при попытке пользователя вычислить значение 5^6?

  int a, b, res = 0;
  char op;
  int f = 1;

  printf("Введите 1й операнд: ");
  scanf("%d", &a);
  printf("Введите знак операции: ");
  scanf("%s", &op);
  printf("Введите 2й операнд: ");
  scanf("%d", &b);

  switch (op) {
	  case '+': res = a+b; break;
	  case '-': res = a-b; break;
	  case '*': res = a*b; break;
	  case '/': res = a/b; break;
	  default: 
		  printf("Неизвестная операция\n");
		  f = 0;
  }
  f = f*2;
  if (f) printf ("Результат: %d", res);

В каком случае на экран будут выведены только нечетные числа от 1 до 10?

Структурная схема какого оператора представлена ниже?

Какой оператор используется для выхода из функции при выполнении некоторых условий?

Что делает приведенный фрагмент кода?

	int x = 0;

loop1:
	x++;
	if (x<=5) {
		printf("%d \n", x);
		goto loop1;
	}

Что будет выведено на экран в результате выполнения приведенных инструкций при попытке пользователя вычислить значение 5^6?

  int a, b, res = 0;
  char op;
  int f = 1;

  printf("Введите 1й операнд: ");
  scanf("%d", &a);
  printf("Введите знак операции: ");
  scanf("%s", &op);
  printf("Введите 2й операнд: ");
  scanf("%d", &b);

  switch (op) {
	  case '+': res = a+b; break;
	  case '-': res = a-b; break;
	  case '*': res = a*b; break;
	  case '/': res = a/b; break;
	  default: 
		  printf("Неизвестная операция\n");
		  f = 0;
  }
  if (f) printf ("Результат: %d", res);

Каким будет результат выполнения приведенного фрагмента кода, если пользователь введет число 6?

	int num, half, div;
	printf("Введите число: ");
	scanf_s("%d", &num);
	half = num / 2;
	div = 2;

	do {
		if (!(num % div)) printf("%d ", div);
		div++;
	} while (div <= half);

В результате выполнения какого фрагмента кода значение переменной t будет равно 10?

Какой фрагмент кода полностью аналогичен заданному?

	int x = 10, y;
	if(x>9) y = 100;
	else y = 200;

Для каких значений переменной i в результате выполнения приведенного фрагмента кода знак квадрата числа будет противоположен знаку самого числа?

  int isqrd = 0, i;

  printf("Введите число: ");
  scanf("%d", &i);

  isqrd = (!(i%2) && i>0) ? i*i : -(i*i);

  printf("%d в квадрате %d", i, isqrd);

Какой оператор используется для продолжения итераций цикла при выполнении некоторых условий?

При выполнении какого варианта программы определения дня недели при вводе числа 8 на экране будет выведено сообщение Ошибка! Вы ввели неверное число?

В каком случае на экран будут выведены только четные числа от 1 до 10?

В результате выполнения какого фрагмента кода на экран будет выведено больше одного числа?

Что будет выведено на экран в результате выполнения приведенного фрагмента кода?

  int n = 1;

  while (n<=10)
  {
	  if (n%2) 
		  printf("%d\n", n);
		  n++;
		  return;
	  printf("%d\n", n);
	  n++;
  }

Какой фрагмент кода определяет максимальное из двух чисел?

Какой оператор используется для прерывания программного цикла при некотором условии?

Дана программа определения дня недели:

	int x;
	printf("Введите число от 1 до 7: ");
	scanf_s("%d", &x);

	switch (x<=5 ? 1 :
			x==6 ? 2 : 3)
	{
	case 1:
		printf("Сегодня рабочий день"); 
		break;
	case 2:
		printf("Сегодня суббота"); 
		break;
	case 3:
		printf("Сегодня воскресенье"); 
		break;
	default:
		printf("Ошибка! Вы ввели неверное число");
		break;
	}

Какое число нужно ввести, чтобы на экран было выведено сообщение Ошибка! Вы ввели неверное число?


В какой программе будет корректно обработана ситуация деления на нуль?

В каком случае, если пользователь введет число -4, на экран будет выведено сообщение -4 в квадрате = -16?

Задан цикл, который выводит все числа от 1 до 10:

  int n = 1;					(1)

  while (n<=10)					(2)
  {
	  if (n%2) 				(3)
		  printf("%d\n", n);		(4)
			n++;			(5)
	  printf("%d\n", n);			(6)
	  n++;					(7)
  }

Как изменить приведенный цикл, чтобы на экран выводились только нечетные числа от 1 до 10?


По какой формуле вычисляется общий размер одномерного массива в байтах?

Какая программа вычисляет сумму только четных элементов массива?

Какая программа позволяет определить размерность массива arr (для определения размерности массива используется переменная size)?

Что делает приведенная программа?

#include <stdio.h>
#define N 5

int main()
{	
	int m, i;
	int arr[N] = {3, 2, 4, 5, 1};
	
	m = 1;
	for (i=1; i<N; i++)
		if (arr[i]<arr[m]) m = i;

	printf("a[m] = %d", arr[m]);

	return 0;		
}

В результате выполнения какой программы на экран будут выведены числа от 1 до 10 и для каждого числа его квадрат?

Чему будет равно значение переменной size в результате выполнения приведенного фрагмента кода?

	int i, j, size;
	int arr[5][2] = {0,1,2,3,4,5,6,7,8,9};

	size = sizeof(arr)/sizeof(arr[0][0]);

Каким образом выделяется память под двумерный массив int a[3][2]?

При выполнении какой программы возникнет ошибка, связанная с выходом за границы массива?

Чему будет равно значение переменной size в результате выполнения приведенного фрагмента кода?

	int arr[5][2] = {0,1,2,3,4,5,6,7,8,9};

	size = sizeof(arr)/sizeof(arr[0]);

Почему доступ к элементам многомерного массива происходит значительно медленнее, чем к элементам одномерного?

Какие утверждения являются верными?

Чему будет равно значение переменной sum в результате выполнения приведенной программы?

#include <stdio.h>
#define N 10

int main()
{	
	int i, sum;

	int arr[N] = {3, 4, 5, 4, 4};
	for (i = 1, sum = 0; i<N; i++) sum += arr[i];
	printf("Сумма элементов: %d\n", sum);

	return 0;		
}

Какая программа позволяет определить общий размер массива arr в байтах (для определения размерности массива используется переменная size)?

Какая программа реализует сортировку массива целых чисел по убыванию методом прямого выбора?

Какая программа выполняет поиск максимального элемента в массиве?

Что делает приведенная программы?

#include <stdio.h>
#define N 5
#define M 2

int main()
{		
	int i, j, sum=0;
	int arr[N][2] = {0,1,2,3,4,5,6,7,8,9};

	for (i=0; i<N; i++)
	{
		for (j=0; j<M; j++)
			if (!(arr[i][j]%2)) sum+=arr[i][j];
	}
	
	printf("sum = %d\n", sum);

	return 0;
}

Какое утверждение будет истинным после выполнения приведенного фрагмента кода?

	int size1, size2, size3;
	int arr[5][2] = {0,1,2,3,4,5,6,7,8,9};

	size1 = sizeof(arr)/sizeof(arr[0][0]);
	size2 = sizeof(arr)/sizeof(arr[0]);
	size3 = sizeof(arr);	

Какой смысл приобретает переменная size2 после выполнения приведенного фрагмента кода?

	int size1, size2, size3;
	int arr[5][2] = {0,1,2,3,4,5,6,7,8,9};

	size1 = sizeof(arr)/sizeof(arr[0][0]);
	size2 = sizeof(arr)/sizeof(arr[0]);
	size3 = sizeof(arr);	

В каком случае структура верно определена с использованием ключевого слова typedef?

По какой формуле вычисляется общий размер многомерного массива в байтах?

Какая программа реализует сортировку массива целых чисел по убыванию методом «пузырька» (методом прямого обмена)?

Что такое объединение (union) в контексте языка С?

Какой смысл приобретает переменная size1 после выполнения приведенного фрагмента кода?

	int size1, size2, size3;
	int arr[5][2] = {0,1,2,3,4,5,6,7,8,9};

	size1 = sizeof(arr)/sizeof(arr[0][0]);
	size2 = sizeof(arr)/sizeof(arr[0]);
	size3 = sizeof(arr);	

Каким образом выделяется память под двумерный массив int a[3][2]?

По какой формуле вычисляется общий размер двумерного массива в байтах?

Чему будет равно значение переменной i в результате выполнения приведенной программы?

#include <stdio.h>
#define N 10
#define M 5

int main()
{	
	int i;

	int arr1[N] = {3, 4, 5, 4};
	int arr2[M] = {1, 6, 3, 7, 9};
	
	i = sizeof(arr1)/sizeof(arr1[0]) + sizeof(arr2)/sizeof(arr2[0]);
	printf("i = %d\n", i);

	return 0;		
}

Что делает приведенная программа?

#include <stdio.h>
#define N 5

int main()
{	
	int m, i;
	int arr[N] = {3, 2, 4, 5, 1};
	
	m = 1;
	for (i=1; i<N; i++)
		if (arr[i]>arr[m]) m = i;

	printf("a[m] = %d", arr[m]);

	return 0;		
}

Нужно посчитать количество продукции, выпущенной каждым заводом и количество продукции каждого наименования, выпущенной всеми заводами. Вычисленные и исходные данные объединены в таблицу: Какой тип массива необходимо использовать для решения поставленной задачи?

Какое утверждение является верным для приведенной программы?

#include <stdio.h>
#define N 11

int main()
{		
	int i;
	int arr[N][2];

	for (i=1; i<N; i++)
	{
		arr[i][1] = i;
		arr[i][2] = i*i;
	}

	for (i=1; i<N; i++)
		printf("%d,%d\n", arr[i][1], arr[i][2]);

	return 0;		
}

Чему будет равно значение переменной sum после выполнения приведенной программы?

#include <stdio.h>
#define N 5
#define M 2

int main()
{		
	int i, j, sum=0;
	int arr[N][2] = {0,1,2,3,4,5,6,7,8,9};

	for (i=0; i<N; i++)
	{
		for (j=0; j<M; j++)
			if (!(arr[i][j]%2)) sum+=arr[i][j];
	}
	
	printf("sum = %d\n", sum);

	return 0;
}

Какая программа реализует сортировку массива целых чисел по возрастанию методом «пузырька» (методом прямого обмена)?

Каким образом хранится в памяти массив a, начинающийся по адресу 1000 и объявленный как int a[7]?

Почему при инициализации массива int arr2[][2] = {{1,2,3}, {4,5,6}}; возникнет ошибка компиляции?

Заданы две строки:

	char str1[10] = "Lection";
	char str2[10] = "Lection\0";

Какое утверждение является верным?


Приведенный фрагмент кода должен запрашивать пароль не более трех раз:

	char s[5], psw[] = "password";
	int i, k= 0;

	for (i=0; !k && i<3; i++) {
		printf("Введите пароль: \n"),
		gets(s);
		if (strcmp(s, psw)) k = 1;
	}
	
	if (k) printf("Добро пожаловать! TRUE");
	else printf("Ошибка: Неверный пароль! FALSE");

Проверьте правильность этого кода для выполнения поставленной задачи и определите, сколько раз будет выполнен цикл for, если пользователь сразу введет верный пароль password?


Аналогом какой стандартной функции является приведенный фрагмент кода?

	int i = 0, k = 0;
	char str1[10] = "Test";
	char str2[10] = "Test1";

	if (strlen(str1)>(strlen(str2))) k = 1;
	if (strlen(str1)<(strlen(str2))) k = -1;

	if (strlen(str1)==(strlen(str2)))
		while (str1[i]!='\0') {
			if (str2[i]!=str1[i]) {
				k = -1;
				break;
			}
			i++;
		}

Используя таблицу кодов ASCII, определите, что будет выведено на экран в результате выполнения приведенной программы?

#include <stdio.h>
#define N 7

int main()
{	
	int i, j, k, buf;
	char arr[N] = "Lection";

	for (i=0; i<N; i++)
		for (j=0; j<N-1; j++)
		{
			if (arr[j] < arr[j+1])
			{
				buf = arr[j];
				arr[j] = arr[j+1];
				arr[j+1] = buf;
			}
		};

	for (k=0; k<N; k++)
		printf("%c ", arr[k]);

	return 0;		
}

Строка инициализирована следующим образом: char str1[10] = «Course». Какое утверждение является верным?

Необходимо написать программу, которая будет определять, является ли заданная строка палиндромом (палиндром — это слово, которое читается одинаково слева направо и справа налево). Решение данной задачи основывается на просмотре строки одновременно слева направо и справа налево и сравнении соответствующих символов. Если в какой-то момент символы не совпадают, делается вывод о том, что строка не является палиндромом, если же удается достичь середины строки и при этом все соответствующие символы совпали, то строка является палиндромом. Какая программа выполняет поставленную задачу?

Аналогом какой стандартной функции является приведенный фрагмент кода?

	int i = 0;
	char str[10] = "Test";

	while (str[i]!='\0')
		i++;

Чему будет равно значение переменной n после выполнения приведенного фрагмента кода?

	int n=0, num=10;
	char str1[10]="", str2[10]="Lection";

	_itoa(num, str1, 10);
	strcat(str2, str1);
	n = strlen(str2);

Какая программа реализует такое же преобразование, как функция strcpy(str2, str1);?

Используя таблицу кодировки символов ASCII, определите, что будет выведено на экран в результате выполнения приведенного фрагмента кода?

	int i = 0;
	char t1 = 218;
	char tr = 191;
	char b1 = 192;
	char br = 217;
	char g = 196;
	char v = 179;

	printf("%c", t1);
	for (i=0; i<32; i++) printf("%c",g);
	printf("%c\n", tr);
	printf("%c", v);
	for (i=0; i<32; i++) printf("%c",' ');
	printf("%c\n", v);
	printf("%c", b1);
	for (i=0; i<32; i++) printf("%c",g);
	printf("%c\n", br);

Какая программа реализует сортировку массива целых чисел по возрастанию методом «пузырька» (методом прямого обмена)?

Необходимо написать программу, в которой формирование строки будет выполняться через посимвольный ввод до тех пор, пока пользователь не нажмет клавишу Enter. После завершния ввода пользователя введенная строка должна быть выведена на экран. Определите, удовлетворяет ли приведенная программа поставленной задаче? Если не удовлетворяет, объясните, почему?

#include <stdio.h>
#include <conio.h>
#define N 10

int main()
{	
	int i=0;
	char arr[N] = "";

	printf("Last Name: ");
	while (i<N) {
		arr[i] = _getche();
		if (arr[i]==13) break;
		i++;
	};

	printf("\nYou have entered Last Name: %s", arr);

	return 0;		
}

Каким будет результат выполнения приведенной программы?

#include <stdio.h>
#include <string.h>
#define N 10

int main()
{		
	char strLow[N];
	int i;

	printf("Enter string in low register (%d symbols): \n", N);
	scanf("%s", strLow);

	for (i=0; i<strlen(strLow); i++)
		putchar(strLow[i] - 32);
	printf("\n");

	return 0;
}

В какой программе выполняется верное обращение к полям объединения?

Какая программа определяет количество вхождений каждого символа в строку?

Как формально можно определить прототип функции main() с параметрами?

Почему доступ к элементам многомерного символьного массива происходит значительно медленнее, чем к элементам одномерного?

Программа запускается с одним аргументом командной строки. Аргументом является строка. Каким образом необходимо задать аргументы командной строки для корректной его обработки при работе программы?

Заданы две строки:

	char str1[10] = "Lection";
	char str2[10] = "lection";

Какое утверждение является верным?


С каким количеством аргументов командной строки запускается программа (считается, что аргумент в заданном виде обрабатывается корректно?

Приведенный фрагмент кода должен запрашивать пароль не более трех раз:

	char s[5], psw[] = "password";
	int i, k= 0;

	for (i=0; !k && i<3; i++) {
		printf("Введите пароль: \n"),
		gets(s);
		if (!(strcmp(s, psw))) k = 1;
	}
	
	if (k) printf("Добро пожаловать! TRUE");
	else printf("Ошибка: Неверный пароль! FALSE");

Проверьте правильность этого кода для выполнения поставленной задачи и определите, сколько раз будет выполнен цикл for, если пользователь сразу введет верный пароль password?


Каким будет результат выполнения приведенного программного кода?

	char t1 = 196;
	int i = 0;
	for (i=0; i<10; i++)
		printf("%c", t1);

При каких значениях переменной error в результате выполнения приведенной программы на экран будет выведено сообщение Возникла ошибка преобразования (ERR_CONVERT)?

int main(void)
{
	typedef enum { ERR_READ, ERR_WRITE, ERR_CONVERT} Err;
	Err error;

	switch (error) {
		case ERR_READ:
			printf("Возникла ошибка чтения (ERR_READ)\n");
			break;
		case ERR_WRITE:
			printf("Возникла ошибка записи (ERR_WRITE)\n");
			break;
		case ERR_CONVERT:
			printf("Возникла ошибка преобразования (ERR_CONVERT)\n");
			break;
		default:
			printf("Возникла неизвестная ошибка\n");
			break;
	};
	
	return 0;
}

Задана структура:

struct fred {
	char x;
	int y;
	float z;
	char str[10]; 
} mike;

Каким образом члены структуры могут быть переданы в функцию?


Каким будет результат выполнения приведенной программы?

#include <stdio.h>
#include <string.h>
#define N 10

int main()
{		
	char ch, strLow[N] = "test";
	int i = 0;

	ch= strLow[0];
	while (ch!='\0')
	{
		putchar(strLow[i] - 32);
		i++;
		ch= strLow[i];
	}
	printf("\n");

	return 0;
}

Что делает приведенная программа?

#include <stdio.h>
#include <conio.h>

int main()
{	
	int n=0, i=0;
	char ch, str[30]="";

	printf("Введите строку: ");
	scanf("%s", str);
	printf("Введите символ: ");
	ch = _getche();

	while(str[i]!='\0')
	{
		if(str[i]==ch) n++;
		i++;
	}

	return 0;		
}

С каким количеством аргументов командной строки запускается программа (считается, что аргумент в заданном виде обрабатывается корректно?

Заданы две строки:

	char str1[10] = "Lection";
	char str2[10] = "lection";

Какое утверждение является верным и почему?


Какая программа реализует посимвольный ввод строки до тех пор, пока не будет нажата клавиша Enter, и последующий вывод введенной строки?

Каким образом хранится в памяти массив a, начинающийся по адресу 1000 и объявленный как char a[7]?

При выводе какой строки возникнут проблемы и почему?

	char str1[10] = "Course";
	char str2[] = "Lection";
	char str3[7] = "Example";

Чему будет равно значение переменной n после выполнения приведенного фрагмента кода?

	int n = 0;
	char str2[10] = "Lection\0";
	n = strlen(str2);

В результате выполнения какого фграгмента программного кода значение переменной n будет больше 7?

Аналогию какой функции представляет собой приведенная программа?

#include <stdio.h>
#include <string.h>
#define N 10

int main()
{	
	int i = 0;
	char ch;
	char str1[N] = "test";
	char str2[N] = "";

	ch= str1[0];
	while (ch!='\0')
	{
		str2[i] = str1[i];
		i++;
		ch= str1[i];
	}
	
	return 0;
}

В приведенной программе функция Copy выполняет копирование одной структуры типа sale в другую и возвращает структуру этого же типа:

typedef struct sale_struct {
	char *title;
	int price;
} sale;

sale Copy(sale);

int main(void)
{
	sale s1,s2;
	struct sale_struct s3, s4;

	s1.title = "Book";
	s1.price = 200;

	s3.title = "Cake";
	s3.price = 60;

	return 0;
}

sale Copy(sale s) {
	sale s1;
	s1 = s;
	return s1;
}

Какие из перечисленных вызов функции Copy являются верными?


Определите, что делает приведенная программа?

void printBits(unsigned int var);

int main (void)
 {
	unsigned int number, mask;

	printf("The program on demonstration digit-by-digit operation And ( & )\n");

	printf("Enter a whole number of unsigned: ");
	scanf_s("%u", &number);

	printf("Enter the number of unsigned-mask: ");
	scanf_s("%u", &mask);

	printf("Binary representation of the starting number(%u) and\n", number);
	printf("Binary representation of the number-masks (%u):\n", mask);

	printBits(number);
	printBits(mask);

	printBits(number & mask); 

	return 0;
 }

void printBits(unsigned int var) 
{
	unsigned int b;
	unsigned int mask = 1 << 15; 

	printf("\n%10u = ", var);

	for (b = 1; b <= 16; ++b) 
	{
		printf("%c", var & mask ? '1' : '0');
		var <<= 1; 
		if (b % 8 == 0)
			putchar(' ');
	}
} 	

При компиляции какого фрагмента кода возникнет ошибка?

Чему будет равно значение переменной year в результате выполнения приведенного фрагмента кода?

	int year = 26;
	year = year << 9;	

Какое выражение нужно вставить в обозначенное место приведенного кода для того, чтобы значение переменной z было равно 10?

  int x = 10, y = 20, z;
  int *p1, *p2;
  p1 = &x;
  p2 = p1;
  <Выражение>
  z = (x==y) ? (x+y) : (y-x);	

Какие утверждения будут верными после выполнения приведенного фрагмента кода?

	int x = 99;
	int *p1, *p2;
	p1 = &x;
	p2 = p1;

Чему будет равно значение переменной i после выполнения приведенного фрагмента кода?

	int i;
	char str[10] = "Test", *p1, *p2;
	p1 = str;
	p2 = p1;
	p2--;
	p1++;
	i = 2 * (p1 - p2);

Какое выражение выполняет операцию инкремента значения, на которое ссылается указатель?

Требуется написать программу, которая будет копировать одну строку в другую с помощью указателей. Определите, выполняет ли приведенная программа поставленную задачу? Если не выполняет, объясните, почему?

		
#include <stdio.h>
#include <conio.h>

int main()
{	
	char str1[10] = "", str2[10] = "";
	char *ptr1, *ptr2;
	printf("Введите строку: %s", str1);
	scanf("%s", str1);

	ptr1 = str1;
	ptr2 = str2;
	while (*ptr1!='\0') {
		if (*ptr1=='\0') {
			*ptr2 = '\0';
			break;
		}
		*ptr2 = *ptr1;
		ptr1++;
	}

	printf("str2 = %s\n", str2);

	return 0;		
}	

В результате выполнения какой программы в строку str2 будет скопирована не только инвертированная строка str1, но и лишний «мусор»?

В программе объявлен указатель void *p. Какие утверждения являются неверными?

Какое действие будет выполнено первым при выполнении оператора *p++ = 10?

Что делает приведенная программа?

		
#include <stdio.h>
#include <conio.h>

int main()
{	
	char str1[10] = "", str2[10] = "";
	char *ptr1, *ptr2;
	printf("Введите строку: %s", str1);
	scanf("%s", str1);

	ptr1 = str1;
	ptr2 = str2;
	while (*ptr1!='\0') {
		if (*ptr1=='\0') {
			*ptr2 = '\0';
			break;
		}
		*ptr2 = *ptr1;
		ptr1++;
		ptr2++;
	}

	printf("str2 = %s\n", str2);

	return 0;		
}

Требуется написать программу, которая копирует введенную пользователем строку str1 в строку str2 в обратном порядке. Например, если пользователь ввел строку string, то str2 в результате выполнения данной программы должна быть равна gnirts. Какая программа выполняет поставленную задачу?

Приведенная программа должна определять, является ли заданная строка палиндромом (палиндром — это слово, которое читается одинаково слева направо и справа налево). В программе выполняется просмотр строки одновременно слева направо и справа налево и сравнение соответствующих символов. Если в какой-то момент символы не совпадают, делается вывод о том, что строка не является палиндромом, если же удается достичь середины строки и при этом все соответствующие символы совпали, то строка является палиндромом:

char s[100];
int pal(char s[100]);

int main()
{ 
	printf("\nВведите строку: "); 
	gets(s);
	if (pal(s)) printf("Строка является палиндромом");
	else  printf("Строка не является палиндромом");
	return 0;
}

int pal(char s[100])
{ 
	int l; char s1[100];
	
	if (strlen(s)<1) return 1;
	else {
		l=s[0]==s[strlen(s)-1];
		strncpy(s1, s+1, strlen(s)-2);
		s1[strlen(s)-2]='\0';
		return l&&pal(s1);
	}
}

Какое граничное условие имеет реализованная в программе рекурсия?


Какие из перечисленных задач могут быть решены с помощью рекурсии?

Что такое указатель?

Чему будут равны значения переменных a, b и c после выполнения приведенного фрагмента кода?

	int a=10, b=20, c=30;
	int *ptr;
	ptr = &a;
	c = *ptr;
	*ptr = 30;
	b = a;

Какая программа определяет количество вхождений каждого символа в строку?

В каком случае файлы автоматически закрываются?

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

#define N 8

void step(int, int, int);

	int map[N][N];	// карта: map[i,j]!=0, если точки i и j соединены
	int road[N];	// маршрут - номера точек карты
	int incl[N];	// incl[i]==1, если точка с номером i включена в road
	int start;	// начальная точка маршрута 
	int finish;	// конечная точка маршрута
	int i, j;

int main (void) {
	// инициализация массивов
	for (i=0; i<N; i++) road[i] = 0;
	for (i=0; i<N; i++) incl[i] = 0;
	for (i=0; i<N; i++) 
		for (j=0; j<N; j++) map[i][j] = 0;

	// ввод значений элементов карты
	map[1][2] = 1; map[2][1] = 1; 
	map[1][3] = 1; map[3][1] = 1;
	map[1][4] = 1; map[4][1] = 1;
	map[3][4] = 1; map[4][3] = 1;
	map[3][7] = 1; map[7][3] = 1;
	map[4][6] = 1; map[6][4] = 1;
	map[5][6] = 1; map[6][5] = 1;
	map[5][7] = 1; map[7][5] = 1;
	map[6][7] = 1; map[7][6] = 1;

	printf("Введите через пробел номер начальной и конечной точек: ");
	scanf("%d %d", &start, &finish);
	road[1] = start;	// внести точку в маршрут
	incl[1] = 1;		// пометить точку как включенную

	step(start, finish, 2);
	return 0;
}

void step(int s, int f, int p) {
	int c;				// номер точки, в которую делается очередной шаг
	int i;
	
	if (s==f) {
		printf("Путь: ");
		for (i=1; i<=p-1; i++) printf("%d ", road[i]);
		printf("\n");
	}
	else {
		// выбор очередной точки
		for (c=1; c<=N; c++)
			// проверка всех вершин
			if (map[s][c]!=0 && incl[c]==0) {
				// точка соединена с текущей и не включена в маршрут
				road[p] = c;		// добавление вершины в путь
				incl[c] = 1;		// пометка вершины как включенной
				step(c, f, p+1);
				incl[c] = 0;
				road[p] = 0;
			}
	}
}

Какие утверждения являются неверными для приведенной программы?


Задан файл, содержащий список названий и стоимости мониторов: В результате выполнения какой программы на экран будет выведено только название и стоимость монитора, указанного в последнем пункте?

Что делает приведенная программа?

#include <stdio.h>
#include <conio.h>

int main()
{	
	int n=0, i=0, j=0;
	char ch, str[30]="";
	char *ptr1, *ptr2;

	printf("Введите строку: ");
	scanf("%s", str);
	printf("Введите символ: ");
	ch = _getche();

	ptr1 = str;
	while(*ptr1!='\0')
	{
		ptr2 = str;
		while (*ptr2!='\0') {
			if(*ptr1==*ptr2) n++;
			++ptr2;
		}
		printf("\n%c - %d", *ptr1, n);
		n = 0;
		++ptr1;
	}

	printf("\n");

	return 0;		
}

В приведенном фрагменте кода используется константный указатель:

	int lec = 7, qst = 11;
	int *const plec = &lec;
	int *pqst;
	pqst = &qst;
	(*plec)++;
	printf("Number of the next lection is %d\n", lec );	

Какая ошибка содержится в данном коде?


В программе объявлен указатель void *p. Какое утверждение является верным?

Какая программа определяет количество вхождений каждого символа в строку?

В результате выполнения какого фрагмента кода значение разности p1 — p2 будет больше 2?

Чему будут равны значения переменных a, b и c после выполнения приведенного фрагмента кода?

	char a='A', b='B', c='C';
	char *pc;
	pc = &a;
	c = *pc;
	*pc = 'C';
	b = a;

Какое выражение нужно вставить в обозначенное место приведенного кода для того, чтобы значение переменной z было равно 0?

  int x = 10, y = 20, z;
  int *p1, *p2;
  p1 = &x;
  p2 = p1;
  <Выражение>
  z = (x==y) ? (x+y) : (y-x);	

Задан файл, содержащий список названий и стоимости мониторов: В результате выполнения какой программы на экран будет выведена информация о пункте (2) из списка?

Какая программа правильно определяет и выводит на экран время года по дате рождения, заданной пользователем?

Чему будет равно значение переменной m в результате выполнения приведенной программы?

int main(void)
{
  FILE *fp;
  char str[30] = "Lection 11";
  int k, l, m;

  if((fp=fopen("g:\\test.txt", "wt+"))==NULL) {
    printf("Ошибка при открытии файла.\n");
    exit(1);
  }

  k = fwrite(str, sizeof(char), strlen(str)-3, fp);

  rewind(fp);

  l = fread(str, sizeof(char), sizeof(str)/sizeof(char), fp);
 
  m= k+l;
  fclose(fp);
  return 0;
}

Задан файл, содержащий список названий и стоимости мониторов: Какой файл будет получен в результате выполнения приведенной программы?

int main( void )
{
   FILE *stream;
   char str[81];
   int  result;

   if ( fopen_s( &stream, "g:\\list.txt", "r+" ) != 0 )
   {
      printf( "The file list.txt was not opened\n" );
      return -1;
   }
 
   result = fseek( stream, 0L, SEEK_END);

   if( result )
      perror( "Fseek failed" );
   else
   {
      fputs( "5. NEC MultiSync EX231W - 10490 rub.", stream );
      printf( "%s", str );
    }
   fclose( stream );
   return 0;
}

Что такое многоуровневая адресация?

Объявлена структура:

struct Account
{
  int account;
  char name[30];
  int balance;
};

Каким образом данная структура хранится в памяти?


Какой файл будет создан в результате выполнения приведенной программы?

int main (void)
{
	struct student {    
		char *name;  
		char *surname; 
		int group;         
		int ses[5];
		double av;
		struct student *p;
	} st; 
	FILE *fp;
	int i, sum = 0;

	st.name = "Ivan";
	st.surname = "Ivanov";
	st.group = 1024;
	st.ses[0] = 5;
	st.ses[1] = 4;
	st.ses[2] = 5;
	st.ses[3] = 5;
	st.ses[4] = 5;

	for (i=0; i<5; i++) sum +=st.ses[i];
	st.av = sum/5;
	
	if ((fp = fopen("g:\\marks.txt", "w+t")) == 0)
		printf("Open file error");
	else {
		fprintf(fp, "Name: %s %s\n", st.surname, st.name);
		fprintf(fp, "Group: %d\n", st.group);
		fprintf(fp, "Average mark: %.2f\n\n", st.av);
		fclose(fp);
	};

    return 0;
 }

Необходимо написать программу, которая копирует одну строку в другую. Какая программа выполняет поставленную задачу?

Чему будет равно значение переменной str2 после выполнения приведенной программы?

#include <stdio.h>
#include <conio.h>

int main()
{	
	char str1[10] = "", str2[10] = "";
	char *ptr1, *ptr2;
	printf("Введите строку: %s", str1);
	scanf("%s", str1);

	ptr1 = str1;
	ptr2 = str2;
	while (ptr1>=str1) {
		if (ptr1<str1) *ptr2 = '\0';
		*ptr2 = *ptr1;
		ptr1--;
		ptr2++;
	}

	printf("str2 = %s\n", str2);

	return 0;		
}		

Чему будет равно значение переменной sum после выполнения прииведенного фрагмента кода?

	int m[][5] = {{1,2,3,4,5}, {6,7,8,9,10}, {11,12,13,14,15}};
	int *ptr;
	int i, j, n, k, sum = 0;
	n = sizeof(m)/sizeof(m[0]);
	k = sizeof(m[0])/sizeof(m[0][0]);
	ptr = m;}
                    sum += *(ptr+i); }

	printf("n = %d\n", n);
	printf("k = %d\n", k);

	for (i=0; i<(n*k); i++) {
		if (!(*(ptr+i)%2)) sum += *(ptr+i);

Задан фрагмент кода:

	int m[][5] = {{1,2,3,4,5}, {6,7,8,9,10}, {11,12,13,14,15}};
	int *ptr;
	int i, j, n, k, el;
	n = sizeof(m)/sizeof(m[0]);
	k = sizeof(m[0])/sizeof(m[0][0]);
	ptr = &m[0][0];

На какой элемент массива m будет указывать указатель ptr+3?


Какая программа реализует сортировку массива целых чисел по убыванию методом «пузырька» (методом прямого обмена)?

Какой фрагмент кода выполняет вычисление суммы всех элементов массива arr?

Необходимо написать программу, которая определяет и выводит на экран время года по дате рождения, заданной пользователем. Какую ошибку содержит приведенный фрагмент кода?

	int m;
	char month[3], s[8] = "";
	char *season[] = {
		"winter",
		"spring",
		"summer",
		"autumn"
	};

	printf("Enter day of your birthday (MM.DD): ");
	scanf("%[^.]s", month);

	m = atoi(month);

	if ((m==12) || (m<3)) strcpy(s, &season[0]);
	else
		if ((m>2) && (m<6)) strcpy(s, &season[1]);
		else
			if ((m>6) && (m<9)) strcpy(s, &season[2]);
			else strcpy(s, &season[3]);

	printf("Your birthday is in %s\n", s);

Указатель p инициализирован строковой константой: char *p = «тестовая строка». Что в данном случае хранится в указателе p?

Чему будет равно значение переменной c после выполнения приведенной программы?

int main(void)
{
	struct test {
		unsigned int a : 2;
		unsigned int b : 8;
	};
	
	int c;
	struct test t;

	t.b = 255;
	t.a = 3;
	c = t.b | t.a;

	printf("c = %d\n", c);

	return 0;
}	

Какой недостаток имеет использование указателей для массивов?

В функции main выполняется вызов рекурсивной функции fact(): long result=fact(3). Вызовы функции выполняются в приведенной последовательности: Каким образом должна выглядеть функция fact()?

Какая программа реализует сортировку массива целых чисел по возрастанию методом «пузырька» (методом прямого обмена)?

Какой фрагмент кода соответствует заданной схеме?

Чему будет равно значение переменной sum после выполнения приведенного фрагмента кода?

	int i, N, sum = 0;
	int arr[] = {3, 2, 4, 5, 1};
	int *ptr;

	N = sizeof(arr)/sizeof(arr[0]);
	ptr = &arr[1];

	for (i=0; i<N-1; i++) {
		sum += *ptr;
		ptr++;
	}

Указатель p инициализирован строковой константой: char *p = «тестовая строка». Какое утверждение является верным в данном случае?

Какая программа вычисляет сумму всех нечетных элементов за исключением элементов первой строки?

В каком случае директива #define определяет макрос?

Какая программа вычисляет сумму всех четных элементов за исключением элементов первой строки?

Указатель p инициализирован строковой константой: char *p = «тестовая строка». Где в данном случае хранится заданная строка?

В каком случае используется многоуровневая адресация?

Задан фрагмент кода:

	int m[][5] = {{1,2,3,4,5}, {6,7,8,9,10}, {11,12,13,14,15}};
	int *ptr;
	int i, j, n, k, el;
	n = sizeof(m)/sizeof(m[0]);
	k = sizeof(m[0])/sizeof(m[0][0]);
	ptr = &m[1][1];

На какой элемент массива m будет указывать указатель ptr+3?


Приведенная программа копирует строку а в строку b и выводит обе строки на экран:

		
#include <stdio.h>
#include <conio.h>

int main()
{	
  int i;
  char a[10] = "Test", b[10] = "";
  char *pa = a;
  char *pb = b;
  for (i=0; i<strlen(a); i++)
	  *pb++ = *pa++;

  printf("a = %s\n", a);  
  printf("b = %s\n", b);  

  return 0;
}

Какая программа аналогична приведенной?


В результате выполнения приведенного фрагмента кода на экран выводится значение переменной sum, равное 15:

	int i, N, sum = 0;
	int arr[] = {3, 2, 4, 5, 1};
	int *ptr;

	N = sizeof(arr)/sizeof(arr[0]);
	ptr = arr;

	for (i=0; i<N; i++)
		sum += *ptr;

Какое действие выполняет данный код?


Задан фрагмент кода:

	int m[][5] = {{1,2,3,4,5}, {6,7,8,9,10}, {11,12,13,14,15}};
	int *ptr;
	int i, j, n, k, el;
	n = sizeof(m)/sizeof(m[0]);
	k = sizeof(m[0])/sizeof(m[0][0]);
	ptr = &m[1][1];

На какой элемент массива m будет указывать указатель ptr+3?


Какой фрагмент кода соответствует заданной схеме?

Задан фрагмент кода:

	int m[][5] = {{1,2,3,4,5}, {6,7,8,9,10}, {11,12,13,14,15}};
	int *ptr;
	int i, j, n, k, el;
	n = sizeof(m)/sizeof(m[0]);
	k = sizeof(m[0])/sizeof(m[0][0]);
	ptr = &m[0][0];

Чему будет равно значение элемента массива m, на который будет указывать указатель ptr+3?


Какая схема соответсвует заданному фрагменту кода?

	int  x = 88, *ptr1,  **ptr2;
	ptr1 = &x;
	ptr2 = &ptr1;	

Задан фрагмент кода:

	int m[][5] = {{1,2,3,4,5}, {6,7,8,9,10}, {11,12,13,14,15}};
	int *ptr;
	int i, j, n, k, el;
	n = sizeof(m)/sizeof(m[0]);
	k = sizeof(m[0])/sizeof(m[0][0]);
	ptr = &m[1][1];

На какой элемент массива m будет указывать указатель ptr+3?


С каким количеством аргументов командной строки запускается программа (считается, что аргумент в заданном виде обрабатывается корректно?

Какая программа реализует сортировку массива целых чисел по возрастанию методом прямого выбора?

Приведенная программа считает в обратном порядке, начиная с какого-либо значения (указанного в командной строке):

int main(int argc, char *argv[])
{
	int disp, count;
	setlocale (LC_ALL, "rus");

	if(argc<2) {
		printf("В командной строке на задано число\n");
		exit(1);
	}

	if(argc==3 && !strcmp(argv[2], "display")) disp = 1;
	else disp = 0;

	for(count=atoi(argv[1]); count; --count)
		if(disp) printf("%d ", count);

	putchar('\a');
	printf("Счет закончен");

	return 0;
}

Что будет выведено на экран в результате выполнения приведенной программы, если ее запуск выполняется из командной строки командой Example.exe?


Задан фрагмент кода:

	int m[][5] = {{1,2,3,4,5}, {6,7,8,9,10}, {11,12,13,14,15}};
	int *ptr;
	int i, j, n, k, el;
	n = sizeof(m)/sizeof(m[0]);
	k = sizeof(m[0])/sizeof(m[0][0]);
	ptr = &m[1][1];

На какой элемент массива m будет указывать указатель ptr+3?


Задан фрагмент кода:

	int m[][5] = {{1,2,3,4,5}, {6,7,8,9,10}, {11,12,13,14,15}};
	int *ptr;
	int i, j, n, k, el;
	n = sizeof(m)/sizeof(m[0]);
	k = sizeof(m[0])/sizeof(m[0][0]);
	ptr = &m[1][1];

На какой элемент массива m будет указывать указатель ptr+3?


Какие утверждения являются верными?

В процессе выполнения приведенной программы возникает ошибка:

		
#include <stdio.h>
#include <stdlib.h>
#define N 10

int main(void)
{
	int i;
	int *arr;
	
	arr = (int *)calloc(N, sizeof(int));
	if (!arr) {
		printf("\nERROR! Out of memory in calloc() function. Press any key: ");
		_getch(); 
		exit(1); 
	};

	for (i=0; i<N+2; i++) {
		arr[i] = i+1;
		printf("arr[%d] = %d\n", i, arr[i]);
	}

	free(arr);
	return 0;
}

Каким образом можно изменить программу для ее корреткной работы?


В каком случае будет выделена память под двухмерный массив размером 10х4?

Задана функция xgets():

char *xgets(char *s)
{
  char ch, *p;
  int t;
  p = s; 

  for(t=0; t<80; ++t){
    ch = getchar();

    switch(ch) {
      case '\n':
        s[t] = '\0'; 
        return p;
      case '\b':
        if(t>0) t--;
        break;
      default:
        s[t] = ch;
    }
  }
  s[79] = '\0';
  return p;
}

Какие утвержедения являются верными?


Что такое динамическая память?

В каком случае будет выделен наименьший размер памяти?

Необходимо написать программу заполнения одномерного символьного массива заданным числом (вводимым с клавиатуры) символов с добавлением символа восклицательного знака «!» в конце массива символов. При выполнении какой программы не возникнет ошибки в случае, если пользователь задаст размерность n символьного массива равной 4 и строку «test»?

В приведенной программе выполняется перераспределение памяти для увеличения размерности массива:

		
#include <stdio.h>
#include <stdlib.h>
#define N 10

int main(void)
{
	int i;
	int *arr;

	for (i=0; i<N; i++) {
		arr[i] = i+1;
		printf("arr[%d] = %d\n", i, arr[i]);
		
	}

	arr = (int *)realloc(arr, (N+2)*sizeof(int));
	if (!arr) {
		printf("\nERROR! Out of memory in realloc() function. Press any key: ");
		_getch(); 
		exit(1); 
	};

	for (i=N; i<N+2; i++) {
		arr[i] = i+1;
		printf("arr[%d] = %d\n", i, arr[i]);
	}

	free(arr);
	return 0;
}

Определите, есть ли в этой программе ошибки?


Задан файл, содержащий список названий и стоимости мониторов: Какой файл будет получен в результате выполнения приведенной программы?

int main( void )
{
   FILE *stream;
   char str[81];
   int  result;

   if ( fopen_s( &stream, "g:\\list.txt", "r+" ) != 0 )
   {
      printf( "The file list.txt was not opened\n" );
      return -1;
   }
 
   result = fseek( stream, -27L, SEEK_END);

   if( result )
      perror( "Fseek failed" );
   else
   {
      fputs( "5. NEC MultiSync EX231W - 10490 rub.", stream );
      printf( "%s", str );
    }
   fclose( stream );
   return 0;
}

Файл g:\test.txt содержит две строки:
Чему будет равен символ str[10] в результате выполнения приведенного фрагмента кода?

	char str[30], i;
	FILE *fp;

	if((fp = fopen("g:\\test.txt", "r"))==NULL) {
		printf("Ошибка при открытии файла.\n");
		exit(1);
	}
	fgets(str, 30, fp);
	i = strlen(str);
	fclose(fp);

Какие утверждения являются верными?

Объявлена структура:

struct addr
{
  char name[30];
  char street[40];
  char city[20];
  char state[3];
  unsigned long int zip;
};

Каким образом данная структура хранится в памяти?


Какая программа содержит ошибку?

В приведенной программе выполняется перераспределение памяти для увеличения размерности массива:

		
#include <stdio.h>
#include <stdlib.h>
#define N 10

int main(void)
{
	int i;
	int *arr = (int *)malloc(N*sizeof(int));
	
	if (!arr) {
		printf("\nERROR! Out of memory in calloc() function. Press any key: ");
		_getch(); 
		exit(1); 
	};

	for (i=0; i<N; i++) {
		arr[i] = i+1;
		printf("arr[%d] = %d\n", i, arr[i]);		
	}

	arr = (int *)realloc(arr, (N+2)*sizeof(int));
	if (!arr) {
		printf("\nERROR! Out of memory in realloc() function. Press any key: ");
		_getch(); 
		exit(1); 
	};

	for (i=N; i<N+2; i++) {
		arr[i] = i+1;
		printf("arr[%d] = %d\n", i, arr[i]);
	}

	free(arr);
	return 0;
}

Какие изменения необходимо внести в программу для ее корректной работы?


Задан указатель int **m на массив указателей:

		
	int i;
	int **m;
	m = (int **)calloc(5,sizeof(int *));

	for (i=0; i<5; i++)
		m[i] = (int *)calloc(3,sizeof(int));

Как в данном случае освободить выделенную память?


В каком случае будет выделен наибольшой размер памяти?

Задан указатель double **m на массив указателей:

		
	int i;
	double **m;
	m = (double **)calloc(10,sizeof(double *));

	for (i=0; i<10; i++)
		m[i] = (double *)calloc(5,sizeof(double));

Как в данном случае освободить выделенную память?


При каких значениях размерности n символьного массива и строки, на которую указывает указатель ptr, в результате выполнения приведенной программы возникнет ошибка?

		
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>

int main(void) 
{
	int n, m;	
	char *ptr;
 
	printf("\nEnter a dimention of character array: ");
	scanf_s("%d", &n);
	_flushall();

	ptr = (char *)malloc((n+1)*sizeof(char));
	if (!ptr) {
		printf("\nERROR! Out of memmory (error in malloc() function). Press any key...");
		_getch(); 
		exit(1); 
	}

	printf("Enter a character array (not more than %d characters): ", n);
	gets_s(ptr, n+1);
	m = strlen(ptr);

	strcat_s(ptr, m+2,  "!");
	printf("\nStart line and character \"%c\": %s", '!', ptr);
	
	free (ptr);

	printf("\n\nPress any key: ");
	_getch();
	return 0; 
}

Каким образом нумерются разряды байта?

Под какой массив выделяется память в приведенном фрагменте кода?

		
	int (*p)[10]; 
	p = malloc(40*sizeof(int));

Какие утверждения являются верными?

После выполнения какой программы будет выполняться условие size2 > size3?

При какой инициализации указателя int **m на массив указателей необходимо выполнить освобождение памяти приведенным способом?

		
	for (i=0; i<5; i++) free(m[i]);
	free(m);

Каким может быть время жизни динамических переменных?

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

#define N 8

void step(int, int, int);

	int map[N][N];	// карта: map[i,j]!=0, если точки i и j соединены
	int road[N];	// маршрут - номера точек карты
	int incl[N];	// incl[i]==1, если точка с номером i включена в road
	int start;	// начальная точка маршрута 
	int finish;	// конечная точка маршрута
	int i, j;

int main (void) {

	// инициализация массивов
	for (i=1; i<=N; i++) road[i] = 0;
	for (i=1; i<=N; i++) incl[i] = 0;
	for (i=1; i<=N; i++) 
		for (j=1; j<=N; j++) map[i][j] = 0;

	// ввод значений элементов карты
	map[1][2] = 1; map[2][1] = 1; 
	map[1][3] = 1; map[3][1] = 1;
	map[1][4] = 1; map[4][1] = 1;
	map[3][4] = 1; map[4][3] = 1;
	map[3][7] = 1; map[7][3] = 1;
	map[4][6] = 1; map[6][4] = 1;
	map[5][6] = 1; map[6][5] = 1;
	map[5][7] = 1; map[7][5] = 1;
	map[6][7] = 1; map[7][6] = 1;

	printf("Введите через пробел номер начальной и конечной точек: ");
	scanf("%d %d", &start, &finish);
	road[1] = start;	// внести точку в маршрут
	incl[1] = 1;		// пометить точку как включенную

	step(start, finish, 2);
	return 0;
}

void step(int s, int f, int p) {
	int c;				// номер точки, в которую делается очередной шаг
	int i;
	
	if (s==f) {
		printf("Путь: ");
		for (i=1; i<=p-1; i++) printf("%d ", road[i]);
		printf("\n");
	}
	else {
		// выбор очередной точки
		for (c=1; c<=N; c++)
			// проверка всех вершин
			if (map[s][c]!=0 && incl[c]==0) {
				// точка соединена с текущей и не включена в маршрут
				<Рекурсивный вызов - вариант 1>
				road[p] = c;		// добавление вершины в путь
				incl[c] = 1;		// пометка вершины как включенной
				<Рекурсивный вызов - вариант 2>
				incl[c] = 0;
				road[p] = 0;
				<Рекурсивный вызов - вариант 3>
			}
	}
}

В каком из отмеченных мест программы необходимо выполнить рекурсивный вызов функции step(c, f, p+1);?


Задана функция вычисления факториала:

long fact (int n){
    if ( n<1 ) return 1;
    else return n*fact(n-1);
} 

Какая последовательность вызовов будет неверной, если в функции main задать long result=fact(3)?


В каком случае память выделяется статически?

		
	int arr1[10] = {1,2,3,4,5};				(1)
	int *arr2 = (int *)calloc(10, sizeof(int));		(2)
	int *arr3 = (int *)malloc(10*sizeof(int));		(3)
	int arr4[][3] = {{1,2,3}, {4,5,6}};			(4)

Какое утверждение будет верным после выполнения приведенной программы?

		
#include <stdio.h>
#include <stdlib.h>
#define N 10

int main(void)
{
	int size1, size2, size3, i, n = 0;
	int arr1[N] = {1,2,3,4,5}, *arr;
	
	size1 = sizeof(arr1);

	arr = (int *)calloc(N, sizeof(int));
	if (!arr) {
		printf("\nERROR! Out of memory in calloc() function. Press any key: ");
		_getch(); 
		exit(1); 
	};

	for (i=0; i<N; i++) {
		arr[i] = i+1;
		n++;
		printf("arr[%d] = %d\n", i, arr[i]);
		
	}
	size2 = N*sizeof(int);

	arr = (int *)realloc(arr, (N+2)*sizeof(int));
	if (!arr) {
		printf("\nERROR! Out of memory in realloc() function. Press any key: ");
		_getch(); 
		exit(1); 
	};

	for (i=N; i<N+2; i++) {
		arr[i] = i+1;
		printf("arr[%d] = %d\n", i, arr[i]);
	}

	for (i=0, n=0; i<N+2; i++) n++;
	size3 = n*sizeof(int);

	free(arr);
	return 0;
}

Какое утверждение является неверным?

Программа запускается с одним аргументом, задающим имя и фамилию. В каком случае в файл будет выведено только имя?

Какое утверждение является верным для динамически распределяемой памяти?

После выполнения какой программы будет выполняться условие size2 < size3?

При каком запуске программы echo через командную строку аргумент argv будет представлен заданным образом?

В каком случае в процессе выполнения программы выполняется перераспределение выделенной памяти с целью ее увеличения?

Какой объем памяти будет выделен для хранения массива int arr[12] = {1,2,3,4,5};?

Задан фрагмент кода:

		
	int n, m;
	char *ptr;
 
	printf(&\nEnter a dimention of character array: &);
	scanf_s(&%d&, &n);
	_flushall();

	ptr = (char *)malloc((n+1)*sizeof(char));
	if (!ptr) {
	printf(&\nERROR! Out of memmory (error in malloc() function). Press any key...&);
	_getch(); 
	exit(1); 
	}

	printf(&Enter a character array (not more than %d characters): &, n);
	gets_s(ptr, n+1);

	m = strlen(ptr);
	printf(&\nStart line: %s&, ptr);

	ptr = (char *)realloc(ptr, (m+2)*sizeof(char));
	if (!ptr) {
		printf(&\nERROR! Out of memmory (error in realloc() function). Press any key...&);
		_getch();
		exit(1);
	}

	strcat_s(ptr, m+2,  &!&);
	printf(&\nStart line and character \&%c\&: %s&, '!', ptr);
	
	free (ptr);

В запросе размерности массива пользователь задал 80. В запросе ввода строки пользователь ввел строку «Lection 9″. Для чего в данном случае будет использована функция realloc()?


В приведенной программе выполняется перераспределение памяти для увеличения размерности массива:

		
#include <stdio.h>
#include <stdlib.h>
#define N 10

int main(void)
{
	int i;
	int *arr;

	arr = (int *)realloc(arr, (N+2)*sizeof(int));

	for (i=0; i<N; i++) {
		arr[i] = i+1;
		printf("arr[%d] = %d\n", i, arr[i]);
		
	}

	if (!arr) {
		printf("\nERROR! Out of memory in realloc() function. Press any key: ");
		_getch(); 
		exit(1); 
	};

	for (i=N; i<N+2; i++) {
		arr[i] = i+1;
		printf("arr[%d] = %d\n", i, arr[i]);
	}

	free(arr);
	return 0;
}

Какие изменения нужно внести в программу для ее корректной работы?


В каком случае будет выделена память под двухмерный массив размером 4х10?

Какой фрагмент кода соответствует заданной схеме?

В каком случае в процессе выполнения программы выполняется перераспределение выделенной памяти с целью ее уменьшения?

Какой файл будет получен в результате выполнения приведенной программы?

#include <stdio.h>

int main( void )
{
   FILE *stream;
   char list[30];
   int  i, numread, numwritten;

   if( (stream = fopen("g:\\fread.out", "w+t")) != NULL )
   {
      for ( i = 0; i < 26; i++ )
         list[i] = (char)('z' - i); 
      numwritten = fwrite( list, sizeof( char ), 26, stream );
      printf( "Wrote %d items\n", numwritten );
      fclose( stream );

   }
   else
      printf( "Problem opening the file\n" );

   if( (stream = fopen("g:\\fread.out", "r+t" )) != NULL )
   { 
      numread = fread( list, sizeof( char ), 26, stream );
      printf( "Number of items read = %d\n", numread );
      printf( "Contents of buffer = %.26s\n", list );
      fclose( stream );
   }
   else
      printf( "File could not be opened\n" );
}

В каком случае при возникновении ошибки при выделении памяти эта ошибка будет корректно обработана?

Какие переменные являются формальными параметрами функции sum()?

int sum(int a, int b)
{
	return a+b;
}

int main(void)
{
	int n=4, m=3, s;
	s = sum(n,m);
	printf("%d + %d = %d\n", n, m, s);
	
	return 0;
}

В результате выполнения какой программы будет получен приведенный файл?

В каких программах не используются прототипы функций?

Программа формирует сообщение об ошибке из отдельных строк в зависимости от степени критичности ошибки:

#include <stdio.h>
#include <conio.h>
#include <stdarg.h>

void error(int severity, ... );

int main( void )
{
	char err[][30] = {"Сообщение 1", "Сообщение 2"};
	int n = -1;
	
	printf("Введите степень критичности ошибки (целое число): ");
	scanf("%d", &n);

	switch (n) {
		case 0: error(0, "Ошибка!", '\0');
			break;
		case 1: error(0, "Ошибка!", err[0], '\0');
			break;
		default: error(1, "Ошибка!", err[0], err[1], '\0');
	}

	return 0;
}

void error(int severity, ... )
{
   va_list ap;
   va_start(ap, severity);

   for (;;) {
	   char *p = va_arg(ap, char*);
	   if (p == '\0') break;
	   printf("%s ", p);
   }
   va_end(ap);
   printf("\n");
}

Какое сообщение будет выведено на экран, если пользователь задаст значение n равным 0?


Необходимо написать функцию, которая будет вычислять сумму всех элементов двухмерного массива. В какой программе вызов функции sum выполняется неверно?

Функция is_in определяет, входит ли символ c в строку s:

	int is_in(char *s,  char c)				(1)
	{
	  while(*s)						(2)
		if(*s==c) return 1;				(3)	
		else s++;					(4)
	  return 0;						(5)
	}

При выполнении какой строки произойдет выход из фукнции при ее вызове is_in(«Lection 10″, ‘i’)?


Чему будет равно значение переменной x в результате выполнения приведенной программы?

#include <stdio.h>
#include <stdarg.h>

int average(int first, ... );

int main( void )
{
	int x = average(2, 3, 4, -1);

	return 0;
}

int average( int first, ... )
{
   int count = 0, sum = 0, i = first;
   va_list marker;
   va_start(marker, first);

   while( i != -1 ) {
      sum += i;
      count++;
      i = va_arg(marker, int);
   }
   va_end(marker);

   return( sum ? (sum / count) : 0 );
}

Программа формирует сообщение об ошибке из отдельных строк в зависимости от степени критичности ошибки:

#include <stdio.h>
#include <conio.h>
#include <stdarg.h>

void error(int severity, ... );

int main( void )
{
	char err[][30] = {"Сообщение 1", "Сообщение 2"};
	int n = -1;
	
	printf("Введите степень критичности ошибки (целое число): ");
	scanf("%d", &n);

	switch (n) {
		case 0: error(0, "Ошибка!", '\0');
			break;
		case 1: error(0, "Ошибка!", err[0], '\0');
			break;
		default: error(1, "Ошибка!", err[0], err[1], '\0');
	}

	return 0;
}

void error(int severity, ... )
{
   va_list ap;
   va_start(ap, severity);

   for (;;) {
	   char *p = va_arg(ap, char*);
	   if (p == '\0') break;
	   printf("%s ", p);
   }
   va_end(ap);
   printf("\n");
}

Какое сообщение будет выведено на экран, если пользователь задаст значение n равным 10?


Какая ошибка содержится в приведенной функции?

int* fun() {
	int a = 10;
	return &a;
}

В какой программе количество вызовов функций (как стандартных, так и пользовательских) с переменным числом аргументов наибольшее?

Файл g:\test.txt содержит две строки:
Чему будет равно значение переменной i в результате выполнения приведенного фрагмента кода?

	char str[30], i;
	FILE *fp;

	if((fp = fopen("g:\\test.txt", "r"))==NULL) {
		printf("Ошибка при открытии файла.\n");
		exit(1);
	}
	fgets(str, 30, fp);
	i = strlen(str);
	fclose(fp);

Какая программа не содержит ошибок?

Какие достоинства имеет использование рекурсии?

Какая строка является недопустимой?

В программе задан макрос #define MAX(x, y) ((x)>(y) ? (x) : (y)). Для каких переменных он может быть использован?

Функция is_in определяет, входит ли символ c в строку s:

	int is_in(char *s,  char c)				(1)
	{
	  while(*s)						(2)
		if(*s==c) return 1;				(3)	
		else s++;					(4)
	  return 0;						(5)
	}

Что произойдет при вызове функции is_in(«Lection 10″, ‘i’)?


В какой строке объявлен прототип функции search()?

#include <stdio.h>
#include <string.h>

int search(char *p[], char *name);				(1)

char *names[] = {
  "Сергей",
  "Юрий",
  "Ольга",
  "Игорь",
  NULL}; 

int main(void)
{
  if(search(names, "Ольга") != -1)				(2)
    printf("Ольга есть в списке.\n");

  return 0;
}

int search(char *p[], char *name)				(3)
{
  int t;
  for(t=0; p[t]; ++t)
    if(!strcmp(p[t], name)) return t;
  return -1;
}

Что произойдет после выполнения приведенной программы?

#include <stdio.h>
#define n 10

void fun(int *mas, int k);

int main( void )
{
	int arr[n] = {3,4,5,4,4};
	int i;
	fun(arr, n);
	return 0;
}

void fun(int *mas, int k)
{
   int i, s = 0;
   for (i=0; i<k; i++) ++mas[i];
}

Какое объявление структур(-ы) не содержит ошибку?

Какой фрагмент кода не содержит ошибку?

Чему будет равно значение переменной s в результате выполнения приведенной программы?

#include <stdio.h>
#define n 5

void fun(int *mas, int k);
int sum(int *mas, int k);

int main( void )
{
	int arr[n] = {3,4,1,2};
	int i, s;
	fun(arr, n);
	s = sum(arr, n);
	return 0;
}

void fun(int *mas, int k)
{
   int i, s = 0;
   for (i=0; i<k; i++) ++mas[i];
}

int sum(int *mas, int k)
{
   int i, s = 0;
   for (i=0; i<k; i++) s += mas[i];
   return s;
}

Функция is_in определяет, входит ли символ c в строку s:

	int is_in(char *s,  char c)				(1)
	{
	  while(*s)						(2)
		if(*s==c) return 1;				(3)	
		else s++;					(4)
	  return 0;						(5)
	}

Чему будет равно значение переменной i в результате вызова int i = is_in(«Lection 10″, ‘a’)?


Какое значение n должен задать пользователь для того, чтобы в результате выполнения приведенной программы на экран было выведено сообщение Ошибка! Сообщение 1 Сообщение 2?

#include <stdio.h>
#include <conio.h>
#include <stdarg.h>

void error(int severity, ... );

int main( void )
{
	char err[][30] = {"Сообщение 1", "Сообщение 2"};
	int n = -1;
	
	printf("Введите степень критичности ошибки (целое число): ");
	scanf("%d", &n);

	switch (n) {
		case 0: error(0, "Ошибка!", '\0');
			break;
		case 1: error(0, "Ошибка!", err[0], '\0');
			break;
		default: error(1, "Ошибка!", err[0], err[1], '\0');
	}

	return 0;
}

void error(int severity, ... )
{
   va_list ap;
   va_start(ap, severity);

   for (;;) {
	   char *p = va_arg(ap, char*);
	   if (p == '\0') break;
	   printf("%s ", p);
   }
   va_end(ap);
   printf("\n");
}

Какое утверждение является неверным?

Какая ошибка допущена в приведенном фрагменте кода?

double max(double a, b)
{
	if (a>b) 
		return a;
	return b;
}

int main(void)
{
	double x=-5.00, y=5.12;
	printf("max = %.2f\n", max(x,y));
	
	return 0;
}

В какой функции содержится ошибка?

Функция average вычисляет среднее арифметическое заданных аргументов:

#include <stdio.h>
#include <stdarg.h>

int average(int first, ... );

int main( void )
{
	int x;
	<Вызов фукнции average()>;

	return 0;
}

int average( int first, ... )
{
   int count = 0, sum = 0, i = first;
   va_list marker;
   va_start(marker, first);

   while( i != -1 ) {
      sum += i;
      count++;
      i = va_arg(marker, int);
   }
   va_end(marker);

   return( sum ? (sum / count) : 0 );
}

В результете какого вызова функции average значение переменной x будет равно 2?


Какие переменные являются фактическими параметрами функции sq()?

int sq(int a, int x)
{
	int i, res = 1;
	for (i=0; i<x; i++)
		res*= a;
	return res;
}

int main(void)
{
	int n=4, b = 3, p;
	p = sq(n,b);
	printf("%d^%d = %d\n", n, b, p);
	
	return 0;
}

В каких программах используются прототипы функций?

Чему будет равно значение переменной s в результате выполнения приведенной программы?

#include <stdio.h>
#include <stdlib.h>
#define n 2
#define m 3

int sum(int *a, int x, int y);

int main( void )
{
	int i, s;
	int a[n][m] = {{1,2,3}, {4,5,6}};
	
	s = sum(a, n, m);
	printf("Сумма элементов а: %d\n", s);
	
	return 0;
}

int sum(int *a, int x, int y)
{
   int i, j, s = 0;
   for (i=0; i<x; i++) 
	   for (j=0; j<y; j++) s += a[i*y+j];
   return s;
}

В какой программе не используются функции (как стандартные, так и пользовательские) с переменным числом аргументов?

В какой программе используются функции (как стандартные, так и пользовательские) с переменным числом аргументов?

Что произойдет после выполнения приведенной программы?

#include <stdio.h>
#define n 10

void fun(int *mas, int k);

int main( void )
{
	int arr[n] = {3,4,5,4,4};
	int i;
	fun(arr, n);
	for (i=0; i<n; i++) 
		printf("arr[%d] = %d\n", i, arr[i]);
	return 0;
}

void fun(int *mas, int k)
{
   int i, s = 0;
   for (i=0; i<k; i++) mas[i] *= 2;
}

Функция average вычисляет среднее арифметическое заданных аргументов:

#include <stdio.h>
#include <stdarg.h>

int average(int first, ... );

int main( void )
{
	int x;
	<Вызов фукнции average()>;

	return 0;
}

int average( int first, ... )
{
   int count = 0, sum = 0, i = first;
   va_list marker;
   va_start(marker, first);

   while( i != -1 ) {
      sum += i;
      count++;
      i = va_arg(marker, int);
   }
   va_end(marker);

   return( sum ? (sum / count) : 0 );
}

В результете какого вызова функции average значение переменной x будет равно 3?


Какой фрагмент кода содержит ошибку?

Какие переменные являются формальными параметрами функции sq()?

int sq(int a, int x)
{
	int i, res = 1;
	for (i=0; i<x; i++)
		res*= a;
	return res;
}

int main(void)
{
	int n=4, b = 3, p;
	p = sq(n,b);
	printf("%d^%d = %d\n", n, b, p);
	
	return 0;
}

Какие утверждения являются верными?

Необходимо написать функцию sum, которая будет вычислять сумму всех элементов массива. В данную функцию должно передаваться два параметра — массив и размер массива. В какой программе функция sum объявлена неверно?

Необходимо написать функцию sum, которая будет вычислять сумму всех элементов массива. В данную функцию должно передаваться два параметра — массив и размер массива. В какой программе функция sum объявлена верно?

В результате выполнения какой программы изначальные значения переменных a и b изменятся?

Функция sum выполняет сложение двух одномерных массивов и возвращает результат через указатель:

int *sum(int A[], int B[], int n)
{
    int i;
	int *ptr = (int *)calloc(n, sizeof(int)); 
    for (i = 0; i < n; i++) ptr[i] = A[i] + B[i];
    return ptr;
}

В какой программе вызов функции sum выполняется неверно?


Какая программа реализует сортировку «методом пузырька» по убыванию с помощью функции, использующей вызов по ссылке?

Приведенная программа использует указатель на функции, которые выполняют различные действия: вычисление квадратного корня, вычисление синуса, вычисление тангенса:

int main (void) 
{
	double (*pFunc) (double);
	int c = 1;
	double y;

	while(1) {
		printf("Выберите функцию (0-выход): 1-sqrt, 2-sin, 3-tan\n");
		scanf("%d", &c);
		switch(c) {
			case 1: pFunc = sin; break;
			case 2: pFunc = sqrt; break;
			case 3: pFunc = tan; break;
			case 0: return;
			default: continue;
		}
	
		y = pFunc(1.1);
		printf("f(1.1) = %.2f\n", y);
	}
		
	return 0;
}

Какое вычисление будет выполнено в том случае, если пользователь в запросе выбора функции задаст число 2?


Функция sum выполняет сложение двух одномерных массивов и возвращает результат через указатель:

int *sum(int A[], int B[], int n)
{
    int i;
	int *ptr = (int *)calloc(n, sizeof(int)); 
    for (i = 0; i < n; i++) ptr[i] = A[i] + B[i];
    return ptr;
}

Как вызвать функцию sum?


Какая программа реализует сортировку «методом пузырька» по возрастанию с помощью функции, использующей вызов по ссылке?

Приведенная программа использует указатель на функции, которые выполняют различные действия: вычисление квадратного корня, вычисление синуса, вычисление тангенса:

int main (void) 
{
	double (*pFunc) (double);
	int c = 1;
	double y;

	while(1) {
		printf("Выберите функцию (0-выход): 1-sqrt, 2-sin, 3-tan\n");
		scanf("%d", &c);
		switch(c) {
			case 1: pFunc = sin; break;
			case 2: pFunc = sqrt; break;
			case 3: pFunc = tan; break;
			case 0: return;
			default: continue;
		}
	
		y = pFunc(1.1);
		printf("f(1.1) = %.2f\n", y);
	}
		
	return 0;
}

Какое вычисление будет выполнено в том случае, если пользователь в запросе выбора функции задаст число 1?


В результате выполнения какой программы изначальное значение переменной s будет изменено?

Что произойдет при выполнении приведенной программы, если пользователь задаст номер алгоритма 9?

void PuzSortInc (int*, int );
void PuzSortDec (int*, int);

int main (void) 
{
	int A[] = {56, 34, 2, 0, 1, -21, 6, 8, 7};
	int i, n, alg;
	void (*pFun) (int*, int) = NULL;

	n = sizeof(A)/sizeof(A[0]);
	printf("Исходный массив: ");
	for (i = 0; i < n; i++) printf(" %3d", A[i]);

	printf("\nВыберите алгоритм сортировки (1 - \"методом пузырька\" по возрастанию,\
		   2 - \"методом пузырька\" по убыванию: ");
	scanf("%d", &alg);

	switch (alg) {
		case 1: pFun = PuzSortInc; break;
		case 2: pFun = PuzSortDec; break;
		default: printf("ERROR! Такого алгоритма не определено!"); 
	}
	
	if (pFun) {
		pFun(A,n);
		printf("\nSorted array: ");
		for (i = 0; i < n; i++) printf(" %3d", A[i]);
	};
		
	return 0;
}

void PuzSortInc (int* arr, int size)
{
	int i, j, buf; 

	for (i = 0; i < size - 1; i++ ) {
		for (j = 0; j < size - 1; j++) {
			if (arr[j] > arr[j + 1]) {
				buf = arr[j];
				arr[j] = arr[j+1];
				arr[j+1] = buf;
			}				
		}
	}
}

void PuzSortDec (int* arr, int size)
{
	int i, j, buf; 

	for (i = 0; i < size - 1; i++ ) {
		for (j = 0; j < size - 1; j++) {
			if (arr[j] < arr[j + 1]) {
				buf = arr[j];
				arr[j] = arr[j+1];
				arr[j+1] = buf;
			}				
		}
	}
}

Задан указатель на функции int (*pFun) (int, int). Какие утверждения являются верными?

Функция xgets() в упрощенном виде демонстрирует работу стандартной функции gets():

char *xgets(char *s)
{
  char ch, *p;
  int t;

  p = s; 

  for(t=0; t<80; ++t){
    ch = getchar();

    switch(ch) {
      case '\n':
        s[t] = '\0';
        return p;
      case '\b':
        if(t>0) t--;
        break;
      default:
        s[t] = ch;
    }
  }
  s[79] = '\0';
  return p;
}

Каким образом можно вызвать эту функцию?


Функция sum выполняет сложение двух одномерных массивов и возвращает результат через указатель:

int *sum(int A[], int B[], int n)
{
    int i;
	int *ptr = (int *)calloc(n, sizeof(int)); 
    for (i = 0; i < n; i++) ptr[i] = A[i] + B[i];
    return ptr;
}

В какой программе вызов функции sum выполняется верно?


В приведенной программе используется указатель на функции, которые выполняют сортировку целочисленного массива «методом пузырька»:

void PuzSortInc (int*, int );
void PuzSortDec (int*, int);

int main (void) 
{
	int A[] = {56, 34, 2, 0, 1, -21, 6, 8, 7};
	int i, n, alg;
	<Объявление указателя pFun на функции>

	n = sizeof(A)/sizeof(A[0]);
	printf("Исходный массив: ");
	for (i = 0; i < n; i++) printf(" %3d", A[i]);

	printf("\nВыберите алгоритм сортировки (1 - \"методом пузырька\" по возрастанию,\
		   2 - \"методом пузырька\" по убыванию: ");
	scanf("%d", &alg);

	switch (alg) {
		case 1: pFun = PuzSortInc; break;
		case 2: pFun = PuzSortDec; break;
		default: printf("ERROR! Такого алгоритма не определено!");
	}

	if (pFun) {
		pFun(A,n);
		printf("\nSorted array: ");
		for (i = 0; i < n; i++) printf(" %3d", A[i]);
	};
		
	return 0;
}

void PuzSortInc (int* arr, int size)
{
	int i, j, buf; 

	for (i = 0; i < size - 1; i++ ) {
		for (j = 0; j < size - 1; j++) {
			if (arr[j] > arr[j + 1]) {
				buf = arr[j];
				arr[j] = arr[j+1];
				arr[j+1] = buf;
			}				
		}
	}
}

void PuzSortDec (int* arr, int size)
{
	int i, j, buf; 

	for (i = 0; i < size - 1; i++ ) {
		for (j = 0; j < size - 1; j++) {
			if (arr[j] < arr[j + 1]) {
				buf = arr[j];
				arr[j] = arr[j+1];
				arr[j+1] = buf;
			}				
		}
	}
}

Функция PuzSortInc() выполняет сортировку по возрастанию, функция PuzSortDec() — по убыванию. Каким образом должен быть объявлен указатель на функции для его использования в приведенной программе?


Что произойдет при выполнении приведенной программы, если пользователь задаст номер алгоритма 9?

void PuzSortInc (int*, int );
void PuzSortDec (int*, int);

int main (void) 
{
	int A[] = {56, 34, 2, 0, 1, -21, 6, 8, 7};
	int i, n, alg;
	void (*pFun) (int*, int) = NULL;

	n = sizeof(A)/sizeof(A[0]);
	printf("Исходный массив: ");
	for (i = 0; i < n; i++) printf(" %3d", A[i]);

	printf("\nВыберите алгоритм сортировки (1 - \"методом пузырька\" по возрастанию,\
		   2 - \"методом пузырька\" по убыванию: ");
	scanf("%d", &alg);

	switch (alg) {
		case 1: pFun = PuzSortInc; break;
		case 2: pFun = PuzSortDec; break;
		default: printf("ERROR! Такого алгоритма не определено!"); 
	}

	pFun(A,n);
	printf("\nОтсортированный массив: ");
	for (i = 0; i < n; i++) printf(" %3d", A[i]);
		
	return 0;
}

void PuzSortInc (int* arr, int size)
{
	int i, j, buf; 

	for (i = 0; i < size - 1; i++ ) {
		for (j = 0; j < size - 1; j++) {
			if (arr[j] > arr[j + 1]) {
				buf = arr[j];
				arr[j] = arr[j+1];
				arr[j+1] = buf;
			}				
		}
	}
}

void PuzSortDec (int* arr, int size)
{
	int i, j, buf; 

	for (i = 0; i < size - 1; i++ ) {
		for (j = 0; j < size - 1; j++) {
			if (arr[j] < arr[j + 1]) {
				buf = arr[j];
				arr[j] = arr[j+1];
				arr[j+1] = buf;
			}				
		}
	}
}

Какая программа реализует сортировку методом прямого выбора по убыванию с помощью функции, использующей вызов по ссылке?

В приведенной программе используются указатели на функции, которые выполняют сортировку целочисленного массива «методом пузырька»:

void PuzSortInc (int*, int );
void PuzSortDec (int*, int);

int main (void) 
{
	int A[] = {56, 34, 2, 0, 1, -21, 6, 8, 7};
	int i, n, alg;
	<Объявление указателя pFun на функции>

	n = sizeof(A)/sizeof(A[0]);
	printf("Исходный массив: ");
	for (i = 0; i < n; i++) printf(" %3d", A[i]);

	printf("\nВыберите алгоритм сортировки (1 - \"методом пузырька\" по возрастанию,\
		   2 - \"методом пузырька\" по убыванию: ");
	scanf("%d", &alg);

	switch (alg) {
		case 1: (*pFun[0])(A, n); break;
		case 2: (*pFun[1])(A, n); break;
		default: printf("ERROR! Такого алгоритма не определено!");
	}

    printf("\nSorted array: ");
	for (i = 0; i < n; i++) printf(" %3d", A[i]);
		
	return 0;
}

void PuzSortInc (int* arr, int size)
{
	int i, j, buf; 

	for (i = 0; i < size - 1; i++ ) {
		for (j = 0; j < size - 1; j++) {
			if (arr[j] > arr[j + 1]) {
				buf = arr[j];
				arr[j] = arr[j+1];
				arr[j+1] = buf;
			}				
		}
	}
}

void PuzSortDec (int* arr, int size)
{
	int i, j, buf; 

	for (i = 0; i < size - 1; i++ ) {
		for (j = 0; j < size - 1; j++) {
			if (arr[j] < arr[j + 1]) {
				buf = arr[j];
				arr[j] = arr[j+1];
				arr[j+1] = buf;
			}				
		}
	}
}

Функция PuzSortInc() выполняет сортировку по возрастанию, функция PuzSortDec() — по убыванию. Каким образом должен быть объявлен указатель на функции для его использования в приведенной программе?


Приведенная программа использует указатель на функции, которые выполняют различные действия: вычисление квадратного корня, вычисление синуса, вычисление тангенса:

int main (void) 
{
	double (*pFunc) (double);
	int c = 1;
	double y;

	while(1) {
		printf("Выберите функцию (0-выход): 1-sqrt, 2-sin, 3-tan\n");
		scanf("%d", &c);
		switch(c) {
			case 1: pFunc = sqrt; break;
			case 2: pFunc = sin; break;
			case 3: pFunc = tan; break;
			case 0: return;
			default: continue;
		}
	
		y = pFunc(1.1);
		printf("f(1.1) = %.2f\n", y);
	}
		
	return 0;
}

Какое вычисление будет выполнено в том случае, если пользователь в запросе выбора функции задаст число 3?


Какая переменная pFun способна указывать только на функцию, которая возвращает целое число и требует два целых числа в качестве параметра?

В результате выполнения какой программы значением переменной s будет строка в верхнем регистре?

Функция xgets() в упрощенном виде демонстрирует работу стандартной функции gets():

char *xgets(char *s)
{
  char ch, *p;
  int t;

  p = s; 

  for(t=0; t<80; ++t){
    ch = getchar();

    switch(ch) {
      case '\n':
        s[t] = '\0'; 
        return p;
      case '\b':
        if(t>0) t--;
        break;
      default:
        s[t] = ch;
    }
  }
  s[79] = '\0';
  return p;
}

Каким образом можно вызвать эту функцию?


Функция xgets() в упрощенном виде демонстрирует работу стандартной функции gets():

char *xgets(char *s)
{
  char ch, *p;
  int t;

  p = s; 

  for(t=0; t<80; ++t){
    ch = getchar();

    switch(ch) {
      case '\n':
        s[t] = '\0'; 
        return p;
      case '\b':
        if(t>0) t--;
        break;
      default:
        s[t] = ch;
    }
  }
  s[79] = '\0';
  return p;
}

Какие вызовы функции являются неверными?


В результате выполнения какой программы изначальное значение переменной s не будет изменено?

Какая функция не возвращает указатель?

Какой файл будет получен в результате выполнения приведенной программы?

#include <stdio.h>

int main( void )
{
   FILE *stream;
   char list[30];
   int  i, numread, numwritten;

   if( (stream = fopen("g:\\fread.out", "w+t")) != NULL )
   {
      for ( i = 0; i < 26; i++ )
         list[i] = (char)('z' - i); 
      numwritten = fwrite( list, sizeof( char ), 26, stream );
      printf( "Wrote %d items\n", numwritten );
      fclose( stream );

   }
   else
      printf( "Problem opening the file\n" );

   if( (stream = fopen("g:\\fread.out", "r+t" )) != NULL )
   { 
      numread = fread( list, sizeof( char ), 26, stream );
      printf( "Number of items read = %d\n", numread );
      printf( "Contents of buffer = %.26s\n", list );
      fclose( stream );
   }
   else
      printf( "File could not be opened\n" );
}

Приведенная программа выводит заданную строку в файл:

int main( void )
{
	int i, j, k, buf;
	FILE *stream;
	char str[11] = "Lection 11";

	if( (stream = fopen("g:\\fread.txt", "w+t")) == NULL )
		printf( "Problem opening the file\n" );
	else {
		k = fwrite(str,sizeof(char), sizeof(str)/sizeof(char), stream);
		printf("k = %d\n", k);
		fclose(stream);
	}
	
	return 0;	
}

Какие утверждения являются верными?


В каком случае при первом запуске программы файл лога работы программы, содержащий описание всех выполненных в программе действий, не будет записан?

Что произойдет при двух запусках программы в течение одной минуты?

#include <stdio.h>
#include <math.h>
#include <time.h>
#include <string.h>

void AddToLog(FILE*, char*);
char* GenerateFileName();

int main (void) 
{
	FILE *fp;
	char *strFile, strFn[30] = "";
	double (*pFunc) (double);
	int c = 1;
	double y;

	strFile = GenerateFileName();
	strcpy(strFn, strFile);

	if( (fp = fopen(strFn, "a+")) == NULL )
		printf( "Problem opening the file\n" );

	while(1) {
		printf("Выберите функцию (0-выход): 1-sqrt, 2-sin, 3-tan\n");
		scanf("%d", &c);
		switch(c) {
			case 1: 
				pFunc = sqrt; 
				AddToLog(fp, "Пользователь выбрал функцию 1 (вычисление квадратного корня)\n");
				break;
			case 2: 
				pFunc = sin; 
				AddToLog(fp, "Пользователь выбрал функцию 2 (вычисление синуса)\n");
				break;
			case 3: 
				pFunc = tan; 
				AddToLog(fp, "Пользователь выбрал функцию 3 (вычисление тангенса)\n");
				break;
			case 0: 
				AddToLog(fp, "Пользователь завершил выбор функции\n\n");
				printf("Лог сохранен в файл %s\n", strFn);
				return;
			default: 
				AddToLog(fp, "Пользователь задал неверный номер функции\n\n");
				continue;
		}
	
		y = pFunc(1.1);
		AddToLog(fp, "Вычислено значение выбранной функции\n");
		printf("f(1.1) = %.2f\n", y);
		AddToLog(fp, "Результат вычисления выведен на экран\n");
	}

	if (fp != NULL) fclose(fp);	
	return 0;
}

void AddToLog(FILE *fp, char *str)
{
	if (fp != NULL) fputs(str, fp);
}

char* GenerateFileName()
{
	char strTime[10] = "";
	char strDate[10] = "";
	char strFile[30] = "g:\\log_";
	char *token;

	_strdate(strDate);
	_strtime(strTime);

	token = strtok(strDate, "/");
	while( token != NULL ) {
		strncat(strFile,token,2);
		token = strtok( NULL, "/" );
	}
	strncat(strFile,"_",1);

	token = strtok(strTime, ":");
	while( token != NULL ) {
		strncat(strFile,token,2);
		token = strtok( NULL, "/" );
	}
	strncat(strFile,".txt",4);
}

Сколько символов будет прочитано из файла функцией fread() в результате выполнения приведенной программы?

int main(void)
{
  FILE *fp;
  char str[30] = "Lection 11";

  if((fp=fopen("g:\\test.txt", "wt+"))==NULL) {
    printf("Ошибка при открытии файла.\n");
    exit(1);
  }

  fwrite(str, sizeof(char), strlen(str)-3, fp);
  
  rewind(fp);

  fread(str, sizeof(char), sizeof(str)/sizeof(char), fp);
  
  fclose(fp);
  return 0;
}

Какая программа выводит на экран все строки из файла?

Файл g:\test.txt содержит две строки:
Чему будет равно значение переменной i в результате выполнения приведенного фрагмента кода?

	char str[30], i;
	FILE *fp;

	if((fp = fopen("g:\\test.txt", "r"))==NULL) {
		printf("Ошибка при открытии файла.\n");
		exit(1);
	}
	fgets(str, 30, fp);
	i = strlen(str);
	fclose(fp);

Каким будет значение переменной line в результате выполнения приведенной программы?

int main( void )
{
   FILE *stream;
   char line[81];
   int  result;

   if ( fopen_s( &stream, "g:\\fseek.out", "w+" ) != 0 )
   {
      printf( "The file fseek.out was not opened\n" );
      return -1;
   }
   fprintf( stream, "Ivanov - 09.06.1980 "
                    "Petrov - 10.03.1986 \n"
					"Sidorov - 08.11.1985\n");
   result = fseek( stream, 20L, SEEK_SET);
   if( result )
      perror( "Fseek failed" );
   else
   {
      fgets( line, 80, stream );
      printf( "%s", line );
    }
   fclose( stream );
   return 0;
}

В каком случае при самом первом запуске программы в файл будет записан лог работы программы, содержащий описание всех выполненных в программе действий?

Файл g:\test.txt содержит две строки:
Чему будет равен символ str[10] в результате выполнения приведенного фрагмента кода?

	char str[30], i;
	FILE *fp;

	if((fp = fopen("g:\\test.txt", "r"))==NULL) {
		printf("Ошибка при открытии файла.\n");
		exit(1);
	}
	fgets(str, 30, fp);
	i = strlen(str);
	fclose(fp);

В результате выполнения какой программы будет получен приведенный файл?

Задан файл, содержащий список названий и стоимости мониторов: В результате выполнения какой программы на экран будет выведено только название и стоимость монитора, указанного в последнем пункте?

Задан файл, содержащий список названий и стоимости мониторов: Какой файл будет получен в результате выполнения приведенной программы?

int main( void )
{
   FILE *stream;
   char str[81];
   int  result;

   if ( fopen_s( &stream, "g:\\list.txt", "r+" ) != 0 )
   {
      printf( "The file list.txt was not opened\n" );
      return -1;
   }
 
   result = fseek( stream, 0L, SEEK_END);

   if( result )
      perror( "Fseek failed" );
   else
   {
      fputs( "5. NEC MultiSync EX231W - 10490 rub.", stream );
      printf( "%s", str );
    }
   fclose( stream );
   return 0;
}

Что такое текстовый поток?

Чему будет равно значение переменной m в результате выполнения приведенной программы?

int main(void)
{
  FILE *fp;
  char str[30] = "Lection 11";
  int k, l, m;

  if((fp=fopen("g:\\test.txt", "wt+"))==NULL) {
    printf("Ошибка при открытии файла.\n");
    exit(1);
  }

  k = fwrite(str, sizeof(char), strlen(str)-3, fp);

  rewind(fp);

  l = fread(str, sizeof(char), sizeof(str)/sizeof(char), fp);
 
  m= l - k;
  fclose(fp);
  return 0;
}

Задан файл, содержащий список названий и стоимости мониторов: Какой файл будет получен в результате выполнения приведенной программы?

int main( void )
{
   FILE *stream;
   char str[81];
   int  result;

   if ( fopen_s( &stream, "g:\\list.txt", "r+" ) != 0 )
   {
      printf( "The file list.txt was not opened\n" );
      return -1;
   }
 
   result = fseek( stream, 0L, SEEK_END);

   if( result )
      perror( "Fseek failed" );
   else
   {
      fputs( "\n5. NEC MultiSync EX231W - 10490 rub.", stream );
      printf( "%s", str );
    }
   fclose( stream );
   return 0;
}

В каком случае выполняется посимвольная запись массива в файл?

Каким будет значение переменной line в результате выполнения приведенной программы?

int main( void )
{
   FILE *stream;
   char line[81];
   int  result;

   if ( fopen_s( &stream, "g:\\fseek.out", "w+" ) != 0 )
   {
      printf( "The file fseek.out was not opened\n" );
      return -1;
   }
   fprintf( stream, "Ivanov - 09.06.1980 \n"
                    "Petrov - 10.03.1986 \n"
					"Sidorov - 08.11.1985\n");
   result = fseek( stream, 0L, SEEK_SET);
   if( result )
      perror( "Fseek failed" );
   else
   {
      fgets( line, 80, stream );
      printf( "%s", line );
    }
   fclose( stream );
   return 0;
}

Задан файл, содержащий список названий и стоимости мониторов: Какой файл будет получен в результате выполнения приведенной программы?

int main( void )
{
   FILE *stream;
   char str[81];
   int  result;

   if ( fopen_s( &stream, "g:\\list.txt", "r+" ) != 0 )
   {
      printf( "The file list.txt was not opened\n" );
      return -1;
   }
 
   result = fseek( stream, -27L, SEEK_END);

   if( result )
      perror( "Fseek failed" );
   else
   {
      fputs( "5. NEC MultiSync EX231W - 10490 rub.", stream );
      printf( "%s", str );
    }
   fclose( stream );
   return 0;
}

Какие действия выполняет приведенная программа?

#include <stdio.h>

int main( void )
{
   FILE *stream;
   char list[30];
   int  i, numread, numwritten;

   if( (stream = fopen("g:\\fread.out", "w+t")) != NULL )
   {
      for ( i = 0; i < 26; i++ )
         list[i] = (char)('z' - i); 
      numwritten = fwrite( list, sizeof( char ), 26, stream );
      printf( "Wrote %d items\n", numwritten );
      fclose( stream );

   }
   else
      printf( "Problem opening the file\n" );

   if( (stream = fopen("g:\\fread.out", "r+t" )) != NULL )
   { 
      numread = fread( list, sizeof( char ), 26, stream );
      printf( "Number of items read = %d\n", numread );
      printf( "Contents of buffer = %.26s\n", list );
      fclose( stream );
   }
   else
      printf( "File could not be opened\n" );
}

Задан файл, содержащий список названий и стоимости мониторов: Чему будет равно значение переменной str в результате выполнения приведенной программы?

int main( void )
{
   FILE *stream;
   char str[81];
   int  result;

   if ( fopen_s( &stream, "g:\\list.txt", "r+" ) != 0 )
   {
      printf( "The file list.txt was not opened\n" );
      return -1;
   }
 
   result = fseek( stream, -24L, SEEK_END);

   if( result )
      perror( "Fseek failed" );
   else
   {
      fgets( str, 80, stream );
      printf( "%s", str );
    }
   fclose( stream );
   return 0;
}

Что такое двоичный поток?

Какие объекты рассматриваются в языке С как файлы?

Файл g:\test.txt содержит две строки:
Чему будет равен символ str[11] в результате выполнения приведенного фрагмента кода?

	char str[30], i;
	FILE *fp;

	if((fp = fopen("g:\\test.txt", "r"))==NULL) {
		printf("Ошибка при открытии файла.\n");
		exit(1);
	}
	fgets(str, 30, fp);
	i = strlen(str);
	fclose(fp);

Что такое файл?

Задан файл, содержащий список названий и стоимости мониторов: В результате выполнения какой программы на экран будет выведена информация о пункте (2) из списка?

В результате выполнения какой программы на экран ничего не будет выведено?

Объявление какой структуры содержит ошибку?

Какая программа содержит ошибку?

Какой файл будет создан в результате выполнения приведенной программы?

int main (void)
{
	struct student {    
		char *name;  
		char *surname; 
		int group;         
		int ses[5];
		double av;
		struct student *p;
	} st; 
	FILE *fp;
	int i, sum = 0;

	st.name = "Ivan";
	st.surname = "Ivanov";
	st.group = 1024;
	st.ses[0] = 5;
	st.ses[1] = 4;
	st.ses[2] = 5;
	st.ses[3] = 5;
	st.ses[4] = 5;

	for (i=0; i<5; i++) sum +=st.ses[i];
	st.av = sum/5;
	
	if ((fp = fopen("g:\\marks.txt", "w+t")) == 0)
		printf("Open file error");
	else {
		fprintf(fp, "Name: %s %s\n", st.surname, st.name);
		fprintf(fp, "Group: %d\n", st.group);
		fprintf(fp, "Average mark: %.2f\n\n", st.av);
		fclose(fp);
	};

    return 0;
 }

В каком случае структура верно определена с использованием ключевого слова typedef?

Чему будет равен результат вычисления значения 5+6 в результате выполнения приведенного фрагмента кода?

  int a, b, res;
  char op;
  int f = 1;

  printf("Введите 1й операнд: ");
  scanf("%d", &a);
  printf("Введите знак операции: ");
  scanf("%s", &op);
  printf("Введите 2й операнд: ");
  scanf("%d", &b);

  switch (op) {
	  case '+': res = a+b; 
	  case '-': res = a-b; break;
	  case '*': res = a*b; break;
	  case '/': res = a/b; break;
	  default: 
		  printf("Неизвестная операция");
		  f = 0;
  }
  if (f) printf ("Результат: %d", res);

Что такое структура?

Объявлена структура:

struct Account
{
  int account;
  char name[30];
  int balance;
};

Каким образом данная структура хранится в памяти?


Необходимо написать программу, которая позволит ввести с клавиатуры данные о поездах. Также в программе должен быть предусмотрен поиск по пункту назначения поезда. Какая программа выполняет поставленную задачу?

Какие варианты объявления структуры Account и переменных acc1 и acc2 являются верными для приведенной программы?

void PrintStruct(char*, int, int);

int main (void)
{
	<Объявление структуры Account и переменных acc1, acc2>

	acc2 = &acc1;
	
	acc1.account = 346578;
	strcpy(acc1.name, "Ivanov");
	acc1.balance = 30000;
	PrintStruct(acc1.name, acc1.account, acc1.balance); 

	acc2->account = 90005;
	strcpy(acc2->name, "Pertov");
	acc2->balance = 46000;
	PrintStruct(acc2->name, acc2->account, acc2->balance); 

	return 0; 
}

void PrintStruct(char *str, int a, int b)
{
	printf("Name: %s\n", str);
	printf("Account: %d\n", a);
	printf("Balance: %d\n\n", b);
}

Чему будет равно значение переменной s в результате выполнения приведенной программы?

int main (void)
{
	struct A { 
		int number;
		int count;
	} a1[2], a2[2];
	int s;
	
	a1[0].number = 1;
	a1[0].count = 12;
	a1[1].number = 1;
	a1[1].count = 12;

	a2[0] = a1[0];
	s = a1[0].count + a2[0].count;

	return 0; 
}

В какой программе используются вложенные структуры?

Объявлена структура:

struct addr
{
  char name[30];
  char street[40];
  char city[20];
  char state[3];
  unsigned long int zip;
};

Каким образом данная структура хранится в памяти?


Каким образом должна быть объявлена структура Account и переменные acc1 и acc2 для корректного выполнения приведенной программы?

void PrintStruct(char*, int, int);

int main (void)
{
	<Объявление структуры Account и переменных acc1, acc2>

	acc2 = &acc1;
	
	acc1.account = 346578;
	acc1.name = "Ivanov";
	acc1.balance = 30000;
	PrintStruct(acc1.name, acc1.account, acc1.balance); 

	acc2->account = 90005;
	acc2->name = "Pertov";
	acc2->balance = 46000;
	PrintStruct(acc2->name, acc2->account, acc2->balance); 

	return 0; 
}

void PrintStruct(char *str, int a, int b)
{
	printf("Name: %s\n", str);
	printf("Account: %d\n", a);
	printf("Balance: %d\n\n", b);
}

Каким образом должна быть объявлена структура group и переменная g для корреткной работы программы?

int main (void)
{
	struct stud {    
		char *name;  
		char *surname; 
		int age;         
		double av_mark; 
	}; 

	<Объявление структуры group и переменной gr>            

	gr.number = 3;
	gr.quantity = 21;
	gr.student.name = "Ivan";
	gr.student.surname = "Ivanov";
	gr.student.age = 20;
	gr.student.av_mark = 4.25;

	printf("Group Number: %d\nThe number of students in the group: %d\n", gr.number, gr.quantity);
	printf("%s %s - %1.2f", gr.student.surname, gr.student.name, gr.student.av_mark);

    return 0;
 }

Какая программа вычисляет сумму четных элементов двумерного массива?

Какое сообщение будет выведено на экран в результате выполненния приведенной программы?

int main (void)
{
	struct student { 
		char *name;
		char *birthday;
		int group;
	} s1, s2;

	int s;
	
	s1.name = "Ivanov";
	s1.birthday = "10.03.1985";
	s1.group = 1014;

	s2.name = "Petrov";
	s2.birthday = "08.04.1985";
	s2.group = 1309;

	s2 = s1;

	if (s2.group == s1.group)
		printf("Students %s and %s are studying in the same group\n", s1.name, s2.name);
	else
		printf("Students %s and %s are not studying in the same group\n", s1.name, s2.name);

	return 0; 
}

В какой программе не используются вложенные структуры?

Необходимо написать программу, которая позволит ввести с клавиатуры данные о поездах. Также в программе должен быть предусмотрен поиск по пункту назначения поезда. Какая программа не выполняет поставленную задачу?

Какое сообщение будет выведено на экран в результате выполненния приведенной программы?

int main (void)
{
	struct student { 
		char *name;
		char *birthday;
		int group;
	} s1, s2;

	int s;
	
	s1.name = "Ivanov";
	s1.birthday = "10.03.1985";
	s1.group = 1014;

	s2.name = "Petrov";
	s2.birthday = "08.04.1985";
	s2.group = 1309;

	s2.group = s1.group;

	if (s2.group == s1.group)
		printf("Students %s and %s are studying in the same group\n", s1.name, s2.name);
	else
		printf("Students %s and %s are not studying in the same group\n", s1.name, s2.name);

	return 0; 
}

Объявлена структура:

struct Worker
{
  char fio[30];
  int date, code;
};

Каким образом данная структура хранится в памяти?


Необходимо написать программу, которая позволит ввести с клавиатуры данные о поездах. Также в программе должен быть предусмотрен поиск по номеру поезда. Какая программа выполняет поставленную задачу?

В каком случае структура определена с использованием ключевого слова typedef неверно?

Какая ошибка содержится в приведенной программе?

int main (void)
{
	typedef struct {    
		char nazn[40];  
		int numb; 
		char time[10];
	} train, train_info;

	train_info ti[3];
	train tr[3];
	
	int i = 0, sum = 0, ch=0;
	char str[10], search[10];

	while(ch!=121) {
		printf("\nEnter information about train (Q - quit): \n");
		printf("Enter destination of the train: ");
		gets(tr[i].nazn);
		printf("Enter number of the train: ");
		gets(str);
		tr[i].numb = atoi(str);
		printf("Enter time of scheduled departure: ");
		gets(tr[i].time);
		++i;
		printf("Quit? (y/n): ");
		ch = _getche();
	};
	
	printf("\n\nEnter train destination: ");
	gets(search);

	for (i=0; i<3; i++) {
		if (strcmp(tr[i].nazn,search)==0) {
			printf("\n\tTrain number: %d", tr[i].numb);
			printf("\n\tTime: %s", tr[i].time);
		}
	}
	if (i>=3)
		printf("There is no train to this destination");

    return 0;
 }

Описан шаблон структуры:

struct addr
{
  char name[30];
  char street[40];
  char city[20];
  char state[3];
  unsigned long int zip;
};

Какие утверждения в данном случае являются верными?


Какая программа содержит ошибку?

Какая ошибка содержится в приведенной программе?

int main (void)
{
	struct train_info {    
		char nazn[40];  
		int numb; 
		char time[10];
	};
	typedef struct train_info train;

	train tr[3];
	
	int i = 0, sum = 0, ch=0;
	char str[10], search[10];

	while(ch!=121) {
		printf("\nEnter information about train (Q - quit): \n");
		printf("Enter destination of the train: ");
		gets(tr[i].nazn);
		printf("Enter number of the train: ");
		gets(str);
		tr[i].numb = atoi(str);
		printf("Enter time of scheduled departure: ");
		gets(tr[i].time);
		++i;
		printf("Quit? (y/n): ");
		ch = _getche();
	};
	
	printf("\n\nEnter train destination: ");
	gets(search);

	for (i=0; i<3; i++) {
		if (strcmp(tr[i].nazn,search)==0) {
			printf("\n\tTrain number: %d", tr[i].numb);
			printf("\n\tTime: %s", tr[i].time);
		}
	}
	if (i>=3)
		printf("There is no train to this destination");

    return 0;
 }

В чем отличие структуры от массива?

Какие переменные, имеющие тип заданной структуры, объявлены в приведенном описании?

struct addr {
  char name[30];
  char street[40];
  char city[20];
  char state[3];
  unsigned long int zip;
} addr_info, binfo;

Определите, содержит ли приведенное объявление структур ошибки? Если содержит, то укажите, какие именно?

struct A {int a; double x; };
struct B {A a; B b; double x; }; 

Сколько памяти будет выделено для хранения приведенного объединения?

union hold {
	int digit;
	double bigf;
	char letter;
};

Определите, есть ли в приведенной программе ошибки? Если есть, укажите, какие?

typedef union pw_union {
  short int i;
  char ch[2];
} pw;

int putw(short int num, FILE *fp);

int main(void)
{
  FILE *fp;

  fp = fopen("g:\\test.tmp", "wb+");
  if(fp == NULL) {
    printf("Файл не открыт.\n");
    exit(1);
  }

  putw(1025, fp);
  fclose(fp);

  return 0;
}

int putw(short int num, FILE *fp)
{
  union pw word;

  word.i = num;

  putc(word.ch[0], fp); 
  return putc(word.ch[1], fp); 
}

Определите, возникнут ли ошибки при выполнении приведенной программы? Если возникнут, объясните, почему?

int main(void)
{
	enum coin { penny, nickel, dime, quarter=100, half_dollar, dollar};
	enum coin money;

	char name[][12]={
	  "penny",
	  "nickel",
	  "dime",
	  "quarter",
	  "half_dollar",
	  "dollar"
	};

	money = half_dollar;
	printf("%s", name[money]);
	
	return 0;
}

Чему будет равно значение переменной str после выполнения приведенной программы?

union test {
  char ch1[5];
  char ch2[2];
  char ch3[1];
};

int main(void)
{
	union test t;
	char *str;
	t.ch3[0] = 'w';
	strcpy(t.ch2, "be");
	strcpy(t.ch1, "test");
	t.ch1[2] = '\0';
	str = t.ch2;
	return 0;
}

В какой программе выполняется верное обращение к полям объединения?

Значения каких типов может содержать приведенное объединение?

union hold {
	int digit;
	double bigf;
	char letter;
};

В чем заключается назначение объединений (union)?

Задано перечисление numbers:

enum numbers {two=2, tree, four, ten=10, eleven, last=ten+40};

Какое значение будет присвоено константе last?


Сколько памяти будет выделено для хранения приведенного объединения?

union payment {
	char card[25];
	int sum;
	double date;
};

Что будет выведено на экран в результате выполнения приведенной программы, если в запросе ввода номера месяца пользователь задаст число 2?

int main (void) {
	enum month {january, february, march, april, may, 
				june,july, august, september, october, november, 
				december } aMonth;
	int days;
	printf("\n Enter the number of the month (1 - 12): ");
	scanf_s("%d", &aMonth);

	switch (aMonth) {
		case january:
		case march:
		case may:
		case july:
		case august:
		case october:
		case december:
			days = 31;
			break;
	
		case april:
		case june:
		case september:
		case november:
			days = 30;
			break;

		case february:
			days = 28;
			break;

		default:
			printf("\n\t Wrong number of the month\n");
			days = 0;
			break; 
	}

	if (days)
	printf("\n The number of days of the month: %d\n", days);

	if (aMonth == 2)
	printf("\n ... or 29 if it is a leap year\n");

	return 0; 
}

В результате выполнения какой программы на экран будет выведена строка 0 1 2 100 101 102?

Определите, есть ли в приведенной программе ошибки? Если есть, укажите, какие?

typedef union pw_union {
  short int i;
  char ch[2];
} pw;

int putw(short int num, FILE *fp);

int main(void)
{
  FILE *fp;

  fp = fopen("g:\\test.tmp", "wb+");
  if(fp == NULL) {
    printf("Файл не открыт.\n");
    exit(1);
  }

  putw(1025, fp);
  fclose(fp);

  return 0;
}

int putw(short int num, FILE *fp)
{
  pw_union word;

  word.i = num;

  putc(word.ch[0], fp); 
  return putc(word.ch[1], fp); 
}

Что будет выведено на экран в результате выполнения приведенной программы?

int main(void)
{
	union pw {
	  int i;
	  double d;
	  char ch[2];
	} pw = {"y"};
	
	printf("pw.d = %.2f", pw.d);
	
	return 0;
}

Какая ошибка допущена в приведенной программе?

int main (void) {
	enum month {january = 1, february, march, april, may, 
				june,july, august, september, october, november, 
				december } aMonth;
	int days;
	printf("\n Enter the number of the month (1 - 12): ");
	scanf_s("%d", &aMonth);

	switch (aMonth) {
		case january:
		case march:
		case may:
		case july:
		case august:
		case october:
		case december:
			days = 31;
			break;
	
		case april:
		case june:
		case september:
		case november:
			days = 30;
			break;

		case february:
			days = 28;
			break;

		default:
			printf("\n\t Wrong number of the month\n");
			days = 0;
			break; 
	}

	if (days)
	printf("\n The number of days of the month: %d\n", days);

	if (aMonth == "february")
	printf("\n ... or 29 if it is a leap year\n");

	return 0; 
}

Сколько памяти будет выделено для хранения приведенного объединения?

union payment {
	char card[10];
	int sum;
	double date;
};

Что будет выведено на экран в результате выполнения приведенной программы?

int main(void)
{
	union pw {
	  int i;
	  double d;
	  char ch[2];
	} pw = {"y"};
	
	printf("pw.i = %d", pw.i);
	
	return 0;
}

В чем заключается назначение перечислений (enum)?

Какие утверждения являются верными?

Чему будет равно значение переменной str после выполнения приведенной программы?

union test {
  char ch1[5];
  char ch2[2];
  char ch3[1];
};

int main(void)
{
	union test t;
	char *str;
	strcpy(t.ch1, "test");
	t.ch2[0] = 'b';
	t.ch3[0] = 'w';
	str = t.ch1;
	return 0;
}

Определите, возникнут ли ошибки при выполнении приведенной программы? Если возникнут, объясните, почему?

int main(void)
{
	enum coin { penny, nickel, dime, quarter, half_dollar, dollar};
	enum coin money;

	char name[][12]={
	  "penny",
	  "nickel",
	  "dime",
	  "quarter",
	  "half_dollar",
	  "dollar"
	};

	money = half_dollar;
	printf("%s", name[money]);
	
	return 0;
}

Что будет выведено на экран в результате выполнения приведенной программы?

int main(void)
{
	enum coin { penny, nickel, dime, quarter=100, half_dollar, dollar};
	enum coin money;

	printf("%d ", penny);
	printf("%d ", nickel);
	printf("%d ", dime);
	printf("%d ", quarter);
	printf("%d ", half_dollar);
	printf("%d ", dollar);
	
	return 0;
}

Какая ошибка допущена в приведенной программе?

int main (void) {
	enum month {january = 1, february, march, april, may, 
				june,july, august, september, october, november, 
				december } aMonth;
	int days;
	printf("\n Enter the number of the month (1 - 12): ");
	scanf_s("%d", &aMonth);

	switch (aMonth) {
		case january:
		case march:
		case may:
		case july:
		case august:
		case october:
		case december:
			days = 31;
			break;
	
		case april:
		case june:
		case september:
		case november:
			days = 30;
			break;

		case february:
			days = 28;
			break;

		default:
			printf("\n\t Wrong number of the month\n");
			days = 0;
			break; 
	}

	if (days)
	printf("\n The number of days of the month: %d\n", days);

	if (aMonth == 2)
	printf("\n ... or 29 if it is a leap year\n");

	return 0; 
}

Что такое перечисление (enum) в контексте языка С?

При каких значениях переменной error в результате выполнения приведенной программы на экран будет выведено сообщение Возникла ошибка чтения (ERR_READ)?

int main(void)
{
	typedef enum { ERR_READ, ERR_WRITE, ERR_CONVERT} Err;
	Err error;

	switch (error) {
		case ERR_READ:
			printf("Возникла ошибка чтения (ERR_READ)\n");
			break;
		case ERR_WRITE:
			printf("Возникла ошибка записи (ERR_WRITE)\n");
			break;
		case ERR_CONVERT:
			printf("Возникла ошибка преобразования (ERR_CONVERT)\n");
			break;
		default:
			printf("Возникла неизвестная ошибка\n");
			break;
	};
	
	return 0;
}

Что будет выведено на экран в результате выполнения приведенной программы?

int main(void)
{
	union pw {
	  int i;
	  double d;
	  char ch[2];
	} pw = {121};
	
	printf("pw.ch = %s", pw.ch);
	
	return 0;
}

Какие утверждения являются неверными для приведенной программы?

#define MAX 20

double sum(double, double);

int main (void) {

	struct test {
		char A[MAX+1]; 
		double ax; 
		char B[MAX+1]; 
		double by;
	};
	struct test AB;
	
	printf("\nEnter 1st name: ");
	gets_s(AB.A, MAX);
	printf("\nEnter the first real number: ");
	scanf_s("%lf", &AB.ax);
	_flushall();
	printf("\nEnter 2nd name: ");
	gets_s(AB.B, MAX);
	printf("\nEnter the second real number: ");
	scanf_s("%lf", &AB.by);

	printf("\n\nThe sum of two numbers %1.2f and %1.2f, %s and %s: %1.2f\n",
			AB.ax, AB.by, AB.A, AB.B, sum(AB.ax, AB.by)); 

	return 0; 
}

double sum(double x, double y) 
{
	return (x + y);
}

В приведенной программе функция Copy выполняет копирование одной структуры типа sale в другую и возвращает структуру этого же типа:

typedef struct sale_struct {
	char *title;
	int price;
} sale;

sale Copy(sale);

int main(void)
{
	sale s1,s2;
	struct sale_struct s3, s4;

	s1.title = "Book";
	s1.price = 200;

	s3.title = "Cake";
	s3.price = 60;

	return 0;
}

sale Copy(sale s) {
	sale s1;
	s1 = s;
	return s1;
}

Какие из перечисленных вызов функции Copy являются неверными?


Какое утверждение является верным?

Приведенный фрагмент кода должен запрашивать пароль не более трех раз:

	char s[5], psw[] = "password";
	int i, k= 0;

	for (i=0; !k && i<3; i++) {
		printf("Введите пароль: \n"),
		gets(s);
		if (strcmp(s, psw)) k = 1;
	}
	
	if (k) printf("Добро пожаловать! TRUE");
	else printf("Ошибка: Неверный пароль! FALSE");

Проверьте правильность этого кода для выполнения поставленной задачи и определите, сколько раз будет выполнен цикл for, если пользователь не знает верного пароля?


Что будет выведено на экран в результате выполнения приведенной программы?

struct student {
	char fio[30];
	int group;
	float average;
};

struct student Init(char*, int, float);
void Print(struct student*);

int main(void)
{
	struct student s1, s2, s3, *st;
	int i;

	s1 = Init("Ivanov I.", 3801, 5.00);
	s2 = Init(s1.fio, 4209, 4.50);
	s3 = Init("Petrov P", s1.group, s2.average);
	st = &s3;
	Print(st);

	return 0;
}

struct student Init(char* n, int i, float f)
{
	struct student s, *st;
	st = &s;
	strcpy(st->fio, n);
	st->group = i;
	st->average = f;

	return s;
}

void Print(struct student *st)
{
	printf("\nName: %s", st->fio);
	printf("\nGrouproup: %d", st->group);
	printf("\nAverage mark: %.2f\n", st->average);
}

Каким образом выполняется передача функции члена структуры?

Функция f1() выводит на экран переданное ей значение. Каким образом должна быть описана данная функция для корректного выполнения приведенной программы?

struct struct_type {
	int a, b;
	char ch;
} ;

int main(void)
{
	struct struct_type arg;

	arg.a = 1000;
	f1(arg);

	return 0;
}

Задана программа, в которой реализовано три функции: Init — функция инициализации структуры, Print — функция вывода структуры на экран, Modify — функция изменения полей структуры:

typedef struct {
	char fio[30];
	char phone[20];
	int age;
} note;

note Init(char*, char*, int);
void Print(note*);
void Modify(note);

int main(void)
{
	note n[3], *pn;
	char *strName[3] = {"Ivanov I.", "Pertov P.", "Sidorov S."};
	char *strPhone[3] = {"12-34-56", "78-90-12", "34-56-78"};
	int i, age = 25;

	for (i=0; i<3; i++) {
		n[i] = Init(strName[i], strPhone[i], age+i);
		pn = &n[i];
		Print(pn);
	}

	Modify(n[0]);
	pn = &n[0];
	Print(pn);

	return 0;
}

note Init(char* f, char* p, int a)
{
	note n, *pn;
	pn = &n;
	strcpy(pn->fio, f);
	strcpy(pn->phone, p);
	pn->age = a;

	return n;
}

void Print(note *pn)
{
	printf("\nName: %s", pn->fio);
	printf("\nPhone: %s", pn->phone);
	printf("\nAge: %d\n", pn->age);
}

void Modify(note n) {
	strcpy(n.fio, "Vasiliev V.");
	strcpy(n.phone, "89-01-23");
	n.age = 30;
}

Какие функции соответсвуют поставленной задаче?


Необходимо написать функцию копирования значений всех полей одной структуры заданного типа в другую:

typedef struct sale_struct {
	char *title;
	int price;
} sale;

Какая функция не выполняет поставленную задачу?


Какие утверждения являются неверными?

Какая программа содержит ошибку?

Какая программа не содержит ошибок?

Чему будут равны значения полей структурной переменной s после выполнения приведенной программы?

typedef struct {
	char fio[30];
	int group;
	float average;
} student;

void Init(student*);

int main(void)
{
	student s, *st;
	int i;

	st = &s;
	Init(st);
	
	return 0;
}

void Init(student *st)
{
	printf("\nEnter name: ");
	scanf("%s", st->fio);
	printf("\nEnter group: ");
	scanf("%d", &st->group);
	printf("\nEnter average mark: ");
	scanf("%f", &st->average);
}

Задана программа, в которой реализовано три функции: Init — функция инициализации структуры, Print — функция вывода структуры на экран, Modify — функция изменения полей структуры:

typedef struct {
	char fio[30];
	char phone[20];
	int age;
} note;

note Init(char*, char*, int);
void Print(note*);
void Modify(note);

int main(void)
{
	note n[3], *pn;
	char *strName[3] = {"Ivanov I.", "Pertov P.", "Sidorov S."};
	char *strPhone[3] = {"12-34-56", "78-90-12", "34-56-78"};
	int i, age = 25;

	for (i=0; i<3; i++) {
		n[i] = Init(strName[i], strPhone[i], age+i);
		pn = &n[i];
		Print(pn);
	}

	Modify(n[0]);
	pn = &n[0];
	Print(pn);

	return 0;
}

note Init(char* f, char* p, int a)
{
	note n, *pn;
	pn = &n;
	strcpy(pn->fio, f);
	strcpy(pn->phone, p);
	pn->age = a;

	return n;
}

void Print(note *pn)
{
	printf("\nName: %s", pn->fio);
	printf("\nPhone: %s", pn->phone);
	printf("\nAge: %d\n", pn->age);
}

void Modify(note n) {
	strcpy(n.fio, "Vasiliev V.");
	strcpy(n.phone, "89-01-23");
	n.age = 30;
}

Какая функция не соответсвует поставленной задаче?


Необходимо написать функцию копирования значений всех полей одной структуры заданного типа в другую:

typedef struct sale_struct {
	char *title;
	int price;
} sale;

Для выполнения поставленной задачи была создана функция:

sale Copy(char* t, int p) {
	sale s1;
	s1.title = t;
	s1.price = p;
	return s1;
}

Какие утверждения являются верными?


Содержит ли приведенная программа ошибки? Если содержит, укажите, какие?

struct struct_type {
  int a, b;
  char ch;
} ;

struct struct_type2 {
  int a, b;
  char ch;
} ;

void f1(struct struct_type2 parm);

int main(void)
{
  struct struct_type arg;

  arg.a = 1000;
  f1(arg); 

  return 0;
}

void f1(struct struct_type2 parm)
{
  printf("%d", parm.a);
}

Функция f1() выводит на экран переданное ей значение. Каким образом должна быть описана данная функция для корректного выполнения приведенной программы?

struct struct_type {
	int a, b;
	char ch;
} ;

int main(void)
{
	struct struct_type arg;

	arg.a = 1000;
	f1(&arg);

	return 0;
}

Необходимо написать программу, в которой будут три функции: Init — функция инициализации структуры, Print — функция вывода структуры на экран, Modify — функция изменения полей структуры. Определите, удовлетворяет ли приведенная программа поставленной задаче? Если не удовлетворяет, укажите, почему?

typedef struct {
	char fio[30];
	char phone[20];
	int age;
} note;

note Init(char*, char*, int);
void Print(note*);
void Modify(note);

int main(void)
{
	note n[3], *pn;
	char *strName[3] = {"Ivanov I.", "Pertov P.", "Sidorov S."};
	char *strPhone[3] = {"12-34-56", "78-90-12", "34-56-78"};
	int i, age = 25;

	for (i=0; i<3; i++) {
		n[i] = Init(strName[i], strPhone[i], age+i);
		pn = &n[i];
		Print(pn);
	}

	Modify(n[0]);
	pn = &n[0];
	Print(pn);

	return 0;
}

note Init(char* f, char* p, int a)
{
	note n, *pn;
	pn = &n;
	strcpy(pn->fio, f);
	strcpy(pn->phone, p);
	pn->age = a;

	return n;
}

void Print(note *pn)
{
	printf("\nName: %s", pn->fio);
	printf("\nPhone: %s", pn->phone);
	printf("\nAge: %d\n", pn->age);
}

void Modify(note n) {
	strcpy(n.fio, "Vasiliev V.");
	strcpy(n.phone, "89-01-23");
	n.age = 30;
}

Каким образом должна быть объявлена функция Init для корректной работы приведенной программы?

struct student {
	char fio[30];
	int group;
	float average;
};

<Прототи функции Init>
void Print(struct student*);

int main(void)
{
	struct student s, *st;
	int i;

	s = Init("Ivanov I.", 3801, 5.00);
	st = &s;
	Print(st);

	return 0;
}

struct student Init(char* n, int i, float f)
{
	struct student s, *st;
	st = &s;
	strcpy(st->fio, n);
	st->group = i;
	st->average = f;

	return s;
}

void Print(struct student *st)
{
	printf("\nName: %s", st->fio);
	printf("\nGrouproup: %d", st->group);
	printf("\nAverage mark: %.2f\n", st->average);
}

В каком случае в функцию fun() передается указатель на структуру?

В какой программе в качестве параметра используется структура?

Определите, содержит ли приведенная программа ошибки? Если содержит, укажите, какие именно?

#define MAX 20

double sum(double, double);

int main (void) {

	struct test {
		char A[MAX+1]; 
		double ax; 
		char B[MAX+1]; 
		double by;
	};
	struct test AB;
	
	printf("\nEnter 1st name: ");
	gets_s(AB.A, MAX);
	printf("\nEnter the first real number: ");
	scanf_s("%lf", &AB.ax);
	_flushall();
	printf("\nEnter 2nd name: ");
	gets_s(AB.B, MAX);
	printf("\nEnter the second real number: ");
	scanf_s("%lf", &AB.by);

	printf("\n\nThe sum of two numbers %1.2f and %1.2f, %s and %s: %1.2f\n",
			AB.ax, AB.by, AB.A, AB.B, sum(ax, by)); 

	return 0; 
}

double sum(double x, double y) 
{
	return (x + y);
}

Функция f1() выводит на экран переданное ей значение. Каким образом должна быть описана данная функция для корректного выполнения приведенной программы?

typedef struct {
	int a, b;
	char ch;
} struct_type;

int main(void)
{
	struct_type arg;

	arg.a = 1000;
	f1(&arg);

	return 0;
}

Какие из перечисленных операций разрешено выполнять над структурами?

Что необходимо сделать для того, чтобы исправить содержащуюся в программе ошибку?

void Init(struct student*);
void Print(struct student*);

int main(void)
{
	struct student {
		char fio[30];
		int group;
		float average;
	};

	struct student s, *st;
	int i;

	st = &s;
	Init(st);
	Print(st);

	return 0;
}

void Init(struct student *st)
{
	printf("\nEnter name: ");
	scanf("%s", st->fio);
	printf("\nEnter group: ");
	scanf("%d", &st->group);
	printf("\nEnter average mark: ");
	scanf("%f", &st->average);
}

void Print(struct student *st)
{
	printf("\nName: %s", st.fio);
	printf("\nGrouproup: %d", st.group);
	printf("\nAverage mark: %.2f", st.average);
}

Какую ошибку содержит приведенная программа?

void Init(struct student*);
void Print(struct student*);

int main(void)
{
	struct student {
		char fio[30];
		int group;
		float average;
	};

	struct student s, *st;
	int i;

	st = &s;
	Init(st);
	Print(st);

	return 0;
}

void Init(struct student *st)
{
	printf("\nEnter name: ");
	scanf("%s", st->fio);
	printf("\nEnter group: ");
	scanf("%d", &st->group);
	printf("\nEnter average mark: ");
	scanf("%f", &st->average);
}

void Print(struct student *st)
{
	printf("\nName: %s", st->fio);
	printf("\nGrouproup: %d", st->group);
	printf("\nAverage mark: %.2f", st->average);
}

Используя таблицу кодов ASCII, определите, что будет выведено на экран в результате выполнения приведенной программы?

#include <stdio.h>
#define N 7

int main()
{	
	int i, j, k, buf;
	char arr[N] = "Lection";

	for (i=0; i<N; i++)
		for (j=0; j<N-1; j++)
		{
			if (arr[j] > arr[j+1])
			{
				buf = arr[j];
				arr[j] = arr[j+1];
				arr[j+1] = buf;
			}
		};

	for (k=0; k<N; k++)
		printf("%c ", arr[k]);

	return 0;		
}

Что делает приведенная программа?

#include <stdio.h>
#include <conio.h>

int main()
{	
	int n=0, i=0, j=0;
	char ch, str[30]="";

	printf("Введите строку: ");
	scanf("%s", str);
	printf("Введите символ: ");
	ch = _getche();

	for(i=0; i<strlen(str); i++)
	{
		for (j=0; j<strlen(str); j++) {
			if(str[j]==str[i]) n++;
		}
		printf("\n%c - %d", str[i], n);
		n = 0;
	}

	printf("\n");

	return 0;		
}

Какое из перечисленных шестнадцатиричных чисел является наименьшим?

Сколько возможных значений может принимать бит?

Чему будет равно значение переменной b в результате выполнения приведенной программы?

int main(void)
{
	struct Options {
		unsigned int  centerX : 1;
		unsigned int centerY : 1;
		unsigned int shadow : 2;
		unsigned int palette : 4;
	};
	
	int b;
	struct Options t, *pt;

	t.shadow = 10;
	t.palette = 12;
	b = t.shadow + t.palette;

	printf("b = %d\n", b);

	return 0;
}	

Чему будет равно значение переменной t.a после выполнения приведенной программы?

int main(void)
{
	struct test {
		unsigned int a : 2;
		unsigned int b : 8;
	};
	
	int c;
	struct test t;

	t.b = 255;
	t.a = t.b & 3;

	printf("t.a = %d\n", t.a);

	return 0;
}	

Сколько возможных значений может принимать байт?

Каковы недостатки использования битовых полей?

Определите, что делает приведенная программа?

void printBits(unsigned int var);

int main (void) 
{
	unsigned int number1, number2;

	printf("\n The program on demonstration digit-by-digit operator OR ( | ):\n");

	printf("\n\t Enter the unsigned number of N1: ");
	scanf_s("%u", &number1);
	printf("\t Enter the unsigned number of N2: ");
	scanf_s("%u", &number2);

	printf("\n\t Binary representation of the number of N1 (%u) and\n", number1);
	printf("\t Binary representation of the number of N2 (%u):\n", number2);
	printBits(number1);
	printBits(number2);

	printBits(number1 | number2); 

	printf("\n\n Press any key: ");
	_getch();
	return 0;
}

void printBits(unsigned int var) {
	unsigned int b;
	unsigned int num = 1 << 31; 
	printf("\n\t %10u = ", var);
	for (b = 1; b <= 32; ++b) {
		printf("%c", var & num ? '1' : '0');
		var <<= 1; 
		if (b % 8 == 0)
			putchar(' ');
	} 
} 

Значения каких переменных будут четными?

	a = 6 & 5;
	b = 6 | 5;
	c = 6 ^ 5;

Какое из перечисленных шестнадцатиричных чисел является наибольшим?

Определите, содержит ли приведенная программа ошибки? Если содержит, укажите, какие именно?

int main(void)
{
	struct test {
		unsigned int  : 3;
		unsigned int f1 : 1;
		unsigned int f2 : 1;
		unsigned int f3 : 1;
		unsigned int type : 8;
		unsigned int index : 18;
	};
	
	int a : 4, b;
	struct test t;

	t.type = 3439;
	b = a + t.type;

	//printf("t.type = %d\n", t.type);

	return 0;
}		

Чему будет равно шестнадцатиричное число D6F в десятичной системе счисления?

Определите, содержит ли приведенная программа ошибки? Если содержит, укажите, какие именно?

int main(void)
{
	struct test {
		unsigned int  : 3;
		unsigned int f1 : 1;
		unsigned int f2 : 1;
		unsigned int f3 : 1;
		unsigned int type : 8;
		unsigned int index : 18;
	};
	
	int b;
	struct test t, *pt;

	pt = &t;
	pt->f1 = 11;
	t.type = 3439;
	b = t.f1 + t.type;

	printf("b = %d\n", b);

	return 0;
}

Чему будет равно значение переменной b в результате выполнения приведенной программы?

int main(void)
{
	struct Options {
		unsigned int  centerX : 1;
		unsigned int centerY : 1;
		unsigned int shadow : 2;
		unsigned int palette : 4;
	};
	
	int b;
	struct Options t, *pt;

	t.shadow = 12;
	t.palette = 10;
	b = t.shadow + t.palette;

	printf("b = %d\n", b);

	return 0;
}	

Чему будет равно значение переменной c после выполнения приведенной программы?

int main(void)
{
	struct test {
		unsigned int a : 2;
		unsigned int b : 8;
	};
	
	int c;
	struct test t;

	t.b = 255;
	t.a = 3;
	c = t.b ^ t.a;

	printf("c = %d\n", c);

	return 0;
}	

Какое действие выполняет приведенная программа?

int main(void)
{	
	int date;
	int year = 26;
	int month = 12;
	int day = 31;
	
	year = year << 9;
	month = month << 5;
	date = day;
	date = date | month;
	date = date | year;
	
	return 0;
}	

Какие утверждения являются неверными?

В каком случае выполняется операция побитового включющего ИЛИ (|)?

Значение какой переменной будет наибольшим?

	a = 6 & 5;
	b = 6 | 5;
	c = 6 ^ 5;

Чему будет равно значение переменной b в результате выполнения приведенной программы?

int main(void)
{
	struct Options {
		unsigned int  centerX : 1;
		unsigned int centerY : 1;
		unsigned int shadow : 2;
		unsigned int palette : 4;
	};
	
	int b;
	struct Options t, *pt;

	t.shadow = 10;
	t.palette = 10;
	b = t.shadow + t.palette;

	printf("b = %d\n", b);

	return 0;
}	

Чему будет равно значение переменной d в результате выполнения приведенного фрагмента кода?

	
	int d;
	int a = 10;
	int b = 15;
	
	a >>= 1;
	b <<= 1;
	d = a + b;

В каком случае выполняется операция побитового исключающего ИЛИ (^)?

Каким образом нумерются разряды байта?

Какие значения может принимать байт?

Каково преимущество использования битовых полей?

При какой продолжительности хранения память распределяется в начале выполнения программы и остается занятой на протяжении всего выполнения?

Какие статические переменные будут не видны в функции main()?

int f();
static int d = 5, e = 8;

int main(void)
{
	int n = 1, m = 1;
	int s;
	s = f();	
	return 0;
}

int f()
{
	int p;
	static int c = 0;
	p = c;
	printf("d = %d",d);
	return p;
}

Какой спецификатор используется для создания переменных, значение которых сохраняется в регистре центрального процессора, а не в памяти?

При какой продолжительности хранения память под переменную выделяется в момент, когда выполнение программы входит в блок, в котором эта переменная определена, и освобождается, когда выполнение программы покидает этот блок?

Как можно решить проблему невидимости переменных a и b в функции main() для приведенного фрагмента кода?

int main (void) 
{	
	printf("a = %d; b = %d\n", a, b);
	printf("Press any key: ");
	_getch();
	return 0;  
}

int a = 33, b = 34;

Какой период хранения имеют локальные переменные функции без явно определенного спецификатора?

Что обозначает подключение #include «..\some.h»?

Файл second.h, расположенный на диске D:, содержит следующие описания переменных и функций:

extern int x, y;
extern char ch;

void func22(void)
{
	y = 100;
}

void func23(void)
{
	x = y/10;
	ch = 'R';
}

В каком случае подключение файла second.h в другом файле выполняется верно?


Каким образом выделяется память при статической продолжительности хранения?

Чему будет равно значение переменной s после выполнения приведенного фрагмента кода?

int test();
int a = 1;

int main (void) 
{
	int b, s;
	extern int x;
	static int c;
	int a;
	a = 2;
	s = test();

	return 0;  
}

int test() 
{
	int t = a;
	return t;
}

Какая ошибка содержится в приведеном фрагменте кода?

int min(int, int);
int t;

int main(void)
{
	register int x=-5, y=5, m;
	int *p;
	p = &x;
	m = min(x,y);
	printf("min = %d\n", m);
	
	return 0;
}

int min(register int a, register int b)
{
	int m = (a<b) ? a : b;
	return m;
}

Для чего используется класс статической памяти?

Для какой локальной переменной, заданной в приведенном фрагменте кода, память выделяется при входе в блок и освобождается при выходе из него?

int test();
int a = 1;

int main (void) 
{
	int b, s;
	extern int x;
	static int c;
	s = test();

	return 0;  
}

int test() 
{
	int t = a;
	return t;
}

int x = 4;

Что обозначает подключение #include «..\..\some.h»?

Файл second.h, расположенный на диске D:, содержит следующие описания переменных и функций:

extern int x, y;
extern char ch;

void func22(void)
{
	y = 100;
}

void func23(void)
{
	x = y/10;
	ch = 'R';
}

Каким образом файл second.h должен быть подключен для возможности использования описанных в нем переменных и функций в другом файле?


В каком случае переменная может быть использована в файле, содержащем ее определение?

В каком случае переменная может быть использована в других файлах?

Какой спецификатор используется для создания переменных, доступных во всех модулях программы, в которых они объявлены?

Какое утверждение является верным?

Какое связывание имеет переменная с областью видимости в пределах блока?

Какая локальная переменная, заданная в приведенном фрагменте кода, располагается в сегменте данных и существует все время, пока работает программа?

int test();
int a = 1;

int main (void) 
{
	int b, s;
	extern int x;
	static int c;
	s = test();

	return 0;  
}

int test() 
{
	int t = a;
	return t;
}

int x = 4;

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

Какие утверждения являются неверными?

Какие статические переменные будут видны в функции f()?

int f();
static int d = 5, e = 8;

int main(void)
{
	int n = 1, m = 1;
	int s;
	s = f();	
	return 0;
}

int f()
{
	int p;
	static int c = 0;
	p = c;
	printf("d = %d",d);
	return p;
}

Для каких переменных не допускается применение спецификатора register?

int min(int, int);
int t;

int main(void)
{
	int x=-5, y=5, m;
	m = min(x,y);
	printf("min = %d\n", m);
	
	return 0;
}

int min(int a, int b)
{
	int m = (a<b) ? a : b;
	return m;
}

В каком случае переменные a и b будут невидны в функции main()?

Чему будут равны значения переменных a, b и c после выполнения приведенного фрагмента кода?

	char a='A', b='B', c='C';
	char *pc1, *pc2;
	pc1 = &c;
	pc2 = pc1;
	c = b;
	*pc2 = a;

В каком случае переменные a и b видны в функции main()?

В каких функциях видна переменная t?

int c = 9;

int sum(int a, int b)
{
	return a+b;
}

int t = 8;

int main(void)
{
	int n=4, m=3, s1, s2;
	s1 = sum(n,m);
	s2 = mul(n,m);
	return 0;
}

int mul(int a, int b)
{
	return a*b;
}

Приведенная программа должна определять, является ли заданная строка палиндромом (палиндром — это слово, которое читается одинаково слева направо и справа налево). В программе выполняется просмотр строки одновременно слева направо и справа налево и сравнение соответствующих символов. Если в какой-то момент символы не совпадают, делается вывод о том, что строка не является палиндромом, если же удается достичь середины строки и при этом все соответствующие символы совпали, то строка является палиндромом:

char s[100];
int pal(char s[100]);

int main()
{ 
	printf("\nВведите строку: "); 
	gets(s);
	if (pal(s)) printf("Строка является палиндромом");
	else  printf("Строка не является палиндромом");
	return 0;
}

int pal(char s[100])
{ 
	int l; char s1[100];
	
	if (strlen(s) = 1) return 1;
	else {
		l=s[0]==s[strlen(s)-1];
		strncpy(s1, s+1, strlen(s)-2);
		s1[strlen(s)-2]='\0';
		return l&&pal(s1);
	}
}

Выполняет ли программа поставленную задачу?


Задана функция вычисления факториала:

long fact(long n) 
{
	if (n==0 || n==1) return 1;
	return (n * fact(n-1));
}

Какое утверждение является верным?


В функции main выполняется вызов рекурсивной функции fact(): long result=fact(3). Вызовы функции выполняются в приведенной последовательности: Каким образом должна выглядеть функция fact()?

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

#define N 8

void step(int, int, int);

	int map[N][N];	// карта: map[i,j]!=0, если точки i и j соединены
	int road[N];	// маршрут - номера точек карты
	int incl[N];	// incl[i]==1, если точка с номером i включена в road
	int start;	// начальная точка маршрута 
	int finish;	// конечная точка маршрута
	int i, j;

int main (void) {

	// инициализация массивов
	for (i=1; i<=N; i++) road[i] = 0;
	for (i=1; i<=N; i++) incl[i] = 0;
	for (i=1; i<=N; i++) 
		for (j=1; j<=N; j++) map[i][j] = 0;

	// ввод значений элементов карты
	map[1][2] = 1; map[2][1] = 1; 
	map[1][3] = 1; map[3][1] = 1;
	map[1][4] = 1; map[4][1] = 1;
	map[3][4] = 1; map[4][3] = 1;
	map[3][7] = 1; map[7][3] = 1;
	map[4][6] = 1; map[6][4] = 1;
	map[5][6] = 1; map[6][5] = 1;
	map[5][7] = 1; map[7][5] = 1;
	map[6][7] = 1; map[7][6] = 1;

	printf("Введите через пробел номер начальной и конечной точек: ");
	scanf("%d %d", &start, &finish);
	road[1] = start;	// внести точку в маршрут
	incl[1] = 1;		// пометить точку как включенную

	step(start, finish, 2);
	return 0;
}

void step(int s, int f, int p) {
	int c;				// номер точки, в которую делается очередной шаг
	int i;
	
	if (s==f) {
		printf("Путь: ");
		for (i=1; i<=p-1; i++) printf("%d ", road[i]);
		printf("\n");
	}
	else {
		// выбор очередной точки
		for (c=1; c<=N; c++)
			// проверка всех вершин
			if (map[s][c]!=0 && incl[c]==0) {
				// точка соединена с текущей и не включена в маршрут
				<Рекурсивный вызов - вариант 1>
				road[p] = c;		// добавление вершины в путь
				incl[c] = 1;		// пометка вершины как включенной
				<Рекурсивный вызов - вариант 2>
				incl[c] = 0;
				road[p] = 0;
				<Рекурсивный вызов - вариант 3>
			}
	}
}

В каком из отмеченных мест программы необходимо выполнить рекурсивный вызов функции step(c, f, p+1);?


Что произойдет при выполнении программы?

int summa(int N, int a[6]);

int main()
{
	int i,n;
	int a[6] = {8, 65, 10, 2, 4, 1};
	n = sizeof(a)/sizeof(a[0]);
	printf("Сумма: %d", summa(n-1, a));
}

int summa(int N, int a[6])
{
	return a[N]+summa(N-1, a);
}

Задана функция вычисления факториала:

long fact (int n){
    if ( n<1 ) return 1;
    else return n*fact(n-1);
} 

Какой будет последовательность вызов, если в функции main задать long result=fact(3)?


Какое достоинство имеет использование рекурсии?

Что такое базовый уровень рекурсии?

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

#define N 8

void step(int, int, int);

	int map[N][N];	// карта: map[i,j]!=0, если точки i и j соединены
	int road[N];	// маршрут - номера точек карты
	int incl[N];	// incl[i]==1, если точка с номером i включена в road
	int start;	// начальная точка маршрута 
	int finish;	// конечная точка маршрута
	int i, j;

int main (void) {
	// инициализация массивов
	for (i=0; i<N; i++) road[i] = 0;
	for (i=0; i<N; i++) incl[i] = 0;
	for (i=0; i<N; i++) 
		for (j=0; j<N; j++) map[i][j] = 0;

	// ввод значений элементов карты
	map[1][2] = 1; map[2][1] = 1; 
	map[1][3] = 1; map[3][1] = 1;
	map[1][4] = 1; map[4][1] = 1;
	map[3][4] = 1; map[4][3] = 1;
	map[3][7] = 1; map[7][3] = 1;
	map[4][6] = 1; map[6][4] = 1;
	map[5][6] = 1; map[6][5] = 1;
	map[5][7] = 1; map[7][5] = 1;
	map[6][7] = 1; map[7][6] = 1;

	printf("Введите через пробел номер начальной и конечной точек: ");
	scanf("%d %d", &start, &finish);
	road[1] = start;	// внести точку в маршрут
	incl[1] = 1;		// пометить точку как включенную

	step(start, finish, 2);
	return 0;
}

void step(int s, int f, int p) {
	int c;				// номер точки, в которую делается очередной шаг
	int i;
	
	if (s==f) {
		printf("Путь: ");
		for (i=1; i<=p-1; i++) printf("%d ", road[i]);
		printf("\n");
	}
	else {
		// выбор очередной точки
		for (c=1; c<=N; c++)
			// проверка всех вершин
			if (map[s][c]!=0 && incl[c]==0) {
				// точка соединена с текущей и не включена в маршрут
				road[p] = c;		// добавление вершины в путь
				incl[c] = 1;		// пометка вершины как включенной
				step(c, f, p+1);
				incl[c] = 0;
				road[p] = 0;
			}
	}
}

Какие утверждения являются неверными для приведенной программы?


Какое утверждение являотся верным?

В каком случае вычисление факториала выполняется с помощью рекурсивной функции?

Что такое текущий уровень рекурсии?

В какой программе используется прямая рекурсия?

Какая рекурсия называется прямой?

В каком случае для вычисления факториала не используется рекурсия?

Что такое глубина рекурсии?

В арифметической прогрессии каждый следующий член равен предыдущему, увеличенному на разность прогрессии: a{i} = a{i-1} + d. Приведенная программа содержит рекурсивную функцию для вычисления заданного члена арифметической прогрессии:

int Sum(int x, int step, int n)
{ 
        if (n==1) return(x);
        else return(Sum(x, step, n-1)+step);
}

int main()
{ 
        int x, s, n;
		int pr;
		printf("Введите первый член, число элементов и разность прогрессии:");
		scanf("%d %d %d", &x, &n, &s);
        <Вызов функции sum()>
		printf("pr = %d", pr);
		return 0;
} 

Пользователь вводит данные для вычисления через пробел в следующей последовательности: первый член арифметической прогрессии, разность прогрессии, количестов элементов. В какой последовательности эти параметры должны быть заданы при вызове рекурсивной функии sum()?


При использовании какого метода обращения к элементам массива производительность будет выше?

В какой программе используется косвенная рекурсия?

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

#define N 7

void step(int, int, int);

	int map[N][N];	// карта: map[i,j]!=0, если точки i и j соединены
	int road[N];	// маршрут - номера точек карты
	int incl[N];	// incl[i]==1, если точка с номером i включена в road
	int start;	// начальная точка маршрута 
	int finish;	// конечная точка маршрута
	int i, j;

int main (void) {
	// инициализация массивов
	for (i=0; i<N; i++) road[i] = 0;
	for (i=0; i<N; i++) incl[i] = 0;
	for (i=0; i<N; i++) 
		for (j=0; j<N; j++) map[i][j] = 0;

	// ввод значений элементов карты
	map[0][1] = 1; map[1][0] = 1; 
	map[0][2] = 1; map[2][0] = 1;
	map[0][3] = 1; map[3][0] = 1;
	map[2][3] = 1; map[3][2] = 1;
	map[2][6] = 1; map[6][2] = 1;
	map[3][5] = 1; map[5][3] = 1;
	map[4][5] = 1; map[5][4] = 1;
	map[4][6] = 1; map[6][4] = 1;
	map[5][6] = 1; map[6][5] = 1;

	printf("Введите через пробел номер начальной и конечной точек: ");
	scanf("%d %d", &start, &finish);
	road[0] = start;	// внести точку в маршрут
	incl[0] = 1;		// пометить точку как включенную

	step(start, finish, 2);
	return 0;
}

void step(int s, int f, int p) {
	int c;				// номер точки, в которую делается очередной шаг
	int i;
	
	if (s==f) {
		printf("Путь: ");
		for (i=0; i<p-1; i++) printf("%d ", road[i]);
		printf("\n");
	}
	else {
		// выбор очередной точки
		for (c=0; c<N; c++)
			// проверка всех вершин
			if (map[s][c]!=0 && incl[c]==0) {
				// точка соединена с текущей и не включена в маршрут
				road[p] = c;		// добавление вершины в путь
				incl[c] = 1;		// пометка вершины как включенной
				step(c, f, p+1);
				incl[c] = 0;
				road[p] = 0;
			}
	}
}

Что произойдет при выполнении программы?

int summa(int N, int a[6]);

int main()
{
	int i,n;
	int a[6] = {8, 65, 10, 2, 4, 1};
	n = sizeof(a)/sizeof(a[0]);
	printf("Сумма: %d", summa(n-1, a));
}

int summa(int N, int a[6])
{
	if (N==0) return a[0]; 
	else return a[N]+summa(N-1, a);
}

Задана функция вычисления факториала:

long fact(long n) 
{
	return (n>1) ? n * fact(n-1) : 1;
}

Какое утверждение является неверным?


Какая программа верно вычисляет сумму элементов массива с помощью рекурсии?

Какие утверждения являются неверными?

Задана функция вычисления факториала:

long fact (int n){
    if ( n<1 ) return 1;
    else return n*fact(n-1);
} 

Какая последовательность вызовов будет неверной, если в функции main задать long result=fact(3)?


В арифметической прогрессии каждый следующий член равен предыдущему, увеличенному на разность прогрессии: a{i} = a{i-1} + d. Приведенная программа содержит рекурсивную функцию для вычисления заданного члена арифметической прогрессии:

int Sum(int x, int step, int n)
{ 
        if (n==1) return(x);
        else return(Sum(x, step, n-1)+step);
}

int main()
{ 
        int x, s, n;
		int pr;
		printf("Введите первый член, число элементов и разность прогрессии:");
		scanf("%d %d %d", &x, &n, &s);
        <Вызов функции sum()>
		printf("pr = %d", pr);
		return 0;
} 

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


В каком случае директива #define определяет символы, управляющие условной компиляцией?

В каком случае на экран будут выведены сочетания имен и фамилий, заданных в файле arr.h?
Содержание файла arr.h:

char *names[] = {"Иван", "Пётр", "Илья"};
char *surnames[] = {"Иванов", "Пётров", "Ильин"};

Почему при использовании макросов с формальными параметрами увеличивается скорость выполнения кода?

Каким образом должен быть задан макрос MAX, чтобы приведенная программа корректно работала?

int main()
{ 
    char a, b;
	printf("Введите два символа (через пробел): ");
	scanf("%c %c", &a, &b);
	printf("Наибольшим числом является %c", MAX(a, b));
	return 0;
} 

Что произойдет при выполнении приведенной программы:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <locale.h>

#ifndef ARR
	#define ARR
	#include <arr.txt>
#endif

int main (void)  {
	int i = 0 , j = 0, n;
	
	setlocale (LC_ALL, "rus");
	printf("Введите количество человек (от 1 до 3): ");
	scanf("%d", &n);
    
	if (n<1 || n>3) {
		printf("Ошибка ввода данных. Нажмите любую клавишу: ");
		_getch();
		exit(1);
	}

	#ifdef ARR
		for (i=0; i<n; i++)
			printf("%d. %s %s\n", i+1, names[i], surnames[i]);
	#endif

	return 0;
}

Содержание подключаемого файла arr.txt:

char *names[] = {"Иван", "Пётр", "Илья"};
char *surnames[] = {"Иванов", "Пётров", "Ильин"};

В каком случае сочетания имен и фамилий, заданных в файле arr.h, не будут выведены на экран?
Содержание файла arr.h:

char *names[] = {"Иван", "Пётр", "Илья"};
char *surnames[] = {"Иванов", "Пётров", "Ильин"};

Засчет чего достигается увеличение скорости выполнения кода при использовании макроса с формальными параметрами очень большого размера?

Необходимо написать программу, которая определяет и выводит на экран время года по дате рождения, заданной пользователем. Какую ошибку содержит приведенный фрагмент кода?

	int m;
	char month[3], s[8] = "";
	char *season[] = {
		"winter",
		"spring",
		"summer",
		"autumn"
	};

	printf("Enter day of your birthday (MM.DD): ");
	scanf("%[^.]s", month);

	m = atoi(month);

	if ((m==12) || (m<3)) strcpy(s, season[0]);
	else
		if ((m>2) && (m<6)) strcpy(s, season[1]);
		else
			if ((m>6) && (m<9)) strcpy(s, season[2]);
			else strcpy(s, season[3]);

	printf("Your birthday is in %s\n", s);

Какое влияние на скорость выполнения кода оказывает использование макросов с формальными параметрами?

Чему будет равно значение переменной x в результате выполнения приведенной программы?

#include <stdio.h> 
#define	SQR(x)	(x*x)

int main()
{ 
	int x, y=2;
	x = SQR(y+1);
	printf("x = %d", x);
	return 0;
} 

Приведенная программа выводит на экран сочетания имён и фамилий, которые хранятся в подключаемом файле arr.txt:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <locale.h>

#ifndef ARR
	#define ARR
	#include "..\arr.txt"
#endif

int main (void)  {
	int i = 0 , j = 0, n;
	
	setlocale (LC_ALL, "rus");
	printf("Введите количество человек (от 1 до 3): ");
	scanf("%d", &n);
    
	if (n<1 || n>3) {
		printf("Ошибка ввода данных. Нажмите любую клавишу: ");
		_getch();
		exit(1);
	}

	#ifdef ARR
		for (i=0; i<n; i++)
			printf("%d. %s %s\n", i+1, names[i], surnames[i]);
	#endif

	return 0;
}

Содержание файла arr.txt:

char *names[] = {"Иван", "Пётр", "Илья"};
char *surnames[] = {"Иванов", "Пётров", "Ильин"};

Где должен храниться подключаемый файл?


Для чего применяются директивы условной компиляции (#if, #ifdef, #ifndef)?

Что такое препроцессор?

Чему будет равно значение переменной x в результате выполнения приведенной программы?

#include <stdio.h> 
#define	SQR(x)	(x*x)

int main()
{ 
	int x, y=2;
	x = SQR(y+1);
	printf("x = %d", x);
	return 0;
} 

Какое действие выполняется при использовании заданного набора директив?

#ifndef HEADER_INCLUDED
#include "arr.h"
#define HEADER_INCLUDED
#enif

Какие действия выполняет препроцессор языка С?

Чему будет равно значение переменной z в результате выполнения приведенной программы?

#include <stdio.h> 
#define	DIV(x, y)	(x/y)

int main()
{ 
	float x=2.0, y=2.0;
	float z;
	z = DIV(x+1, y+1);
	printf("x = %.1f", x);
	return 0;
} 

Необходимо написать программу, которая выводит на экран сочетания имён и фамилий, которые хранятся в подключаемом файле arr.txt. Содержание файла arr.txt:

char *names[] = {"Иван", "Пётр", "Илья"};
char *surnames[] = {"Иванов", "Пётров", "Ильин"};

Файл arr.txt хранится с исполняемым файлом в одном каталоге. Какая программа выполняется поставленную задачу?


Каким образом несколько директив могут быть объявлены в одной строке?

В каком случае будет подключен файл arr.h?

#ifndef ARR
#define ARR
#include "arr.txt"
#endif

Задана программа, в которой выполняется подключение файла arr.h:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <locale.h>

#ifndef ARR
#define ARR
#include "arr.txt"
#endif

int main (void)  {
	int i = 0 , j = 0, n;
	
	setlocale (LC_ALL, "rus");
	printf("Введите количество человек (от 1 до 3): ");
	scanf("%d", &n);
    
	if (n<1 || n>3) {
		printf("Ошибка ввода данных. Нажмите любую клавишу: ");
		_getch();
		exit(1);
	}

	#undef ARR

	#ifdef ARR
		for (i=0; i<n; i++)
			printf("%d. %s %s\n", i+1, names[i], surnames[i]);
	#endif

	return 0;
}

Содержание файла arr.h:

char *names[] = {"Иван", "Пётр", "Илья"};
char *surnames[] = {"Иванов", "Пётров", "Ильин"};

Определите, будут ли выведены на экран сочетания имён и фамилий из файла arr.h при выполнении приведенной программы? Если не будут, то почему?


Что такое директива препроцессора?

Для чего используется приведенный фрагмент кода?

#ifndef HEADER_INCLUDED
#include "arr.h"
#define HEADER_INCLUDED
#enif

Какая строка является недопустимой?

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

С каким количеством аргументов командной строки запускается программа (считается, что аргумент в заданном виде обрабатывается корректно?

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

#include <stdio.h>
#include <conio.h>
#include <stdarg.h>
#include <stdlib.h>
#include <locale.h>

void error(int severity, ... );

int main(int argc, char* argv[])
{
	char err[][30] = {"Сообщение1", "Сообщение2"};
	int n;
	
	setlocale (LC_ALL, "rus");
	n = atoi(argv[1]);

	switch (n) {
		case 0: error(0, "Ошибка!", '\0');
			break;
		case 1: error(0, "Ошибка!", err[0], '\0');
			break;
		default: error(1, "Ошибка!", err[0], err[1], '\0');
	}

	return 0;
}

void error(int severity, ... )
{
   va_list ap;
   va_start(ap, severity);

   for (;;) {
	   char *p = va_arg(ap, char*);
	   if (p == '\0') break;
	   printf("%s ", p);
   }
   va_end(ap);
   printf("\n");
}

Программа запускается из командной строки командой Example.exe 0. Какое сообщение будет выведено на экран?


Приведенная программа считает в обратном порядке, начиная с какого-либо значения (указанного в командной строке):

int main(int argc, char *argv[])
{
	int disp, count;
	setlocale (LC_ALL, "rus");

	if(argc<2) {
		printf("В командной строке на задано число\n");
		exit(1);
	}

	if(argc==3 && !strcmp(argv[2], "display")) disp = 1;
	else disp = 0;

	for(count=atoi(argv[1]); count; --count)
		if(disp) printf("%d ", count);

	putchar('\a');
	printf("Счет закончен");

	return 0;
}

Что будет выведено на экран в результате выполнения приведенной программы, если ее запуск выполняется из командной строки командой Example.exe 5?


Какие утверждения являются неверными?

Какое формальное определение прототипа функции main() с параметрами является неверным?

Какая программа посимвольно выводит все аргументы, с которыми ее вызвали?

При каком запуске программы echo через командную строку аргумент argv будет представлен заданным образом?

Какие утверждения являются верными?

Какое формальное определение прототипа функции main() с параметрами является верным?

Задана программа, исполняемый файл которой имеет имя Example.exe:

int main(int argc, char* argv[])
{
	int n1, n2, m, sum;
	m = argc;
	n1 = atoi(argv[1]);
	n2 = atoi(argv[2]);
	sum = n1 + n2;
	printf("sum = %d\n", sum);

	return 0;
}

Программа запускается из командной строки командой Example.exe 2 3 5. Чему будет равно значение переменной sum?


Приведенная программа считает в обратном порядке, начиная с какого-либо значения (указанного в командной строке):

int main(int argc, char *argv[])
{
	int disp, count;
	setlocale (LC_ALL, "rus");

	if(argc<2) {
		printf("В командной строке на задано число\n");
		exit(1);
	}

	if(argc==3 && !strcmp(argv[2], "display")) disp = 1;
	else disp = 0;

	for(count=atoi(argv[1]); count; --count)
		if(disp) printf("%d ", count);

	putchar('\a');
	printf("Счет закончен");

	return 0;
}

Что будет выведено на экран в результате выполнения приведенной программы, если ее запуск выполняется из командной строки командой Example.exe 5 display?


При каком условии запуска программы из командной строки значение argc будет равно 1?

int main(int argc, char *argv[])
{
	int t;

	for(t=0; t<argc; ++t)
		printf("%s\n", argv[t]);

	return 0;
}

Необходимо написать программу, которая имеет два аргумента командной строки и вычислиет их разность. Какая программа выполняет поставленную задачу?

Задана программа, исполняемый файл которой имеет имя Example.exe:

int main(int argc, char* argv[])
{
	int n1, n2, n3, m, sum;
	m = argc;
	n1 = atoi(argv[1]);
	n2 = atoi(argv[2]);
	n3 = atoi(argv[3]);
	sum = n1 + n2 + n3 + m;
	printf("sum = %d\n", sum);

	return 0;
}

Программа запускается из командной строки командой Example.exe 2 3 5. Чему будет равно значение переменной sum?


Программа запускается с одним аргументом, задающим имя и фамилию. В каком случае в файл будет выведено только имя?

С каким количеством аргументов командной строки запускается программа (считается, что аргумент в заданном виде обрабатывается корректно?

При каком условии запуска программы из командной строки значение argc будет равно 0?

int main(int argc, char *argv[])
{
	int t;

	for(t=0; t<argc; ++t)
		printf("%s\n", argv[t]);

	return 0;
}

При каком запуске программы echo через командную строку аргумент argv будет представлен заданным образом?

Приведенная программа выводит в файл значения аргументов командной строки:

int main(int argc, char* argv[])
{
	char name[30];
	FILE *f;
	f = fopen("g:\\test.txt", "w+");

	fprintf(f, "%s\n%s", argv[0], argv[1]);
	
	return 0;
}

Запуск программы выполняется из командной строки с помощью команды Example.exe arg1 arg2. Чему будет равно значение argv[0]?


Необходимо написать программу, которая имеет два аргумента командной строки и вычислиет их сумму. Какая программа выполняет поставленную задачу?

Что делает приведенная программа?

int main(int argc, char *argv[])
{
	int t, i;

	for(t=0; t<argc-1; ++t) {
		i = 0;

		while(argv[t][i]) {
			putchar(argv[t][i]);
			++i;
		}
		printf("\n");
	}

	return 0;
}

Приведенная программа выводит в файл значения аргументов командной строки:

int main(int argc, char* argv[])
{
	char name[30];
	FILE *f;
	f = fopen("g:\\test.txt", "w+");

	fprintf(f, "%s\n%s", argv[0], argv[1]);
	
	return 0;
}

Запуск программы выполняется из командной строки с помощью команды Example.exe arg1 arg2. На какую строку указывает argv[1]?


С каким количеством аргументов командной строки запускается программа (считается, что аргумент в заданном виде обрабатывается корректно?

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

#include <stdio.h>
#include <conio.h>
#include <stdarg.h>
#include <stdlib.h>
#include <locale.h>

void error(int severity, ... );

int main(int argc, char* argv[])
{
	char err[][30] = {"Сообщение1", "Сообщение2"};
	int n;
	
	setlocale (LC_ALL, "rus");
	n = argv[1];

	switch (n) {
		case 0: error(0, "Ошибка!", '\0');
			break;
		case 1: error(0, "Ошибка!", err[0], '\0');
			break;
		default: error(1, "Ошибка!", err[0], err[1], '\0');
	}

	return 0;
}

void error(int severity, ... )
{
   va_list ap;
   va_start(ap, severity);

   for (;;) {
	   char *p = va_arg(ap, char*);
	   if (p == '\0') break;
	   printf("%s ", p);
   }
   va_end(ap);
   printf("\n");
}

Программа запускается из командной строки командой Example.exe 0. При этом вместо сообщения Ошибка! на экран выводится сообщение Ошибка! Сообщение1 Сообщение2. С чем это связано?


Приведенная программа выводит в файл значения аргументов командной строки:

int main(int argc, char* argv[])
{
	char name[30];
	FILE *f;
	f = fopen("g:\\test.txt", "w+");

	fprintf(f, "%s\n%s", argv[0], argv[1]);
	
	return 0;
}

Запуск программы выполняется из командной строки с помощью команды Example.exe arg1 arg2. На какую строку указывает argv[2]?


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

#include <stdio.h>
#include <conio.h>
#include <stdarg.h>
#include <stdlib.h>
#include <locale.h>

void error(int severity, ... );

int main(int argc, char* argv[])
{
	char err[][30] = {"Сообщение1", "Сообщение2"};
	int n;
	
	setlocale (LC_ALL, "rus");
	n = argv[1];

	switch (n) {
		case 0: error(0, "Ошибка!", '\0');
			break;
		case 1: error(0, "Ошибка!", err[0], '\0');
			break;
		default: error(1, "Ошибка!", err[0], err[1], '\0');
	}

	return 0;
}

void error(int severity, ... )
{
   va_list ap;
   va_start(ap, severity);

   for (;;) {
	   char *p = va_arg(ap, char*);
	   if (p == '\0') break;
	   printf("%s ", p);
   }
   va_end(ap);
   printf("\n");
}

Программа запускается из командной строки командой Example.exe 0. Какое сообщение будет выведено на экран?


При какой команде запуска заданной программы из командной строки значение argc будет равно 1?

int main(int argc, char *argv[])
{
	int t;

	for(t=0; t<argc; ++t)
		printf("%s\n", argv[t]);

	return 0;
}

Что делает приведенная программа?

int main(int argc, char *argv[])
{
	int t, i;

	for(t=0; t<argc; ++t) {
		i = 0;

		while(argv[t][i]) {
			putchar(argv[t][i]);
			++i;
		}
		printf("\n");
	}

	return 0;
}

Какое утверждение является верным?

Необходимо написать функцию, которая будет вычислять сумму всех элементов двухмерного массива. В какой программе вызов функции sum выполняется верно?

Какие утверждения являются неверными?

В результате выполнения какой программы на экран будет выведена строка penny nickel dime quarter=100 half_dollar dollar?

Какое утверждение является верным?

Задана функция вычисления факториала:

long fact(long n) 
{
	return (n>1) ? n * fact(n-1) : 1;
}

Когда завершится рекурсивный процесс?


Какие утверждения являются верными для приведенной программы?

void fillOnly(int);
void free_n(int);
void fill_n(int);

int main (void)
 {
	int n = 1; 
	int in = 1; 

	printf("\n Enter a length of string (naturel number): ");
	in = scanf_s("%i", &n);

	if (in != 1 || n < 1 || n > 15)
     {
		printf("\n Error input. Press any key to exit: ");
		_getch();
		exit(0);
	}
	puts("\n\tResult:");

	fill_n(n);

	printf("\n\n Press any key to exit: ");
	_getch();
	return 0;
}

void fillOnly(int n) {
	if (n == 1)
		printf("\t%+3d\n", 1);
	else {
		fillOnly(n-1);
		printf("\t%+3d\n", n);
		free_n(n-1);
	}
}

void free_n(int n)
 {
	if (n == 1)
		printf("\t%+3d\n", -1);
	else {
		fillOnly(n-1);
		printf("\t%+3d\n", -n);
		free_n(n-1);
	}
}

void fill_n(int n)
 {
	if (n == 1)
		printf("\t%+3d\n", 1);
	else {
		if (n == 2)
			printf("\t%+3d\n\t%+3d\n", 1, 2);
		else {
			fillOnly(n-1);
			printf("\t%+3d\n", n);
			fill_n(n-2);
		}
	}
}

Какие новые объекты создаются при рекурсивном вызове функции?

Какая переменная pFun способна указывать только на функцию, которая возвращает целое число и требует целое число в качестве параметра?

Задан файл, содержащий список названий и стоимости мониторов: Какой файл будет получен в результате выполнения приведенной программы?

int main( void )
{
   FILE *stream;
   char str[81];
   int  result;

   if ( fopen_s( &stream, "g:\\list.txt", "r+" ) != 0 )
   {
      printf( "The file list.txt was not opened\n" );
      return -1;
   }
 
   result = fseek( stream, 0L, SEEK_END);

   if( result )
      perror( "Fseek failed" );
   else
   {
      fputs( "\n5. NEC MultiSync EX231W - 10490 rub.", stream );
      printf( "%s", str );
    }
   fclose( stream );
   return 0;
}

Какая программа не содержит ошибок?

Какие из перечисленных переменных видны в функции sum()?

int c = 9;

int sum(int a, int b)
{
	return a+b;
}

int t = 8;

int main(void)
{
	int n=4, m=3, s1, s2;
	s1 = sum(n,m);
	s2 = mul(n,m);
	return 0;
}

int k = 6;

int mul(int a, int b)
{
	return a*b;
}

Файл second.h, расположенный на диске D:, содержит следующие описания переменных и функций:

extern int x, y;
extern char ch;

void func22(void)
{
	y = 100;
}

void func23(void)
{
	x = y/10;
	ch = 'R';
}

В каком случае выполняется неверное подключение файла second.h в другом файле?


При каком запуске программы echo через командную строку аргумент argv будет представлен заданным образом?

Comments are closed.

Яндекс.Метрика