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

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

Упражнение 1:
Номер 1
Какие элементы могут быть операндами оператора адресации &?

Ответ:

 (1) переменная 

 (2) выражение 

 (3) константа 

 (4) элемент массива 


Номер 2
Какие элементы не могут быть операндами оператора адресации &?

Ответ:

 (1) переменная 

 (2) выражение 

 (3) константа 

 (4) элемент массива 


Номер 3
Что такое указатель?

Ответ:

 (1) переменная, инициализированная каким-либо значением 

 (2) переменная, содержащая адрес другой переменной 

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


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

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

Ответ:

 (1) указатель p2 содержит адрес указателя p1 

 (2) p2 разыменовывает указатель p1 

 (3) оба указателя (p1 и р2) ссылаются на х 


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

	int x = 99, y = 100, z;
	int *p1, *p2, *p3;
	p1 = &x;
	p2 = &y;
	p3 = p2;
	x = y;
	z = *p1 + *p2 + *p3;
			
		

Ответ:

 (1) 299 

 (2) 300 

 (3) сумме адресов, хранящихся в указателях p1, p2 и p3 

 (4) при вычислении значения переменной z возникнет ошибка 


Номер 3
В каком случае значение переменной z будет равно изначальному значению переменной x?

Ответ:

 (1) int x = 99, y = 100, z; int *p1, *p2; p1 = &x; p2 = p1; z = *p2;  

 (2) int x = 99, y = 100, z; int *p1, *p2; p1 = &x; p2 = &y; x = y; z = *p1;  

 (3) int x = 99, y = 100, z; int *p1, *p2; p1 = &y; p2 = p1; y = x; z = *p2;  


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

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

Ответ:

 (1) a = 'A', b = 'A', c = 'A' 

 (2) a = 'C', b = 'A', c = 'A' 

 (3) a = 'C', b = 'C', c = 'A' 


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

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

Ответ:

 (1) a = 10, b = 10, c = 10 

 (2) a = 30, b = 30, c = 10 

 (3) a = 30, b = 10, c = 10 


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

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

Ответ:

 (1) a = 'A', b = 'B', c = 'C' 

 (2) a = 'A', b = 'B', c = 'B' 

 (3) a = 'A', b = 'B', c = 'A' 


Упражнение 4:
Номер 1
Что делает приведенная программа?

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

Ответ:

 (1) определяет количество символов в строке 

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

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


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

Ответ:

 (1) #include <stdio.h> #include <conio.h> int main() { int n=0, i=0; char ch, str[30] = ""; char *ptr; printf("Введите строку: "); scanf("%s", str); printf("Введите символ: "); ch = _getche(); ptr = str; while(*ptr!='\0') { if(*ptr==ch) n++; ptr++; } printf("\n%c - %d", ch, n); return 0; }  

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

 (3) #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; ptr2 = str; while(*ptr1!='\0') { while (*ptr2!='\0') { if(*ptr1==*ptr2) n++; ++ptr2; } printf("\n%c - %d", *ptr1, n); n = 0; ++ptr1; } printf("\n"); return 0; }  


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

Ответ:

 (1) #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++; } printf("\n%c - %d", *ptr1, n); n = 0; } printf("\n"); return 0; }  

 (2) #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; ptr2 = str; while(*ptr1!='\0') { while (*ptr2!='\0') { if(*ptr1==*ptr2) n++; ++ptr2; } printf("\n%c - %d", *ptr1, n); n = 0; ++ptr1; } printf("\n"); return 0; }  

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


Упражнение 5:
Номер 1
В результате выполнения какого фрагмента кода значение разности p1 - p2 будет не больше 2?

Ответ:

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

 (2) long num=3, *p1, *p2; p2 = &num; p1 = p2; p1++;  

 (3) char str[10] = "Test", *p1, *p2; p1 = str; p2 = p1; p1++;  

 (4) short num=10, *p1, *p2; p1 = &num; p2 = p1; p1++;  


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

