Главная / Программирование /
Программирование на языке 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