игра брюс 2048
Главная / Программирование / Программирование на языке C в Microsoft Visual Studio 2010 / Тест 14

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

Упражнение 1:
Номер 1
Что такое объединение (union) в контексте языка С?

Ответ:

 (1) совокупность нескольких переменных, часто различных типов 

 (2) тип данных, заданных списком принадлежащих ему значений 

 (3) тип, который позволяет хранить различные типы данных в одном и том же пространстве памяти (но не одновременно) 


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

Ответ:

 (1) структур 

 (2) массивов 

 (3) перечислений 


Номер 3
Значения каких типов может содержать приведенное объединение?

union hold {
	int digit;
	double bigf;
	char letter;
};
		
		

Ответ:

 (1) одновременно значения всех типов: int, double, char 

 (2) одно из значений типа int, или double, или char 

 (3) любых типов, кроме перечисленных: int, double, char 


Упражнение 2:
Номер 1
Что такое перечисление (enum) в контексте языка С?

Ответ:

 (1) совокупность нескольких переменных, часто различных типов 

 (2) тип данных, заданных списком принадлежащих ему значений 

 (3) тип, который позволяет хранить различные типы данных в одном и том же пространстве памяти (но не одновременно) 


Номер 2
В чем заключается назначение перечислений (enum)?

Ответ:

 (1) в том, чтобы повысить удобочитаемость программы 

 (2) в том, чтобы экономнее использовать память 

 (3) в том, чтобы иметь возможность использовать совокупность элементов разных типов 


Номер 3
В чем заключается назначение объединений (union)?

Ответ:

 (1) в том, чтобы повысить удобочитаемость программы 

 (2) в том, чтобы экономнее использовать память 

 (3) в том, чтобы иметь возможность использовать совокупность элементов разных типов 


Упражнение 3:
Номер 1
Задано перечисление numbers:

enum numbers {two=2, tree, four, ten=10, eleven, last=ten+40};
	
Какое значение будет присвоено константе last?	
		

Ответ:

 (1) 10 

 (2) 12 

 (3) 40 

 (4) 50 


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

Ответ:

 (1) имена перечисляемых констант должны быть уникальными 

 (2) имена перечисляемых констант могут совпадать 

 (3) значения перечисляемых констант должны быть уникальными 

 (4) значения перечисляемых констант могут совпадать 


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

Ответ:

 (1) имена перечисляемых констант должны быть уникальными 

 (2) имена перечисляемых констант могут совпадать 

 (3) значения перечисляемых констант должны быть уникальными 

 (4) значения перечисляемых констант могут совпадать 


Упражнение 4:
Номер 1
Сколько памяти будет выделено для хранения приведенного объединения?

union hold {
	int digit;
	double bigf;
	char letter;
};
		
		

Ответ:

 (1) 1 байт 

 (2) 4 байта 

 (3) 8 байт 


Номер 2
Сколько памяти будет выделено для хранения приведенного объединения?

union payment {
	char card[25];
	int sum;
	double date;
};
		
		

Ответ:

 (1) 1 байт 

 (2) 4 байта 

 (3) 8 байт 

 (4) 25 байт 


Номер 3
Сколько памяти будет выделено для хранения приведенного объединения?

union payment {
	char card[10];
	int sum;
	double date;
};
		
		

Ответ:

 (1) 1 байт 

 (2) 4 байта 

 (3) 8 байт 

 (4) 10 байт 


Упражнение 5:
Номер 1
Чему будет равно значение переменной str после выполнения приведенной программы?

union test {
  char ch1[5];
  char ch2[2];
  char ch3[1];
};

int main(void)
{
	union test t;
	char *str;
	strcpy(t.ch1, "test");
	strcpy(t.ch2, "be");
	t.ch3[0] = 'w';
	str = t.ch1;
	return 0;
}
		
		

Ответ:

 (1) test 

 (2) best 

 (3) west 

 (4) be 

 (5) we 

 (6) w 


Номер 2
Чему будет равно значение переменной 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;
}
		
		

Ответ:

 (1) test 

 (2) best 

 (3) west 

 (4) b 

 (5) w 


Номер 3
Чему будет равно значение переменной 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;
}
		
		

Ответ:

 (1) test 

 (2) best 

 (3) west 

 (4) be 

 (5) te 

 (6) w 


Упражнение 6:
Номер 1
В какой программе выполняется верное обращение к полям объединения?

