Сибирский государственный университет
телекоммуникаций и информатики
Методические указания
к лабораторным работам
по курсу «Программирование на языках высокого уровня»
Язык программирования С
Новосибирск
2006
УДК 681.3.06
Ктн, доцент И.В. Перцев, ктн, доцент В.А.Перцева
Данные методические указания включают в себя 12 лабораторных работ для изучения курса «Программирование на языке высокого уровня». Эти работы помогут студентам освоить как базовые понятия программирования на алгоритмическом языке Си (интегрированная среда, программы разветвляющейся и циклической структуры, массивы), так и более сложные вопросы (рекурсии, функции, работа с файлами, работа с динамической памятью).
В каждой лабораторной работе указывается ее цель, изложены краткие теоретические сведения, приведены примеры программ, которые помогут в разработке самостоятельных программ согласно вариантам заданий. Ответы на приведенные в методических указаниях контрольные вопросы способствуют закреплению материала.
Методические указания предназначены для студентов инженерно-технических факультетов, изучающих программирование во 2-м семестре.
Кафедра Прикладной математики и кибернетики.
Для специальности 220400
Утверждено редакционно-издательским советом СибГУТИ в качестве методических указаний
Сибирский государственный университет
Телекоммуникаций и информатики, 2006г.
Введение
Язык Си является универсальным языком программирования. Первоначально он появился в операционной системе UNIX, и развивался как основной язык систем, совместимых с ОС UNIX. Сам язык, однако, не связан с какой-либо одной операционной системой или машиной; и хотя его называют языком системного программирования, так как он удобен для написания операционных систем, он может использоваться для написания любых больших вычислительных программ, программ для обработки текстов и баз данных.
Лабораторная работа №1
1. ЦЕЛЬ РАБОТЫ: приобретение практических навыков работы в интегрированной среде Borland C, изучение структуры программы на языке С.
2. ОСНОВНЫЕ СВЕДЕНИЯ
Чаще всего линейные алгоритмы используются для программирования вычислений по формулам. В этом случае удобно использовать набор стандартных функций Си, содержащихся в заголовочном файле math.h :
Sin (x) - sin x; cos (x) – cos x ; tan(x) - tg х ; log (x) - ln x; log10(x) – lg x; exp(x) - показательная функция ex ; sqrt (x)- корень квадратный от х; роw(x, y) – x в степени y; abs(x)- модуль x.; acos(x) – arccos x; asin(x) – arcsin x; atan(x)- arctg x; sinh(x)- sh x; cosh (x) – ch x; tanh(x)-th x.
Для тригонометрических функций аргумент х измеряется в радианах и имеет тип double, как и значения функций.
Пример программы линейной структуры
Вычислить площадь и стороны прямоугольного треугольника, если известны гипотенуза c и угол x. Для вычислений воспользуемся формулами :
a=c×sin x; b=c×cos x; S=ab
;Программа вычислений имеет вид:
//lab1_prim.c вычисление высот и площади треугольника
#include <stdio.h> //заголовочный файл для организации ввода-вывода
#include <math.h> //заголовочный файл математических функций
main() //главная функция
{ float a,b,c,x, S; //описание переменных вещественного типа
printf (“\n Введите гипотенузу и угол треугольника ”);
scanf (“%f%f “,&c,&x); // ввод значений вещественного типа
a=c*sin(x);
b=c*cos(x);
S=a*b;
printf (“\n Результаты: a=%7.2f b=%7.2f S=%7.2f “,a, b, S);
return 0;
}
Комментарий в программе не влияет на компиляцию программы, а служит для разъяснения действий основных блоков текста и программы в целом. Однострочный комментарий действует от двух символов // до конца строки. Многострочный комментарий заключается в пары символов /* и */.
Вторая строка программы #include <stdio.h> является директивой компилятора для включения заголовочного файла stdio.h , в котором содержатся средства ввода-вывода (связи с внешними устройствами), отсутствующие в самом языке Си. Третья строка - #include<math.h> является директивой компилятора для включения заголовочного файла math.h, обеспечивающего выполнение математических функций.
Программа на языке Си состоит из ряда функций, из которых функция main (главная) является обязательной и служит точкой входа в программу. В круглые скобки заключаются параметры функции, причем наличие круглых скобок обязательно, если даже список параметров пуст. В фигурные скобки заключаются составной оператор (несколько операторов). Для придания тексту программы наглядности открывающая и соответствующая ей закрывающая фигурные скобки печатаются на одном уровне, а заключенный между ними текст, сдвигается на 1-2 символа вправо, вложенный блок также сдвигается вправо и т.д. Образуется иерархия вложенных блоков, придающая программе на Си характерный вид.
В программе описаны переменные a, b, c, х, S вещественного типа (float). В отличие от других языков в Си учитывается регистр при определении имени переменной, т.е. s и S – разные переменные. Функции printf и scanf содержатся в заголовочном файле stdio.h и служат для вывода на экран и ввода с клавиатуры соответственно. Управляющие символы \n в функции printf служат для перевода на новую строку. Символ & в функции scanf указывает на адрес вводимой переменной. Ввод и вывод переменных вещественного типа производится в формате f. Признаком форматного вывода в функции printf является %. При выводе между знаком процента и форматной переменной f можно включить общую ширину поля вывода и число позиций после десятичной точки. Оператор return 0; служит для выхода из функции main в Интегрированную Среду, 0 является признаком успешного окончания программы. Завершает текст программы закрывающая фигурная скобка, означающая конец функции main.
3. ВЫПОЛНЕНИЕ РАБОТЫ
3.1. Наберите и выполните приведенную выше программу вычисления высот треугольника по заданным сторонам.
3.2. Составьте и выполните программу линейной структуры согласно вариантам заданий.
Вычислить значение функции переменных при заданных значениях параметров:
1. x=4y2/(4z-2t3) при t=1 ; z=3; y=sin t.
2 x=4y3-z/t при t=2; z=3; y=cos(t+z).
3. x=6t2-(z+1)/y2 при y=2; z=4; t=sin(2+z).
4. x=(8z2+1)/(y+t2) при z=1; t=2; y=t+z.
5 x=8z / (et+2)-y2 при t=3; z=ctg t +2; y=4.
6. x=8z/(et+2)-y2 при t=1; z=t+2; y=4.
7. x=2y+3 sh t- z при y=2; t=5 / (1+y2); z=4
8. x=3 y2/ (4 tg z-2t2) при t=0.5; z=6; y=t+2 ctg z.
9. x=4y2 /( 4y ez - 2t3) при t=1 ; z=3; y=sin t.
10. x=4 ln y3-z / t при t=2; z=3; y=cos(t+z).
11. x=6 t2- (ctg z+1)/ y2 при y=2; z=4; t=sin(2+z).
12. x=(8z2+1)/( y et +t2) при z=1; t=2; y=tg t+z.
4. КОНТРОЛЬНЫЕ ВОПРОСЫ
4.1. Что такое алгоритм линейной структуры, программа линейной структуры?
4.2. Для чего используются заголовочные файлы?
4.3. Структура программы на языке Си.
Лабораторная работа №2
Программы разветвлённой структуры
1. ЦЕЛЬ РАБОТЫ: приобретение практических навыков в составлении алгоритмов и программ разветвленной структуры.
2. ОСНОВНЫЕ СВЕДЕНИЯ
Алгоритм разветвленной структуры - это алгоритм, в котором вычислительный процесс осуществляется по одной из ветвей. Если количество ветвей две – то используется условный блок, если больше – то множественный выбор. В программах используют соответственно условный оператор IF или оператор SWITCH для реализации разветвленного алгоритма.
2.1. Условный оператор IF
Условный оператор в языке Си имеет формат:
if (условие) оператор1; else оператор2; (полная форма) или
if (условие) оператор1; (сокращенная форма).
Если оператор1 и оператор2 состоят из одного оператора, то в фигурные скобки они не заключаются. Если оператор1 и/или оператор2 являются составным оператором (несколько операторов), то он заключается в фигурные скобки. Условие всегда заключается в круглые скобки.
В качестве примера приведем программу вычисления наибольшего из значений функции y1=x²+1, y2=7-x² , y3=x+1 для любого х.
//lab2_prim1.c
#include <stdio.h>
main()
{ float x,y1,y2,y3,max;
printf("Введите x\n"); scanf(“%f “,&x);
y1=x*x+1; y2=7-x*x; y3=x+1;
if (y1>y2) max=y1; else max=y2;
if (y3>max) max=y3;
printf (“ x=%8.2f y1=%8.2f y2=%8.2f y3=%8.2f max=%8.2f\n”,x,y1,y2,y3,max); }
2.2 Множественный выбор
В программах с множественным выбором используется переключатель switch , который сравнивает значение выражения, указанного за ним, и выполняет один из операторов, метка которого совпадает с этим значением. Общий вид:
Switch (выражение)
{ case метка_1: список_операторов_1;
……………………………………….
case метка_n: список_операторов_n;
default : операторы; }
Значения выражения и меток должны быть целочисленными константами.
Например, определим количество дней по введенному номеру месяца.
//lab2_prim2.c множественный выбор
#include<stdio.h>
#include<conio.h> // Заголовочный файл для работы с терминалом
int m;
main()
{
printf("\n Введите номер месяца :"); scanf("%d",&m);
printf("\n В %4d месяце дней: ",m);
switch(m){
case 1: case 3: case 5: case 7: case 8: case 10: case 12:printf("тридцать один\n");break;
case 2: printf ("двадцать восемь \n");break;
case 4: case 6: case 9: case 11: printf("тридцать\n");break;
default: printf("\n Номер месяца неверен \n");}
getch ();
}
В примере программы, если номер месяца превышает 12, выводится сообщение о неверном вводе месяца, для чего используется default. Оператор break служит для прерывания цикла проверки и перехода в конец переключателя. В случае отсутствия break, происходит переход на следующую ветвь. Функция getch, подключающаяся заголовочным файлом conio.h, ожидает нажатия любой клавиши. Это позволяет просмотреть результаты, не используя ALT+F5 для просмотра экрана пользователя.
3. ВЫПОЛНЕНИЕ РАБОТЫ
Составить программы разветвляющейся структуры согласно вариантам задания 1 (использ7 уя IF) и задания 2 (используя SWITCH) .
Варианты задания 1
1) Даны четыре числа. На сколько их сумма меньше их произведения?