Язык программированя — Помогите с лабораторной работой по информатике язык С++


Содержание

Информатика программирование : Лабораторная работа: Программирование на языке Си++

Федеральное агентство по образованию.

ГОУ ВПО Уральский Государственный Технический Университет – УПИ имени первого президента России Б. Н. Ельцина

Кафедра теплофизики и информатики в металлургии.

Дисциплина: Алгоритмизация и программирование.

Лабораторная работа №1

«Знакомство с Си++. Выполнение программы простой структуры»

Преподаватель: Степура А. А.

Студент гр. Мт-190503: Свиткин В. Г.

Цель: Знакомство со средой программирования, создание, отладка и выполнение простой программы, содержащей ввод/вывод информации и простейшие вычисления.

Задачи: 1) вычислить значение выражения при различных вещественных типах данных: float и double. Сравнить и объяснить полученные результаты.

2) Вычислить значения выражений. Объяснить полученные результаты.

Задание 1. Вычислить значение выражения при различных вещественных типах данных (float и double). Вычисления следует выполнять с использованием промежуточных переменных. Сравнить и объяснить полученные результаты.

int main(int argc, char *argv[])<

//Объявление переменных и исходные данные

//Расчет значений выражения для типов float и double

//Вывод результата с 15 знаками после запятой

c1=(pow(a1+b1,4.0)-(pow(a1,4)+4*pow(a1,3)*b1) )/ (6 * a1 *a1 *b1* b1+ 4*a1*b1*b1+pow(b1,4) );

c2=(pow(a2+b2,4)-(pow(a2,4)+4*pow(a2,3)*b2) )/ (6*a2*a2*b2*b2 +4*a2*b2*b2 + pow(b2,4) );

Результат выполнения программы:

Результаты совпадают с точностью до 6 знаков после запятой. Это происходит из-за того, что при вычислениях с типом float точность меньше, и при каждом вычислении накапливается погрешность. Вычисление с типом double точнее, чем с float.

Задание 2.Вычислить значения выражений. Объяснить полученные результаты.

int main(int argc, char *argv[])<

Результат выполнения программы:

При выполнении первого действия сначала переменные увеличиваются на единицу, затем умножаются: 5 * 7 =40. При выполнении второго действия сначала идет сравнение переменных, после этого переменная m увеличивается на единицу. При выполнении третьего действия сначала переменные сравниваются, затем переменная n увеличивается на единицу.

Федеральное агентство по образованию.

ГОУ ВПО Уральский Государственный Технический Университет – УПИ имени первого президента России Б. Н. Ельцина

Кафедра теплофизики и информатики в металлургии.

Дисциплина: Алгоритмизация и программирование.

Лабораторная работа №2

« Использование основных операторов языка Си «

Преподаватель: Степура А. А.

Студент гр. Мт-190503: Свиткин В. Г.

Цель: Получение навыков в выборе и использовании операторов Си++; знакомство с итерационными процессами.

Задача: Используя оператор цикла, найти сумму элементов, указанных в задании. Результат напечатать, снабдив соответствующим заголовком.

Найти сумму ряда с точностью e=10-4, общий член которого

#define E 10e-4 //точность

int main(int argc, char *argv[])<

while(a>E); //выход из цикла при достижении нужной точности

Результат выполнения программы:

Сумма ряда: 2201.546404

Федеральное агентство по образованию.

ГОУ ВПО Уральский Государственный Технический Университет – УПИ имени первого президента России Б. Н. Ельцина

Кафедра теплофизики и информатики в металлургии.

Дисциплина: Алгоритмизация и программирование.

Лабораторная работа №3

« Вычисление функций с использованием их разложения в степенной ряд «

Преподаватель: Степура А. А.

Студент гр. Мт-190503: Свиткин В. Г.

Цель: Практика в организации итерационных и арифметических циклов.

Задача: Для х изменяющегося от a до b с шагом (b-a)/k, где (k=10), вычислить функцию f(x), используя ее разложение в степенной ряд в двух случаях:

а) для заданного n;

б) для заданной точности e (e=0.0001).

Для сравнения найти точное значение функции.

Лабораторная работа №1. Интегрированная среда разработки Microsoft Visual Studio. Программирование алгоритмов линейной структуры

ЛАБОРАТОРНЫЙ ПРАКТИКУМ

ОСНОВЫ ПРОГРАММИРОВАНИЯ

НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ C++

Лабораторный практикум «Основы программирования на языке C++» предназначен для студентов, обучающихся на специальностях 230102 «Автоматизированные системы обработки информации и управления» и 080801 «Прикладная информатика в экономике».

Данный лабораторный практикум позволяет получить основные практические навыки разработки консольных приложений на языке C++ с помощью Microsoft Visual Studio, ознакомиться с принципами структурного программирования, нашедшими реализацию в языке C++, и основами объектно-ориентированного программирования. И может быть использован в качестве основы для выполнения лабораторных работ по дисциплинам «Высокоуровневые методы информатики и программирования» и «Объектно-ориентированное программирование».

Составители: к. т. н. Р.А. Воронкин к. ф.-м. н. М.А. Банько
Рецензент: к. ф.-м. н. А.С. Ионисян

СОДЕРЖАНИЕ

Лабораторная работа №1. Интегрированная среда разработки Microsoft Visual Studio. Программирование алгоритмов линейной структуры.. 5

Лабораторная работа №2. Программирование алгоритмов разветвляющейся структуры в языке C++.. 60

Лабораторная работа №3. Организация циклических вычислений в языке C++ 93

Лабораторная работа №4. Одномерные массивы в языке C++.. 137

Лабораторная работа №5. Указатели и ссылки в языке C++.. 162

Лабораторная работа №6. Двумерные массивы в языке C++.. 206

Лабораторная работа №7. Функции и перегрузка в языке C++.. 249

Лабораторная работа №8. Строки и файлы в языке C++.. 311

Лабораторная работа №9. Структуры в языке C++.. 352

Лабораторная работа №10. Классы в языке C++.. 387

Список рекомендуемой литературы.. 459

Предисловие

Данный лабораторный практикум предназначен для привития студентам навыков и умений разработки консольных приложений на языке C++ с использованием структурного и объектно-ориентированного подходов.

Основная цель лабораторного практикума — помочь студентам закрепить знания, полученные на лекционных занятиях и овладеть навыками структурного и объектно-ориентированного программирования при разработке приложений на языке C++ в среде Microsoft Visual Studio.

В процессе выполнения заданий студенты рассмотрят процесс создания модульных программ, элемен­ты теории модульного программирования, объектно-ориентированный подход к проектиро­ванию и разработке программ, объектные типы данных и переменные объектного типа, основные принципы объектно-ориентированного программирования (инкапсуляцию, наследова­ние, полиморфизм), а также освоят интерфейс среды разработки приложений Microsoft Visual C++.NET. Вопросы, изученные в ходе выполнения лабораторных работ, помогут студентам освоить основные принципы разработки приложений на объектно-ориентированном языке C++, что будет являться основой для дальнейшего изучения как языков и технологий программирования, так и систем управления базами данных.

Лабораторная работа №1. Интегрированная среда разработки Microsoft Visual Studio. Программирование алгоритмов линейной структуры

Цель работы и содержание: изучение возможностей среды разработки Microsoft Visual Studio, разработка консольных приложений в среде Microsoft Visual Studio, приобретение навыков программирования линейных процессов, основы отладки программ в среде Microsoft Visual Studio. Освоить технологию программирования линейных алгоритмов на языке C++, функции ввода/вывода данных, оператора присваивания.

Лабораторная работа по информатике на тему «Создание простейших программ на одном из языков программирования»
учебно-методическое пособие по информатике и икт (10 класс) на тему

Лабораторная работа по программированию на языке Паскаль для студентов СПО социально-экономического профиля.

Скачать:

Вложение Размер
язык Паскаль 50 КБ

Предварительный просмотр:

Лабораторная работа № 3

«Создание простейших программ на одном из языков программирования»

Цель работы: выработать практические навыки использования системы программирования Turbo Pascal, научиться создавать, вводить, отправлять на выполнение и исправлять простейшие программы на языке Паскаль, познакомиться с диагностическими сообщениями компилятора об ошибках на примере программ, реализующих линейные алгоритмы.

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

Оператор присваивания и выражения

Оператор присваивания относится к простым операторам. По этому оператору переменной присваивается значение выражения. Несмотря на кажущуюся простоту оператора присваивания, при его выполнении осуществляется целый набор элементарных действий:

  • переменные, находящиеся в выражении, получают свои значения;
  • вычисляется значение выражения;
  • переменной слева от знака присваивания «:=» присваивается полученное значение.

В простейшем случае, когда выражение задано константой или другой переменной, вычислений не производится и переменная сразу получает свое значение, например:

N := 25; C := D; Y := ‘программа’;

L := true; P := X > 10.

В языке Паскаль существует несколько типов выражений: арифметические, литерные, логические (булевские). Рассмотрим арифметические выражения.

Арифметические выражения складываются из констант, переменных, стандартных функций с использованием скобок и знаков операций. В Паскале определены следующие операции над числами: * , / , + , – , DIV, MOD, где DIV – деление нацело; MOD – вычисление остатка от деления. Приоритеты:

*, /, DIV, MOD – высший;

A := 13 DIV 5; (результат: A = 2),

B := 13 MOD 5; (результат: B = 3).

Каждое арифметическое выражение может иметь типы INTEGER и REAL. Тип константы определяется самим видом константы, тип переменной задается в ее объявлении.

Тип арифметического выражения определяется по следующему правилу:

  1. Для операций «*, +, -» результат имеет тип REAL, если хотя бы один из операндов имеет тип REAL. Если оба операнда типа INTEGER, то и результат имеет тип INTEGER.
  2. Для «/» результат всегда имеет тип REAL.
  3. Для «DIV, MOD» операнды и результат имеют тип INTEGER.

Значение переменной интервального типа, образованной на основе INTEGER, всегда имеет тип INTEGER. При использовании оператора присваивания нужно соблюдать типизацию объектов слева и справа от знака «:=». Смешение типов недопустимо за исключением случая, когда слева от знака «:=» стоит тип REAL, а справа – тип INTEGER.

а) выражение на языке Паскаль будет выглядеть так

б) выражение на языке Паскаль будет 2*SIN(5*3.14/180)* SIN(5*3.14/180)* SIN(5*3.14/180)

Учебное пособие: Методические указания к лабораторным работам по курсу «Программирование на языках высокого уровня»

Сибирский государственный университет

телекоммуникаций и информатики

к лабораторным работам

по курсу «Программирование на языках высокого уровня»

Язык программирования С

Ктн, доцент И.В. Перцев, ктн, доцент В.А.Перцева

