- •Н. А. Аленский основы программирования
- •§ 1. Структура простой программы. Ввод, вывод
- •1.1. Пример первой программы
- •1.2. Директива препроцессора #include
- •1.3. Структура программы
- •1.4. Комментарии
- •1.5. Ключевые слова и идентификаторы
- •1.6. Простой ввод, вывод
- •§ 2. Оператор if
- •2.1. Полная форма
- •2.2. Сокращённая форма
- •2.3. Особенности оператора
- •Задачи и упражнения
- •§ 3. Выражения
- •3.1. Константы
- •Непосредственно записать в выражении;
- •3.2. Операции и их приоритет
- •3.3. Операции отношения и логические операции
- •3.4. Особенности операции присваивания
- •3.5. Тернарная операция (?)
- •Задачи и упражнения
- •§ 4. Оператор выбора switch
- •Задачи и упражнения
- •§ 5. Операторы цикла
- •5.1. Оператор while c предусловием
- •Правила использования и особенности оператора while
- •5.2. Оператор цикла do … while c постусловием
- •5.3. Оператор for
- •5.4. Операторы continue и break
- •Задачи и упражнения
- •§ 6. Введение в одномерные массивы
- •6.1. Что такое массив. Объявление одномерного массива
- •6.2. Способы определения массивов
- •6.3. Вывод одномерного массива. Функции printf и сprintf
- •6.4. Некоторые типы простых задач при работе с массивами
- •Задачи и упражнения
- •§ 1. Функции без результатов. Передача параметров по значению
- •1.1. Примеры. Правила оформления и вызова функций
- •Void line2(int Len, y, char ch) // ошибка,
- •1.2. Формальные и фактические параметры
- •1.3. Передача параметров по значению
- •§ 2. Функции типа void с несколькими результатами
- •2.1. Пример
- •2.2. Что такое ссылочный тип
- •2.3. Возврат значений из функции с помощью ссылочного типа
- •Задачи и упражнения
- •§ 3. Функции с одним результатом. Оператор return
- •Задачи и упражнения
- •§ 4. Одномерные массивы в функциях. Сортировка массива
- •Задачи и упражнения.
- •§ 5. Область действия имён. Локальные и глобальные имена
- •§ 6. Дополнительные возможности функций
- •Встраиваемые функции (inlineфункции)
- •6.2. Параметры по умолчанию
- •6.3. Перегрузка функций
- •§ 1. Примеры
- •§ 2. Класс. Поля и методы класса
- •§ 3. Создание объектов. Конструктор
- •Задачи и упражнения.
- •Глава 4 простые типы данных § 1. Целый тип
- •1.1. Битовые операции
- •1.2. Использование битовых операций
- •1.3. Упаковка и распаковка информации
- •Задачи и упражнения.
- •§ 2. Логический тип
- •§ 3. Символьный тип
- •Глава 5 матрицы (двухмерные массивы) § 1. Объявление, способы определения
- •§ 2. Вывод матриц
- •§ 3. Типы алгоритмов на обработку матриц
- •3.1. Построчная обработка
- •3.2. Обработка матрицы по столбцам
- •3.3. Обработка всей матрицы
- •3.4. Обработка части матрицы
- •3.5. Преобразование матрицы
- •Упражнения.
- •3.6. Построение матриц
- •§ 4. Передача матрицы в качестве параметра функции
- •Задачи и упражнения.
- •Б. Обработка матрицы по столбцам.
- •Даны две матрицы a и b одинаковой размерности. Построить матрицу с, каждый элемент которой определяется по правилу:
- •Список рекомендуемой литературы
- •Сборники задач по программированию
- •Оглавление
- •Задачи и упражнения …….……………………………………...12
- •3.1. Константы ………………………………………………...…14
5.4. Операторы continue и break
Оператор сontinue пропускает оставшуюся часть тела цикла. В операторах while и do … while он передаёт управление на повторную проверку условия цикла, то есть после него вычисляется и анализируется выражение, записанное после while в скобках, а затем, если оно истинно, продолжается работа цикла.
В случае оператора for выполняется часть увеличения, затем проверяется условие и, если оно истинно, выполняется тело цикла. Например,
float Sum=0; int K=0;
for (int i=0; i<5; i++)
{ if (a[i]<=0) continue;
Sum+=a[i];
K++;
}
найдёт сумму и количество положительных чисел массива a.
Второй вариант цикла без continue
for (int i=0; i<5; i++)
if (a[i]>0)
{ Sum+=a[i];
K++;
}
позволяет записать противоположное выражение в if. Здесь существенной разницы нет, но иногда один из вариантов проще (см. 6.3). В обоих вариантах обратите внимание на расстановку фигурных скобок!
Оператор break используется, во-первых, для прерывания работы оператора switch (§ 4) и, во-вторых, для выхода из любого из трёх циклов (см. 5.1, вечный цикл).
Пример использования break в операторе for. Определить, есть ли в одномерном массиве число 0. Если есть, вывести “Да” и номер первого нуля, в противном случае вывести “Нет”.
N0=-1;
for (int i=0; i<n; i++)
if (a[i] ==0)
{ N0=i; break;
}
if (N0 == -1)
/* В массиве нет нуля, вышли из цикла после того, когда просмотрели все элементы, то есть когда i<n стало ложным */
cout<<”Нет”;
else
// В массиве был нуль и вышли из цикла с помощью break.
cout<<”Да, номер первого нуля ”<< N0 ;
Задачи и упражнения
-
Сравнить оператор for c аналогичным оператором языка Pascal.
-
Как будет работать оператор в следующих вариантах:
/*6*/ for ( Sum= i=0; i<5; Sum+=a[++i] ) ;
cout<<”\nVariant6 “<<Sum;
/*7*/ for ( Sum=0, i=-1; i<4; Sum+=a[++i] ) ;
cout<<”\nVariant7 “<<Sum;
-
Сравнить несколько вариантов, отличающихся наличием скобок и их расстановкой:
-
for (int I=0; I<n; I++)
-
if (a[I]>0)
K++;
cout<<”K=”<<K;
-
for (int I=0; I<n; I++)
{ if (a[I]>0)
K++;
}
cout<<”K=”<<K;
-
for (int I=0; I<n; I++)
{ if (a[I]>0)
K++;
cout<<”K=”<<K;
}
-
for (int I=0; I<n; I++)
if (a[I]>0)
{ K++;
cout<<”K=”<<K;
}
-
for (int I=0; I<n; I++)
if (a[I]>0)
K++;
else cout<<”K=”<<K;
-
Запрограммировать простой калькулятор на четыре арифметических действия: сложение, вычитание, умножение, деление.
main()
{ float x, y, res; char c; bool er;
clrscr(); cout<<"For EXIT --- the first number=1000 \n";
while (1)
{ er=false; cout<<"\nThe first number: "; cin>>x;
if (x == 1000) break;
cout<<"Operation: "; cin>>c;
// или c=getchar(); или c=getch(); или c=getche();
cout<<" The second number:"; cin>>y;
switch (c)
{ case '+': res=x+y; break;
case '*':
case '.': res=x*y; break;
case '–':
case '_': res=x-y; break;
case '/': if (y!=0) res=x/y;
else er=true; break;
default: er=true;
} // end of switch
if(er) cout<<" ERROR\n";
else cout<<x<<c<<y<<"="<<res<<endl;
} // end of while
return 0;
}
5. Ввести координаты точек плоскости до тех пор, пока не введем точку с координатами (1000, 1000). Массивы не использовать. Найти количество точек, принадлежащих области из 1й или 3й четверти, ограниченной окружностями радиуса 2 и 1 c центром в начале координат.
int main()
{ int k=0; float x,y;
clrscr(); cout<<"x=1000, y=1000 --- exit\n";
cin>>x>>y; // ввод координат первой точки
while ( ! (x == 1000 && y==1000) )
{ if (( x*x+y*y <= 4 && x*x+y*y >= 1) &&
( x>0 && y>0 || x<0 && y<0)) k++;
cin>>x>>y; // ввод координат точек в цикле
}
cout<<k; getch();
return 0;
}
6. Вывести квадраты чисел от 11 до 99 по 10 чисел в строке.
cout<<'\n'; // Вариант 1
for ( int i=11; i<=99; i++)
cout<<i*i<< (i% 10 == 0? '\n' : ' ');
cout<<endl; // Вариант 2
for ( int i=11; i<=99; i++)
printf("%6d%c", i*i, i%10 ==0? '\n':' ');
cout<<endl; // Вариант 3
for (int i=11; i<=99; i++)
{ printf("%6d",i*i);
// if (i%10 = = 0) cout<< '\n'; else cout<<' '); или
if (!(i%10)) cout<< '\n'; else cout<<' ';
}
7. Последовательно ввести значения x, пока не введем 1000. Для каждого из них вычислить r = sin(x), если 0 < x < ; r = x3, если – <= x < 0; r = x2, если x < –2* или x > 2*; r = 0 — в остальных случаях.
#define Pi 3.1459
int main()
{ float x=0,r; cout<<"1000 -- exit"<<endl;
cout<<" x y\n";
while (x!=1000)
{ gotoxy(2, wherey()); cin>>x;
if (x<Pi && x>0) r=sin(x);
else if (x<0 && x>=–Pi ) r=x*x*x;
else if (x<–2*Pi || x>2*Pi) r=x*x;
else r=0;
gotoxy(20, wherey()-1); cout<<r<<endl;
} return 0; }
8. Для заданного n в одном цикле вычислить n! и 2n.
main()
{ clrscr();
long int p=1, fact=1; int n, b=2;
cout<<"n<17 n= "; cin>>n;
for (int i=1; i<=n; i++)
{ p=p*b; fact=fact*i;
}
cout<<b<< " ^ "<<n<<" = "<<p<< endl;
cout<<n<<"! = "<<fact<<endl;
getch(); return 0;
}
9. Найти наибольшую цифру целого десятичного числа:
main()
{ long int a; int e_exit; int maxdig=0;
clrscr(); cout<<"\na="; cin>>a; a=abs(a);
while (a)
{ int d; d = a%10;
if (d>maxdig) maxdig = d;
a = a/10;
}
cout<<"The max digit: "<<maxdig;
getch(); return 0;
}
10. Вычислить бесконечную сумму ряда с заданной точностью:
Считать, что требуемая точность достигнута, если очередное слагаемое по модулю станет меньше, чем заданная точность .
int main()
{ clrscr(); double x ,y, g, i, e;
cout<<"x="; cin>>x;
cout<<"Epsilon="; cin>>e;
g=y=1.0 / 2.0 * x;
for(i=4; fabs(g)>e; i+=2)
{ g=g*(-1)*x/i; y=y+g;
}
y++; cout<<y;
getch(); return 0;
}
11. Дана программа:
main()
{ clrscr(); long int r=1, a=200, b=2;
do { r*=b; cout<<r<<" ";
} while (r<a);
getch(); return 0; }
а) определить результат работы этой программы;
б) что изменится, если после оператора do удалить фигурные скобки?;
в) проанализировать результат, если изменить порядок операторов
r *= b и cout<<r<<" ";
-
Цикл for(I=10; I>0; I– –) cout << I*I<<” “ записать с помощью следующих операторов: a) while; б) do…while.
-
Для заданного n вычислить
.
-
Вычислить приближенно значение бесконечной суммы
с точностью , используя следующие операторы: a) for; б) while; в) do … while.
-
Вывести таблицу значений функции y = при изменении x от u до v с шагом h = (v – u)/(n – 1), если u, v, n заданы.
-
Для натурального числа найти первую цифру и сумму его цифр.
-
Определить, является ли целое число симметричным, т. е. таким числом, которое одинаково читается слева направо и справа налево (палиндром, перевертыш). Например, числа 123321, 202, 9889, 5555, 8 — палиндромы.
-
Определить, является ли целое число простым.
-
Перевести целое число из десятичной системы счисления в двоичную систему счисления, используя алгоритм деления на 2.
-
Перевести целое число из десятичной системы счисления в шестнадцатеричную, используя алгоритм деления на 16.