Главная / Программирование /
Программирование на языке C в Microsoft Visual Studio 2010 / Тест 19
Программирование на языке C в Microsoft Visual Studio 2010 - тест 19
Упражнение 1:
Номер 1
Что такое директива препроцессора?
Ответ:
 (1) инструкция препроцессора 
 (2) программа, выполняющая предварительную обработку входных данных для другой программы 
 (3) буферный процессор 
Номер 2
Что такое препроцессор?
Ответ:
 (1) инструкция препроцессора 
 (2) программа, выполняющая предварительную обработку входных данных для другой программы 
 (3) буферный процессор 
Номер 3
Какие действия выполняет препроцессор языка С?
Ответ:
 (1) макроподстановку 
 (2) включение именованных файлов 
 (3) условную компиляцию 
Упражнение 2:
Номер 1
Какая строка является недопустимой?
Ответ:
 (1) #include "test1.h"
 
 (2) #define N 10, #define M 5
 
 (3) #include <stdio.h> #include <conio.h>
 
Номер 2
Какая строка является недопустимой?
Ответ:
 (1) #include "test1.h"
 
 (2) _#define M 5
 
 (3) #include <stdio.h> #include <conio.h>
 
Номер 3
Каким образом несколько директив могут быть объявлены в одной строке?
Ответ:
 (1) #define N 10, #define M 5
 
 (2) #include <stdio.h> #include <conio.h>
 
 (3) объявление нескольких директив в одной строке недопустимо 
Упражнение 3:
Номер 1
Почему при использовании макросов с формальными параметрами увеличивается скорость выполнения кода?
Ответ:
 (1) потому что объявление макроса находится в начале файла 
 (2) потому что макрос не чувствителен к типу данных 
 (3) потому что в таких случаях не надо тратить ресурсы на вызов функций 
Номер 2
Засчет чего достигается увеличение скорости выполнения кода при использовании макроса с формальными параметрами очень большого размера?
Ответ:
 (1) засчет увеличения размеров программы 
 (2) засчет уменьшения размеров программы 
 (3) засчет освобождения некоторых адресов памяти, используемых программой 
Номер 3
Какое влияние на скорость выполнения кода оказывает использование макросов с формальными параметрами?
Ответ:
 (1) увеличивает скорость выполнения кода 
 (2) уменьшает скорость выполнения кода 
 (3) зависит от конкретного макроса 
 (4) никак не влияет 
Упражнение 4:
Номер 1
Чему будет равно значение переменной 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;
}
Ответ:
 (1) 4 
 (2) 5 
 (3) 7 
 (4) 9 
Номер 2
Чему будет равно значение переменной 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;
}
Ответ:
 (1) 4 
 (2) 8 
 (3) 14 
 (4) 16 
Номер 3
Чему будет равно значение переменной 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;
}
Ответ:
 (1) 1.0 
 (2) 2.0 
 (3) 3.5 
Упражнение 5:
Номер 1
В программе задан макрос #define MAX(x, y) ((x)>(y) ? (x) : (y))
. В какой из приведенных программ он может быть использован?
Ответ:
 (1)
int main()
{
double x, y, z;
printf("Введите два числа (через пробел): ");
scanf("%d %d", &x, &y);
z = MAX(x+10, y);
printf("Наибольшим числом является %d", z);
return 0;
}
 
 (2)
int main()
{
char a, b;
printf("Введите два символа (через пробел): ");
scanf("%c %c", &a, &b);
printf("Наибольшим числом является %c", MAX(a, b));
return 0;
}
 
 (3)
int main()
{
float x, y;
printf("Введите два числа (через пробел): ");
scanf("%f %f", &x, &y);
printf("Наибольшим числом является %f", MAX(x, y));
return 0;
}
 
Номер 2
В программе задан макрос #define MAX(x, y) ((x)>(y) ? (x) : (y))
. Для каких переменных он может быть использован?
Ответ:
 (1) float x, y;
 
 (2) int i, j;
 
 (3) char a, b;
 
Номер 3
Каким образом должен быть задан макрос MAX
, чтобы приведенная программа корректно работала?
int main()
{
char a, b;
printf("Введите два символа (через пробел): ");
scanf("%c %c", &a, &b);
printf("Наибольшим числом является %c", MAX(a, b));
return 0;
}
Ответ:
 (1) #define MAX(x, y) ((x)>(y) ? (x) : (y))
 
 (2) #define MAX(x, y) { ((x)>(y) ? (x) : (y)) }
 
 (3) #define MAX(char x, char y) ((x)>(y) ? (x) : (y))
 
Упражнение 6:
Номер 1
Приведенная программа выводит на экран сочетания имён и фамилий, которые хранятся в подключаемом файле 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[] = {"Иванов", "Пётров", "Ильин"};
Где должен храниться подключаемый файл?
Ответ:
 (1) в одном и том же каталоге с исполняемым файлом 
 (2) на один уровень выше испольняемого файла 
 (3) на два уровня выше исполняемого файла 