Данные методические указания включают в себя 12 лабораторных работ для изучения курса «Программирование на языке высокого уровня». Эти работы помогут студентам освоить как базовые понятия программирования на алгоритмическом языке Си (интегрированная среда, программы разветвляющейся и циклической структуры, массивы), так и более сложные вопросы (рекурсии, функции, работа с файлами, работа с динамической памятью).

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

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

Кафедра Прикладной математики и кибернетики.

Для специальности 220400

Утверждено редакционно-издательским советом СибГУТИ в качестве методических указаний

Сибирский государственный университет

Телекоммуникаций и информатики, 2006г.

Язык Си является универсальным языком программирования. Первоначально он появился в операционной системе UNIX, и развивался как основной язык систем, совместимых с ОС UNIX. Сам язык, однако, не связан с какой-либо одной операционной системой или машиной; и хотя его называют языком системного программирования, так как он удобен для написания операционных систем, он может использоваться для написания любых больших вычислительных программ, программ для обработки текстов и баз данных.

Лабораторная работа №1

Работа в интегрированной среде Borland С на примере программ линейной структуры

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) — показательная функция e x ; 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 //заголовочный файл для организации ввода-вывода

#include //заголовочный файл математических функций

main() //главная функция

printf (“\n Введите гипотенузу и угол треугольника ”);

scanf (“%f%f “,&c,&x); // ввод значений вещественного типа

printf (“\n Результаты: a=%7.2f b=%7.2f S=%7.2f “,a, b, S);

Комментарий в программе не влияет на компиляцию программы, а служит для разъяснения действий основных блоков текста и программы в целом. Однострочный комментарий действует от двух символов // до конца строки. Многострочный комментарий заключается в пары символов /* и */.

Вторая строка программы #include является директивой компилятора для включения заголовочного файла stdio.h , в котором содержатся средства ввода-вывода (связи с внешними устройствами), отсутствующие в самом языке Си. Третья строка — #include является директивой компилятора для включения заголовочного файла 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=4y 2 /(4z-2t 3 ) при t=1 ; z=3; y=sin t.

2 x=4y 3 -z/t при t=2; z=3; y=cos(t+z).

3. x=6t 2 -(z+1)/y 2 при y=2; z=4; t=sin(2+z).

4. x=(8z 2 +1)/(y+t 2 ) при z=1; t=2; y=t+z.

5 x=8z / (e t +2)-y 2 при t=3; z=ctg t +2; y=4.

6. x=8z/(e t +2)-y 2 при t=1; z=t+2; y=4.

7. x=2y+3 sh t- z при y=2; t=5 / (1+y 2 ); z=4

8. x=3 y 2 / (4 tg z-2t 2 ) при t=0.5; z=6; y=t+2 ctg z.

9. x=4y 2 /( 4y e z — 2t 3 ) при t=1 ; z=3; y=sin t.

10. x=4 ln y 3 -z / t при t=2; z=3; y=cos(t+z).

11. x=6 t 2 — (ctg z+1)/ y 2 при y=2; z=4; t=sin(2+z).

12. x=(8z 2 +1)/( y e t +t 2 ) при 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 для любого х.

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;

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 , который сравнивает значение выражения, указанного за ним, и выполняет один из операторов, метка которого совпадает с этим значением. Общий вид:

case метка_n: список_операторов_n;

Значения выражения и меток должны быть целочисленными константами.

Например, определим количество дней по введенному номеру месяца.

//lab2_prim2.c множественный выбор

#include // Заголовочный файл для работы с терминалом

printf(«\n Введите номер месяца :»); scanf(«%d»,&m);

printf(«\n В %4d месяце дней: «,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»);>

В примере программы, если номер месяца превышает 12, выводится сообщение о неверном вводе месяца, для чего используется default. Оператор break служит для прерывания цикла проверки и перехода в конец переключателя. В случае отсутствия break, происходит переход на следующую ветвь. Функция getch, подключающаяся заголовочным файлом conio.h, ожидает нажатия любой клавиши. Это позволяет просмотреть результаты, не используя ALT+F5 для просмотра экрана пользователя.

3. ВЫПОЛНЕНИЕ РАБОТЫ

Составить программы разветвляющейся структуры согласно вариантам задания 1 (использ7 уя IF) и задания 2 (используя SWITCH) .

Варианты задания 1

1) Даны четыре числа. На сколько их сумма меньше их произведения?

2) Даны четыре числа. Вычислить сумму положительных среди них чисел.

3) Даны четыре числа. Вычислить произведение отрицательных среди них чисел.

4) Даны четыре числа. Все отрицательные среди них числа заменить на 0.

5) Даны четыре числа. Определить сколько среди них отрицательных и сколько положительных.

6) Даны четыре числа. Определить порядковый номер наименьшего среди них.

7) Даны два числа. Большее из этих двух чисел заменить их полусуммой, а меньшее удвоенным произведением.

8) Даны три числа. Меньшее среди них заменить на 0 .

9) Даны четыре числа. Найти разность между наибольшим и наименьшим среди них.

10) Даны три числа K, M и N. Поменять их значения местами таким образом, чтобы K 2 + 2 2 + . . . + n 2 .

//lab3_1.c сумма квадратов натурального ряда

printf(“Введите n ”); scanf(“%d”,&n);

clrscr(); // очистка экрана перед выводом

printf (“Введите К ”); scanf (“%d”, &K);

// цикл с предусловием //цикл с постусловием

# define n 50 // определение константы n=50

int i, max, nom, a[n]; //описание массива целых чисел из n элементов

2. f(x)=(2.5x 2 -0.1)/(tg x+sin x); a=4; b=6;

3. f(x)=(x+1) 2 √lg x; a=2; b=10;

4. f(x)=x 2 ln x /(1+x) 2 ; a=1; b=20;

5. f(x)=1/((0.5+0.1x 3 )√x); a=0.1; b=2.1;

6. f(x)=x 2 √(2+3x) 3 ; a=0.5; b=2.5;

8. f(x)=(1+2x+x 2 )/(5+2x 2 ); a=-2; b=2;

9. f(x)=(2x+lg x)/(1+lg x); a=1; b=10;

10. f(x)=√(2+x) 3 /x 2 ; a=0.2; b=10;

11. f(x)=(1+x 2 )/(x 3 +√(1+x)); a=0.5; b=5;

12. f(x)=(1-x) lg x/√(1-lg x); a=2; b=7;

4. КОНТРОЛЬНЫЕ ВОПРОСЫ

4.1. Что такое массив? индекс элемента массива?

4.2. Как ввести и вывести элементы вектора в строку и в столбец?

4.3. Способы описания и инициализации массивов.

Лабораторная работа №5

Работа с символьными данными

1. ЦЕЛЬ РАБОТЫ : Изучение описания символьных данных и операций над ними.

2. ОСНОВНЫЕ СВЕДЕНИЯ

Символьная константа — это символ (единственный), заключенный в одиночные кавычки, как, например, ‘Х’. Значением символьной константы является численное значение этого символа в машинном представлении набора символов. Все символы упорядочены в соответствии с принятым в ПК коде (например ASCII). При этом порядковый но­мер символов называется кодом (например, код латинского символа ‘А ‘ равен 65; символа ‘3’ равен 51). Для символьных данных не определены никакие арифметические операции, но они могут сравниваться по своим кодам, участвовать в чтении, печати, операторах присваивания.

Строка — это последовательность (массив) символов, заключенная в двойные кавычки, заканчивающаяся нуль-символом (\0 – символ с кодом равным нолю). По положению нуль-символа определяется фактическая длина строки. Например, длина строки char text[ ] = «Моя программа!» равна 14 байт (включая пробел).

Для форматного ввода и вывода символьных констант используется спецификатор %с, строк — %s и специальные функции: getchar(),gets()- ввод и putchar(), puts()-вывод. Библиотека Си содержит функции обработки строк, прототипы которых определяются в заголовочном файле string.h. Например:

strlen(str) – определяет длину строки str;

strcat(str1,str2) — сцепление строк в порядке их перечисления;

strncat(str1,str2,kol) – приписывает kol символов строки str2 к строке str1;

strcmp(str1,str2) – сравнивает две строки str1 и str2 и возвращает 0, если они одинаковы; результат отрицателен, если str1 str2;

strncmp(str1, str2, kol) – сравниваются части строк str1 и str2 из kol символов. Результат равен 0, если они одинаковы.

strcpy(str1,str2) – копирует строку str2 в строку str1.

printf (“Введите 10 слов, начинающихся с д: \n”);

Если тип возвращаемого функцией значения не указан, то подразумевается int. Если с именем функции не связан результат, то нужно указать тип функции void. Параметры, записываемые в обращении к функции, называются фактическими; параметры, указанные в описании функции — формальными. Фактические пара­метры должны соответствовать формальным по количеству, порядку следования и типу. Объекты, объявленные вне функции, действуют в любой функции и называются глобальны­ми. Объекты, объявленные в функции, действуют только в ней и называются локальными. В теле функции обычно присутствует оператор return , определяющий возвращаемое функцией значение.

Все параметры функции, кроме массивов, передаются по значению, т.е. внутри функции создаются локальные копии параметров. Если необходимо передать саму переменную, а не её копию, то в функцию передаётся адрес этой переменной. Таким образом, через параметры можно передавать результат выполнения функции. То есть, параметры, с помощью которых результаты должны передаваться из функции в точку вызова, описываются как указатели. Вызов функции может быть оформлен в виде оператора, если с именем функции не связано возвращаемое значение, или в виде выражения, если возвращаемое значение связано с именем функции.

Прототип функции может указываться до вызова функции вместо описания функции для того, чтобы компилятор мог выполнить проверку соответствия типов аргументов и параметров. Прототип функции по форме такой же, как и заголовок функции. В конце него ставится «;».

Функции можно подключать с помощью директивы #include . Такие файлы с функциями удобно использовать в диалоговых программах с пользовательским меню, позволяющих выбрать один из режимов.

Пример 1: Функция с параметрами-значениями. Результат связан с именем функции. В программе объявляется прототип функции, а сама функция описывается ниже.

int max(int,int); //Прототип функции

printf(» input x,y «);

z=max(x,y); //Вызов функции с фактическими параметрами

printf(«x=%d y=%d max=%d»,x,y,z);

int max(int a ,int b) //Заголовок функции с формальными параметрами

Пример 2: Функция с параметрами-указателями. Здесь передаются адреса фактических параметров, по которым и получаем результат. Функция меняет местами переменные x,y.

void swap(float *, float *); // Прототип функции с параметрами — указателями

printf(«\n введите x,y «);

swap(&x,&y); // Передаём адреса переменных

printf(«\n x=%4.2f y=%4.2f «,x,y);

