- •1. Базовые и составные типы.
- •2. Циклы, ввод-вывод, операции ветвления и логические выражения.
- •2. Что напечатает следующий фрагмент кода, если использовать его в программе?
- •3. Что напечатает следующий фрагмент кода, если использовать его в программе?
- •4. Что напечатает следующий фрагмент кода, если использовать его в программе?
- •3. Функции, модели памяти и пространства имен
- •4. Классы, наследование и дружественные конструкции
2. Циклы, ввод-вывод, операции ветвления и логические выражения.
1. Что напечатает следующий фрагмент кода, если использовать его в программе?
int i;
for (i = 0; i < 5; i + + )
cout << i;
cout << endl;
2. Что напечатает следующий фрагмент кода, если использовать его в программе?
int j;
for (j = 0; j < 11; j += 3)
cout << j;
cout << endl << j << endl;
3. Что напечатает следующий фрагмент кода, если использовать его в программе?
int j = 5;
while (++j < 9)
cout << j++ << endl;
4. Что напечатает следующий фрагмент кода, если использовать его в программе?
int k = 8;
do
cout << " k = " << k << endl;
while (k++ < 5) ;
5. Напишите цикл for, который печатает значения 1 2 4 8 16 32 64, увеличивая вдвое значение переменной счетчика на каждом шаге.
6. Правилен ли следующий оператор? Если нет, то почему? Если да, то что он делает?
int х = (1,024);
А правилен ли такой оператор?
int у;
у = 1,024;
7. Чем отличается cin >> ch от cin.get(ch) и ch = cin.get() с точки зрения ввода?
8. Приведены два фрагмента кода для подсчета пробелов и переводов строк:
// Версия 1
while (cin.get(ch)) // завершение по eof
{
if (ch == ' ')
spaces++;
if (ch == '\n')
newlines++;
}
// Версия 2
while (cin.get(ch)) // завершение по eof
{
if (ch == ' ')
spaces++;
else if (ch == '\n' )
newlines++;
}
Какие преимущества (если они есть) у второй формы перед первой?
9. Какой эффект даст замена в листинге выражения ++ch на ch+1?
#include <iostream>
int main()
{
char ch;
std::cout << "Type, and I shall repeat.\n";
std::cin.get(ch);
while(ch != '.')
{
if (ch = '\n')
std::cout << ch;
else
std::cout << ++ch;
std::cin.get(ch);
}
std::cout << "\nPlease excuse the slight confusion.\n";
return 0;
}
10. Изучите следующую программу:
#include <iostream>
using namespace std;
int main()
{
char ch;
int ct1, ct2;
ct1 = ct2 = 0;
while ((ch = cin.get()) != '$' )
{
cout << ch;
ct1++;
if (ch = '$')
ct2++;
cout << ch;
}
cout << "ct1 = " << ct1 << ", ct2 = " << ct2 << "\n";
return 0;
}
Предположим, что вы вводите следующие две строки, нажимая клавишу <Enter> в конце каждой строки:
Hi!
Send $10 or $20 now!
Каким будет вывод?
11. Напишите программу, которая запрашивает целое число и затем отображает его в десятичной, восьмеричной и шестнадцатеричной формах. Отобразите все формы в одной и той же строке, в полях шириной по 15 символов, с применением префиксов C++ для оснований систем счисления.
12. Напишите программу, которая запрашивает следующую информацию и форматирует ее, как показано ниже:
Enter your name: Billy Gruff
Enter your hourly wages: 12
Enter number of hours worked: 7.5
First format:
Billy Gruff: $ 12.00: 7.5
Second format:
Billy Gruff : $12.00 :7.5
13. Пусть имеется следующая программа:
#include <iostream>
int main()
{
using namespace std;
char ch;
int ct1 = 0;
cin >> ch;
while(ch != 'q')
{
ct1++;
cin >> ch;
}
int ct2 = 0;
cin.get(ch);
while(ch != 'q')
{
ct2++;
cin.get(ch);
}
cout << "ct1 = " << ct1 << "; ct2 = " << ct2 << "\n";
return 0;
}
Что она напечатает, если получит следующий ввод:
I see a q<Enter>
I see a q<Enter>
Здесь <Enter> означает нажатие одноименной клавиши.
14. Оба следующих оператора читают и отбрасывают символы, вплоть до конца строки, включая его. Чем различается их поведение?
while (cin.get() != '\n')
continue;
cin.ignore(80, '\n');
15. Постройте логические выражения для представления перечисленных ниже условий.
а. weight больше или равно 115, но меньше 125.
б. ch равно q или Q.
в. х - четное, но не равно 26.
г. х - четное, но не кратно 26.
д. donation находится в диапазоне 1000-2000 или guest равно 1.
е. ch - буква в нижнем или верхнем регистре. (Предполагается, что буквы нижнего регистра кодируются последовательно и буквы верхнего регистра также кодируются последовательно, но между буквами нижнего и верхнего регистров имеется промежуток.)
16. Постройте условное выражение, которое эквивалентно нахождению модуля значения переменной.
17. Перепишите следующий фрагмент с применением switch:
if (ch == 'А')
a_grade++;
else if (ch == 'B' )
b_grade++;
else if (ch == 'C')
c_grade++;
else if (ch == 'D')
d_grade++;
else
f_grade++;
18. Приведен следующий фрагмент кода:
int line = 0;
char ch;
while (cin.get(ch))
{
if (ch == 'Q')
break;
if (ch != '\n')
continue;
line++;
}
Перепишите этот код так, чтобы в нем не использовались операторы break и continue.
19. Напишите программу, которая подсчитывает количество символов в строке вплоть до первого встретившегося символа $.
20. Напишите программу, которая копирует клавиатурный ввод в файл.
