- •( Часть 1)
- •230100 «Информатика и вычислительная техника»
- •Введение
- •1. Первая программа на языке Си
- •Примеры
- •Задания для самостоятельной работы
- •2. Переменные. Основные типы данных. Форматный ввод-вывод
- •Примеры
- •Упражнения
- •Наберите текст следующей программы и проанализируйте работу функции printf() в каждом случае.
- •Наберите текст следующей программы и проанализируйте работу функции scanf().
- •Задания для самостоятельной работы
- •3. Операции и выражения
- •Примеры
- •Упражнения
- •Задания для самостоятельной работы
- •I. Вычисление значения математического выражения
- •II. Решение задач на составление выражений
- •4. Операторы ветвления
- •Примеры
- •Задания для самостоятельной работы
- •I. Обработка введенного символа
- •II. Вычисление значения функции
- •III. Mультиветвление
- •5. Операторы цикла и передачи управления
- •Примеры
- •Задания для самостоятельной работы
- •I. Решение задач тремя способами (с for, while и do-while) Решить следующие задачи в трех вариантах – с помощью циклов for, while и do-while
- •II. Детерминированные циклы
- •III. Итерационные циклы
- •6. Массивы
- •Примеры
- •Задания для самостоятельной работы
- •I. Одномерные массивы
- •II. Двумерные массивы
- •7. Строки
- •Примеры
- •Задания для самостоятельной работы
- •Список литературы
Примеры
1. Рассмотрим пример простейшей программы, выводящей на экран две строки. В первой строке выводится фраза «Программирование – это интересно!», во второй «Но сначала нужно хорошо учиться!»
#include <stdio.h>
int main(void)
{
printf( "\n Программирование – это интересно!");
printf( "\n Но сначала нужно хорошо учиться!");
return 0;
}
2. Рассмотрим пример простейшей программы, выводящей на экран десятичные цифры в следующем виде:
1 2 3 4
5 6 7 8
9
#include <stdio.h>
int main(void)
{
printf( "\n 1\t2\t3\t4”);
printf( "\n 5\t6\t7\t8”);
printf( "\n 9”);
return 0;
}
Задания для самостоятельной работы
Каждому студенту рекомендуется выполнить по 3 упражнения из 1–15. Используя esc-последовательности, выведите на экран следующий текст.
Это строка, иначе –“стринг”, иначе – “строковый литерал”
Это звуковой сигнал! (Сопроводите вывод строки звуковым сигналом)
Это строка?
“Да!”
Это ‘апостроф’ ?
Нет, это “кавычка” !
“ – это двойные кавычки
‘ – это апостроф
Это “строка”?
Это “строка”! (Используя символ возврата на шаг, во второй строке удалите восклицательный знак)
Это строка?
Это строка! (Замените слово “Это” во второй строке словом “Да”, используя возврат каретки)
Это “строка”?
Это “строка”! (Сначала выведите это текст, а затем, используя символ возврата каретки, во второй строке выведите слово «НЕТ!»)
\\Это комментарий?
//Нет, это комментарий
Используя шестнадцатеричные коды символов, выведите на экран текст: “Это строка”
Используя шестнадцатеричные коды символов, выведите на экран текст: “Программа на Си”
Используя восьмеричные коды символов, выведите на экран текст: “Программа на Си”
Вывести на экран следующую “рожицу”:
_ _
о о
|
|
______
Вывести на экран следующую таблицу:
22 33 44
55 66 77
Вывести на экран следующий «треугольник»:
*
***
*****
*******
*********
2. Переменные. Основные типы данных. Форматный ввод-вывод
Любая программа, суть которой не есть вывод на экран некоторой текстовой информации, содержит описание переменных. Переменная - это пара “имя” - “значение”. Имени соответствует адрес участка памяти, выделенной переменной, а значением является содержимое этого участка. Именем переменной служит идентификатор. В С идентификатор - это последовательность из букв латинского алфавита, десятичных цифр и символов подчеркивания, начинающаяся не с цифры. Прописные и строчные буквы различаются. Примеры идентификаторов:
i, i2, i_2, stroka, STROKA, F_I_O
Каждая переменная и каждое выражение в программе имеет тип, определяющий операции, которые могут над ними производиться. Все типы языка С делят на основные и производные. Переменные типизируются с помощью описаний. Для описания переменных основных типов используют ключевые слова, содержащиеся в таблице 2.
Описание переменных заданного типа имеет следующий формат:
тип имя1 [=иницал._выражение1], имя2 [=иницал._выражение2],…;
где
тип – один из основных типов (таблица 2);
имя – идентификатор;
инициал._выражение – необязательный инициализатор, определяющий начальное значение соответствующего объекта.
Таблица 2. Основные типы данных
Тип данных |
Диапазон значений |
char (символьный) |
-128…127 |
short (короткий целый) |
-32768…32767 |
int (целый) |
-32768…32767 |
long (длинный целый) |
-2147483648…2147483647 |
unsigned char (беззнаковый символьный) |
0…255 |
unsigned int (беззнаковый целый) |
0…65535 |
unsigned long (беззнаковый длинный целый) |
0…4294967295 |
unsigned short |
0…65535 |
float (вещественный) |
3.4Е-38…3.4Е+38 |
double (вещественный с удвоенной точностью) |
1.7Е-308…1.7Е+308 |
long double (длинный вещественный с удвоенной точностью) |
3.4Е-4932…3.4Е+4932 |
К основному типу можно применять спецификатор const. Это дает тип, имеющий те же свойства, что и исходный тип, за исключением того, что значение переменных типа const не может изменяться после инициализации.
Кроме типов, приведенных в таблице 2, к основным типам относят перечислимый тип enum и тип void (отсутствие значения) (подробнее – в лекциях).
Из основных типов с помощью операций *, &, [], () и механизмов определения структурированных типов (классов, структур, объединений) можно конструировать множество производных типов, которые будут рассмотрены позднее.
Для определения размера (в байтах) области памяти, выделяемой для переменной определенного типа, в С используется операция sizeof. Разрешены два формата операции:
sizeof выражение
или
sizeof (тип данных).
sizeoff не вычисляет значения выражения, а только определяет его тип, для которого затем вычисляется размер. Например, пусть определена переменная int i. Тогда операция sizeof(i) определит, сколько байт выделено для переменой i.
Соотношение между основными типами можно записать так:
1==sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <=sizeof(float) <= sizeof(double)
Для вывода информации используется функция printf(). Ее описание содержится в заголовочном файле stdio.h. При этом имеется возможность форматировать данные, то есть влиять на их представление на экране дисплея. Оператор вызова функции можно представить так:
printf(форматная_строка, список аргументов)
Форматная строка записывается в двойных кавычках и может включать произвольный текст, управляющие символы и форматные спецификаторы. Они предназначены для управления формой внешнего представления значений аргументов функции printf() и начинаются с символа %. В список аргументов включают объекты, значения которых должны быть выведены из программы. Это выражения, переменные, константы и функции. Количество аргументов и их типы должны соответствовать последовательности спецификаций преобразования в форматной строке. Список аргументов может отсутствовать. Например:
printf(“\nHello, world!\n”) //здесь нет аргументов, а в форматной
//строке содержится два управляющих символа \n
Обобщенный формат форматного спецификатора:
%флажки ширина_поля.точность модификатор спецификатор
Здесь обязательными являются только два элемента – символ ’%’ и спецификатор.
Ширина_поля –целое положительное число, определяющее длину (в позициях на экране) представления выводимого значения.
Точность-целое положительное число, определяющее количество цифр в дробной части представления вещественного числа (с фиксированной точкой) или его мантиссы (при использовании представления с плавающей точкой)
Модификаторы . Возможные значения:
‘-‘ – выравнивание выводимого значения по левому краю
Модификатор ‘0’ – при использовании модификатора ширины поля пустые позиции слева от значения заполняются пробелами. Использование модификатора ‘0’ позволяет заменить их на нули.
Модификатор ‘l’ позволяет вывести на экран значения типа long int и double
Модификатор ‘h’ позволяет вывести на экран короткие значения (значения с модификатором short)
Спецификаторы. В задачах будем использовать следующие спецификаторы:
d- целое десятичное число (тип int)
c-символ
s-строка
u- беззнаковое целое
f- вещественное число с точностью до 6-го знака
e- вещественное число в экспоненциальной форме с точностью до 6-го знака
g-вещественное число (аналог f или e, но без лишних нулей в конце)
Для ввода данных используется функция scanf(). Так же, как и для функции printf(), для функции scanf() указываются управляющая строка и следующий за ней список аргументов.
Форматные команды, модификаторы и требования к списку аргументов, используемые для работы функции printf() остаются справедливыми и для scanf(), за исключением следующих отличий:
printf() работает с переменными, константами и выражениями, в то время как scanf() использует адреса переменных. Более подробно работа с адресами будет рассмотрена позднее. Важно запомнить два требования:
Если нужно ввести некоторое значение и присвоить его переменной одного из основных типов, то перед именем переменной требуется писать символ &.
Если требуется ввести значение строковой переменной, то использовать символ & не нужно.
Различия в форматных командах:
Не используется спецификатор %g.
Спецификаторы %f и %e работают абсолютно одинаково.