void swap(float * a, float * b)

c=*a; // *a — содержимое по адресу a

Пример 3: Подключение файлов с функциями и создание меню.

! Внимание! Следите за тем, чтобы константы, объявленные директивой #define, не переобъявлялись в функциях.

printf(«\n 1. Сумма ряда \n»);

printf(» 2. Матрица \n»);

printf(» 3. Строки \n»);

printf(» 4. Выход \n»);

Пример 4: Передача в функцию массива с использованием указателя. Результат – элементы массива возводятся в квадрат. Функция описывается до вызова, поэтому прототип не объявляется.

void quart(int n, float * x) // Можно void quart(int n, float x[])

for (i=0;i n x (2 n -1) /(2n+1) с точностью до eps=0.001. В качестве параметров выбрать x и eps.

4. Написать функцию, которая вычисляет для заданной квадратной матрицы A её симметричную часть S(ij)=(A(ij)+A(ji))/2 и кососимметричную часть K(ij)=(A(ij)-A(ji))/2.

5. Написать функцию “шапочка” f(x), зависящую от параметров a и b: если |x| >a то f(x)=0 иначе f(x)=b*exp(-a 2 /(a 2 -|x| 2 )). В качестве параметров передать a,b,x.

6. Написать функцию поиска максимального и минимального элементов одномерного массива. В основной программе вызвать эту функцию для двух разных массивов.

7. Написать функцию, которая сортирует одномерный массив в порядке убывания методом пузырька. В основной программе вызвать эту функцию для двух разных массивов.

8. Написать функцию, которая по двум заданным одномерным массивам (A размера m и B размера n) вычисляет двумерный массив c(ij)=a(i)*b(j) и возвращает его максимальный элемент.

9. Написать функцию определителя квадратной матрицы A размера 3×3:

10. Написать функцию вычисления суммы ряда y=sinx-(sin2x)/2+…

+(-1) n +1 sin(nx)/n с точностью до eps=0.001. В качестве параметров передать x (в радианах) и eps.

11. Написать функцию вычисления ряда y=x+x 3 /3!+…+x 2 n +1 /(2n+1)! с точностью до eps=0.0001. В качестве параметров передать x и eps.

12. Написать функцию обработки матриц A и B одинакового размера m x n. Получить матрицу C =max(a(i,j),b(i,j)), и матрицу D=min(a(i,j),b(i,j)). Матрицы C и D вывести в главной программе.

4. КОНТРОЛЬНЫЕ ВОПРОСЫ

4.1. Описание функции. Для чего объявляется прототип?

4.2. Что такое формальные и фактические параметры? Локальные и глобальные?

4.3. Как можно передавать массив в функцию?

4.4. Способы вызова функций.

Лабораторная работа № 7

1. ЦЕЛЬ РАБОТЫ: Изучение методов использования алгоритмов и программ с рекурсиями в языке Си.

2. ОСНОВНЫЕ СВЕДЕНИЯ

В языке Си функции могут вызывать сами себя, т.е. обладать свойством рекурсивности. Рекурсивная функция обязательно должна содержать в себе условие окончания рекурсивности, чтобы не вызвать зацикливания программы. При каждом рекурсивном вызове создается новое мно­жество локальных переменных. Т.о. переменные, расположенные вне вызываемой функции, не изменяются.

Пример. Составить рекурсивную функцию, вычисляющую факториал числа n следующим образом: n!= 1 , если n 1

long fact( int n)

x n = 1/ x — n , если n n -1 , если n > 0

4. Для N=12 найти числа Фибоначчи, которые вычисляются следующим образом: F(0)=1, F(1)=2, F(N)=F(N-2)+F(N-1)

5. Методом деления отрезка пополам найти с точностью EPS=0,0001 корень уравнения cos(2/x)-2*sin(1/x)+1/x=0

6. Даны целые числа m и n, где 0

int i,k; float sum; //k-количество искомых товаров, sum- их общая стоимость.

struct tov t; //Объявление структуры t

struct tov mag[n]; //объявление массива структур mag[n]

char nazv[10]; //Наименование искомого товара

printf(“\n Введите информацию о товарах \n“);

char text[]=»one to tree four»;

FILE *pf, *pr; // Указатели на файлы

pf=fopen(«new1.txt»,»w»); // Создание нового файла new1.txt

fprintf(pf,»%s\n»,text); // Запись в файл строки text

fclose(pf); // Закрытие файла pf

pf=fopen(«new1.txt»,»r»); // Открытие файла pf для чтения

pr=fopen(«new2.txt»,»w»); // Создание нового файла new2.txt

while (!feof(pf)) // Пока не конец файла

putc(ch,pr); // Запись в файл pr символа ch

fclose(pr); // Закрытие файла pr

rewind(pf); // Возврат указателя на начало файла pf

fgets(sl,50,pf); // Чтение из файла pf строки в переменную sl

printf(«%s\n»,sl); // Вывод строки sl на дисплей

pr=fopen(«new2.txt»,»r»); // Открытие файла pr для чтения

while (!feof(pr)) // Пока не конец файла pr

putchar(ch); // Вывод символа ch на дисплей

fclose(pf); // Закрытие файлов

При чтении текстовых файлов лучше использовать функции getc или fgetc, так как при использовании fscanf (pr, “%s”, sl) читается только очередное слово до пробела или символа табуляции и требуется повторение этой функции многократно для других слов.

3. ВЫПОЛНЕНИЕ РАБОТЫ

3.1. Разобрать и проанализировать приведенную программу.

3.2 . Создать текстовый файл из 5 строк, прочитать созданный файл и получить новый файл согласно своему варианту.

1. Из строк все цифры переписать в новый файл.

2. Переписать все строки в новый файл, заменив пробелы на запятые.

3. Переписать в новый файл все символы из строк, отличные от цифр.

4. Подсчитать количество слов в каждой строке и записать их в новый файл.

5. Переписать все строки в новый файл, заменив все буквы ‘м’ на ‘М’.

6. В новом файле заменить все цифры на восклицательные знаки.

7. Переписать все латинские буквы верхнего регистра из каждой строки в новый файл.

8. Переписать в новый файл строки, удалив из них все русские буквы нижнего регистра.

9. В новом файле заменить все латинские буквы верхнего регистра на буквы нижнего регистра.

10. Переписать в новый файл все строки, заменив все русские буквы нижнего регистра на буквы верхнего регистра.

11. Все слова, начинающиеся с гласных переписать в один файл, а с согласных – в другой новый файл.

12. В новый файл переписать каждую строку наоборот.

4. КОНТРОЛЬНЫЕ ВОПРОСЫ

4.1. Чем отличается файл от массива?

4.2. Особенности организации текстовых файлов.

4.3. Что понимается под чтением, и что под записью в файл?

Лабораторная работа № 10

Обработка бинарных файлов

1. ЦЕЛЬ РАБОТЫ: приобретение практических навыков создания и обработки бинарных файлов.

2. ОСНОВНЫЕ ПОНЯТИЯ

Если файл открыт в бинарном режиме, его можно записывать или считывать побайтно. Функция fseek() позволяет обращаться с файлом как с массивом и переходить к любой позиции в файле, обеспечивая возможность произвольного доступа. Если текстовые файлы являются файлами с последовательным доступом, то произвольный доступ чаще всего применяется к бинарным файлам.

Бинарные файлы могут содержать любую информацию. Чаще всего используются файлы, содержащие структуры. Для чтения и записи в бинарные файлы можно использовать функции fread(), fwrite() или fscanf(),fprintf().

fread –функция для чтения из файла:

int fread(void *ptr, unsigned size, unsigned count, FILE *f);

Из файла f считываются и по адресу ptr записываются count элементов размером size каждый. Функция возвращает число фактически считанных элементов.

fwrite – функция для записи в файл:

int fwrite(void *ptr, unsigned size, unsigned count, FILE *f);

В файл записываются, начиная с адреса ptr, count элементов размером size каждый. Функция возвращает число фактически записанных элементов.

fseek – функция для произвольного доступа к байтам бинарных файлов:

int fseek(FILE *f, long offset, int w);

offset показывает, на сколько байт нужно сместиться относительно точки отсчёта – w.

w должно быть равно одной из трех констант:

SEEK_SET или 0 — начало файла;

SEEK_CUR или 1 – текущая позиция в файле;

SEEK_END или 2 – конец файла.

ftell — возвращает текущую позицию в файле как длинное целое:

long int ftell (FILE *f);

Пример обработки бинарного файла

Составить программу, выполняющую следующие функции:

1. Создание нового файла;

2. Просмотр файла;

3. Добавление информации в конец файла;

4. Поиск по названию товара и изменение цены и количества;

Файл создать из структур вида: название товара, его цена и количество.

Задание выполнить в отдельных функциях. Использовать меню для выбора функций.

void input(FILE *); // создание нового файла

void print(FILE *); // просмотр файла

void app(FILE *); // добавление в файл

void find(FILE *); // поиск и изменение

puts(» 1 – новый файл»);

puts(» 2 – просмотр файла»);

puts(» 3 – добавление в файл»);

puts(» 4 – поиск и изменение»);

default : puts(» неверный режим»);

void input(FILE *tf)

tf=fopen(«file1.dat»,»wb»); // открытие бинарного файла для записи

printf(«\n Ввод товаров\n»);

printf(» количество: «); scanf(«%d»,&t1.kol);

fwrite(&t1,sizeof(t1),1,tf); // запись в файл одной структуры t1

printf(«\n Закончить? y/n «);

void print(FILE *tf)

tf=fopen(«file1.dat»,»rb»); // открытие бинарного файла для чтения

fread(&t1,sizeof(t1),1,tf); // чтение из файла одной структуры t1

void app(FILE *tf)

tf=fopen(«file1.dat»,»ab»); // открытие бинарного файла для добавления

printf(«\n Ввод товаров \n»);

printf(» количество: «); scanf(«%d»,&t1.kol);

printf(» Закончить? y/n «);

void find(FILE *tf)

tf=fopen(«file1.dat»,»rb+»); // открытие бинарного файла для чтения и записи

puts(» Название искомого товара: «);

printf(«\n изменить? y/n «);

fseek(tf,-i,1); // возврат на sizeof(t1) байт назад

fwrite(&t1,sizeof(t1),1,tf); // запись изменённой структуры на прежнее место

3. ВЫПОЛНЕНИЕ РАБОТЫ

3.1. Проанализировать приведенную программу.

3.2. Используя функции и режим меню, создать файл из 10 записей, просмотреть файл, добавить в файл новую информацию и, при­меняя режим прямого доступа, выполнить задание по своему варианту.

1. Запись имеет вид: фамилия, пол, год рождения и рост. Вывести данные о самом высоком спортсмене.

2. Запись имеет вид: название вуза, число студентов, количес­тво факультетов. Добавить в конец файла информацию о трех новых вузах и посчитать общее число студентов.

3. Запись имеет вид: название издания, газеты или журнала, стоимость одного экземпляра, количество экземпляров в год. Вывести на печать информацию о самом дешевом издании.

4. Запись имеет вид: фамилия студента, номер зачетной книжки, 4 оценки за экзамен. Выводить информацию о всех двоечниках и корректировать ее.

5. Запись имеет вид: фамилия спортсмена, его номер, количество набранных очков. Поменять местами в файле записи о первых двух спортсменах. *

6. Запись имеет вид: фамилия, номер телефона, дата рождения. Внести в начало списка информацию о четырех новых знакомых.

7. Запись имеет вид: название инструмента, число, месяц и год изготовления. Вывести на печать информацию об инструменте с самым большим сроком использования и выполнить корректировку этой записи.

8. Запись имеет вид: номер читательского билета, автор книги, название, дата заказа. Вывести на экран содержимое файла. Поменять местами первую и последнюю записи в файле.*

9. Запись имеет вид: фамилия спортсмена, его номер, количество набранных очков. Удалить из списка информацию о спортсмене с наименьшим количеством очков.

10. Запись имеет вид: фамилия, количество вещей, общий вес. Удалите из файла сведения о багаже, общий вес вещей в котором меньше, чем 10 кг.

11. Запись имеет вид: название команды, количество набранных очков, фамилии капитанов. Вывести на печать список в порядке набранных мест.

12. Запись имеет вид: марка видеомагнитофона, стоимость, количество. Напечатать информацию об имеющихся в продаже магнитофонах. При покупке их количество соответственно уменьшается. Предусмотреть удаление информации о видеомагнитофонах, количество которых равно нулю.

* При обмене введите промежуточную переменную типа структура.

4. КОНТРОЛЬНЫЕ ВОПРОСЫ

4.1. Режимы доступа к файлам.

4.2. Назначение функций fseek, ftell.

4.3. Можно ли взаимозаменять функции fscanf и fread; fprint и fwrite ?

4.4. Привести пример корректировки К-той записи в файле прямого доступа.

Лабораторная работа № 11

1. ЦЕЛЬ РАБОТЫ: приобретение практических навыков создания и обработки одномерных и многомерных динамических массивов.

2. ОСНОВНЫЕ ПОНЯТИЯ

При определении статического массива: тип имя_массива [количество_элементов] , имя_массива становится указателем на область памяти, выделяемой для размещения элементов массива. Количество элементов должно быть константой. Таким образом, размеры памяти, выделяемой под массив, заданы в определении массива. Но иногда нужно, чтобы размеры памяти были не фиксированными, а выделялись в ходе выполнения программы при решении конкретной задачи.

p=(int *)malloc(size); //Указателю на целое p присваивается адрес начала выделенной области памяти размером size байт.

p=(int *)calloc(n, size); //Указателю на целое p присваивается адрес начала выделенной области памяти размером n*size байт.

free(p); //Освобождает выделенную по адресу p память. Преобразование указателя любого типа к типу void * осуществляется автоматически, так что в качестве фактического параметра можно подставить указатель любого типа без явного приведения типов.

Пример формирования одномерного динамического массива

Методические указания к лабораторным работам по курсу «Программирование на языках высокого уровня» (стр. 1 из 7)

Сибирский государственный университет

телекоммуникаций и информатики

к лабораторным работам

по курсу «Программирование на языках высокого уровня»

Язык программирования С

Ктн, доцент И.В. Перцев, ктн, доцент В.А.Перцева

Данные методические указания включают в себя 12 лабораторных работ для изучения курса «Программирование на языке высокого уровня». Эти работы помогут студентам освоить как базовые понятия программирования на алгоритмическом языке Си (интегрированная среда, программы разветвляющейся и циклической структуры, массивы), так и более сложные вопросы (рекурсии, функции, работа с файлами, работа с динамической памятью).

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

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

Кафедра Прикладной математики и кибернетики.

Для специальности 220400

Утверждено редакционно-издательским советом СибГУТИ в качестве методических указаний

Сибирский государственный университет

Телекоммуникаций и информатики, 2006г.

Язык Си является универсальным языком программирования. Первоначально он появился в операционной системе UNIX, и развивался как основной язык систем, совместимых с ОС UNIX. Сам язык, однако, не связан с какой-либо одной операционной системой или машиной; и хотя его называют языком системного программирования, так как он удобен для написания операционных систем, он может использоваться для написания любых больших вычислительных программ, программ для обработки текстов и баз данных.

Лабораторная работа №1

Работа в интегрированной среде Borland С на примере программ линейной структуры

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) — показательная функция e x ; 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 //заголовочный файл для организации ввода-вывода