Ответ:

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

 (2) long num=3, *p1, *p2; p2 = &num; p1 = p2; p1++;  

 (3) char str[10] = "Test", *p1, *p2; p1 = str; p2 = p1; p1++;  

 (4) short num=10, *p1, *p2; p1 = &num; p2 = p1; p1++;  


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

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

Ответ:

 (1)

 (2)

 (3)


Упражнение 6:
Номер 1
Какая запись с использованием указателя эквивалента заданной записи инкремента?

	int x = 20;
	x++;
			
		

Ответ:

 (1) int x = 20, *p; p = &x; *p = x; p++;  

 (2) int x = 20, *p; p = &x; *p++;  

 (3) int x = 20, *p; p = &x; (*p)++;  


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

Ответ:

 (1) (*p)++ 

 (2) *p++ 

 (3) *p = 10; p++;  


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

Ответ:

 (1) указатель будет увеличен на количество байт, соответсвующее его типу 

 (2) по адресу, записанному в указателе p, будет записано значение 10 

 (3) значение, на которое ссылается указатель p, будет увеличено на 10 


Упражнение 7:
Номер 1
Какие операции допустимы для заданных переменных?

	int n = 123, t;
	void *p;
	int *pn;
	pn = &n;
		
		

Ответ:

 (1) p = pn 

 (2) pn = p 

 (3) t = *pn 

 (4) t = *p 


Номер 2
Какие операции недопустимы для заданных переменных?

	int n = 123, t;
	void *p;
	int *pn;
	pn = &n;
		
		

Ответ:

 (1) p = pn 

 (2) pn = p 

 (3) t = *pn 

 (4) t = *p 


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

Ответ:

 (1) int n = 123, t, *pn; void *p; pn = &n; p = pn; t = *pn;  

 (2) int n = 123, t, *pn; void *p; pn = &n; p = pn; t = *p;  

 (3) int n = 123, t, *pn; void *p; pn = &n; p = &n; t = *pn;  


Упражнение 8:
Номер 1
Требуется написать программу, которая будет копировать одну строку в другую с помощью указателей. Какая программа выполняет поставленную задачу?

Ответ:

 (1) #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') { *ptr2 = *ptr1; ptr1++; } printf("str2 = %s\n", str2); return 0; }  

 (2) #include <stdio.h> #include <conio.h> int main() { char str1[10] = "", str2[10] = ""; char *ptr1; printf("Введите строку: %s", str1); scanf("%s", str1); ptr1 = str1; while (*ptr1!='\0') { if (*ptr1=='\0') { *str2 = '\0'; break; } *str2 = *ptr1; ptr1++; str2++; } printf("str2 = %s\n", str2); return 0; }  

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


Номер 2
Требуется написать программу, которая будет копировать одну строку в другую с помощью указателей. Определите, выполняет ли приведенная программа поставленную задачу? Если не выполняет, объясните, почему?
		
#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;		
}	
			
		

Ответ:

 (1) программа выполняет поставленную задачу 

 (2) программа не выполняет поставленную задачу, так как в цикле не происходит изменение указателя ptr2 

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


Номер 3
Что делает приведенная программа?
		
#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;		
}

		

Ответ:

 (1) копирует строку str1 в строку str2 

 (2) копирует строку str2 в строку str1 

 (3) просматривает все символы строки str1 

 (4) просматривает все символы строки str2 


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

Ответ:

 (1) #include <stdio.h> #include <conio.h> int main() { char str1[10] = "", str2[10] = ""; char *ptr1, *ptr2; printf("Введите строку: %s", str1); scanf("%s", str1); ptr1 = str1 + strlen(str1) - 1; ptr2 = str2; while (*ptr1) { if (!(*ptr1)) *ptr2 = '\0'; *ptr2 = *ptr1; ptr1--; ptr2++; } printf("str2 = %s\n", str2); return 0; }  

 (2) #include <stdio.h> #include <conio.h> int main() { char str1[10] = "", str2[10] = ""; char *ptr1, *ptr2; printf("Введите строку: %s", str1); scanf("%s", str1); ptr1 = str1 + strlen(str1) - 1; ptr2 = str2; while (ptr1>=str1) { if (ptr1<str1) *ptr2 = '\0'; *ptr2 = *ptr1; ptr1--; ptr2++; } printf("str2 = %s\n", str2); return 0; }  

 (3) #include <stdio.h> #include <conio.h> int main() { char str1[10] = "", str2[10] = ""; char *ptr1, *ptr2; printf("Введите строку: %s", str1); scanf("%s", str1); ptr1 = str1 + strlen(str1); ptr2 = str2; while (ptr1>=str1) { if (ptr1<str1) *ptr2 = '\0'; *ptr2 = *ptr1; ptr1--; ptr2++; } printf("str2 = %s\n", str2); return 0; }  


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