Ответ:

 (1) int main(void) { union distance { int miles; long meters; } walk; walk->miles = 5; printf("Пройденное расстояние в милях %d\n", walk->miles); walk->meters = 10000; printf("Пройденное расстояние в метрах %d\n", walk->meters); return 0; }  

 (2) int main(void) { union distance { int miles; long meters; }; miles = 5; printf("Пройденное расстояние в милях %d\n", miles); meters = 10000; printf("Пройденное расстояние в метрах %d\n", meters); return 0; }  

 (3) int main(void) { union distance { int miles; long meters; } walk; walk.miles = 5; printf("Пройденное расстояние в милях %d\n", walk.miles); walk.meters = 10000; printf("Пройденное расстояние в метрах %d\n", walk.meters); return 0; }  


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

Ответ:

 (1) int main(void) { union distance { int miles; long meters; } walk; walk->miles = 5; printf("Пройденное расстояние в милях %d\n", walk->miles); walk->meters = 10000; printf("Пройденное расстояние в метрах %d\n", walk->meters); return 0; }  

 (2) int main(void) { union distance { int miles; long meters; }; miles = 5; printf("Пройденное расстояние в милях %d\n", miles); meters = 10000; printf("Пройденное расстояние в метрах %d\n", meters); return 0; }  

 (3) int main(void) { union distance { int miles; long meters; } walk; walk.miles = 5; printf("Пройденное расстояние в милях %d\n", walk.miles); walk.meters = 10000; printf("Пройденное расстояние в метрах %d\n", walk.meters); return 0; }  


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

Ответ:

 (1) int main(void) { union distance { int miles; long meters; } d, *walk; walk = &d; walk->miles = 5; printf("Пройденное расстояние в милях %d\n", walk->miles); walk->meters = 10000; printf("Пройденное расстояние в метрах %d\n", walk->meters); return 0; }  

 (2) int main(void) { union distance { int miles; long meters; }; miles = 5; printf("Пройденное расстояние в милях %d\n", miles); meters = 10000; printf("Пройденное расстояние в метрах %d\n", meters); return 0; }  

 (3) int main(void) { union distance { int miles; long meters; } walk; walk.miles = 5; printf("Пройденное расстояние в милях %d\n", walk.miles); walk.meters = 10000; printf("Пройденное расстояние в метрах %d\n", walk.meters); return 0; }  


Упражнение 7:
Номер 1
Какая программа не содержит ошибок?

Ответ:

 (1) typedef 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); }  

 (2) 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_union word; word.i = num; putc(word.ch[0], fp); return putc(word.ch[1], fp); }  

 (3) typedef 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 word; word.i = num; putc(word.ch[0], fp); return putc(word.ch[1], fp); }  


Номер 2
Определите, есть ли в приведенной программе ошибки? Если есть, укажите, какие?

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); 
}
			
		

Ответ:

 (1) неверно используется ключевое слово typedef для определения объединения 

 (2) неверно объявлена переменная word в функции putw() 

 (3) программа не содержит ошибок 


Номер 3
Определите, есть ли в приведенной программе ошибки? Если есть, укажите, какие?

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); 
}
			
		

Ответ:

 (1) неверно объявлена переменная word в функции putw() 

 (2) неверно объявлено объединение с использованием ключевого слова typedef 

 (3) программа не содержит ошибок 


Упражнение 8:
Номер 1
Что будет выведено на экран в результате выполнения приведенной программы?

int main(void)
{
	union pw {
	  int i;
	  double d;
	  char ch[2];
	} pw = {121};
	
	printf("pw.ch = %s", pw.ch);
	
	return 0;
}
			
		

Ответ:

 (1) pw.ch = 1 

 (2) pw.ch = 121 

 (3) pw.ch = y 

 (4) при выпонении программы возникнет ошибка, так как элемент pw.ch не инициализирован 


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

int main(void)
{
	union pw {
	  int i;
	  double d;
	  char ch[2];
	} pw = {"y"};
	
	printf("pw.i = %d", pw.i);
	
	return 0;
}
			
		

Ответ:

 (1) pw.i = 1 

 (2) pw.i = 121 

 (3) pw.i = y 

 (4) ни один из перечисленных вариантов, так как выполнена неверная инициализация объединения 


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

int main(void)
{
	union pw {
	  int i;
	  double d;
	  char ch[2];
	} pw = {"y"};
	
	printf("pw.d = %.2f", pw.d);
	
	return 0;
}
			
		