#include //заголовочный файл математических функций

main() //главная функция

printf (“\n Введите гипотенузу и угол треугольника ”);

scanf (“%f%f “,&c,&x); // ввод значений вещественного типа

printf (“\n Результаты: a=%7.2f b=%7.2f S=%7.2f “,a, b, S);

Комментарий в программе не влияет на компиляцию программы, а служит для разъяснения действий основных блоков текста и программы в целом. Однострочный комментарий действует от двух символов // до конца строки. Многострочный комментарий заключается в пары символов /* и */.

Вторая строка программы #include является директивой компилятора для включения заголовочного файла stdio.h , в котором содержатся средства ввода-вывода (связи с внешними устройствами), отсутствующие в самом языке Си. Третья строка — #include является директивой компилятора для включения заголовочного файла 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=4y 2 /(4z-2t 3 ) при t=1 ; z=3; y=sin t.

2 x=4y 3 -z/t при t=2; z=3; y=cos(t+z).

3. x=6t 2 -(z+1)/y 2 при y=2; z=4; t=sin(2+z).

4. x=(8z 2 +1)/(y+t 2 ) при z=1; t=2; y=t+z.

5 x=8z / (e t +2)-y 2 при t=3; z=ctg t +2; y=4.

6. x=8z/(e t +2)-y 2 при t=1; z=t+2; y=4.

7. x=2y+3 sh t- z при y=2; t=5 / (1+y 2 ); z=4

8. x=3 y 2 / (4 tg z-2t 2 ) при t=0.5; z=6; y=t+2 ctg z.

9. x=4y 2 /( 4y e z — 2t 3 ) при t=1 ; z=3; y=sin t.

10. x=4 ln y 3 -z / t при t=2; z=3; y=cos(t+z).

11. x=6 t 2 — (ctg z+1)/ y 2 при y=2; z=4; t=sin(2+z).

12. x=(8z 2 +1)/( y e t +t 2 ) при 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 для любого х.

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;

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 , который сравнивает значение выражения, указанного за ним, и выполняет один из операторов, метка которого совпадает с этим значением. Общий вид:

case метка_n: список_операторов_n;

Значения выражения и меток должны быть целочисленными константами.

Например, определим количество дней по введенному номеру месяца.

//lab2_prim2.c множественный выбор

#include // Заголовочный файл для работы с терминалом

printf(«\n Введите номер месяца :»); scanf(«%d»,&m);

printf(«\n В %4d месяце дней: «,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»);>

В примере программы, если номер месяца превышает 12, выводится сообщение о неверном вводе месяца, для чего используется default. Оператор break служит для прерывания цикла проверки и перехода в конец переключателя. В случае отсутствия break, происходит переход на следующую ветвь. Функция getch, подключающаяся заголовочным файлом conio.h, ожидает нажатия любой клавиши. Это позволяет просмотреть результаты, не используя ALT+F5 для просмотра экрана пользователя.

3. ВЫПОЛНЕНИЕ РАБОТЫ

Составить программы разветвляющейся структуры согласно вариантам задания 1 (использ7 уя IF) и задания 2 (используя SWITCH) .

Варианты задания 1

1) Даны четыре числа. На сколько их сумма меньше их произведения?

Лабораторная работа № 1. изучение операций языка си. программирование линейных и разветвляющихся алгоритмов

Решение задач на языке программирования Си с элементами языка Си++

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

по дисциплине «Алгоритмические языки»
для студентов направления 1005010065 – Компьютерная безопасность и 1005030065 – Информационная безопасность автоматизированных систем

(С) 2015 МГТУ им. Н.Э. БАУМАНА

Решение задач на языке программирования Си с элементами языка Си++. М.: МГТУ имени Н.Э. Баумана, 2015. 116 с.

Методические указания являются руководством для выполнения лабораторных работ по дисциплине «Алгоритмические языки». Они охватывают основные средства языка программирования Си, иногда используются некоторые возможности языка Си++.

Пособие предназначено для студентов МГТУ имени Н.Э. Баумана, обучающихся по специальностям 1005010065 «Компьютерная безопасность» и 1005030065 «Информационная безопасность автоматизированных систем». Может быть полезна студентам других специальностей, интересующимися программированием.

Рекомендовано учебно-методической комиссией факультета «Информатика и системы управления» МГТУ им. Н.Э. Баумана

Быков Александр Юрьевич

Решение задач на языке

программирования Си с элементами языка Си++

© 2015 МГТУ имени Н.Э. Баумана

1. Лабораторная работа № 1. Изучение операций языка Си. Программирование линейных и разветвляющихся алгоритмов. 7

1.1. Цель и задачи работы, требования к результатам ее выполнения. 7

1.2. Краткая характеристика объекта изучения. 7

1.2.1. Понятие переменной и типа данных. 7

1.2.2. Стандартные типы языка Си. 8

1.2.3. Объявления переменных в языке Си. 10

1.2.4. Константы в языке Си. 10

1.2.5. Операторы – выражения и операции языка Си. 14

1.2.6. Условный оператор. 18

1.2.6. Оператор — переключатель. 20

1.2.7. Некоторые функции ввода- вывода. 22

1.3. Задачи и порядок выполнения работы.. 28

1.4. Форма отчета по лабораторной работе. 29

1.5. Вопросы для самоконтроля. 30

2. Лабораторная работа № 2. Изучение операторов- циклов в языке Си. 31

2.1. Цель и задачи работы, требования к результатам ее выполнения. 31

2.2. Краткая характеристика объекта изучения. 31

2.3. Задачи и порядок выполнения работы.. 33

2.4. Форма отчета по лабораторной работе. 35

2.5. Вопросы для самоконтроля. 35

3. Лабораторная работа № 3. Изучение массивов в языке Си. 37

3.1. Цель и задачи работы, требования к результатам ее выполнения. 37

3.2. Краткая характеристика объекта изучения. 37

3.2.1. Одномерные массивы.. 37

3.2.2. Массивы и указатели. 38

3.2.4. Динамические массивы.. 39

3.2.5. Многомерные массивы.. 40

