- •5. Кодовые таблицы ascii и ansi. Работа с символами и их кодами.
- •6. Константы в языке Си: целые, вещественные с фиксированной и плавающей точкой, символьные, строковые, null. Именованные константы.
- •8. Ввод информации в консольном стиле. Преобразование вводимых данных.
- •9. Синтаксис операторов языка Cи, операторы-выражения. Ошибки компиляции, времени выполнения, логические (смысловые).
- •10. Последовательность выполнения операций. Приоритет операций. Скобки.
- •12. Арифметические операции
- •15. Условные операторы (if, switch).
- •16. Тернарная операция "?".
- •19. Одномерные массивы. Инициализация одномерных массивов. Инициализация массива символов.
- •21. Циклические алгоритмы. Основные требования при использовании циклических (итерационных) алгоритмов.
- •23. Оператор цикла с предусловием и коррекцией for.
- •24.Вложенные циклы, последовательность выполнения входящих в них операторов. Простейший пример их применения к двумерным массивам.
- •26. Указатели, операции * и &. Указатель на указатель.
- •27. . Операции над указателями.
- •28. Связь указателей с массивами.
- •29. Работа с динамической памятью.
- •30. Строковые данные в языке Си как массивы символов. Стандартные функции работы со строками.
- •31. Тип String. Операции с типом String. Методы класса String.
- •32. Преобразование переменных типа String и массивов char друг в друга и в другие типы.
- •33. Краткая характеристика файлов *.H. Стандартные библиотечные функции. Стандартные арифметические функции.
- •3 4. Функции пользователя - способы описания, операция вызова функции.
- •35. Способы передачи информации в функцию и из нее.
- •36. Область видимости. Понятие блока.
- •37. Классы памяти и время жизни
- •38. Препроцессор, его роль. Директивы препроцессора. Директива #include.
23. Оператор цикла с предусловием и коррекцией for.
Оператор цикла for имеет следующий общий вид:
for (выражение 1; выражение 2; выражение 3)
код цикла;
где выражение 1 – инициализация счетчика (параметр цикла);
выражение 2 – условие продолжения счета;
выражение 3 – коррекция счетчика.
Инициализация используется для присвоения счетчику (параметру цикла) начального значения.
Выражение 2 определяет условие выполнения цикла. Как и в предыдущих случаях, если его результат не нулевой («истина») то цикл выполняется.
Коррекция выполняется после каждой итерации цикла и служит для изменения параметра цикла.
Выражения 1,2 и 3 могут отсутствовать (пустые выражения), но символы «;» опускать нельзя.В операторе for используются три выражения, управляющие работой цикла. Между собой они разделены символами ;
Инициализирующее выражение вычисляется только один раз до начала выполнения какого-нибудь из операторов цикла. Если проверяемое значение оказывается истинным, тело цикла выполняется один раз. Затем вычисляется величина корректирующего выражения, и значение проверяемого выражения определяется вновь и т.д.
Оператор for – цикл с предусловием. Тело цикла может представлять собой как простой, тик и сложный (составной) оператор.
Операция «запятая» связывает два выражения в одно и гарантирует, что самое левое выражение будет вычисляться первым. Обычно она используется для включения дополнительной информации в спецификацию цикла for. Операция «запятая» может быть включена в корректирующую или в инициализирующую части оператора for.
Оператор for имеет следующие возможности:
– можно вести подсчет с помощью символов, а не только чисел:
for (ch = 'a'; ch <= 'z'; ch++) ... ;
– можно проверить выполнение некоторого произвольного условия:
for (n = 0; s[i] >= '0' && s[i] < '9'; i++) ... ;
или:
for (n = 1; n*n*n <= 216; n++) ... ;
Первое выражение не обязательно должно инициализировать переменную. Необходимо только помнить, что первое выражение вычисляется только один раз перед тем, как остальные части начнут выполняться.
Чтобы избежать ошибок, нужно стараться:
– проверить, всем ли переменным, встречающимся в правой части операторов присваивания в коде цикла, присвоены до этого начальные значения (а также, возможно ли выполнение других операторов)
– проверить, изменяется ли в цикле хотя бы одна переменная, входящая в условие выхода из цикла;
– предусмотреть аварийный выход из цикла по достижению некоторого количества итераций;
– если в состав цикла входит не один, а несколько операторов, нужно заключать их в фигурные скобки.
24.Вложенные циклы, последовательность выполнения входящих в них операторов. Простейший пример их применения к двумерным массивам.
Тело (код) цикла может в свою очередь включать в себя другие циклы. Такие циклы называют вложенными. Вложенные циклы необходимы, если по смыслу задачи для каждой итерации внешнего цикла нужно выполнить несколько итераций внутреннего.
Пример.
Для X, меняющегося от a до b с шагом h, вычислить:
Программа может иметь вид:
#include<stdio.h>
#include<conio.h>
#include<iostream.h>
#include<math.h>
void main(){
double a,b,h,x,y,s,f;
int k,n,i;
cout<<"Vvedite a,b,h,n: ";
cin>>a>>b>>h>>n;
for(x=a; x<=b+0.000001; x+=h){
y=3*x*(exp(6*x)+exp(-6*x));
for(k=s=0; k<=n; k++){
// Делаем 2К итераций для вычисления (2К)!
for(i=f=1; i<=2*k; i++)
f*=i;
s+=pow(6*x, 2*k+1)/f;
}
printf("x=%5.2lf y=%12.8lf s=%12.8lf\n", x,y,s);
}
getch();
}
Здесь имеется 3 вложенных друг в друга цикла: для каждого Х переменная К будет меняться от 0 до N ; а для каждого К переменная i будет меняться от 1 до 2К для вычисления факториала 2К.
25 Использование случайных чисел при заполнении массивов. В стандартной библиотеке C++ (в заголовочном файле cstdlib) существует функция rand(), которая при каждом вызове возвращает псевдослучайное целое число в диапазоне от 0 до константы RAND_MAX (обычно она равна 32767, но её значение зависит от настроек среды и, соответсвенно, может изменяться, самый простой способ избавиться от сомнений — вывести значение этой константы на экран).
Если вы создадите и запустите программу, которая выводит два случайных числа на экран несколько раз, то увидите, что от запуска к запуску числа повторяются, хотя до первого запуска, конечно, нельзя было предсказать эту пару значений.
Функция rand(), на самом деле, выбирает числа из последовательности значений, вычисленных по специальному алгоритму, где базой для построения этой последовательности является некоторый числовой аргумент (обычно называемый seed — «зерно» с англ.).
Значение этого аргумента неизменно между запусками программы, но изменится, если вы, например, перезагрузите компьютер.
Иметь одинаковые наборы при каждом запуске удобно, например, в процессе тестирования. Но для реальной программы нужно, чтобы последовательность псевдослучайных чисел менялась даже при двух последовательных запусках программы. Для её перемещивания существует функция srand(seed), где seed — это некоторое значение типа unsigned int. Соответсвенно, если в качестве аргумента мы в эту функцию будем передавать разные значения при каждом запуске программы, то и наборы получаемые с помощью rand() — будут разными. Чтобы получить псевдослучайное число из нужного отрезка, нужно сузить значение функции rand() до длины этого отрезка и сдвинуть на значение левого конца отрезка.
