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

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

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

Ответ:

 (1) повышение производительности 

 (2) лучшая наглядность и удобство в использовании по сравнению со стандартной записью массивов с индексами 

 (3) использование меньшего количества памяти 


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

Ответ:

 (1) снижение производительности 

 (2) меньшая наглядность по сравнению со стандартной записью массивов с индексами 

 (3) использование большего количества памяти 


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

Ответ:

 (1) при использовании стандартной записи массивов с индексами 

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

 (3) скорость доступа к элементам массива не зависит от метода доступа и определяется только размером массива 


Упражнение 2:
Номер 1
Приведенная программа копирует строку а в строку 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;
}
		
Какая программа аналогична приведенной?
		

Ответ:

 (1) #include <stdio.h> #include <conio.h> int main() { int i; char a[10] = "Test", b[10] = ""; char *pa = &a[1]; char *pb = &b[1]; for (i=0; i<strlen(a); i++) pb[i] = pa[i]; printf("a = %s\n", a); printf("b = %s\n", b); return 0; }  

 (2) #include <stdio.h> #include <conio.h> int main() { int i; char a[10] = "Test", b[10] = ""; char *pa = a[0]; char *pb = b[0]; for (i=0; i<strlen(a); i++) pb[i] = pa[i]; printf("a = %s\n", a); printf("b = %s\n", b); return 0; }  

 (3) #include <stdio.h> #include <conio.h> int main() { int i; char a[10] = "Test", b[10] = ""; char *pa = &a[0]; char *pb = &b[0]; for (i=0; i<strlen(a); i++) pb[i] = pa[i]; printf("a = %s\n", a); printf("b = %s\n", b); return 0; }  


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

Ответ:

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

 (2) #include <stdio.h> #include <conio.h> int main() { int i; char a[10] = "Test", b[10] = ""; char *pa = &a[1]; char *pb = &b[1]; for (i=0; i<strlen(a); i++) pb[i] = pa[i]; printf("a = %s\n", a); printf("b = %s\n", b); return 0; }  

 (3) #include <stdio.h> #include <conio.h> int main() { int i; char a[10] = "Test", b[10] = ""; char *pa = a[0]; char *pb = b[0]; for (i=0; i<strlen(a); i++) pb[i] = pa[i]; printf("a = %s\n", a); printf("b = %s\n", b); return 0; }  


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

Ответ:

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

 (2) #include <stdio.h> #include <conio.h> int main() { int i; char a[10] = "Test", b[10] = ""; char *pa = &a[1]; char *pb = &b[1]; for (i=0; i<strlen(a); i++) pb[i] = pa[i]; printf("a = %s\n", a); printf("b = %s\n", b); return 0; }  

 (3) #include <stdio.h> #include <conio.h> int main() { int i; char a[10] = "Test", b[10] = ""; char *pa = a[0]; char *pb = b[0]; for (i=0; i<strlen(a); i++) pb[i] = pa[i]; printf("a = %s\n", a); printf("b = %s\n", b); return 0; }  

 (4) #include <stdio.h> #include <conio.h> int main() { int i; char a[10] = "Test", b[10] = ""; char *pa = &a[0]; char *pb = &b[0]; for (i=0; i&lt;strlen(a); i++) pb[i] = pa[i]; printf("a = %s\n", a); printf("b = %s\n", b); return 0; }  


Упражнение 3:
Номер 1
Какая программа реализует сортировку массива целых чисел по возрастанию методом "пузырька" (методом прямого обмена)?

Ответ:

 (1) #include <stdio.h> int main() { int i, j, N, buf; int arr[] = {3, 2, 4, 5, 1}; int *ptr1, *ptr2; N = sizeof(arr)/sizeof(arr[0]); for (i=0; i<N; i++) { ptr1 = &arr[i]; for (j=0; j<N-1; j++) { if (*ptr1 > *(ptr1+1)) { buf = *ptr1; *ptr1 = *(ptr1+1); *(ptr1+1) = buf; } }; }; return 0; }  

 (2) #include <stdio.h> int main() { int i, j, N, buf; int arr[] = {3, 2, 4, 5, 1}; int *ptr1, *ptr2; N = sizeof(arr)/sizeof(arr[0]); ptr1 = arr; for (i=0; i<N; i++) for (j=0; j<N-1; j++) { if (*ptr1 > *(ptr1+1)) { buf = *ptr1; *ptr1 = *(ptr1+1); *(ptr1+1) = buf; } ptr1++; }; return 0; }  

 (3) #include <stdio.h> int main() { int i, j, N, buf; int arr[] = {3, 2, 4, 5, 1}; int *ptr1, *ptr2; N = sizeof(arr)/sizeof(arr[0]); ptr1 = arr; for (i=0; i<N; i++) for (j=0; j<N-1; j++) { ptr1 = &arr[j]; if (*ptr1 > *(ptr1+1)) { buf = *ptr1; *ptr1 = *(ptr1+1); *(ptr1+1) = buf; } }; return 0; }  


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