3.3. Задачи и порядок выполнения работы.. 42

3.4. Форма отчета по лабораторной работе. 45

3.5. Вопросы для самоконтроля. 45

4. Лабораторная работа № 4. Изучение структурных типов языка Си. 46

4.1. Цель и задачи работы, требования к результатам ее выполнения. 46

4.2. Краткая характеристика объекта изучения. 46

4.3. Задачи и порядок выполнения работы.. 48

4.4. Форма отчета по лабораторной работе. 49

4.5. Вопросы для самоконтроля. 50

5. Лабораторная работа № 5. Изучение функций языка Си. 51

5.1. Цель и задачи работы, требования к результатам ее выполнения. 51

5.2. Краткая характеристика объекта изучения. 51

5.3. Задачи и порядок выполнения работы.. 55

5.4. Форма отчета по лабораторной работе. 57

5.5. Вопросы для самоконтроля. 57

6. Лабораторная работа № 6. Изучение динамических структур данных. Списки. 58

6.1. Цель и задачи работы, требования к результатам ее выполнения. 58

6.2. Краткая характеристика объекта изучения. 58

6.3. Задачи и порядок выполнения работы.. 59

6.4. Форма отчета по лабораторной работе. 62

6.5. Вопросы для самоконтроля. 62

7. Лабораторная работа № 7. Изучение стандартных функций ввода-вывода в языке Си. 63

7.1. Цель и задачи работы, требования к результатам ее выполнения. 63

7.2. Краткая характеристика объекта изучения. 63

7.2.1. Общие сведения о вводе-выводе. 63

7.2.2. Ввод- вывод в файлы.. 65

7.3. Задачи и порядок выполнения работы.. 69

7.4. Форма отчета по лабораторной работе. 71

7.5. Вопросы для самоконтроля. 71

8. Лабораторная работа № 8. Изучение приложений с графическим интерфейсом пользователя для Windows 72

8.1. Цель и задачи работы, требования к результатам ее выполнения. 72

8.2. Краткая характеристика объекта изучения. 72

8.2.1. Сообщения Windows. 72

8.2.2. Структура приложения в Windows. 73

8.2.3. Вывод графики в Windows. 74

8.3. Задачи и порядок выполнения работы.. 76

8.4. Форма отчета по лабораторной работе. 81

8.5. Вопросы для самоконтроля. 81

Рекомендуемые источники. 83

Приложение А. Варианты заданий для выполнения лабораторных работ. 84

Язык программирования Си, разработанный в США сотрудниками фирмы Bell Laboratories в начале 70-х годов для разработки операционной системы (ОС) UNIX, вместе с разработанным вслед за ним языком Си++, который дополнительно к возможностям языка Си включает объектно- ориентированные средства, является одним из наиболее распространенных языков программирования в мире. Первое описание языка дано его авторами Б. Керниганом и Д. Ритчи [1]. Язык Си иногда называют языком программирования «среднего» уровня. С одной стороны, язык поддерживает операции «низкого» уровня (операции над битами), а базовые типы отражают те же объекты, что и язык Ассемблера (байты, машинные слова, символы, строки). С другой стороны — имеет основные управляющие конструкции, присущие языкам «высокого» уровня. Таким образом, язык Си может использоваться как для решения системных задач, так и для решения прикладных задач (хотя язык создавался, прежде всего, для системного программирования). Язык программирования Си++ является расширением языка Си, т.е. включает в себя основные средства языка Си и новые возможности, в частности, поддерживает объектно- ориентированный подход в программировании.

Важность изучения языка Си (Си++) состоит также в том, что многие языки программирования, созданные позже для других целей, например, для разработки Интернет- приложений, наследовали основные элементы синтаксиса языка Си, так называемые, Си- подобные языки. К таким языкам можно отнести: Java, C# (Си шарп), PHP. Зная синтаксис языка Си, освоить данные языки можно достаточно быстро.

Методические указания к лабораторным работам включают в себя работы по решению прикладных задач на языке Си. Рассмотрены примеры решения задач с использованием следующих синтаксических конструкций и возможностей языка: операции языка для расчета выражений, условный оператор, операторы циклов, массивы, структуры, функции, динамические структуры данных, функции ввода-вывода в файлы. В конце рассмотрен пример приложения с графическим интерфейсом пользователя для ОС Windows.

При выполнении лабораторных работ целесообразно использовать программный продукт Microsoft Visual Studio версии 2013 или более поздних. Студент может этот программный продукт получить бесплатно, воспользовавшись программой DreamSpark (бывшая MSDN AA) [2], для этого достаточно зарегистрироваться на сайте библиотеки МГТУ им. Н.Э. Баумана.

При подготовке отчета по каждой лабораторной работе необходимо последовательно и полно представить все основные шаги алгоритма решения задачи. В тексте программы необходимо представить необходимые комментарии. Студент должен быть знаком с понятием алгоритма и быть способным ответить на предложенные ему контрольные вопросы.

Типовые варианты лабораторных работ представлены в приложении А. Студент выбирает свой вариант в соответствии с номером в списке группы, представленном в системе «Электронный университет».

Целевая аудитория методических указаний — студенты МГТУ имени Н.Э. Баумана, обучающиеся по специальностям 1005010065 «Компьютерная безопасность» и 1005030065 «Информационная безопасность автоматизированных систем», также методические указания могут быть использованы студентами других специальностей, занимающимися программированием.

Лабораторная работа № 1. Изучение операций языка Си. Программирование линейных и разветвляющихся алгоритмов

Статьи к прочтению:

Изучение Си в одном видео уроке за час!

Похожие статьи:

Описание программы Cisco Packet Tracer разработан компанией Cisco и рекомендован использоваться при изучении телекоммуникационных сетей и сетевого…

ФЕДЕРАЛЬНОЕ АГЕНТСТВО СВЯЗИ ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ БЮДЖЕТНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ МОСКОВСКИЙ ТЕХНИЧЕСКИЙ…

Лабораторные работы по информатике «Алгоритмизация и программирование»

Описание разработки

Тема: «Данные и их типы, соответствие типов»

Цель: Ознакомиться с типами данных, научиться выбирать типы данных для переменных, исходя из их совместимости и размеров.

Приборы и материалы: системный блок, монитор, клавиатура, мышь, операционная система MS-DOS или Windows, оболочка языка Паскаль, текстовый редактор.

На выполнение лабораторной работы отводится 4 часа.

Ход выполнения лабораторной работы.

Изучить теоретическую часть.

По полученному заданию на лабораторную работу в соответствии с вариантом сформулировать постановку задачи, которую необходимо выполнить в данной лабораторной работе.

Опираясь на постановку задачи сформулировать математическую постановку задачи, в которой необходимо отразить все математические законы, законы логики, теоремы, аксиомы, формулы и т.д., которые будут использоваться для решения задачи в данной лабораторной работе.

Написать алгоритм решения задачи.

Выбрать несколько входных данных, и используя алгоритм решения задачи протестировать вручную входные данные в соответствии с алгоритмом (пошагово) и получить результат. Входных данных должно быть не менее 5.

Используя компьютер с операционной системой MS-DOS или Windows и языком программирования Turbo Pascal 7.0 написать программу в соответствии с составленным алгоритмом решения задачи.

Протестировать программу на входных данных, которые использовались при проверке работы алгоритма.

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

Сделать отчет по проделанной работе в который входит:

Математическая постановка задачи

Алгоритм решения задачи

Результаты тестирования алгоритма

Результаты работы программы

Ответить на контрольные вопросы для закрепления знаний теоретической части.

На выполнение лабораторной работы отводится 4 часа.

Выполнить программу на языке Pascal и написать по ней отчет. Пример оформления отчета по лабораторной работе приводится в приложении 3.

К стандартным типам Pascal относят:

Группу целых типов

Группу вещественных типов

Группу булевских типов

Символьный тип, а также целые и булевские типы относят к, так называемым, порядковым типам.

Порядковые типы характеризуются следующими четырьмя свойствами:

Множество допустимых значений любого порядкового типа представляет собой упорядоченную последовательность, каждый элемент которой имеет свой порядковый номер. Порядковый номер представляется целым числом. Первое значение любого порядкового типа имеет порядковый номер 0, следующее значение имеет порядковый номер 1 и так далее. Исключение составляют порядковые типы Integer, Shortint и Longint. Порядковым номером значений этих типов является само значение.

Программирование на языке Си++ — лабораторная работа

Название: Методические указания к лабораторным работам по курсу «Программирование на языках высокого уровня»
Раздел: Остальные рефераты
Тип: учебное пособие Добавлен 23:30:42 21 сентября 2011 Похожие работы
Просмотров: 1006 Комментариев: 6 Оценило: 0 человек Средний балл: 0 Оценка: неизвестно Скачать
Категория: Лабораторные работы
Рубрика: Программирование, компьютеры и кибернетика, ИТ технологии
Размер файла: 23 Kb
Количество загрузок:
Количество просмотров:
Описание работы: лабораторная работа на тему Программирование на языке Си++
Подробнее о работе: Читать или Скачать
ВНИМАНИЕ: Администрация сайта не рекомендует использовать бесплатные Лабораторные работы для сдачи преподавателю, чтобы заказать уникальные Лабораторные работы, перейдите по ссылке Заказать Лабораторные работы недорого
Смотреть
Скачать
Заказать

Федеральное агентство по образованию.

ГОУ ВПО Уральский Государственный Технический Университет — УПИ имени первого президента России Б. Н. Ельцина

Кафедра теплофизики и информатики в металлургии.

Дисциплина: Алгоритмизация и программирование.

Лабораторная работа №1

«Знакомство с Си++. Выполнение программы простой структуры»

Преподаватель: Степура А. А.

Студент гр. Мт-190503: Свиткин В. Г.

Цель: Знакомство со средой программирования, создание, отладка и выполнение простой программы, содержащей ввод/вывод информации и простейшие вычисления.

Задачи: 1) вычислить значение выражения при различных вещественных типах данных: float и double. Сравнить и объяснить полученные результаты.

2) Вычислить значения выражений. Объяснить полученные результаты.

Задание 1. Вычислить значение выражения при различных вещественных типах данных (float и double). Вычисления следует выполнять с использованием промежуточных переменных. Сравнить и объяснить полученные результаты.

int main(int argc, char *argv[])<

//Объявление переменных и исходные данные

//Расчет значений выражения для типов float и double

//Вывод результата с 15 знаками после запятой

c1=(pow(a1+b1,4.0)-(pow(a1,4)+4*pow(a1,3)*b1) )/ (6 * a1 *a1 *b1* b1+ 4*a1*b1*b1+pow(b1,4) );

