- •«Утверждаю»
- •Учебно-методический комплекс
- •Астана 2010 График выполнения и сдачи заданий по дисциплине
- •Карта учебно-методической обеспеченности дисциплины Учебники, учебные пособия
- •Конспект лекционных занятий
- •Тема 1. Введение в программирование на Си. Структура программы. Директивы препроцессора. Типы данных.
- •Основные операции в языке Си.
- •Преобразование типов
- •Тема 2. Управляющие структуры. Выбор вариантов. Структура выбора If, If – Else, логические операции, операция условия, множественный выбор.
- •Тема 3. Управляющие структуры. Структуры повторения While, do – While, For. Управляющие операторы break и continue.
- •Тема 4. Массивы. Разработка программ с использованием одномерных и двумерных массивов.
- •Тема 5. Функции в Си. Создание и использование функций.
- •Тема 6. Классы памяти и разработка программ.
- •Тема 7. Указатели в Си.
- •Тема 8. Использование указателей при обработке одномерных и двумерных массивов.
- •Тема 9. Символы и строки в Си.
- •Функции сравнения из библиотеки обработки строк. Прототипы функций и краткое описание каждой из них приведены в таблице 6.
- •Функции поиска из библиотеки обработки строк. Прототипы функций и краткое описание каждой из них приведены в таблице 7.
- •Другие функции из библиотеки обработки строк. В таблице 8 приведены прототипы и краткое описание остальных функций из библиотеки обработки строк.
- •Ниже приведены примеры программы, использующих функции работы со троками.
- •Тема 11. Структуры данных в Си.
- •Тема 12. Динамические структуры данных.
- •Тема 13. Работа с файлами в Си.
- •Тема 14. Графика в Си.
- •Тема 15. Объектно-ориентированное программирование.
- •Методические рекомендации по выполнению лабораторных заданий
- •Лабораторная работа № 3. Использование операторов цикла при решении задач.
- •Лабораторная работа №4. Разработка программ с использованием одномерных массивов.
- •Лабораторная работа №5. Разработка программ с использованием двумерных массивов.
- •Лабораторная работа № 6. Программирование задач с использованием нескольких функций на языке Си.
- •Лабораторная работа № 8. Программирование задач обработки структур данных.
- •Лабораторная работа № 9. Разработка программ с использованием файловых переменных.
- •Лабораторная работа № 10. Разработка программ с использованием графических функций языка Си.
- •Содержание отчета по выполнению лабораторной работы
- •1 Задание
- •Тема 1. Запись констант, стандартных функций, выражений, операторов присваивания. Запись программ линейных структур алгоритмов.
- •Тема 2. Алгоритмическое описание, запись программ линейных, разветвляющихся.
- •Тема 3. Алгоритмическое описание, запись программ циклических структур алгоритмов.
- •Тема 4. Алгоритмическое описание, составление программ обработки одномерного массива.
- •Тема 5. Алгоритмическое описание, составление программ обработки двумерного массива.
- •Тема 6-7. Составление программ решения задач с использованием функции.
- •Рекомендуемая литература:
- •Тема 8-9. Составление программ решения задач обработки массивов с использованием указателей.
- •Тема 10-11. Программирование задач обработки символьных и стрковых данных.
- •Рекомендуемая литература.
- •Тема 12. Методы сортировки.
- •Тема 13. Составление программ решения задач с использованием структур данных.
- •Тема 14. Составление программ решения задач с использованием файла произвольного доступа.
- •Рекомендуемая литература.
- •Тема 15. Алгоритмизация графических построений.
- •Варианты заданий:
- •Сведения
- •Перечень экзаменационных вопросов по пройденному курсу
- •Глоссарий
Основные операции в языке Си.
Самой общей операцией является присваивание. В языке Си оператор присваивания записывается V=A;
где V– переменная,A– выражение.
Можно использовать последовательные присваивания, например sum=a=b;
Присваивание производится справа налево, то есть bбудет присвоеноa, которая в свою очередь будет присвоенаsum, так что все три переменные получают одно и тоже значения (а именно; начальное значениеb).
Язык Си поддерживает обычный набор арифметических операций:
* – умножение, / – деление, % – операция деления по модулю, + – сложение, – – вычитание.
Операция деление по модулю используется в целочисленной арифметике. Ее результатом является остаток от деления целых чисел (20 % 3 = 2).
Операции + и - имеют приоритет ниже, чем приоритет операций *, / и %, а у них он, в свою очередь, ниже приоритета унарного минуса.
Рассмотрим пример:
main( )
{ int m1, m2;
m1=m2= -(15+3)*5+(11+9*(8+3)) – 266%16; /*m1=m2=10;
(операция выполняется справа налево) */
printf (“m1 = %d\n”, m1);
printf (“%d\n”, m2/3); }
Операции увеличения и уменьшения: ++ и - -.
Эти операции позволяют добавить 1 или вычесть 1 из любого операнда. Различают две формы указанных операций, постфиксная и префиксная. Они различаются между собой только тем, в какой момент осуществляется увеличение или уменьшение операнда. Операции увеличения и уменьшения могут быть выполнены в середине выражения, причем эти операции могут быть выполнены до и после вычисления выражения. Рассмотрим примеры.
Пример 1: Пусть l=10;
тогда
x=l++; присвоит переменнойxзначение 10,
x=++l; присвоит переменнойxзначение 11.
В двух случаях значение lстанет равным 11.
Пример 2:
sum=a+b++;
sum=a+ ++b;
b++ – постфиксная форма: переменнаяbизменяется после того, как ее значение используется.
++b– префиксная форма: переменнаяbизменяется перед тем, как ее значение используется.
В первом случае: “сложить aиb, присвоить результатsumи увеличитьbна единицу.
Во втором случае: “увеличить bна единицу, сложитьaиb, и присвоить результатsum”.
Пример 3:
main()
{ int a, b, s=0;
a=b=10; s=a+b++;
printf(“%d %d \n”, s, b);
s=a+ ++b;
printf (“%d %d \n”, s, b); }
Операции вычисления и уменьшения имеют очень высокий уровень старшинства; только круглые скобки обладают более высоким приоритетом.
Преобразование типов
Если в выражении используются операнды различных типов, то они преобразуются к некоторому общему типу. Компилятор использует набор правил для автоматического преобразования типов. Приведем основные правила при преобразовании типов:
1. Если операция выполняется над данными двух различных типов, обе величины приводятся к «высшему» из двух типов. Этот процесс называется «повышением» типа.
2. Последовательность имен типов, упорядоченных от «высшего» типа к «низшему» выглядит так: double,float,long,int,shortиchar. Примечание ключевого словаunsignedповышает ранг соответствующего типа данных.
3. В операторе присваивания конечный результат вычисления выражения в правой части приводится к типу переменной, которой должно быть присвоено это значение. Данный процесс может привести к «повышению» или «понижению» типа (во втором случае величина приводится к типу данных, имеющему более низкий приоритет).
«Повышение» типа обычно происходит гладко, а «понижение» необходимо выполнять с учетом представления данных в памяти.
Пример:
main ( )
{ char ch; int i; float fl;
fl=i=ch=’A’;
printf (“ch=%c, i=%d, fl=%6.2f\n”,ch, i, fl);
ch=ch + f; (65+1=66 =>код символа ''В''=> в ch)
i=fl+2*ch; (66*2+65.00=>132.00+65.00=>197.00=>197)
fl=2.0*ch+c; printf (''сh=%с, i=%d, fl=%62f)n'',ch, i, fl); }
Результат:
ch=A, i=65, fl=65.00
ch=B, i=197, fl=329.10
Еще один вид преобразования типов. Для сохранения точности вычислений при арифметических операциях все величины типа floatпреобразуются в данные типаdouble. Это существенно уменьшает ошибку округления. Конечный результат, преобразуется обратно в число типаfloat, если это диктуется соответствующим оператором описания.
Операции приведения.
Преобразование типов, рассмотренные выше, выполняется автоматически. Существует возможность точно указывать тип данные, к которому необходимо привести некоторую величину. Этот способ называется ''приведением'' типов и используется следующим образцом: перед данной величиной в круглых скобка и имя типа вместе образуют ''операцию приведения''. В общем виде она записывается так:
(тип) выражение
где фактически имя требуемого типа подставляется вместо слова ''тип''
Например: пусть m– типаint
m = 2.7+2.9; - 5
m = (int) 2.7 + (int)2.9; - 4
Библиотечная программа sqrtрассчитана на аргумент типаdouble. Еслиm– целое, то приsqrt((double)m) параметрmсначала преобразуется к типуdouble.
Выражение представляет собой объединение операций и операндов. Некоторые выражения состоят из меньших выражений, которые называются подвыражениями. В языке Си каждое выражение имеет значение.
Примеры: С=5+10=15 25+(С=5+10)=40
= 1
Операции отношения. Операции отношения используются для сравнений двух значений. Приведем список операций отношения, применяемых при программировании на языке Си:
<, <=, = =, >=, >, !=
Если отношение истинно, значение условного выражения равно 1; если отношение ложно значение условного выражения равно 0. Простое условие выражения состоит из знака операции отношения и операндов, расположенных слева и справа от него. Приоритет операции отношения считается меньшим, чем у арифметических операций +, -, *, /, и большим, чем у операции присваивания.
Сами операции отношения можно разбить на две группы в соответствии с назначенными приоритетами: группа операций более высокого приоритета <, <=, >=, > и группа операций более низкого приоритета = =, !=. Операции отношения выполняются слева направо.
Операторы языка Си
Оператор присваиванияимеет вид:V=A;
y=5*x+sqrt(7*x+3);
Любой оператор присваивания, заключенный в круглые скобки, является выражением с определенным значением, которое получается в результате этого присваивания.
Например: выражение вида ((S=13+12)<=30) будет иметь значение истина.
Составные операторы (блоки). Составные операторы представляют собой два или более операторов, объединенных с помощью фигурных скобок; он называется также ''блоком''. Составные операторы используются в условном операторе, операторах цикла.
Основная литература: 1осн[63-77],2осн[23-133]
Дополнительная литература:11доп[84-106 ]
Контрольные вопросы:
Назовите тип данных для работы с беззнаковыми целыми числами?
Какие существуют формы записи операций увеличения и уменьшения и чем они отличаются?
Назовите директиву препроцессора для определения символьных и строковых констант?
Какие спецификации формата являются эквивалентными при их использовании в функции scanf?
В каком случае происходит «повышение» типа?