Ответ:

 (1) #include <stdio.h> int main() { int i, j, N, buf; int arr[] = {3, 2, 4, 5, 1}; int *ptr1, *ptr2; N = sizeof(arr)/sizeof(arr[0]); for (i=0; i<N; i++) { ptr1 = &arr[i]; for (j=0; j<N-1; j++) { if (*ptr1 < *(ptr1+1)) { buf = *ptr1; *ptr1 = *(ptr1+1); *(ptr1+1) = buf; } }; }; return 0; }  

 (2) #include <stdio.h> int main() { int i, j, N, buf; int arr[] = {3, 2, 4, 5, 1}; int *ptr1, *ptr2; N = sizeof(arr)/sizeof(arr[0]); ptr1 = arr; for (i=0; i<N; i++) for (j=0; j<N-1; j++) { ptr1 = &arr[j]; if (*ptr1 < *(ptr1+1)) { buf = *ptr1; *ptr1 = *(ptr1+1); *(ptr1+1) = buf; } }; return 0; }  

 (3) #include <stdio.h> int main() { int i, j, N, buf; int arr[] = {3, 2, 4, 5, 1}; int *ptr1, *ptr2; N = sizeof(arr)/sizeof(arr[0]); ptr1 = arr; for (i=0; i<N; i++) for (j=0; j<N-1; j++) { if (*ptr1 < *(ptr1+1)) { buf = *ptr1; *ptr1 = *(ptr1+1); *(ptr1+1) = buf; } ptr1++; }; return 0; }  


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

Ответ:

 (1) #include <stdio.h> int main() { int i, j, N, buf; int arr[] = {3, 2, 4, 5, 1}; int *ptr1, *ptr2; N = sizeof(arr)/sizeof(arr[0]); ptr1 = arr; for (i=0; i<N; i++) for (j=0; j<N-1; j++) { ptr1 = &arr[j]; if (*ptr1 < *(ptr1+1)) { buf = *ptr1; *ptr1 = *(ptr1+1); *(ptr1+1) = buf; } }; return 0; }  

 (2) #include <stdio.h> int main() { int i, j, N, buf, min; int arr[] = {3, 2, 4, 5, 1}; int *ptr; N = sizeof(arr)/sizeof(arr[0]); ptr = arr; for (i=0; i<N-1; i++) { min = i; for (j=i+1; j<N; j++) { if (*(ptr+j)<*(ptr+min)) min = j; buf = *(ptr+i); *(ptr+i) = *(ptr+min); *(ptr+min) = buf; } } return 0; }  

 (3) #include <stdio.h> int main() { int i, j, N, buf; int arr[] = {3, 2, 4, 5, 1}; int *ptr1, *ptr2; N = sizeof(arr)/sizeof(arr[0]); ptr1 = arr; for (i=0; i<N; i++) for (j=0; j<N-1; j++) { ptr1 = &arr[j]; if (*ptr1 > *(ptr1+1)) { buf = *ptr1; *ptr1 = *(ptr1+1); *(ptr1+1) = buf; } }; return 0; }  


Упражнение 4:
Номер 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 


Упражнение 5:
Номер 1
Какая схема соответсвует заданному фрагменту кода?

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

Ответ:

 (1) files 

 (2) files 

 (3) files 


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

Ответ:

 (1) int x = 88, *ptr1, *ptr2; ptr1 = &x; ptr2 = &x;  

 (2) int x = 88, *ptr1, **ptr2; ptr1 = &x; ptr2 = &ptr1;  

 (3) int x = 88, *ptr2, **ptr1; ptr2 = &x; ptr1 = &ptr2;  


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

Ответ:

 (1) int x = 88, *ptr1, *ptr2; ptr1 = &x; ptr2 = &x;  

 (2) int x = 88, *ptr1, **ptr2; ptr1 = &x; ptr2 = &ptr1;  

 (3) int x = 88, *ptr2, **ptr1; ptr2 = &x; ptr1 = &ptr2;  


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

Ответ:

 (1) 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; i++) { sum += *ptr; ptr++; }  

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

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


Номер 2
В результате выполнения приведенного фрагмента кода на экран выводится значение переменной 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;

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

Ответ:

 (1) N-кратное наращивание значения переменной sum на величину, равную значению первого элемента массива arr 

 (2) вычисление суммы всех элементов массива arr 

 (3) N-кратное смещение указателя на значение, равное sum 


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

Ответ:

 (1) 11 

 (2) 12 

 (3) 15 


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

Ответ:

 (1) 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>5) && (m<9)) strcpy(s, &season[2]); else strcpy(s, &season[3]); printf("Your birthday is in %s\n", s);  

 (2) 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[1]); else if ((m>2) && (m<6)) strcpy(s, season[2]); else if ((m>5) && (m<9)) strcpy(s, season[3]); else strcpy(s, season[4]); printf("Your birthday is in %s\n", s);  

 (3) 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>5) && (m<9)) strcpy(s, season[2]); else strcpy(s, season[3]); printf("Your birthday is in %s\n", s);  


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

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

