2 ( Параметры по умолчанию). Пусть описана функция
void fun (int i, char c='*', float f=1.2)
{ cout<< endl<< i<<'\t'<<c<<'\t'<<f<< endl; }
Какие из следующих вызовов допустимы? Что будет выведено для правильных вызовов? 1) fun(10, ‘A’); 2) fun (10, 65); 3) if (fun(10, ‘A’, 2.2)) cout<<”+++”; else cout<<”---“;
3 (Перегрузка функций). Будет ли компилироваться и выполняться следующая программа?
int Sum (int , int ); //1
float Sum (float, float); //2
int main() {int i1=…, i2=…; cout<<Sum(i1,i2)<<" "; //3
float f1=…, f2=…; cout<<Sum(f1,f2)<<" "; //4
getch(); return 0; }
int Sum (int x, int y) {return x%10 + y%10; } //5
float Sum (float x, float y) {return x>y?x:y;} //6
Варианты ответов:
1) Да. Будет выведено (записать самим) … 2) Нет, так как …
3) Нет, так как …. 4) Нет, так как ….
5) Нет (указать другую причину).
4. (Как вызвать функцию типа void и функцию, отличную от типа void).Пусть описаны функции
4.1. void Test (int x, int y, int &r) { r=…; }
int Test2 (int x, int y, int& r) { r=выражение1; return выражение 2; }
Укажите номера строк, в которых правильные вызовы функций. Что будет выведено для правильных вызовов? int main() { int R;
if (Test(12, 12, R)) cout<<" Yes "<<R; else cout<<" No "<<R; //1
if (Test2(14, 12, R)) cout<<" Yes "<<R; else cout<<" No "<<R; //2
Test2(4, 14, R); cout<<" "<<R<<" "; //3
Test(12, 12, R); R ? cout<<" Yes ": cout<<" No "; cout<<R; //4
Какие из следующих вызовов синтаксически правильные. Что будет выведено? ( в качестве параметров конкретные числа)
1) int RES; cout<<Test(…, …, …, RES)<<endl;
2) int RES=0; float x=…; Test(x, …, …., RES); if (RES) cout<<"Yes"; else cout<<"No";
3) cout<<endl; if (Test(…, …, …,…)) cout<<"Yes"; else cout<<"No";
5. (Понятие указателя (см.[3]). Пусть int t=10; int* p=&t; Какие из следующих операторов допустимы и что они означают:1) cout<< p; 2) p=1000; 3)*p=1000;
4) t=5; t*=*p; 5) cout<<(*p); ?
6. (Указатели и массивы(см.[3].).
Пусть const n=10; int a[n]={-1, -2, 33, 44, -5, -6, 77, 8}; int *q;
Какие из следующих присваиваний допустимы и что они означают:
1) q=a; 2) q=*a[0]; 3) q=n; 4) q=&a[0]; 5) int i=5; q=&a[i]; 6) int i=2; q=a[i];
7) q=a[0]; 8) int i=9; q=a[i]; ?
7. (Передача массивов в функцию(см. [1],[2],[3]).
7.1. Дан код: void Fun (int *x, int N, int &S)
{ S=0; for (int i=0; ; ) { S+=x[i++]; if (x[i]==0 || i ==N ) return; } }
/* или
void Fun (int *x, int N, int &S)
{ S=0; for (int i=0; i<N-1; ) if (x[++i]>0) S+=x[i]; } */
int main( ) { const n=10; int a[n]= {…}; // конкретный числовой массив в { }
int &Sum0; Fun (a,n,Sum0); cout<<endl<<Sum0; //1
int Sum; Fun (&a[0],n/2,Sum); cout<<endl<<Sum; //2
int Sum; Fun (a,n,Sum); cout<<endl<<Sum; //3
int Sum2; Fun (&a[5], 5, Sum2); cout<<endl<<Sum2; //4
int *Sum;Fun (a,n,Sum);cout<<endl<<Sum; //5
int *q=a[5], Sum=0; Fun(q, n/2, Sum); cout<<endl<<Sum; //6
int *q=a[n/2], Sum=0; Fun(q, 5, Sum);cout<<endl<<Sum; //7
int *q=&a[n/2], Sum=0; Fun(q, 5, Sum); cout<<endl<<Sum; //8
int *q=*a[n/2], Sum=0; Fun(q, 5, Sum); cout<<endl<<Sum; //9
getch(); return 0; }
В каких строках правильно вызвана функция? Что будет выведено для правильных вариантов?
{ int S=0; for(int j=0; j<m; j++) if (X[j]>0) S+=X[j]; return S; }
void Sum2 (int M[][size2],int n,int m, int &S1, int &S2) //8
{ S1= Sum(M[0] ,n*m/2); //9
S2=Sum(&M[2][0], n*m/2); } //10
9.3. Пусть описана функция:
int MyFun (int *x, int n)
{ по некоторому алгоритму для одномерного массива x размерности n получаем и возвращаем одно целое число
}
A).Как её использовать для получения и (или) вывода этого же параметра всей матрицы (одного целого числа), объявленной так:
const n=4,m=6; int A[n][m];? Выбери правильные варианты ответов:
1) cout<< MyFun (&A[0], n*m);
2) int Res; Res=MyFun (&A[0][0], n); cout<<Res;
3) int Res; Res=MyFun (A[0], m); cout<<Res;
4) int Res; Res=MyFun (A[0], m*n); cout<<Res;
5) cout<< MyFun (&A[0][0], n*m);
6) cout<< MyFun (A[0][0], n*m);
7) int Res=MyMax(&A[0][0], n*m); cout<<Res;
B). Как эту же функцию без изменений использовать для получения и (или) вывода этого же параметра в каждой строке матрицы (т.е для получения и (или) вывода n чисел, по одному для каждой строки)? Выбери правильные варианты ответов: …
Теоретические тесты
10. (Встроенные и внешние функции) Выберите правильные утверждения:
1) тело встроенной функции встраивается в каждую точку вызова;
2) встроенная функция выполняется быстрее внешней;
3) тело (код) встроенной функции дублируется в памяти столько раз, сколько раз она вызывается;
4) встроенная функция выполняется медленнее внешней;
5) при использовании встроенной функции мы проигрываем в памяти, но выигрываем во времени выполнения;
6) при использовании встроенной функции мы выигрываем в памяти, но при этом увеличивается время выполнения программы;
7) при использовании встроенной функции мы проигрываем как в памяти, так и во времени выполнения программы;
8) при использовании встроенной функции мы выигрываем как в памяти, так и во времени выполнения программы;
Аналогичные утверждения для внешних функций.
11. Параметры по умолчанию для функций: Выберите правильные утверждения:
1) значение по умолчанию может быть задано только в прототипе функции;
2) значение по умолчанию может быть задано или в прототипе функции, или в заголовке функции при её описании, но только один раз;
3) значение по умолчанию может быть задано только в заголовке функции при её описании;
4) значение по умолчанию можно задать как в прототипе функции, так и в заголовке функции при её описании;
5) параметры по умолчанию, если они есть, должны быть обязательно в начале списка параметров;
6) параметры по умолчанию, если они есть, должны быть обязательно в конце списка параметров;