c2=(pow(a2+b2,4)-(pow(a2,4)+4*pow(a2,3)*b2) )/ (6*a2*a2*b2*b2 +4*a2*b2*b2 + pow(b2,4) );

Результат выполнения программы:

Результаты совпадают с точностью до 6 знаков после запятой. Это происходит из-за того, что при вычислениях с типом float точность меньше, и при каждом вычислении накапливается погрешность. Вычисление с типом double точнее, чем с float.

Задание 2.Вычислить значения выражений. Объяснить полученные результаты.

int main(int argc, char *argv[])<

Результат выполнения программы:

При выполнении первого действия сначала переменные увеличиваются на единицу, затем умножаются: 5 * 7 =40. При выполнении второго действия сначала идет сравнение переменных, после этого переменная m увеличивается на единицу. При выполнении третьего действия сначала переменные сравниваются, затем переменная n увеличивается на единицу.

Федеральное агентство по образованию.

ГОУ ВПО Уральский Государственный Технический Университет — УПИ имени первого президента России Б. Н. Ельцина

Кафедра теплофизики и информатики в металлургии.

Дисциплина: Алгоритмизация и программирование.

Лабораторная работа №2

« Использование основных операторов языка Си «

Преподаватель: Степура А. А.

Студент гр. Мт-190503: Свиткин В. Г.

Цель: Получение навыков в выборе и использовании операторов Си++; знакомство с итерационными процессами.

Задача: Используя оператор цикла, найти сумму элементов, указанных в задании. Результат напечатать, снабдив соответствующим заголовком.

Найти сумму ряда с точностью =10 -4 , общий член которого

#define E 10e-4 //точность

int main(int argc, char *argv[])<

while(a>E); //выход из цикла при достижении нужной точности

Результат выполнения программы:

Сумма ряда: 2201.546404

Федеральное агентство по образованию.

ГОУ ВПО Уральский Государственный Технический Университет — УПИ имени первого президента России Б. Н. Ельцина

Кафедра теплофизики и информатики в металлургии.

Дисциплина: Алгоритмизация и программирование.

Лабораторная работа №3

« Вычисление функций с использованием их разложения в степенной ряд «

Преподаватель: Степура А. А.

Студент гр. Мт-190503: Свиткин В. Г.

Цель: Практика в организации итерационных и арифметических циклов.

Задача: Для х изменяющегося от a до b с шагом (b-a)/k, где (k=10), вычислить функцию f(x), используя ее разложение в степенной ряд в двух случаях:

а) для заданного n;

б) для заданной точности (=0.0001).

Для сравнения найти точное значение функции.

Лабораторная работа № 2. Программирование с использованием ветвлений

Основы алгоритмизации

Электронное учебное издание

Методические указания по выполнению Лабораторных работ № 2-9

по дисциплине «Информатика»

(С) 2020 МГТУ им. Н.Э. БАУМАНА

Рецензент: доцент кафедры ИУ7 к.т.н. Новик Н.В.

Основы алгоритмизации. Методические указания по выполнению лабораторных работ № 2-9 по дисциплине «Информатика» М.: МГТУ имени Н.Э. Баумана, 2015. 10 с.

Методические указания содержат теоретические сведения об основах алгоритмизации. Рассмотрены основные приемы программирования. Приведены примеры разработки алгоритмов при использовании различных приемов и их реализация на языке С++.

Для студентов МГТУ имени Н.Э. Баумана, обучающихся по программе бакалавриата по направлению «Математика и компьютерные науки»

Рекомендовано Учебно-методической комиссией НУК «Информатика и системы управления» МГТУ им. Н.Э. Баумана

Электронное учебное издание

Ничушкина Татьяна Николаевна

Методические указания по выполнению лабораторных работ № 2-9 по дисциплине «Информатика»

© Т.Н. Ничушкина, 2020

© МГТУ имени Н.Э. Баумана, 2020

Московский государственный технический университет

Содержание

Лабораторная работа № 2. 4

Программирование с использованием ветвлений. 4

Цель работы: изучение операторов организации ветвления, приемов создания программ, обеспечивающих выполнение альтернативных действий. 4

Лабораторная работа № 3. 8

Программирование с использованием циклов. 8

Цель работы: изучение операторов организации циклов, приемов создания программ, обеспечивающих выполнение циклических процессов. 8

Лабораторная работа № 4. 15

Обработка одномерных массивов. 15

Цель работы: изучение приемов обработки одномерных массивов. 15

Лабораторная работа № 5. 20

Обработка матриц. 20

Цель работы: изучение приемов обработки матриц в программах. 20

Лабораторная работа № 6. 24

Обработка строк. 24

Цель работы: изучение приемов обработки текстовой информации. 24

Лабораторная работа № 7. 29

Программирование с использованием подпрограмм.. 29

Цель работы: изучение соглашений о передаче параметров и средств организации передачи управления и данных 29

Лабораторная работа № 8. 34

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

Цель работы: изучение приемов и средств, обеспечивающих хранение данных на дисках и их обработку. 34

Лабораторная работа № 9. 40

Программирование с использованием файлов. 40

Цель работы: изучение средств языка и приемов работы со списками, размещенными в динамической памяти. 40

Список литературы. 46

Введение

Лабораторная работа № 2. Программирование с использованием ветвлений

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

Объем работы:2 часа

Теоретическая часть

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

Для программирования ветвлений, т. е. ситуаций, когда возникает необходимость при выполнении условия реализовывать одни действия, а при нарушении – другие, используют оператор условной передачи управления. Условие записывают в виде выражения, заключенного в круглые скобки. В зависимости от результата этого выражения осуществляется выбор одной из ветвей: если результат выражения «не ноль», то выполняется оператор, следующий за условным выражением, иначе – оператор, следующий за служебным словом else.

Синтаксис оператора ветвления:

if ( ) [ else ]

Оператор– любой оператор С++.

Выражение – любое выражение, соответствующее правилам составления выражений С++.

В каждой ветви допускается запись одного оператора, в том числе и другого условного оператора.

Если по алгоритму решения задачи необходимо в ветвях размещать более одного оператора, используют составные операторы.

Составным оператором в С++ называют последовательность операторов, заключенную в операторные скобки ( <……>). Операторы последовательности отделяют друг от друга точкой с запятой. Перед закрывающей скобкой (>) блока, точку с запятой также обязательно ставить. Так как точка с запятой является неотъемлемой частью оператора, то перед else точка с запятой обязательна. Исключением является составной оператор, так как в нем точка с запятой уходит внутрь блока.

В соответствии с синтаксисом оператора ветвления, допускается использовать оператор условной передачи управления с пропущенной (пустой) ветвью else. Такой оператор называется укороченным.

Так как в качестве оператора ветви по синтаксису может быть использован условный оператор, как в полной, так и укороченной форме, то при реализации такой конструкции могут возникнуть неоднозначности. Для этого необходимо использовать правило вложения. Это правило гласит:ветвь else всегда относится к ближайшему if.

Правило вложения продемонстрируем на примере нижеприведенных фрагментов алгоритмов:

Рисунок 1 –Варианты алгоритмов неоднозначных ветвлений

Следуя правилу вложения, для реализации варианта а подойдет следующий фрагмент программы на языке С++:

if then

if then

else

Для реализации варианта б следует использовать составной оператор <…>:

if

if

else

В этом случае укороченный вложенный ifвойдет внутрь составного оператора, а else,по правилам вложения, будет отнесен к внешнемуif, так как он в этом случае будет ближайшим.

Пример 1. Разработать программу, которая вычисляет значение функции, заданной следующим образом:

y = í x 2 , при 1

if(fabs(x) z; y+z>x; x+z>y.

Для реализации проверок следует использовать операторы условной передачи управления.

Текст программы приведен ниже.

printf(» x=%6.2f y=%7.2f z=%7.2f\n»,x,y,z);

puts(«Treangle is exzist»);

puts(«Treangle no exzist, one side > summy other side»);

printf(» x=%6.2f y=%7.2f z=%7.2f\n»,x,y,z);

printf(» x=%6.2f y=%7.2f z=%7.2f\n»,x,y,z);

Другие примеры программ, содержащих ветвления, приведены в [1].

Порядок выполнения работы

1. Прочитать и проанализировать задание в соответствии со своим вариантом.

2. Разработать схему алгоритма решения задачи.

3. Написать программу.

4. Вызвать среду программирования Visual Studio 2008 , создать новый проект консольного приложения и ввести текст программы в редактор среды программирования.

5. Подобрать тестовые данные (не менее 3-х вариантов).

6. Отладить программу на выбранных тестовых данных.

7. Продемонстрировать работу программы преподавателю.

8. Составить отчет по лабораторной работе.

9. Защитить лабораторную работу преподавателю, ответив на контрольные вопросы.

Требования к отчету

Отчет должен быть выполнен на бумаге формата А4 или А5 в том числе в тетрадях или на тетрадных листах. Если отчет выполняется на отдельных тетрадных листах, то они должны быть аккуратно обрезаны по линии подшивки и скреплены. Неаккуратно выполненные, оборванные или грязные отчеты не принимаются.

Все записи в отчете должны быть либо напечатаны на принтере, либо разборчиво выполнены от руки синей или черной ручкой (карандаш – не допускается). Схемы также должны быть напечатаны при помощи компьютера или нарисованы с использованием чертежных инструментов, в том числе карандаша.

Каждый отчет должен иметь титульный лист, на котором указывается:

а) наименование факультета и кафедры;

б) название дисциплины;

в) номер и тема лабораторной работы;

г) фамилия преподавателя, ведущего занятия;

д) фамилия, имя и номер группы студента;

е) номер варианта задания.

Кроме того, отчет по лабораторной работе должен содержать:

1) схему алгоритма, выполненную вручную или в соответствующем пакете;

2) текст программы;

3) результаты тестирования, которые должны быть оформлены в виде таблицы вида:

Исходные данные Ожидаемый результат Полученный результат

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

1. Что такое «ветвление»? В каких случаях используется эта конструкция?

2. Как показать ветвление на схеме алгоритма?

3. Какой оператор реализует ветвление в программе?

4. Какой синтаксис имеет этот оператор?

5. Объясните, почему в вашей программе следует использовать ветвление?

6. Как подбирают тесты для отладки программ, содержащих ветвления?

Объем работы: 4 часа

Теоретическая часть

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

Для реализации циклических процессов используют операторы циклов. В теории программирования выделяют несколько основных видов циклических конструкций:

· счетный цикл (рисунок 3,а);

· цикл-пока (рисунок 3, б);

· цикл-до (рисунок 3, в).

Рисунок 3 — Структура циклов, реализованных в С++:

счетный цикл (а), цикл-пока (б) и цикл-до (в)

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

В С++ оператор счетного цикла for имеет следующий систаксис:

for ( ; ; ) ;