Номер 2
Необходимо написать программу, которая выводит на экран сочетания имён и фамилий, которые хранятся в подключаемом файле arr.txt. Содержание файла arr.txt:
char *names[] = {"Иван", "Пётр", "Илья"};
char *surnames[] = {"Иванов", "Пётров", "Ильин"};
Файл arr.txt хранится с исполняемым файлом в одном каталоге. Какая программа выполняется поставленную задачу?
Ответ:
 (1)
#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;
}
 
 (2)
#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;
}
 
 (3)
#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;
}
 
Номер 3
Что произойдет при выполнении приведенной программы:
#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[] = {"Иванов", "Пётров", "Ильин"};
Ответ:
 (1) на экран будут выведены сочетания всех имён и фамилий, заданных в массивах 
 (2) на экран будут выведены сочетания имён и фамилий для количества людей, заданного пользователем 
 (3) программа не будет выполнена, так как содержит ошибку 
Упражнение 7:
Номер 1
Что обозначает подключение #include "..\..\some.h"
?
Ответ:
 (1) то, что файл some.h
находится на два уровня ниже, чем главный файл 
 (2) то, что файл some.h
находится на два уровня выше, чем главный файл 
 (3) то, что для поиска файла some.h
необходимо выполнить просмотр верхних уровней до тех пор, пока файл не будет найден 
Номер 2
Что обозначает подключение #include "..\some.h"
?
Ответ:
 (1) то, что файл some.h
находится на один уровень ниже, чем главный файл 
 (2) то, что файл some.h
находится на один уровень выше, чем главный файл 
 (3) то, что для поиска файла some.h
необходимо выполнить просмотр верхних уровней до тех пор, пока файл не будет найден 
Номер 3
Каким образом должен быть подключен файл some.h
, находящийся на два уровня выше, чем главный файл?
Ответ:
 (1) #include "..\some.h"
 
 (2) #include "..\..\some.h"
 
 (3) #include "..\..\..\some.h"
 
Упражнение 8:
Номер 1
Файл 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 в другом файле?
Ответ:
 (1)
#include <stdio.h>
#include <conio.h>
#include "D:\second.h"
int x = 99, y = 77;
char ch;
void func1(void);
int main(void)
{
ch = 'Z';
func1();
printf("\n Press any key: ");
_getch();
return 0;
}
void func1(void)
{
func22();
func23();
printf("\n\t x = %d; y = %d;\
ch = %c\n", x, y, ch);
}
 
 (2)
#include <stdio.h>
#include <conio.h>
#include <D:\second.h>
int x = 99, y = 77;
char ch;
void func1(void);
int main(void)
{
ch = 'Z';
func1();
printf("\n Press any key: ");
_getch();
return 0;
}
void func1(void)
{
func22();
func23();
printf("\n\t x = %d; y = %d;\
ch = %c\n", x, y, ch);
}
 
 (3)
#include <stdio.h>
#include <conio.h>
#include D:\second.h
int x = 99, y = 77;
char ch;
void func1(void);
int main(void)
{
ch = 'Z';
func1();
printf("\n Press any key: ");
_getch();
return 0;
}
void func1(void)
{
func22();
func23();
printf("\n\t x = %d; y = %d;\
ch = %c\n", x, y, ch);
}
 
Номер 2
Файл 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 в другом файле выполняется верно?
Ответ:
 (1)
#include <stdio.h>
#include <conio.h>
#include "D:\second.h"
int x = 99, y = 77;
char ch;
void func1(void);
int main(void)
{
ch = 'Z';
func1();
printf("\n Press any key: ");
_getch();
return 0;
}
void func1(void)
{
func22();
func23();
printf("\n\t x = %d; y = %d;\
ch = %c\n", x, y, ch);
}
 
 (2)
#include <stdio.h>
#include <conio.h>
#include <D:\second.h>
int x = 99, y = 77;
char ch;
void func1(void);
int main(void)
{
ch = 'Z';
func1();
printf("\n Press any key: ");
_getch();
return 0;
}
void func1(void)
{
func22();
func23();
printf("\n\t x = %d; y = %d;\
ch = %c\n", x, y, ch);
}
 
 (3)
#include <stdio.h>
#include <conio.h>
#include D:\second.h
int x = 99, y = 77;
char ch;
void func1(void);
int main(void)
{
ch = 'Z';
func1();
printf("\n Press any key: ");
_getch();
return 0;
}
void func1(void)
{
func22();
func23();
printf("\n\t x = %d; y = %d;\
ch = %c\n", x, y, ch);
}
 
Номер 3
Файл 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 должен быть подключен для возможности использования описанных в нем переменных и функций в другом файле?
Ответ:
 (1)
#include <stdio.h>
#include <conio.h>
#include "D:\second.h"
 
 (2)
#include <stdio.h>
#include <conio.h>
#include <D:\second.h>
 
 (3)
#include <stdio.h>
#include <conio.h>
#include D:\second.h
 