Ответ:

 (1) #include <stdio.h> #include <conio.h> int main() { char str1[10] = "", str2[10] = ""; char *ptr1, *ptr2; printf("Введите строку: %s", str1); scanf("%s", str1); ptr1 = str1 + strlen(str1) - 1; ptr2 = str2; while (*ptr1) { if (!(*ptr1)) *ptr2 = '\0'; *ptr2 = *ptr1; ptr1--; ptr2++; } printf("str2 = %s\n", str2); return 0; }  

 (2) #include <stdio.h> #include <conio.h> int main() { char str1[10] = "", str2[10] = ""; char *ptr1, *ptr2; printf("Введите строку: %s", str1); scanf("%s", str1); ptr1 = str1 + strlen(str1) - 1; ptr2 = str2; while (ptr1>=str1) { if (ptr1<str1) *ptr2 = '\0'; *ptr2 = *ptr1; ptr1--; ptr2++; } printf("str2 = %s\n", str2); return 0; }  

 (3) #include <stdio.h> #include <conio.h> int main() { char str1[10] = "", str2[10] = ""; char *ptr1, *ptr2; printf("Введите строку: %s", str1); scanf("%s", str1); ptr1 = str1 + strlen(str1); ptr2 = str2; while (ptr1>=str1) { if (ptr1<str1) *ptr2 = '\0'; *ptr2 = *ptr1; ptr1--; ptr2++; } printf("str2 = %s\n", str2); return 0; }  


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

Ответ:

 (1) в переменную str2 будет скопирована введенная пользователем строка str1 

 (2) в переменную str2 будет в обратном порядке скопирована введенная пользователем строка str1 

 (3) в переменную str2 будет скопирован первый символ строки str1 


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

Ответ:

 (1) указатель p может содержать адрес только объекта типа void 

 (2) к указателю p неприменима операция разыменования 

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


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

Ответ:

 (1) указатель p может содержать адрес только объекта типа void 

 (2) к указателю p неприменима операция разыменования 

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


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

Ответ:

 (1) потому что не существует автоматического преобразования от void* к указателю на другой тип 

 (2) потому что неизвестен тип, на который он ссылается 

 (3) потому что указатель void* может указывать только на функцию 


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

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

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

Ответ:

 (1) константный указатель plec должен адресовать константу, а переменная lec не является константой 

 (2) константный указатель plec не может быть изменен 

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


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

Ответ:

 (1) int lec = 7, qst = 11; int *const plec = &lec; int *pqst; pqst = &qst; plec++;  

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

 (3) int lec = 7, qst = 11; int *const plec; int *pqst; pqst = &qst; plec = &lec;  


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

Ответ:

 (1) int lec = 7, qst = 11; int *const plec = &lec; int *pqst; pqst = &qst; plec++;  

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

 (3) int lec = 7, qst = 11; int *const plec; int *pqst; pqst = &qst; plec = &lec;  


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

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

Ответ:

 (1) x = y; 

 (2) p1 = &y; 

 (3) *p2 = y; 


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

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

Ответ:

 (1) x = y; 

 (2) p1 = &y; 

 (3) *p2 = y; 


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

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

Ответ:

 (1) x = y; 

 (2) p1 = &y; 

 (3) *p2 = y; 

 (4) переменная z никогда не примет значение 0 




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