- •1.1. Алфавит языка Си
- •1.2. Лексемы
- •1.3. Идентификаторы и ключевые слова
- •1.4. Знаки операций
- •1.5. Литералы (константы)
- •1.6. Комментарии
- •1.7. Общая структура программы на языке Си.
- •1.8. Функциональная и модульная декомпозиции
- •1.9. Этапы обработки программы.
- •1.10. Роль препроцессора.
- •1.11. Ошибки
- •2. Переменные и константы. Типы данных
- •2.1. Основные типы данных
- •2.2. Декларация (объявление) объектов
- •2.3. Константы в программах
- •2.4. Целочисленные константы
- •2.5. Константы вещественного типа
- •2.6. Символьные константы
- •2.7. Строковые константы
- •2.8. Логические константы
- •3. Обзор операций
- •3.1. Операции, выражения
- •3.2. Арифметические операции
- •3.3. Операции сравнения
- •3.4. Логические операции
- •3.5. Операция присваивания
- •Примеры недопустимых выражений:
- •3.6. Сокращенная запись операции присваивания
- •3.7. Операция «,» (запятая)
- •4. Обзор операций (продолжение)
- •4.1. Преобразование типов операндов бинарных операций
- •4.2. Преобразование типов при присваивании.
- •4.3. Операция явного приведения типа
- •4.4. Приоритеты операций
- •5. Стандартная библиотека языка Си
- •5.1. Стандартные математические функции
- •5.2. Потоковый ввод-вывод
- •5.3. Консольные функции вывода данных на экран
- •5.4. Консольные функции ввода информации
- •5.5. Ввод-вывод в оконных приложениях.
- •Советы по программированию
- •6. Операторы языка с.
- •7. Составление разветвляющихся алгоритмов
- •7.1. Условные операторы
- •If (выражение) оператор;
- •If (выражение) оператор 1 ;
- •If (выражение 1) оператор 1;
- •If (выражение 2) оператор 2;
- •If (выражение 3) оператор 3;
- •7.2. Оператор выбора альтернатив (переключатель)
- •Void main(void)
- •7.3. Условная операция «? :»
- •8. Составление циклических алгоритмов
- •8.1. Оператор с предусловием while
- •8.2. Оператор цикла с постусловием do – while
- •Void main(void)
- •8.3. Оператор цикла с предусловием и коррекцией for
- •8.4. Вложенные циклы.
- •Пример 1.
- •Void main(){
- •Пример 2.
- •9. Операторы передачи управления.
- •9.1. Оператор безусловного перехода goto
- •9.2. Операторы continue, break и return
- •10. Массивы
- •10.1. Одномерные массивы
- •10.2. Примеры алгоритмов, использующих одномерные массивы.
- •10.3. Многомерные массивы
- •10.4. Примеры алгоритмов, использующих двумерные массивы.
- •10.5. Компонента StringGrid
- •11. Размещение данных и программ в памяти пэвм
- •11.1. Общие понятия.
- •11.2. Кодирование целых чисел.
- •11.3. Кодирование вещественных чисел.
- •11.4. Кодирование символов.
- •Примеры кодов символов:
- •Стандартная часть таблицы символов (ascii)
- •Дополнительная часть таблицы символов (ascii, кириллица)
- •Дополнительная часть таблицы символов (ansi, кириллица)
- •11.5. Операция sizeof
- •11.6. Кодирование программы.
- •11.8. Регистры
- •12.1. Строки как нуль-терминированные массивы char.
- •Void main(){
- •If (!strcmp(a,b))
- •Itoa(I, s, 10);
- •If (! sscanf(s, "%d", &I))
- •If (!strnicmp(s, "song", 4)) {
- •If (!strnicmp(s, "song", 4)) {
- •12.2. Русификация консольных приложений.
- •Void main(void)
- •12.3. Строки как переменные типа AnsiString.
- •12.4. Преобразования строковых типов.
- •12.5. Тип String в консольных приложениях.
- •Void main(){
- •13. Функции пользователя.
- •13.1. Сущность и предназначение функций.
- •13.2. Определение и вызов функции.
- •Void main(){
- •14. Область видимости и классы памяти
- •14.1. Область видимости.
- •Void fun(void);
- •14.2. Классы памяти объектов в языке Cи.
- •Void f1(int);
- •Void main(void)
- •Void f1(int I)
- •Void st(void){
- •14.3. Разбиение программы на модули.
- •15. Генерация псевдослучайных чисел.
- •16. Отладка и пошаговое выполнение программы
- •17. Указатели
- •17.1. Определение указателей
- •17.2. Связь указателей и массивов.
- •17.3. Операции над указателями (косвенная адресация)
- •17.4. Сравнение указателей
- •17.5. Массивы указателей.
- •17.6. Указатели на указатели.
- •17.7 . Указатели как параметры функций.
- •Void zam(int *X, int *y)
- •Void zam(int &X, int &y)
- •Void zam (int&, int&);
- •Void main (void)
- •17.9. Указатели на функции
- •Void FunOut(double (*p_f )(char, double)){
- •18.2. Создание одномерного динамического массива.
- •18.3. Создание двуxмерного динамического массива.
- •19. Операция typedef
8.4. Вложенные циклы.
Тело (код) цикла может в свою очередь включать в себя другие циклы. Такие циклы называют вложенными. Вложенные циклы необходимы, если по смыслу задачи для каждой итерации внешнего цикла нужно выполнить несколько итераций внутреннего.
Пример 1.
Для 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К.
Пример 2.
Для 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,f1,f2,f3;
int k,n,i;
cout<<"Vvedite a,b,h,n: ";
cin>>a>>b>>h>>n;
for(i=f1=1; i<=n; i++)
f1*=i;
for(x=a; x<=b+0.000001; x+=h){
for(k=s=0; k<=n; k++){
for(i=f2=1; i<=k; i++)
f2*=i;
for(i=f3=1; i<=n-k; i++)
f3*=i;
s+=pow(x, k)*f1/(f2*f3);
}
printf("x=%5.2lf s=%12.8lf\n", x,s);
}
getch();
}
9. Операторы передачи управления.
Формально к операторам передачи управления относятся:
– оператор безусловного перехода goto;
– оператор перехода к следующему шагу (итерации) цикла continue;
– выход из цикла, либо из оператора switch – break;
оператор возврата из функции return.
9.1. Оператор безусловного перехода goto
В языке Си предусмотрен оператор goto, общий вид которого:
goto метка ;
Он предназначен для передачи управления оператору, помеченному указанной меткой. Метка представляет собой идентификатор с символом «двоеточие» после него, например, пустой помеченный меткой m1 оператор:
m1: ;
Циклы и переключатели можно вкладывать вдруг в друга, и наиболее характерный оправданный случай использования оператора goto – выполнение прерывания (организация выхода) из вложенных циклов. Например, при обнаружении грубых смысловых ошибок необходимо выйти из двух (или более) вложенных циклов (где нельзя использовать непосредственно оператор break, т.к. он прерывает только самый внутренний цикл):
for (...)
for (...) {
...
if (ошибка) goto error;
}
...
error: операторы для устранения ошибки;
Второй оправданный случай: организация переходов из нескольких мест программы в одно, например, когда перед завершением работы функции необходимо сделать одну и ту же операцию.
Не рекомендуется, однако, совершать с помощью оператора goto переходы внутрь цикла из-за его пределов:

g
oto
HHH;
do{
i++;
HHH:
}while(i<5);
а также делать переходы, обходящие объявление переменных:

goto YYY;
i
nt
k;
YYY:
т.к. компилятор не всегда способен правильно "понять" такую программу, что может привести к ошибкам как во время компиляции, так и во время выполнения.
Оператор goto не способен осуществлять переход из одной функции в другую.
Заметим также, что в некоторых организациях существует отрицательное отношение к оператору goto вообще. Причины этого и других подобных ограничений будут рассмотрены в теме "Стиль программирования".