Упражнение 9:
Номер 1
Для чего применяются директивы условной компиляции (#if
, #ifdef
, #ifndef
)?
Ответ:
 (1) для исключения компиляции отдельных частей программы 
 (2) для разветвления процесса вычислений на два направления 
 (3) для того, чтобы временно закомментировать фрагменты кода 
Номер 2
Какие директивы относятся к директивам условной компиляции?
Ответ:
 (1) if
 
 (2) else
 
 (3) #if
 
 (4) #ifdef
 
 (5) #define
 
Номер 3
Ниже приведен фрагмент условного включения различных версий заголовочного файла:
#if VERSION == 1
#define INCFILE "vers1.h"
#elseif VERSION == 2
#define INCFILE "vers1.h"
#else
#define INCFILE "versN.h"
#endif
#include INCFILE
Какие из используемых в заданном фрагменте директив относятся к директивам условной компиляции?
Ответ:
 (1) #if
 
 (2) #define
 
 (3) #elseif
 
 (4) #else
 
 (5) #endif
 
 (6) #include
 
Упражнение 10:
Номер 1
В каком случае директива #define
определяет макрос?
Ответ:
 (1) #define VERSION 1
 
 (2) #define VASYA "Василий Иванович"
 
 (3) #define MAX (x, y) ((x)>(y) ? (x) : (y))
 
 (4)
#if VERSION == 1
#define INCFILE "vers1.h"
#elseif VERSION == 2
#define INCFILE "vers1.h"
#else
#define INCFILE "versN.h"
#endif
#include INCFILE
 
Номер 2
В каком случае директива #define
определяет символическую константу?
Ответ:
 (1) #define VERSION 1
 
 (2) #define VASYA "Василий Иванович"
 
 (3) #define MAX (x, y) ((x)>(y) ? (x) : (y))
 
 (4)
#if VERSION == 1
#define INCFILE "vers1.h"
#elseif VERSION == 2
#define INCFILE "vers1.h"
#else
#define INCFILE "versN.h"
#endif
#include INCFILE
 
Номер 3
В каком случае директива #define
определяет символы, управляющие условной компиляцией?
Ответ:
 (1) #define VERSION 1
 
 (2) #define VASYA "Василий Иванович"
 
 (3) #define MAX (x, y) ((x)>(y) ? (x) : (y))
 
 (4)
#if VERSION == 1
#define INCFILE "vers1.h"
#elseif VERSION == 2
#define INCFILE "vers1.h"
#else
#define INCFILE "versN.h"
#endif
#include INCFILE
 
Упражнение 11:
Номер 1
Какое действие выполняется при использовании заданного набора директив?
#ifndef HEADER_INCLUDED
#include "arr.h"
#define HEADER_INCLUDED
#enif
Ответ:
 (1) выполняется подключение заголовочного файла arr.h, если определен символ HEADER_INCLUDED
 
 (2) выполняется подключение заголовочного файла arr.h, если символ HEADER_INCLUDED
не определен 
 (3) обязательное подключение файла arr.h 
 (4) принудительное отключение подключенного файла arr.h 
Номер 2
В каком случае будет подключен файл arr.h?
#ifndef ARR
#define ARR
#include "arr.txt"
#endif
Ответ:
 (1) в случае, если символ ARR
не определен  
 (2) в случае, если определен символ ARR
 
 (3) файл arr.h будет подключен в любом случае 
 (4) файл arr.h ни в каком случае подключен не будет 
Номер 3
Для чего используется приведенный фрагмент кода?
#ifndef HEADER_INCLUDED
#include "arr.h"
#define HEADER_INCLUDED
#enif
Ответ:
 (1) для подключения файла arr.h при каждой компиляции 
 (2) для отключения файла arr.h при каждой компиляции 
 (3) для обеспечения подключения файла arr.h только один раз 
Упражнение 12:
Номер 1
В каком случае на экран будут выведены сочетания имен и фамилий, заданных в файле arr.h?
Содержание файла arr.h:
char *names[] = {"Иван", "Пётр", "Илья"};
char *surnames[] = {"Иванов", "Пётров", "Ильин"};
Ответ:
 (1)
#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;
}
 
 (2)
#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;
}
 
 (3)
#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;
}
 
Номер 2
В каком случае сочетания имен и фамилий, заданных в файле arr.h, не будут выведены на экран?
Содержание файла arr.h:
char *names[] = {"Иван", "Пётр", "Илья"};
char *surnames[] = {"Иванов", "Пётров", "Ильин"};
Ответ:
 (1)
#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;
}
 
 (2)
#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;
}
 
 (3)
#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;
}
 
Номер 3
Задана программа, в которой выполняется подключение файла 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 при выполнении приведенной программы? Если не будут, то почему?
Ответ:
 (1) имена и фамилии не будут выведены, так как используется директива #undef
 
 (2) имена и фамилии не будут выведены, так как в программе допущена ошибка - директива #undef
используется в теле функции main()
 
 (3) имена и фамилии будут выведены на экран