- •Основы программирования
- •Средства создания программ
- •Работа в интегрированной среде разработки программ turbo c (Borland c)
- •Основные функциональные клавиши и сочетания клавиш в Turbo c
- •Контрольные вопросы
- •Основы языка Си
- •Составляющие языка Си
- •Понятия алгоритмических языков (На примере языка Си)
- •Структура программы на языке Си
- •Директивы препроцессора
- •Главная функция
- •Переменные и массивы
- •Объявления переменных и массивов
- •Комментарии
- •Основные операции в Си
- •Арифметические операции
- •Логические операции и операции отношения
- •Операции присваивания
- •Функции ввода и вывода
- •Функция форматированного вывода printf( )
- •Функция форматированного ввода scanf( )
- •Функция неформатированного ввода getch( )
- •Функция неформатированного ввода gets( )
- •Функция неформатированного вывода puts( )
- •Программа – диалог
- •Контрольные к лабораторной работе «Программа-диалог»
- •Программа–тест
- •Контрольные вопросы к лабораторной работе «Программа-тест»
- •Конструкция switch/case/default
- •Операторы цикла
- •Цикл for
- •Стандартные математические функции
- •Пример выполнения лабораторной работы «Вычисление значения функции»
- •Контрольные вопросы к лабораторной работе «Вычисление значения функции»
- •Вложенные циклы.
- •Использование оператора break в циклах
- •Оператор continue
- •Оператор безусловного перехода goto
- •Действия с одномерными массивами
- •Инициализация массива
- •Ввод значений элементов массива с клавиатуры
- •Заполнение массива случайными числами
- •Вычисление суммы и произведения элементов массива
- •Поиск максимального элемента массива и его номера
- •Вычисление среднего арифметического
- •Перестановка элементов в массиве
- •Сортировка массива
- •Заполнение массива элементами из другого массива.
- •Контрольные вопросы к лабораторной работе «Одномерный массив»
- •Контрольные к лабораторной работе «Программа-диалог»
- •Контрольные вопросы к лабораторной работе «Программа-тест»
- •Контрольные вопросы к лабораторной работе «Вычисление значения функции»
- •Контрольные вопросы к лабораторной работе «Одномерный массив»
Структура программы на языке Си
Любая программа, написанная на языке Си, состоит из одной или более "функций", являющихся основными модулями, из которых она собирается.
Пример структуры простой программы на языке Си:
Общий вид |
Пример |
директивы препроцессора |
# include <stdio.h> # define N 10 |
имя главной функции |
main( ) |
начало тела главной функции |
{ |
объявления переменных и массивов |
int x=1; char str[N]; |
операторы программы |
puts("Введите имя"); gets(str); printf("\n %s, Вы %d мой гость!",str,x); |
Конец тела главной функции |
} |
Директивы препроцессора
Составной частью компилятора является программа, называемая препроцессором. Препроцессор работает до трансляции программы с языка высокого уровня на машинный язык, выполняя её предварительное преобразование. Каждая директива препроцессора начинается с символа # (номер) и занимает всю строку. Директивы, которые не помещаются в одной строке, могут быть продолжены в следующей строке. Признаком продолжения строки является символ обратной косой черты ( \ ) в продолжаемой строке.
Наиболее часто используется директива включения в программу файла
#include <name>
где name – имя файла, включаемого в текст программы.
Эту директиву называют директивой подстановки. Она предписывает компилятору поместить на её место файл name. Файл name называется заголовочным. Он содержит объявления данных и функций, используемых в программе. Например, включение в программу директивы
#include <math.h>
позволит использовать в программе стандартные математические функции, такие как sin x, cos x, ln x и т.д. Список стандартных математических функций будет приведён ниже.
Директива
#include <stdio.h>
даёт возможность использования в программе стандартных функций ввода-вывода.
Другой часто используемой директивой является директива определения
#define S1 S2
где S1, S2 – строки символов.
Препроцессор отыскивает в тексте программы строку символов S1 и заменяет её строкой S2. Например, включение в программу директивы
#define P printf
позволит набирать на клавиатуре букву P вместо слова printf.
Эта замена не выполняется внутри текстовых строк (литералов), символьных констант и комментариев, т.е. действие директивы #define не распространяется на тексты, ограниченные кавычками, апострофами и находящимися внутри комментариев.
Главная функция
Каждая программа на языке Си должна содержать объявление функции main(), которая называется главной функцией. Как правило, эта функция не имеет параметров и не возвращает никакого значения. Для указания этого факта используется слово void. Таким образом, строка с именем главной функции обычно имеет вид:
void main(void)
или
void main( )
Переменные и массивы
Массивом называется группа переменных одного типа с общим именем. Именем переменной или массива является идентификатор – последовательность, составленная из символов:
a – z, A - Z , 0 – 9,_(подчеркивание),
причём первым символом не может быть цифра. Строчные и прописные символы латинского алфавита воспринимаются как разные символы. В качестве имени переменной или массива не могут использоваться служебные слова языка Си. Основные служебные слова языка Си приведены в Приложении.
Элементы массива различаются своими номерами (индексами). Индекс может принимать только целые неотрицательные значения. Индекс записывается после имени массива в квадратных скобках. Индексов может быть несколько. В этом случае каждый индекс записывается в своих квадратных скобках.
В языке Си могут использоваться переменные и массивы различных типов. Данные каждого типа занимают определённое количество байт памяти и могут принимать значения из определённого диапазона. Объём этой памяти и, соответственно, диапазон принимаемых значений в разных реализациях языка Си могут различаться. Количество байт памяти, занимаемой переменной определённого типа для конкретной реализация языка Си можно определить с помощью операции sizeof (тип). Например, определить объём памяти, отводимой под переменную целого типа, можно так:
int k; k = sizeof(int); printf(“ Под переменную типа int отводится %d байт памяти”,k); |
/*1*/ /*2*/ /*3*/ |
В данных методических указаниях рассматриваются три основных типа переменных и массивов, приведены типичные значения объёма занимаемой памяти и диапазона значений (табл. 1):
Таблица 1
Тип |
Спецификатор типа (Ключевое слово) |
Значение |
Размер памяти (байт) |
Диапазон значений |
Целый |
int |
Число целого типа |
2 |
- 32768 . . . +32767 |
4 |
-2147483648 . . . +2147483647 | |||
Действительный |
float |
Число действительного типа |
4 |
3.4ּ10 -38 . . . 3.4ּ10 38 (по модулю) |
Символьный |
char |
Символ |
1 |
-128 . . . +127 |
Несколько подробнее остановимся на переменной типа char. Как видно из табл. 1, переменная типа char занимает один байт памяти. В одном байте памяти можно записать либо целое число без знака из диапазона [0, 255], либо целое число со знаком из диапазона [–128, 127]. Это число является кодом одного из 256 символов. Символ, соответствующий данному коду, определяется используемой кодовой таблицей. Таким образом, значение переменной типа char может рассматриваться либо как целое число, либо как символ, код которого равен этому числу.