Ответ:

 (1) pw.d = 1.00 

 (2) pw.d = 121.00 

 (3) pw.d = y 

 (4) ни один из перечисленных вариантов, так как выполнена неверная инициализация объединения 


Упражнение 9:
Номер 1
Что будет выведено на экран в результате выполнения приведенной программы?

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;
}
			
		

Ответ:

 (1) 0 1 2 3 4 5 

 (2) 0 1 2 100 4 5 

 (3) 0 1 2 100 101 102 

 (4) penny nickel dime quarter=100 half_dollar dollar 


Номер 2
В результате выполнения какой программы на экран будет выведена строка 0 1 2 100 101 102?

Ответ:

 (1) 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; }  

 (2) int main(void) { enum coin { penny, nickel, dime, quarter, 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; }  

 (3) int main(void) { enum coin { penny, nickel, dime, quarter, half_dollar=101, 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; }  


Номер 3
В результате выполнения какой программы на экран будет выведена строка penny nickel dime quarter=100 half_dollar dollar?

Ответ:

 (1) 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; }  

 (2) int main(void) { enum coin { penny, nickel, dime, quarter, 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; }  

 (3) int main(void) { enum coin { penny, nickel, dime, quarter, half_dollar=101, 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; }  

 (4) ни в одном из приведенных случаев 


Упражнение 10:
Номер 1
Какая программа содержит ошибку?

Ответ:

 (1) int main(void) { enum coin { penny, nickel, dime, quarter=100, half_dollar, dollar}; enum coin money; int s = 0; money = half_dollar; s = money + dollar; printf("s = %d", s); return 0; }  

 (2) 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; }  

 (3) int main(void) { enum coin { penny, nickel, dime, quarter=100, half_dollar, dollar}; enum coin money; int s = 0; s = money.half_dollar + money.dollar; return 0; }  


Номер 2
Определите, возникнут ли ошибки при выполнении приведенной программы? Если возникнут, объясните, почему?

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;
}
			
		

Ответ:

 (1) возникнет ошибка, так как при обращении к элементу массива name[money] необходимо указать целочисленный индекс 

 (2) возникнет ошибка, так как в операции присваивания значения переменной money отсутсвуют кавычки 

 (3) возникнет ошибка, так при обращении к элементу массива name[money] возникнет выход за границы массива 

 (4) при выполнении программы не возникнет ошибок 


Номер 3
Определите, возникнут ли ошибки при выполнении приведенной программы? Если возникнут, объясните, почему?

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;
}
			
		

Ответ:

 (1) возникнет ошибка, так как при обращении к элементу массива name[money] необходимо указать целочисленный индекс 

 (2) возникнет ошибка, так как в операции присваивания значения переменной money отсутсвуют кавычки 

 (3) возникнет ошибка, так при обращении к элементу массива name[money] возникнет выход за границы массива 

 (4) при выполнении программы не возникнет ошибок 


Упражнение 11:
Номер 1
При каких значениях переменной 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;
}
		
		

Ответ:

 (1) error = 0; 

 (2) error = 1; 

 (3) error = ERR_READ; 


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

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;
}
		
		

Ответ:

 (1) error = 0; 

 (2) error = 1; 

 (3) error = ERR_WRITE; 


Номер 3
При каких значениях переменной 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;
}
		
		

Ответ:

 (1) error = 1; 

 (2) error = 2; 

 (3) error = ERR_CONVERT; 


Упражнение 12:
Номер 1
Какая ошибка допущена в приведенной программе?

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; 
}
			
		

Ответ:

 (1) программа не содержит ошибок 

 (2) неверное определение оператора switch 

 (3) неверное обращение к полю перечисления при сравнении 


Номер 2
Какая ошибка допущена в приведенной программе?

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; 
}
			
		

Ответ:

 (1) программа не содержит ошибок 

 (2) неверное определение оператора switch 

 (3) неверное обращение к полю перечисления при сравнении 


Номер 3
Что будет выведено на экран в результате выполнения приведенной программы, если в запросе ввода номера месяца пользователь задаст число 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; 
}
			
		

Ответ:

 (1) The number of days of the month: 31 

 (2) The number of days of the month: 30 

 (3) The number of days of the month: 28 ... or 29 if it is a leap year  




Главная / Программирование / Программирование на языке C в Microsoft Visual Studio 2010 / Тест 14