Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Rodionova_2

.pdf
Скачиваний:
13
Добавлен:
20.04.2015
Размер:
277.56 Кб
Скачать

Министерство общего и профессионального образования РФ

УЛЬЯНОВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

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. Программирование циклов

11

 

 

 

 

 

 

 

 

 

 

 

 

2.1 Методические указания к выполнению работы

11

 

 

 

 

 

 

 

 

 

 

2.2 Контрольные вопросы

15

 

 

 

 

 

 

 

 

 

 

 

2.3 Варианты заданий

15

 

 

 

 

 

 

 

 

 

 

3. Лабораторная работа 3. Обработка массивов данных

16

 

 

 

 

 

 

 

 

 

 

 

3.1 Методические указания к выполнению работы

16

 

 

 

 

 

 

 

 

 

 

3.2 Контрольные вопросы

20

 

 

 

 

 

 

 

 

 

 

 

3.3 Варианты заданий

20

 

 

 

 

 

 

 

 

 

 

4. Лабораторная работа 4. Сортировка массивов

23

 

 

 

 

 

 

 

 

 

 

 

4.1

Методические указания к выполнению работы

23

 

 

4.2 Варианты заданий

26

 

 

 

 

 

 

 

 

 

 

5. Лабораторная работа 5. Обработка строк

27

 

 

 

 

 

 

 

 

 

 

 

5.1

Методические указания к выполнению работы

27

5.2

Контрольные вопросы

31

 

 

 

 

5.3 Варианты заданий

31

 

 

 

 

 

 

 

 

 

 

6. Лабораторная работа 6. Обработка структур данных

32

 

 

 

 

 

 

 

 

 

 

6.1

Методические указания к выполнению работы

32

6.2

Контрольные вопросы

37

 

 

 

 

6.3 Варианты заданий

37

 

 

 

 

 

 

 

 

 

 

7. Лабораторная работа 7. Обработка списков

40

 

 

 

 

 

 

 

 

 

 

 

7.1

Методические указания к выполнению работы

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<b) ? b : a;

Условную операцию удобно использовать в тех случаях, когда переменной

необходимо присвоить одно из двух возможных значений. Уровень приоритета дан-

ной операции - 13 (см. приложение 1).

Оператор переключатель

Оператор предназначен для организации выбора одного из множества ва-

риантов. Общий вид оператора переключателя:

7

switch(выражение) {

case метка1:операторы1; case метка2:операторы2;

. . .

case меткаN:операторыN; default:операторы;

}

Значение "выражения" вычисляется и сравнивается с "метками" (обычно это

целые или символьные константы). В случае совпадения выполняется группа операторов соответствующая метке. Оператор default выполняется, если ни один из предыдущих операторов не выполнился. Возможно использование нескольких меток

перед группой операторов. Наличие ветви default необязательно. Желательно в конце группы операторов, соответствующих каждой метке, использовать опе-

ратор break для завершения выполнения оператора переключателя. В случае отсутствия оператора разрыва сравнение по меткам будет продолжено.

Пример. Выполнение арифметической операции по заданному знаку в пере-

менной sign. Фрагмент программы будет следующим:

switch(sign) {

case '-':x=y-z; break; case '+':x=y+z; break; case '*':x=y*z; break; case '/':x=y/z; break;

default:printf("Неизвестная операция\n");

}

Оператор переключатель может быть вложен один в другой, при этом их

метки могут совпадать.

Оператор разрыва

Форма записи оператора разрыва: break;

Используется в операторах цикла и в операторе switch. Его выполнение при-

водит к выходу из указанных конструкций и переход к следующему оператору про-

8

граммы. Если оператор разрыва находится внутри некоторой совокупности вложенных структур, его действие распространяется только на самую внутреннюю структуру, в которой он непосредственно содержится.

Оператор перехода

Вид оператора goto метка;

Меткой является ряд букв и цифр, начинающихся с буквы. Можно использо-

вать также знак подчеркивания. Число знаков не ограничено, но значащими являются только первые 32 символа. Диапазоном действия оператора является функция, поэтому выполнение оператора не приведет к переходу вне границ функции.

Пример. Программа, которая по введенным значениям длин сторон выясняет,

можно ли сложить из них треугольник и вычисляет его площадь. При вычислении значения переменной s используется операция приведения типа: (float). Она необходима для сохранения дробной части, так как тип исходных переменных int, а тип результата float.

#include<stdio.h>

#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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]