Ответ:

 (1) неверное объявление массива указателей 

 (2) неверное обращение к элементам массива указателей 

 (3) неверная индексация элементов массива указателей 

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


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

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

Ответ:

 (1) неверное объявление массива указателей 

 (2) неверное обращение к элементам массива указателей 

 (3) неверная индексация элементов массива указателей 

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


Упражнение 8:
Номер 1
Указатель p инициализирован строковой константой: char *p = "тестовая строка". Что в данном случае хранится в указателе p?

Ответ:

 (1) заданная строка 

 (2) адрес заданной строки 

 (3) первый элемент символьного массива 

 (4) указатель p может хранить только адрес и не может быть инициализирован строковой константой 


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

Ответ:

 (1) в указателе p 

 (2) в специальной таблице строк 

 (3) указатель p может хранить только адрес и не может быть инициализирован строковой константой 


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

Ответ:

 (1) заданная строка хранится в указателе p 

 (2) заданная строка хранится в специальной таблице строк 

 (3) указатель p может хранить только адрес и не может быть инициализирован строковой константой 


Упражнение 9:
Номер 1
Чему будет равно значение переменной 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);
		
		

Ответ:

 (1) 120 

 (2) 64 

 (3) 56 


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

Ответ:

 (1) 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[1][0]; printf("n = %d\n", n); printf("k = %d\n", k); for (i=0; i<(n*k)-k; i++) { if (!(*(ptr+i)%2)) sum += *(ptr+i);  

 (2) 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[1][1]; printf("n = %d\n", n); printf("k = %d\n", k); for (i=0; i<(n*k)-k; i++) { if (!(*(ptr+i)%2)) sum += *(ptr+i);  

 (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, sum = 0; n = sizeof(m)/sizeof(m[0]); k = sizeof(m[0])/sizeof(m[0][0]); ptr = &m[1][1]; printf("n = %d\n", n); printf("k = %d\n", k); for (i=0; i<(n*k)-k; i++) { if (*(ptr+i)%2) sum += *(ptr+i);  


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

Ответ:

 (1) 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[1][0]; printf("n = %d\n", n); printf("k = %d\n", k); for (i=0; i<(n*k)-k; i++) { if (!(*(ptr+i)%2)) sum += *(ptr+i);  

 (2) 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[1][1]; printf("n = %d\n", n); printf("k = %d\n", k); for (i=0; i<(n*k)-k; i++) { if (*(ptr+i)%2) sum += *(ptr+i);  

 (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, sum = 0; n = sizeof(m)/sizeof(m[0]); k = sizeof(m[0])/sizeof(m[0][0]); ptr = &m[1][0]; printf("n = %d\n", n); printf("k = %d\n", k); for (i=0; i<(n*k)-k; i++) { if (*(ptr+i)%2) sum += *(ptr+i);  


Упражнение 10:
Номер 1
В каком случае используется многоуровневая адресация?

Ответ:

 (1) int x = 100, *ptr1, *ptr2; ptr1 = &x; ptr2 = &x;  

 (2) int x = 100, *ptr1, **ptr2; ptr1 = &x; ptr2 = &ptr1;  

 (3) int data[7]; int *pd[] = {&data[0], &data[4], &data[2]};  


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

Ответ:

 (1) ситуация, когда два разных указателя хранят адрес одной и той же переменной 

 (2) ситуация, когда один указатель cсылается на другой указатель 

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


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

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

Ответ:

 (1) указатель ptr1 содержит адрес переменной x 

 (2) указатель ptr2 содержит адрес переменной x 

 (3) для получения значения переменной x необходимо выполнить операцию *ptr1 

 (4) для получения значения переменной x необходимо выполнить операцию *ptr2 


Упражнение 11:
Номер 1
Задан фрагмент кода:

	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?
		

Ответ:

 (1) m[0][3] 

 (2) m[1][3] 

 (3) m[2][0] 

 (4) m[2][1] 


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

	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?
		

Ответ:

 (1) m[2][1] 

 (2) m[1][4] 

 (3) m[2][1] 

 (4) m[2][4] 


Номер 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?
		

Ответ:

 (1)

 (2)

 (3) 11 

 (4) 12 


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

Ответ:

 (1) многоуровневая адресация упрощает программу 

 (2) при использовании многоуровневой адресации уменьшается вероятность возникновения ошибок 

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


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

Ответ:

 (1) многоуровневая адресация упрощает программу 

 (2) при использовании многоуровневой адресации уменьшается вероятность возникновения ошибок 

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


Номер 3
Каковы недостатки многоуровневой адресации?

Ответ:

 (1) усложнение программы 

 (2) плохая читаемость программы 

 (3) увеличение вероятности возникновения ошибок 




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