Главная / Программирование /
Программирование на языке 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) 0 
 (2) 1 
 (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) 1 
 (2) 2 
 (3) 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) 0 
 (2) 1 
 (3) 2 
Номер 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) 5 
 (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;
}