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

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

Упражнение 1:
Номер 1
Какие переменные являются фактическими параметрами функции sq()?

int sq(int a, int x)
{
	int i, res = 1;
	for (i=0; i<x; i++)
		res*= a;
	return res;
}

int main(void)
{
	int n=4, b = 3, p;
	p = sq(n,b);
	printf("%d^%d = %d\n", n, b, p);
	
	return 0;
}
		
		

Ответ:

 (1) a 

 (2) x 

 (3) n 

 (4) b 


Номер 2
Какие переменные являются формальными параметрами функции sq()?

int sq(int a, int x)
{
	int i, res = 1;
	for (i=0; i<x; i++)
		res*= a;
	return res;
}

int main(void)
{
	int n=4, b = 3, p;
	p = sq(n,b);
	printf("%d^%d = %d\n", n, b, p);
	
	return 0;
}
		
		

Ответ:

 (1) a 

 (2) x 

 (3) n 

 (4) b 


Номер 3
Какие переменные являются формальными параметрами функции sum()?

int sum(int a, int b)
{
	return a+b;
}

int main(void)
{
	int n=4, m=3, s;
	s = sum(n,m);
	printf("%d + %d = %d\n", n, m, s);
	
	return 0;
}
		
		

Ответ:

 (1) a 

 (2) b 

 (3) n 

 (4) m 


Упражнение 2:
Номер 1
Что обозначает тот факт, что формальные параметры функции локализованы в ней?

Ответ:

 (1) то, что параметры недоступны вне определения функции 

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

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

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


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

Ответ:

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

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

 (3) при передаче в функцию в качестве параметра массива возможно изменение значений элементов этого массива из тела функции 


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

Ответ:

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

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

 (3) при передаче в функцию в качестве параметра массива возможно изменение значений элементов этого массива из тела функции 


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

Ответ:

 (1) double circle(double pi, int R) { return 2*pi*R; } int main(void) { int R=5; double pi=3.14, L; L = circle(pi, R); printf("L = %.2f\n", L); return 0; }  

 (2) int min(int a, b) { int m = (a<b) ? a : b; return m; } int main(void) { int x=-5, y=5, m; m = min(x,y); printf("min = %d\n", m); return 0; }  

 (3) int max(int a, int b) { int m = (a>b) ? a : b; return m; } int main(void) { double x=-5, y=5, m; m = max(x,y); printf("max = %d\n", m); return 0; }  


Номер 2
Какой фрагмент кода не содержит ошибку?

Ответ:

 (1) double circle(double pi, int R) { return 2*pi*R; } int main(void) { int R=5; double pi=3.14, L; L = circle(pi, R); printf("L = %.2f\n", L); return 0; }  

 (2) int min(int a, b) { int m = (a<b) ? a : b; return m; } int main(void) { int x=-5, y=5, m; m = min(x,y); printf("min = %d\n", m); return 0; }  

 (3) double max(double a, double b) { if (a>b) return a; return b; } int main(void) { double x=-5.00, y=5.12, m; m = max(x,y); printf("max = %.2f\n", m); return 0; }  


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

double max(double a, b)
{
	if (a>b) 
		return a;
	return b;
}

int main(void)
{
	double x=-5.00, y=5.12;
	printf("max = %.2f\n", max(x,y));
	
	return 0;
}
		
		