Выражение1 – инициализирующее выражение; представляет собой последовательность описаний, определений и выражений, разделенных запятыми. Выполняется только один раз в начале цикла и задает начальные значения переменным цикла. Может отсутствовать, при этом точка с запятой остается.

Выражение2 –выражение условия; определяет условие завершения цикла, в частности, предельное значение параметра цикла. Может отсутствовать, при этом точка с запятой остается.

Выражение3 – список выражений, которые выполняются на каждой итерации цикла после тела цикла, но до следующей проверки условия. Обычно определяют изменение параметра цикла. Может отсутствовать.

Оператор – тело цикла. Может быть любым оператором С++, в том числе и составным оператором (блоком операторов). Составной оператор применяется, если тело цикла содержит более одного простого оператора. Оператор тела цикла может отсутствовать, в этом случае вмесо него ставится точка с запятой.

Примеры операторов счетного цикла

1. for(int i=0,float s=0; i 0;i—) s=s+i;

6. for(;;); — бесконечный цикл.

Пример 1. Разработать программу вычисления суммы n первых натуральных чисел. n вводится с клавиатуры.

Сумма определяется методом накопления. Количество суммируемых чисел известно, поэтому используем цикл с заданным количеством повторений. На каждой итерации цикла к сумме будем добавлять переменную цикла, которая будет изменяться от 1 до n. Перед циклом переменную суммы необходимо обнулить. На рисунке 4 приведена схема алгоритма программы.

Рисунок 4 – Схема алгоритма вычисления суммы n натуральных чисел

Текст программы приведен ниже:

Количество индексов задает размерность массива. Каждому элементу массива соответствует один или несколько индексов, определяющих положение элемента в массиве.

Тип индекса – порядковый – определяет доступ к элементу.

Нумерация индексов ВСЕГДА начинается с 0.

Размер – определяет количество элементов по данному индексу.

Тип элемента – любой кроме файла, в том числе, другой массив.

Массив в памяти не может занимать более 2 Гб.

Объявление одномерных массивов:

int a[10]; — массив на 10 целых чисел;//индекс меняется 0 — 9

float mas[20] – массив на 20 вещественных чисел;

char sim[8] – массив на 8 символов;

double massiv[30] – массив на 30 вещественных чисел двойной точности;

unsigned int koord[10] – массив целых беззнаковых чисел .

int *dinmas; указатель на целое;

dinmas=new int [100]; массив на 100 элементов целого типа.

Индекс меняется от 0 до величины, на 1 меньшей указанной в размере

Внешние и статические массивы можно инициализировать при объявлении.

По правилам С++ имя массива является его адресом.

Поэтому для адресации элементов массива независимо от способа описания можно использовать адресную арифметику.

Пример.Разработать программу определения максимального элемента массива A(5) и его номера.

Вначале элементы массива необходимо ввести. Для выполнения этой операции используем цикл с заданным числом повторений.

Поиск максимального элемента требует дополнительных переменных: amax – для хранения текущего и найденного максимального значения и imax – для хранения номера текущего и найденного максимального значения. Саму операцию поиска выполним следующим образом.

Запомним в качестве текущего максимального, т. е. запишем в amax первый элемент и зафиксируем в imax его номер. Затем будем последовательно просматривать элементы массива, сравнивая их со значением, хранящимся в amax. Если очередной элемент больше значения в amax, то сохраняем его в качестве максимального в amax и запоминаем его номер в imax (рис. 7).

Рисунок 7 — Поиск максимального элемента массива: состояние на момент проверки четвертого элемента массива (а), изменение текущего значения максимального элемента и его номера по результатам проверки четвертого элемента массива (б)

Для организации последовательного просмотра используем цикл с заданным числом повторений, изменяя переменную цикла от 1 до 4, так как первый элемент мы уже учли. Просмотрев все элементы массива, найдем максимальный элемент и его номер. После этого необходимо вывести на экран исходный массив, максимальный элемент и его номер.

На рис. 8 представлена схема алгоритма программы. Поскольку операции ввода-вывода массивов выполняют однотипно, на схеме алгоритма соответствующих циклов, так же как и запросов на ввод данных, обычно не показывают. Вместо этого в схему вставляют блок операции ввода/вывода, в котором указано имя массива и количество элементов, участвующих в операции.

Рисунок 8 — Схема алгоритма поиска максимального элемента массива

Ниже приведен текст программы.

int main(int argc, char* argv[])

puts(“Input 5 values:”);

Тип индекса – порядковый – определяет доступ к элементу.

Нумерация индексов ВСЕГДА начинается с 0.

Размер – определяет количество элементов по данному индексу.

Тип элемента – любой кроме файла, в том числе, другой массив.

Массив в памяти не может занимать более 2 Гб.

1) Статически, на этапе компиляции

int a[4][5] – матрица целого типа из 4 строк и 5 столбцов индексы меняются первый от 0 до 3, второй от 0 до 4

float matr[10][20] – матрица вещественного типа из 10 строк и 20 столбцов

double x[10][10] – матрица вещественного типа с двойной точностью из 10 строк и 10 столбцов

2) С помощью указателей.

Память под такую матрицу выделяется:

А) статически при инициализации

short **r=<<3,5,9,7>,<1,4,7,0>,<12,5,90,3>> – под массив будет выделена память по количеству определенных элементов (три строки по 4 элемента)

Б) динамически во время выполнения

int main(int argc, char* argv[])

puts(“Enter a matrix in the lines:”);

По правилам С++ подпрограмму можно описывать в любом месте программы и даже в другом файле, но только не внутри другой функции.

При описании функции после функции main или другой функции, в которой она используется, необходимо в начале программы описать прототип этой функции или подключить файл с описанием прототипа. Прототип представляет собой заголовок функции, завершающийся точкой с запятой. Обычно все прототипы функций собирают в начале программы.

Подпрограмма может получать данные двумя способами:

а) неявно – с использованием глобальных переменных;

б) явно – через параметры.

1) приводит к большому количеству ошибок;

2) жестко связывает подпрограмму и данные.

При использовании явной передаче данных через параметры существует два способа передачи аргументов в подпрограммы. Первый из них известен как передача параметров по значению. В этом случае в подпрограмму передаются копии фактическихпараметров, и никакие изменения этих копий не возвращаются в вызывающую программу.

Второй способ называют передачей параметров по ссылке. При использовании этого метода в подпрограмму передаются адреса фактических параметров, соответственно, все изменения этих параметров в подпрограмме происходят с переменными основной программы. По умолчанию в языке С++ применяется передача по значению.

Формальныминазываются параметры, определенные в заголовке функции при ее описании.

Каждый формальный параметр не только перечисляется (именуется), но и специфицируется (для него задается тип).

Совокупность формальных параметров определяет сигнатуру функции.

Сигнатура функции зависит от количества параметров, их типа и порядка размещения в спецификации формальных параметров.

Спецификация формальных параметров это либо пусто, либо void либо список отдельных параметров.

Примеры:

float max(float a,float b)

Фактическиминазываются параметры, задаваемые при вызове функции.

Формальные и фактические параметры должны совпадать:

— по порядку следования.

Однако, имена формальных и фактических параметров могут не совпадать.

Пример:

int k,l,n=6; float d=567.5,m=90.45

void fun2(int a,float c,float b) <….>// описание функции fun2

fun2(n,d,m); // Правильный вызов

fun2(4,8.7); // Ошибка в количестве параметров

fun2(4.67, 5,7); // ошибка в типах параметров

fun2(3,m,d); // ошибка в порядке следования контролируется пользователем

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

Существует два способа завершить выполнение подпрограммы и вернуть управление вызывающей подпрограмме. В первом случае функция полностью выполняет свои операторы и достигает закрывающей скобки, после чего управление автоматически передается в точку вызова. Такая подпрограмма должна либо не возвращать никаких данных либо должна возвращать результаты через параметры. В этом случае необходимо использовать ссылки или указатели.

Пример.Разработать программу, которая определяет площадь четырехугольника по заданным длинам сторон и диагонали.

Будем считать площадь четырехугольника как сумму площадей двух треугольников, определенных по формуле Герона. Вычисление площади треугольника оформим как подпрограмму. Исходные данные такой подпрограммы – длины сторон треугольника. Подпрограмма не должна менять значения параметров, поэтому их можно передать как параметры-значения или параметры-константы. Результат работы этой подпрограммы – скалярное значение, значит, она может быть реализована как функция. Однако ее также можно реализовать как процедуру, которая возвращает результат через параметр-переменную. Схемы алгоритма 1 23456789Следующая ⇒

Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ — конструкции, предназначен­ные для поддерживания проводов на необходимой высоте над землей, водой.

Папиллярные узоры пальцев рук — маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни.

Методические указания к лабораторным работам по дисциплине «Программирование на языке высокого уровня» (стр. 1 )

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5

по дисциплине «Программирование на языке высокого уровня»

Знакомство с интегрированной средой языка С.

Интегрированная среда С ( а именно язык Turbo C++ version 1.0-. и выше) является частью системы программирования С. Основным достоинством среды С является интеграция необходимых средств разработки С-программ в единую среду программирования-интегрированную среду (ИС). Не выходя из среды, мы имеем возможность создавать, компилировать, выполнять, отлаживать, корректировать программу.

Интегрированная среда С является удобным средством для быстрой разработки программ на языке С. Работа пользователя в среде С базируется на использовании техники меню и окон. К тому же в среде имеется контекстно-чувствительное средство получения справочной информации. Все это делает интерфейс с компилятором легким в изучении.

Предположим, что основные файлы С расположены в каталоге C:\TC. Тогда для запуска интегрированной среды укажите путь C:\TC\BIN\tc. exe, или просто: C\TC\BIN\tc

Когда программа запустится, мы увидим, что. вид экрана изменился. Верхняя строка будет содержать меню основных режимов работы ИС. Нижняя строка коротко описывает основные «горячие» клавиши.(см. рис 1.)

Fl Help F2 Save F3 Open ALT-F9 Compile F9 Make F10 Menu

Рис. l. Интегрированная среда С.

Для того, чтобы войти в главное меню среды, достаточно нажать клавишу «F10» (обратите внимание на соответствующую подсказку в нижней строке). При этом в одном из пунктов меню в верхней строке появится подсвеченный прямоугольник, который можно передвигать, нажимая на клавиши «→»и «←».

Если установить этот прямоугольник на какой-либо пункт меню и нажать клавишу «Enter», то раскроется подменю этого пункта, то есть список конкретных действий, которые можно совершать, находясь в данном пункте меню.

По этому списку так же можно передвигать подсвеченный прямоугольник (нажимая клавиши «↑» и «↓»). Пункт подменю, выбирается нажатием клавиши «Enter», (см. рис 2.)

