Министерство общего и профессионального образования РФ УЛЬЯНОВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
T.Е. Родионо...
10 downloads
278 Views
271KB Size
Report
This content was uploaded by our users and we assume good faith they have the permission to share this book. If you own the copyright to this book and it is wrongfully on our website, we offer a simple DMCA procedure to remove your content from our site. Start by pressing the button below!
Report copyright / DMCA form
Министерство общего и профессионального образования РФ УЛЬЯНОВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
T.Е. Родионова
ЭЛЕМЕНТЫ ПРОГРАММИРОВАНИЯ НА ЯЗЫКЕ СИ
МЕТОДИЧЕСКИЕ УКАЗАНИЯ ДЛЯ СТУДЕНТОВ СПЕЦИАЛЬНОСТИ 5102
УЛЬЯНОВСК 1998
2
УДК 681.3.06 (076) Родионова Т.Е. Элементы программирования на Си: Методические указания для студентов специальности 5102 - Ульяновск , УлГТУ, 1998. - 52 с. Методические указания разработаны на кафедре прикладной математики и информатики. Могут быть использованы для подготовки к выполнению лабораторных и практических заданий по курсу «Языки программирования и методы трансляции» Рассматриваются алгоритмы и программы обработки данных на языке программирования Си. Большое внимание уделено составлению программ с использованием указателей и динамических структур данных. Данное пособие может оказаться полезным для студентов, самостоятельно изучающих язык программирования Си.
Библиогр:6 назв. Рецензент канд. физ.-мат. наук, доцент кафедры «Математическая кибернетика и информатика» Е.А. Михеева
Одобpено секцией методических пособий научно-методического совета университета
Ульяновский государственный технический университет, 1998
3
Содержание 1. Лабораторная работа 1. Построение программ разветвленной структуры
4
1.1 Методические указания к выполнению работы
4
1.2 Содержание отчета
9
1.3 Контрольные вопросы
9
1.4 Варианты заданий
9
2. Лабораторная работа 2. Программирование циклов 2.1 Методические указания к выполнению работы
11 11
2.2 Контрольные вопросы
15
2.3 Варианты заданий
15
3. Лабораторная работа 3. Обработка массивов данных 3.1 Методические указания к выполнению работы
16 16
3.2 Контрольные вопросы
20
3.3 Варианты заданий
20
4. Лабораторная работа 4. Сортировка массивов 4.1 Методические указания к выполнению работы 4.2 Варианты заданий 5. Лабораторная работа 5. Обработка строк 5.1 Методические указания к выполнению работы
23 23 26 27 27
5.2 Контрольные вопросы
31
5.3 Варианты заданий
31
6. Лабораторная работа 6. Обработка структур данных 6.1 Методические указания к выполнению работы
32 32
6.2 Контрольные вопросы
37
6.3 Варианты заданий
37
7. Лабораторная работа 7. Обработка списков 7.1 Методические указания к выполнению работы
40 40
7.2 Контрольные вопросы
43
7.3 Варианты заданий
44
Приложение 1
48
Приложение 2
50
Список литературы
52
4
ЛАБОРАТОРНАЯ РАБОТА 1 ПОСТРОЕНИЕ ПРОГРАММ РАЗВЕТВЛЕННОЙ СТРУКТУРЫ Цель работы: приобретение практических навыков записи арифметических выражений и использования в программе оператора условия и оператора переключателя.
1.1 Методические указания к выполнению работы В программе на Си в выражениях желательно использовать константы и переменные одного типа. Если происходит смешивание типов, то компилятор не считает программу неправильной, а использует набор правил для автоматического преобразования типов: 1. Если операция выполняется над данными двух разных типов, обе величины приводятся к "высшему" из двух типов. Этот процесс называется "повышением" типа. 2. Последовательность имен типов, упорядоченных от "высшего" к "низшему" выглядит так: double float long int short char Применение ключевого слова unsigned повышает ранг соответствующего типа данных со знаком. 3. В операторе присваивания конечный результат вычисления выражения в правой части приводится к типу переменной, которой должно быть присвоено это значение. Данный процесс может привести и к "повышению" и к "понижению" типа. Для сохранения точности вычислений при арифметических операциях все величины типа float преобразуются в данные типа double, а типы char и short преобразуются к типу int. Это существенно уменьшает ошибку округления. Для организации программ разветвленной структуры на языке Си используется условный оператор, условная операция и оператор переключатель.
5
Условный оператор Условный оператор имеет две формы записи: if (выражение) оператор1; и if (выражение) оператор1; else оператор2; Если выражение истинно, то выполняется оператор1, если оно ложно, то при использовании формы 1 управление передается следующему оператору,
а при
применении формы 2 выполняется оператор2. Если необходимо выполнить несколько действий, то используется составной оператор { }. Пример. Рассмотрим фрагмент программы if (i<j) i++; else { j=i-3; i++; } Если значение i больше, чем j, то происходит увеличение его на 1. Если значение j больше, чем i, то выполняется два действия: присвоение нового значения переменой j и увеличение i. В данном случае в ветви else используется составной оператор для объединения двух действий. Допускается использование вложенных операторов if. Оператор может быть вложен в фазу if или else другого if. Если нет фигурных скобок, то ключевое слово else относится к ближайшему if, у которого нет else. Пример. Рассмотрим два фрагмента программы if (a==b)
if (a==b)
{ if ( a==0) b=2;
if ( a==0) b=2;
} else a=2;
else a=2;
В первой программе else относится к первому if, а во втором - ко второму if. Для записи условного оператора используются следующие операции сравнения и логические операции: ==
равно
6
!=
не равно
= больше, больше или равно ! && !!
инверсия логическое И логическое ИЛИ.
Результатом сравнения
является
данное типа int, принимающее значе-
ние 0 при невыполнении сравнения (ложь) и значение 1 при выполнении условия сравнения (истина).
Условная операция Это короткий способ записи оператора if. Форма записи оператора следующая: выражение1 ? выражение2 : выражение3; "Выражение1" должно быть целого или плавающего типа или указатель. Если "выражение1" равно нулю (ложно), то вычисляется "выражение3", и его значение является результатом операции. Если значение "выражения1" отлично от нуля (истинно), то результатом операции является значение "выражения2". Пример. Нахождение максимального
из
двух значений и сохранение его
в переменной max. max=(a #include<math.h> void main() { int a=3,b=5,c=7; float s,p; if (a>=(b+c)||b>=(a+c)||c>=(a+b)) printf("треугольник не складывается\n"); else { s=(float)1/2*(a+b+c); p=sqrt(s*(s-a)*(s-b)*(s-c)); printf("p=%f\n",p); } }
1.2 Содержание отчета 1. Исходные данные. 2. Текст программы. 3. Распечатка результатов.
9
1.3. Контрольные вопросы 1. Правила для автоматического преобразования типов в выражении. 2. Роль ключевого слова unsigned при задании типа. 3. Использование в программе условной операции. 4. Роль оператора разрыва в операторе переключателе. 5. Формы записи оператора условия.
1.4. Варианты заданий Вариант 1. Заданы вершины треугольника А(x1,y1), B(x2,y2), C(x3,y3). Вычислить длину медианы, проведенной из А. Вариант 2. Известно, что из четырех чисел x1,x2,x3,x4 три равны между собой, а одно отлично от них. Присвоить переменной NF номер этого числа, а переменной F значение этого числа. Вариант 3. Составить программу, которая бы с помощью оператора переключателя реализовала бы все возможные операции над двумя целыми числами. Вариант 4. Составить программу, которая бы с помощью оператора переключателя реализовала бы все возможные операции над двумя вещественными числами. Вариант 5. Для целого числа К от 1 до 9 вывести фразу "мне К лет", учитывая при этом, что при некоторых значениях К слово "лет" надо заменить на слово "год" или "года". Вариант 6. Для натурального числа К напечатать фразу "мы нашли К грибов в лесу", согласовав окончание слова "гриб" с целым числом К. Вариант 7. Составить программу, которая бы реализовала следующий алгоритм: по введенным названиям двух нот (до, ре, ми, фа, соль, ля, си) определить интервал, образованный нотами. Секунда - это интервал из двух соседних нот (по кругу), терция - интервал через ноту и т.д. (кварта, квинта, секста, септима) Вариант 8. Введенные значения переменных a, b, c поменять местами так, чтобы оказалось a>=b>=c. Вариант 9. Дано число х. Напечатать в порядке возрастания числа cos(x), 1+|x|, (1+ x x)
(1+ x x).
10
Вариант 10. Даны числа a, b, c, d, e, f. Найти координаты точки пересечения
прямых,
описываемых
уравнениями
a x + b y=c
и d x + e y=f, если
она существует. Вариант 11. Даны числа a, b, c. Если нельзя построить треугольник с такими длинами сторон, то вывести 0, если треугольник равносторонний - 1, если равнобедренный - 2, если прямоугольный - 3. Вариант 12. Составить программу согласно условию. Присвоить переменной F значение 1, если ни одно из чисел x, y, z не является положительным и целым, и 0 в противоположном случае. Вариант 13. Составить программу согласно условию. Присвоить переменной F значение 1, если только два числа из трех чисел x, y, z являются положительными и целыми, и 0 в противоположном случае. Вариант 14. Составить программу согласно следующему условию. Присвоить переменной f значение 1, если цифра 3 входит в запись заданного трехзначного числа x, и 0 в противоположном случае. Вариант 15. Заданы координаты вершин треугольника. Выяснить является ли заданный треугольник тупоугольным или нет.
ЛАБОРАТОРНАЯ РАБОТА 2
11
ПРОГРАММИРОВАНИЕ ЦИКЛОВ Цель работы: изучение операторов цикла и особенностей их применения. 2.1 Методические указания к выполнению работы Оператор цикла while Данный оператор цикла имеет вид: while(выражение) оператор; Сначала вычисляется значение выражения, если оно ложно, то управление передается на следующий за циклом оператор. Если условие истинно, то выполняется тело оператора. Оператор может быть пустым, простым и составным. Пустой оператор состоит только из ;. При выполнении оператора ничего не происходит. Используется, когда тела цикла не требуется, хотя по синтаксису нужен хотя бы один оператор. Пример. Рассмотрим следующий фрагмент программы index=1; while(index++ void main() { int i; for(i=0;i