Ответ:

 (1) в функции max два оператора возврата из функции (return

 (2) в объявлении функции max отсутсвтует спецификатор типа переменной b 

 (3) функция max вызывается из функции printf 


Упражнение 4:
Номер 1
Функция is_in определяет, входит ли символ c в строку s:

	int is_in(char *s,  char c)				(1)
	{
	  while(*s)						(2)
		if(*s==c) return 1;				(3)	
		else s++;					(4)
	  return 0;						(5)
	}
	
Что произойдет при вызове функции is_in("Lection 10", 'i')?
		

Ответ:

 (1) после выполннеия оператора в строке (3) произойдет выход из функции 

 (2) после выполннеия оператора в строке (5) произойдет выход из функции 

 (3) при выполнении функции возникнет ошибка, так как функция содержит два оператора return 


Номер 2
Функция is_in определяет, входит ли символ c в строку s:

	int is_in(char *s,  char c)				(1)
	{
	  while(*s)						(2)
		if(*s==c) return 1;				(3)	
		else s++;					(4)
	  return 0;						(5)
	}
	
При выполнении какой строки произойдет выход из фукнции при ее вызове is_in("Lection 10", 'i')?	
		

Ответ:

 (1) (1) 

 (2) (2) 

 (3) (3) 

 (4) (4) 

 (5) (5) 


Номер 3
Функция is_in определяет, входит ли символ c в строку s:

	int is_in(char *s,  char c)				(1)
	{
	  while(*s)						(2)
		if(*s==c) return 1;				(3)	
		else s++;					(4)
	  return 0;						(5)
	}
	
Чему будет равно значение переменной i в результате вызова int i = is_in("Lection 10", 'a')?

Ответ:

 (1)

 (2)

 (3) при выполнении функции возникнет ошибка, так как функция содержит два оператора return 


Упражнение 5:
Номер 1
В каких программах используются прототипы функций?

Ответ:

 (1) int min(int a, b) { int m = (a<b) ? a : b; return m; } int main(void) { int x=-5, y=5, m; m = min(x,y); printf("min = %d\n", m); return 0; }  

 (2) #include <stdio.h> #include <conio.h> int main(void) { void printMessage (void); printMessage(); printf("\nPress any key: "); _getch(); return 0; } void printMessage (void) { printf("Function for Lection 10\n"); return; printf("123\n"); }  

 (3) #include <stdio.h> #include <string.h> int search(char *p[], char *name); char *names[] = { "Сергей", "Юрий", "Ольга", "Игорь", NULL}; int main(void) { if(search(names, "Ольга") != -1) printf("Ольга есть в списке.\n"); if(search(names, "Павел") == -1) printf("Павел в списке не найден.\n"); return 0; } int search(char *p[], char *name) { int t; for(t=0; p[t]; ++t) if(!strcmp(p[t], name)) return t; return -1; }  


Номер 2
В какой строке объявлен прототип функции search()?

#include <stdio.h>
#include <string.h>

int search(char *p[], char *name);				(1)

char *names[] = {
  "Сергей",
  "Юрий",
  "Ольга",
  "Игорь",
  NULL}; 

int main(void)
{
  if(search(names, "Ольга") != -1)				(2)
    printf("Ольга есть в списке.\n");

  return 0;
}

int search(char *p[], char *name)				(3)
{
  int t;
  for(t=0; p[t]; ++t)
    if(!strcmp(p[t], name)) return t;
  return -1;
}
		
		

Ответ:

 (1) в строке (1) 

 (2) в строке (2) 

 (3) в строке (3) 


Номер 3
В каких программах не используются прототипы функций?

Ответ:

 (1) int min(int a, b) { int m = (a<b) ? a : b; return m; } int main(void) { int x=-5, y=5, m; m = min(x,y); printf("min = %d\n", m); return 0; }  

 (2) #include <stdio.h> #include <conio.h> int main(void) { void printMessage (void); printMessage(); printf("\nPress any key: "); _getch(); return 0; } void printMessage (void) { printf("Function for Lection 10\n"); return; printf("123\n"); }  

 (3) #include <stdio.h> #include <string.h> int search(char *p[], char *name); char *names[] = { "Сергей", "Юрий", "Ольга", "Игорь", NULL}; int main(void) { if(search(names, "Ольга") != -1) printf("Ольга есть в списке.\n"); if(search(names, "Павел") == -1) printf("Павел в списке не найден.\n"); return 0; } int search(char *p[], char *name) { int t; for(t=0; p[t]; ++t) if(!strcmp(p[t], name)) return t; return -1; }  


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

#include <stdio.h>
#include <stdarg.h>

int average(int first, ... );

int main( void )
{
	int x = average(2, 3, 4, -1);

	return 0;
}

int average( int first, ... )
{
   int count = 0, sum = 0, i = first;
   va_list marker;
   va_start(marker, first);

   while( i != -1 ) {
      sum += i;
      count++;
      i = va_arg(marker, int);
   }
   va_end(marker);

   return( sum ? (sum / count) : 0 );
}
		
		

Ответ:

 (1)

 (2)

 (3)


Номер 2
Функция average вычисляет среднее арифметическое заданных аргументов:

#include <stdio.h>
#include <stdarg.h>

int average(int first, ... );

int main( void )
{
	int x;
	<Вызов фукнции average()>;

	return 0;
}

int average( int first, ... )
{
   int count = 0, sum = 0, i = first;
   va_list marker;
   va_start(marker, first);

   while( i != -1 ) {
      sum += i;
      count++;
      i = va_arg(marker, int);
   }
   va_end(marker);

   return( sum ? (sum / count) : 0 );
}

В результете какого вызова функции average значение переменной x будет равно 2?		
		

Ответ:

 (1) x = average(2, 3, 4, -1); 

 (2) x = average(2, 3, 1, 2, -1); 

 (3) x = average(2, 2); 


Номер 3
Функция average вычисляет среднее арифметическое заданных аргументов:

#include <stdio.h>
#include <stdarg.h>

int average(int first, ... );

int main( void )
{
	int x;
	<Вызов фукнции average()>;

	return 0;
}

int average( int first, ... )
{
   int count = 0, sum = 0, i = first;
   va_list marker;
   va_start(marker, first);

   while( i != -1 ) {
      sum += i;
      count++;
      i = va_arg(marker, int);
   }
   va_end(marker);

   return( sum ? (sum / count) : 0 );
}

В результете какого вызова функции average значение переменной x будет равно 3?		
		

Ответ:

 (1) x = average(2, 3, 4, -1); 

 (2) x = average(1, 6, 2); 

 (3) x = average(2, 6, 2, 1, -1); 


Упражнение 7:
Номер 1
Какое значение n должен задать пользователь для того, чтобы в результате выполнения приведенной программы на экран было выведено сообщение Ошибка! Сообщение 1 Сообщение 2?

#include <stdio.h>
#include <conio.h>
#include <stdarg.h>

void error(int severity, ... );

int main( void )
{
	char err[][30] = {"Сообщение 1", "Сообщение 2"};
	int n = -1;
	
	printf("Введите степень критичности ошибки (целое число): ");
	scanf("%d", &n);

	switch (n) {
		case 0: error(0, "Ошибка!", '\0');
			break;
		case 1: error(0, "Ошибка!", err[0], '\0');
			break;
		default: error(1, "Ошибка!", err[0], err[1], '\0');
	}

	return 0;
}

void error(int severity, ... )
{
   va_list ap;
   va_start(ap, severity);

   for (;;) {
	   char *p = va_arg(ap, char*);
	   if (p == '\0') break;
	   printf("%s ", p);
   }
   va_end(ap);
   printf("\n");
}
		
		

Ответ:

 (1)

 (2)

 (3)


Номер 2
Программа формирует сообщение об ошибке из отдельных строк в зависимости от степени критичности ошибки:

#include <stdio.h>
#include <conio.h>
#include <stdarg.h>

void error(int severity, ... );

int main( void )
{
	char err[][30] = {"Сообщение 1", "Сообщение 2"};
	int n = -1;
	
	printf("Введите степень критичности ошибки (целое число): ");
	scanf("%d", &n);

	switch (n) {
		case 0: error(0, "Ошибка!", '\0');
			break;
		case 1: error(0, "Ошибка!", err[0], '\0');
			break;
		default: error(1, "Ошибка!", err[0], err[1], '\0');
	}

	return 0;
}

void error(int severity, ... )
{
   va_list ap;
   va_start(ap, severity);

   for (;;) {
	   char *p = va_arg(ap, char*);
	   if (p == '\0') break;
	   printf("%s ", p);
   }
   va_end(ap);
   printf("\n");
}
	
Какое сообщение будет выведено на экран, если пользователь задаст значение n равным 0?
		

Ответ:

 (1) Ошибка! 

 (2) Ошибка! Сообщение 1 

 (3) Ошибка! Сообщение 1 Сообщение 2 


Номер 3
Программа формирует сообщение об ошибке из отдельных строк в зависимости от степени критичности ошибки:

#include <stdio.h>
#include <conio.h>
#include <stdarg.h>

void error(int severity, ... );

int main( void )
{
	char err[][30] = {"Сообщение 1", "Сообщение 2"};
	int n = -1;
	
	printf("Введите степень критичности ошибки (целое число): ");
	scanf("%d", &n);

	switch (n) {
		case 0: error(0, "Ошибка!", '\0');
			break;
		case 1: error(0, "Ошибка!", err[0], '\0');
			break;
		default: error(1, "Ошибка!", err[0], err[1], '\0');
	}

	return 0;
}

void error(int severity, ... )
{
   va_list ap;
   va_start(ap, severity);

   for (;;) {
	   char *p = va_arg(ap, char*);
	   if (p == '\0') break;
	   printf("%s ", p);
   }
   va_end(ap);
   printf("\n");
}
	
Какое сообщение будет выведено на экран, если пользователь задаст значение n равным 10?
		

Ответ:

 (1) Ошибка! 

 (2) Ошибка! Сообщение 1 

 (3) Ошибка! Сообщение 1 Сообщение 2 

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


Упражнение 8:
Номер 1
Необходимо написать функцию sum, которая будет вычислять сумму всех элементов массива. В данную функцию должно передаваться два параметра - массив и размер массива. В какой программе функция sum объявлена верно?

Ответ:

 (1) #include <stdio.h> #define n 10 int sum(int mas, int k); int main( void ) { int arr[n] = {3,4,5,4,4}; printf("Сумма элементов массива: %d\n", sum(arr,n)); return 0; } int sum(int mas, int k) { int i, s = 0; for (i=0; i<k; i++) s += mas[i]; return s; }  

 (2) #include <stdio.h> #define n 10 int sum(int mas[], int k); int main( void ) { int arr[n] = {3,4,5,4,4}; printf("Сумма элементов массива: %d\n", sum(arr,n)); return 0; } int sum(int mas[], int k) { int i, s = 0; for (i=0; i<k; i++) s += mas[i]; return s; }  

 (3) #include <stdio.h> #define n 10 int sum(int mas[0], int k); int main( void ) { int arr[n] = {3,4,5,4,4}; printf("Сумма элементов массива: %d\n", sum(arr,n)); return 0; } int sum(int mas[0], int k) { int i, s = 0; for (i=0; i<k; i++) s += mas[i]; return s; }  

 (4) #include <stdio.h> #define n 10 int sum(int* mas, int k); int main( void ) { int arr[n] = {3,4,5,4,4}; printf("Сумма элементов массива: %d\n", sum(arr,n)); return 0; } int sum(int* mas, int k) { int i, s = 0; for (i=0; i<k; i++) s += mas[i]; return s; }  


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

Ответ:

 (1) #include <stdio.h> #define n 10 int sum(int mas, int k); int main( void ) { int arr[n] = {3,4,5,4,4}; printf("Сумма элементов массива: %d\n", sum(arr,n)); return 0; } int sum(int mas, int k) { int i, s = 0; for (i=0; i<k; i++) s += mas[i]; return s; }  

 (2) #include <stdio.h> #define n 10 int sum(int mas[], int k); int main( void ) { int arr[n] = {3,4,5,4,4}; printf("Сумма элементов массива: %d\n", sum(arr,n)); return 0; } int sum(int mas[], int k) { int i, s = 0; for (i=0; i<k; i++) s += mas[i]; return s; }  

 (3) #include <stdio.h> #define n 10 int sum(int mas[0], int k); int main( void ) { int arr[n] = {3,4,5,4,4}; printf("Сумма элементов массива: %d\n", sum(arr,n)); return 0; } int sum(int mas[0], int k) { int i, s = 0; for (i=0; i<k; i++) s += mas[i]; return s; }  

 (4) #include <stdio.h> #define n 10 int sum(int* mas, int k); int main( void ) { int arr[n] = {3,4,5,4,4}; printf("Сумма элементов массива: %d\n", sum(arr,n)); return 0; } int sum(int* mas, int k) { int i, s = 0; for (i=0; i<k; i++) s += mas[i]; return s; }  


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

Ответ:

 (1) #include <stdio.h> #define n 10 int sum(int mas, int k); int main( void ) { int arr[n] = {3,4,5,4,4}; printf("Сумма элементов массива: %d\n", sum(arr,n)); return 0; } int sum(int mas, int k) { int i, s = 0; for (i=0; i<k; i++) s += mas[i]; return s; }  

 (2) #include <stdio.h> #define n 10 int sum(int mas[], int k); int main( void ) { int arr[n] = {3,4,5,4,4}; printf("Сумма элементов массива: %d\n", sum(arr,n)); return 0; } int sum(int mas[], int k) { int i, s = 0; for (i=0; i<k; i++) s += mas[i]; return s; }  

 (3) #include <stdio.h> #define n 10 int sum(int mas[n], int k); int main( void ) { int arr[n] = {3,4,5,4,4}; printf("Сумма элементов массива: %d\n", sum(arr,n)); return 0; } int sum(int mas[n], int k) { int i, s = 0; for (i=0; i<k; i++) s += mas[i]; return s; }  

 (4) #include <stdio.h> #define n 10 int sum(int* mas, int k); int main( void ) { int arr[n] = {3,4,5,4,4}; printf("Сумма элементов массива: %d\n", sum(arr,n)); return 0; } int sum(int* mas, int k) { int i, s = 0; for (i=0; i<k; i++) s += mas[i]; return s; }  


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

#include <stdio.h>
#define n 10

void fun(int *mas, int k);

int main( void )
{
	int arr[n] = {3,4,5,4,4};
	int i;
	fun(arr, n);
	return 0;
}

void fun(int *mas, int k)
{
   int i, s = 0;
   for (i=0; i<k; i++) ++mas[i];
}

		

Ответ:

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

 (2) значения всех элементов массива arr будут увеличены на 1 

 (3) ничего не произойдет, так как функция fun(int *mas, int k) не возвращает значения 


Номер 2
Что произойдет после выполнения приведенной программы?

#include <stdio.h>
#define n 10

void fun(int *mas, int k);

int main( void )
{
	int arr[n] = {3,4,5,4,4};
	int i;
	fun(arr, n);
	for (i=0; i<n; i++) 
		printf("arr[%d] = %d\n", i, arr[i]);
	return 0;
}

void fun(int *mas, int k)
{
   int i, s = 0;
   for (i=0; i<k; i++) mas[i] *= 2;
}

		

Ответ:

 (1) ничего не произойдет, так как функция fun(int *mas, int k) не возвращает значения 

 (2) значения всех элементов массива arr будут увеличены в два раза 

 (3) размер памяти для хранения массива arr будет увеличен в два раза 


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

#include <stdio.h>
#define n 5

void fun(int *mas, int k);
int sum(int *mas, int k);

int main( void )
{
	int arr[n] = {3,4,1,2};
	int i, s;
	fun(arr, n);
	s = sum(arr, n);
	return 0;
}

void fun(int *mas, int k)
{
   int i, s = 0;
   for (i=0; i<k; i++) ++mas[i];
}

int sum(int *mas, int k)
{
   int i, s = 0;
   for (i=0; i<k; i++) s += mas[i];
   return s;
}

		

Ответ:

 (1) 10 

 (2) 14 

 (3) 15 


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

#include <stdio.h>
#include <stdlib.h>
#define n 2
#define m 3

int sum(int *a, int x, int y);

int main( void )
{
	int i, s;
	int a[n][m] = {{1,2,3}, {4,5,6}};
	
	s = sum(*a, n, m);
	printf("Сумма элементов а: %d\n", s);
	
	return 0;
}

int sum(int *a, int x, int y)
{
   int i, j, s = 0;
   for (i=0; i<x; i++) 
	   for (j=0; j<y; j++) s += a[i*y+j];
   return s;
}
		
		

Ответ:

 (1)

 (2) 15 

 (3) 21 


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

Ответ:

 (1) #include <stdio.h> #include <stdlib.h> #define n 2 #define m 3 int sum(int *a, int x, int y); int main( void ) { int i, s; int a[n][m] = {{1,2,3}, {4,5,6}}; s = sum(a, n, m); printf("Сумма элементов а: %d\n", s); return 0; } int sum(int *a, int x, int y) { int i, j, s = 0; for (i=0; i<x; i++) for (j=0; j<y; j++) s += a[i*y+j]; return s; }  

 (2) #include <stdio.h> #include <stdlib.h> #define n 2 #define m 3 int sum(int *a, int x, int y); int main( void ) { int i, s; int a[n][m] = {{1,2,3}, {4,5,6}}; s = sum(a[0][0], n, m); printf("Сумма элементов а: %d\n", s); return 0; } int sum(int *a, int x, int y) { int i, j, s = 0; for (i=0; i<x; i++) for (j=0; j<y; j++) s += a[i*y+j]; return s; }  

 (3) #include <stdio.h> #include <stdlib.h> #define n 2 #define m 3 int sum(int *a, int x, int y); int main( void ) { int i, s; int a[n][m] = {{1,2,3}, {4,5,6}}; s = sum(&a[0][0], n, m); printf("Сумма элементов а: %d\n", s); return 0; } int sum(int *a, int x, int y) { int i, j, s = 0; for (i=0; i<x; i++) for (j=0; j<y; j++) s += a[i*y+j]; return s; }  


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

Ответ:

 (1) #include <stdio.h> #include <stdlib.h> #define n 2 #define m 3 int sum(int *a, int x, int y); int main( void ) { int i, s; int a[n][m] = {{1,2,3}, {4,5,6}}; s = sum(a, n, m); printf("Сумма элементов а: %d\n", s); return 0; } int sum(int *a, int x, int y) { int i, j, s = 0; for (i=0; i<x; i++) for (j=0; j<y; j++) s += a[i*y+j]; return s; }  

 (2) #include <stdio.h> #include <stdlib.h> #define n 2 #define m 3 int sum(int *a, int x, int y); int main( void ) { int i, s; int a[n][m] = {{1,2,3}, {4,5,6}}; s = sum(a[0][0], n, m); printf("Сумма элементов а: %d\n", s); return 0; } int sum(int *a, int x, int y) { int i, j, s = 0; for (i=0; i<x; i++) for (j=0; j<y; j++) s += a[i*y+j]; return s; }  

 (3) #include <stdio.h> #include <stdlib.h> #define n 2 #define m 3 int sum(int *a, int x, int y); int main( void ) { int i, s; int a[n][m] = {{1,2,3}, {4,5,6}}; s = sum(&a[0][0], n, m); printf("Сумма элементов а: %d\n", s); return 0; } int sum(int *a, int x, int y) { int i, j, s = 0; for (i=0; i<x; i++) for (j=0; j<y; j++) s += a[i*y+j]; return s; }  


Упражнение 11:
Номер 1
В какой функции содержится ошибка?

Ответ:

 (1) int fun(int *arr, int n) { int i, s=0; for (i=0; i<n; i++) s+=arr[i]; return s; }  

 (2) int fun(int *arr, int n) { int i, s=0; for (i=0; i<n; i++) arr[i] *= 2; return s; }  

 (3) int* fun() { int a = 10; return &a; }  


Номер 2
Какая ошибка содержится в приведенной функции?

int* fun() {
	int a = 10;
	return &a;
}
			
		

Ответ:

 (1) нельзя возвращать из функции указатель на локальную переменную 

 (2) синтаксическая ошибка 

 (3) функция не содержит ошибок 


Номер 3
В какой функции содержится ошибка?

Ответ:

 (1) void fun(int *arr, int n) { int i, s=0; for (i=0; i<n; i++) arr[i] *= 2; return s; }  

 (2) int* fun() { int a = 10; return &a; }  

 (3) int fun(int *arr, int n) { int i, s=0; for (i=0; i<n; i++) s+=arr[i]; return s; }  


Упражнение 12:
Номер 1
В какой программе используются функции (как стандартные, так и пользовательские) с переменным числом аргументов?

Ответ:

 (1) #include <stdio.h> #include <stdarg.h> int average(int first, ... ); int main( void ) { int x = average(2, 3, 4, -1); return 0; } int average( int first, ... ) { int count = 0, sum = 0, i = first; va_list marker; va_start(marker, first); while( i != -1 ) { sum += i; count++; i = va_arg(marker, int); } va_end(marker); return( sum ? (sum / count) : 0 ); }  

 (2) #include <stdio.h> #include <conio.h> int main(void) { void printMessage (void); printMessage(); printf("\nPress any key: "); _getch(); return 0; } void printMessage (void) { printf("Function for Lection 10\n"); return; printf("123\n"); }  

 (3) #include <stdio.h> #include <stdlib.h> #define n 2 #define m 3 int sum(int *a, int x, int y); int main( void ) { int i, s; int a[n][m] = {{1,2,3}, {4,5,6}}; s = sum(&a[0][0], n, m); printf("Результат вычисления\n"); printf("Сумма элементов а[%d][%d] = %d\n", n, m, s); return 0; } int sum(int *a, int x, int y) { int i, j, s = 0; for (i=0; i<x; i++) for (j=0; j<y; j++) s += a[i*y+j]; return s; }  


Номер 2
В какой программе не используются функции (как стандартные, так и пользовательские) с переменным числом аргументов?

Ответ:

 (1) #include <stdio.h> #include <stdarg.h> int average(int first, ... ); int main( void ) { int x = average(2, 3, 4, -1); return 0; } int average( int first, ... ) { int count = 0, sum = 0, i = first; va_list marker; va_start(marker, first); while( i != -1 ) { sum += i; count++; i = va_arg(marker, int); } va_end(marker); return( sum ? (sum / count) : 0 ); }  

 (2) #include <stdio.h> #include <conio.h> int main(void) { void printMessage (void); printMessage(); printf("\nPress any key: "); _getch(); return 0; } void printMessage (void) { printf("Function for Lection 10\n"); return; printf("123\n"); }  

 (3) #include <stdio.h> #include <stdlib.h> #define n 2 #define m 3 int sum(int *a, int x, int y); int main( void ) { int i, s; int a[n][m] = {{1,2,3}, {4,5,6}}; s = sum(&a[0][0], n, m); printf("Результат вычисления\n"); printf("Сумма элементов а[%d][%d] = %d\n", n, m, s); return 0; } int sum(int *a, int x, int y) { int i, j, s = 0; for (i=0; i<x; i++) for (j=0; j<y; j++) s += a[i*y+j]; return s; }  


Номер 3
В какой программе количество вызовов функций (как стандартных, так и пользовательских) с переменным числом аргументов наибольшее?

Ответ:

 (1) #include <stdio.h> #include <stdarg.h> int average(int first, ... ); int main( void ) { int x = average(2, 3, 4, -1); int y = average(5, 3, -1); return 0; } int average( int first, ... ) { int count = 0, sum = 0, i = first; va_list marker; va_start(marker, first); while( i != -1 ) { sum += i; count++; i = va_arg(marker, int); } va_end(marker); return( sum ? (sum / count) : 0 ); }  

 (2) #include <stdio.h> #include <conio.h> int main(void) { void printMessage (void); printMessage(); printf("\nPress any key: "); _getch(); return 0; } void printMessage (void) { printf("Function for Lection 10\n"); return; printf("123\n"); }  

 (3) #include <stdio.h> #include <stdlib.h> #define n 2 #define m 3 int sum(int *a, int x, int y); int main( void ) { int i, s; int a[n][m] = {{1,2,3}, {4,5,6}}; s = sum(&a[0][0], n, m); printf("Результат вычисления суммы элементов\n"); printf("Сумма элементов а[%d][%d] = %d\n", n, m, s); printf("Число строк: %d\n", n); printf("Число столбцов: %d\m", m); return 0; } int sum(int *a, int x, int y) { int i, j, s = 0; for (i=0; i<x; i++) for (j=0; j<y; j++) s += a[i*y+j]; return s; }  




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