Fl Help F2 Save F3 Open ALT-F9 Compile F9 Make F10 Menu

Рис. 2. Работа с пунктом меню «File»

Можно легко передвигаться из одного пункта меню в другое. Для этого используются клавиши «→ » , « ← », « ↑ » , « ↓ » и еще клавиша « Esc ». Клавиша «Esc» нужна, чтобы выйти из данного подменю во «внешнее».

В этом режиме создаются и редактируются тексты программы. Для того, чтобы попасть в режим редактирования, достаточно загрузить файл (или создать новый).

Первым действием при разработке программ является создание (нажмите клавишу «F3») и сохранение (нажмите клавишу «F2») программы. Для создания новых программ и редактирования уже существующих, в среде С есть встроенный текстовый редактор, содержащий богатый набор операций редактирования. Эти операции дают возможность создавать, сохранять и редактировать программы в среде С.

Встроенный текстовый редактор среды С позволяет быстро выполнять такие операции редактирования, как перемещение курсора, вставка, выбор, копирование и удаление текста.

После набора текста программы сохраните (с помощью «F2») а для запуска программы выполните один из следующих вариантов:

1) Нажмите комбинации клавиш «All»+ «F9» (для компиляции) или «Ctrl» + «F9» (для выполнения программы).

2) В верхней строке меню выберите меню « Run» и выполните действие «Run», для этого нажмите «Enter». После этого на экранпоявится результат.

Компиляция, выполнение и отладка программ.

После создания и сохранения программы следующими этапами разработки являются компиляция, выполнение и отладка этой программы. Для этих целей в среде Си имеются встроенный компилятор и отладчик. Для управления компиляцией, выполнением и отладкой в среде Си используются команды меню «Run (запуск)» , «Compile (компиляция)», «Debug (отладка)».

Команды меню «Compile» создают объектный файл из текущего сходного файла.

Действиями команд из меню ознакомьтесь самостоятельно, для этого используйте клавиши «↓», «↑». После выбора нужного подменю нажмите «Enter» и выполняется действия.

Команды меню «Run» (Запуск) начинают или продолжают выполнение программы. Здесь можно осуществлять трассировку и пошаговое выполнение команд программы.

Команды меню «Отладка» в сочетании с командами меню «Запуск» управляют отладкой в среде Си.

Лабораторная работа № 1

Тема: Программирование линейных алгоритмов.

Стандартные подпрограммы (функции Printf, Scanf).

Цель работы: научить студентов использовать стандартных функций для решений всяких задач. Овладение практическими навыками разработки и программирования вычислительного процесса.

Задания для самостоятельной подготовки

1. Изучить:

─ запись констант, переменных, стандартных функций;

─ правила записи арифметических выражений;

─ арифметический оператор присваивания;

2. Разработать алгоритм решения в соответствии с заданием.

3.Составить программу решения задачи.

К наиболее интересным и важным функциям языка относится printf . Она предназначена для форматного вывода данных. Например, чтобы вывести некоторое сообщение на экран дисплея, достаточно использовать вызов функции:

printf («Интересное сообщение \n»);

Одним из механизмов взаимодействия являются параметры. Список параметров (аргументов) идет вслед за именем функции в круглых скобках. В данном случае аргументом служит строковая константа — любая последовательность символов, в кавычках. Комбинация » \n « означает переход на новую строку. Первый пример можно заменить вот на такую строчку:

printf («Интересное сообщение «); prin tf(» \n «);

— результат будет точно таким же, как и в первом случае!

Первым аргументом служит строка форматов, а вторым, если они есть, — выводимые объекты. Строка форматов может включать обычные символы, которые начинаются со знака %, за ним следует символ преобразования. Каждая спецификация преобразования соответствует одному из аргументов, которые следуют за форматной строкой. Буква d в спецификации преобразования указывает, что значение аргумента должно быть напечатано как десятичное целое число. Из других символов отметим : c — для вывода отдельного символа; s — для печати символьной строки; x и o — для вывода шестнадцатеричных и восьмеричных чисел соответственно; f — для вывода чисел с плавающей точкой. В следующем примере

printf(» %c = %d \n»,g, g);

значение переменной g выводиться как символ алфавита, а после знака равенства — как числовое значение, соответствующее внутреннему (машинному) коду этого символа. Перед символом преобразования может стоять, явно указывающий количество позиций в выводимой строке, отведенных для элемента вывода.

printf(» %c = %5d \n»,g, g);

Наша первая программа вводит два числа, вычисляет их сумму и печатает результат с поясняющим текстом «Cумма«.

#include < int a, b,c; a=5; b=7; c=a+b; printf(«Cумма = %d \n»,c) >

Строка int a, b,c; объявляет a, b,c переменными целого типа. Все используемые в программе переменные должны быть объявлены. Далее идут операторы присваивания к a значение 5, а к b7, с — значение их суммы. Значения переменных типа int лежат в диапазоне [-32768; 32767]. Функция printf выводит на экран: СУММА = 12.

Рассмотрим теперь функцию scanf предназначенную для форматного ввода данных. Функция scanf в качестве фактических параметров использует адреса переменных, а не их значения. Для этого перед соответствующим параметром ставят знак & — символ взятия адреса. Например, &XL означает «адрес переменной XL«, а не значение, которое переменная имеет в данный момент.

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

Предыдущая программа страдает одним недостатком: программа вычисления суммы годится только для одного конкретного случая, когда a=5, b=7. Улучшим ее, заменив соответствующие операторы присваивания вызовом функции scanf:

/* Ввод двух чисел, вычисление суммы и печать результата*/

#include < int a, b,c; scanf(» %d %d»,&a,&b); c=a+b; printf(«Cумма = %d \n»,c) >

Форматная строка предписывает функции scanf ввести десятичное число, которое надо поместить в переменную a, затем через пробел ввести второе десятичное число, которое надо присвоить переменной b. Обратите внимание, что программа начинается со строки комментарием : /* .. */ , транслятор пропускает любые символы между /* и */ и их можно использовать для пояснений.

Вычислить значение функции при заданных значениях параметров. Значения параметров задаются пользователем с клавиатуры.

Лабораторная работа № 2

Тема: Программы разветвляющихся структур.

Цель работы — овладение практическими навыками разработки и программирования вычислительного процесса разветвляющейся структур.

Задания для самостоятельной подготовки

1. Изучить возможности языка программирования для реализации:

─ условной и безусловной передачи управления;

─ вычислительного процесса разветвляющейся структуры

2. Разработать алгоритм решения в соответствии с заданием.
3. Составить программу решения задачи.

Рассмотрим организацию ввода — вывода и реализацию основных управляющих структур. Любой конкретный алгоритм может быть записан на языке программирования, использующем только три управляющий структуры: последовательное выполнение, ветвление и повторение.

Последовательность операторов выполняется в порядке их естественного расположения в программе, с возможным отклонением для вызова внешнего фрагмента (функции), но с обязательным возвратом в точку вызова.

Ветвление в простейшем случае описывается в языке Си с помощью условного оператора. имеющего вид:

if ( выражение ) оператор_1; else оператор_2;

где часть else может и отсутствовать. Сначала вычисляется «выражение» в скобках; если оно истинно то выполняется оператор_1. Если «выражение» ложно (равно нулю — NULL), то оператор_1 пропускается, а выполняется оператор_2. Если на месте условно выполняемых операторов должна располагаться группа из нескольких операторов языка, то они заключаются в фигурные скобки — < >. Часто «выражение» в скобках представляет условие, заданное с помощью операций отношений и логических операций. Операции отношения обозначаются в Си следующим образом:

= = равно; ! = не равно; больше;
= больше или равно.

Символ ! в языке Си обозначает логическое отрицание. Есть еще две логические операции: || означает или, а && — логическое И. Операции отношения имеют приоритет ниже арифметических операций, так что выражение вида k > n%i вычисляется как k > (n%i). Приоритет && выше, чем у ||, но обе логические операции выполняются после операций отношения и арифметических. В сомнительных случаях лучше расставлять скобки.

Для иллюстрации применения условного оператора рассмотрим программу определения большего из трех чисел.

#include main() /* главная функция*/ < int x, y, z, max ; /* описание переменных*/ printf(» Введите три числа :\n «); scanf(» %d %d %d «, &x, &y, &z); /*ввод трех чисел*/ if( x > y) /*операции сравнивания*/ max=x; else max=y; if ( z>max) max=z; printf(» Максимальное из (%d, %d, %d)= %d \n«,x, y, z, max); >

Рассмотрим пример программы, в которой применяются несколько вложенных друг в друга условных операторов. В этой программе строка float A, B, X объявляет эти три переменные как величины вещественного типа. Форматная строка функции scanf предписывает ввести два вещественные числа, которые станут значениями переменных A и B соответственно.

/*РЕШЕНИЕ УРАВНЕНИЯ AX=B*/ #include main() <

float A, B,X; printf(«ВВЕДИ А, В\n»); scanf(«%f %f»,&A, &B); if(A!=0) printf(«РЕШЕНИЕ:%f\n», B/A); else if(B==0) printf(«X-ЛЮБОЕ ЧИСЛО\n»); else printf(«РЕШЕНИЙ НЕТ\n»); >

Посмотрите, как выглядит ветвление, когда глубина вложенности условных операторов равна трем (пример 1.5). Если хоть одно условие истинно, то все оставшиеся, разумеется, пропускаются. При глубине вложенности условных операторов свыше трех ветвление теряет наглядность и понятность.
Для реализации многозадачного ветвления обычно прибегают к управляющей структуре выбор (переключатель) (см. п.9.4). Когда управляющая структура ветвления становится особенно запутанной, определенную ясность могут внести фигурные скобки. Они обязательны, когда в условном операторе содержится более одного оператора или функции, например

if(a_0) < printf(«. «); scanf(«. «) другие операторы. >

/* Программа определяет поведение ракеты, стартующей на экваторе, в зависимости от ее начальной скорости*/ #include main() < float V; printf(«ВВЕДИ V\n«); scanf(«%f«,&V); if(V
main()
<
int N, S,Z;
S=0;
printf(«ВВЕДИ N\n»);
scanf(«%d»,&N)
while(N!=0)
<
Z=N%10
N=N/10
S=S+Z;
>
printf(«СУММА ЦИФР=%d\n»,S);
>

Рассмотрим еще один пример. Здесь приведена программа, которая реализует алгоритм разложения числа на простые множители. Для сокращения времени счета отдельно рассматривается случай множителя, равного двум, чтобы в последующем рассматривать только нечетные множители.

Цукерберг рекомендует:  Php - Не могу сделать пост в группу ВК через wall.post
Понравилась статья? Поделиться с друзьями:
Все языки программирования для начинающих