|
Программирование линейной структурыСтр 1 из 2Следующая ⇒ МЕТОДИЧЕСКИЕ УКАЗАНИЯ К выполнению самостоятельной контрольной работы по дисциплине «Основы программирования» для студентов специальностей
051001 Профессиональное обучение (по отраслям) Программирование в компьютерных системах,
230115 Программирование в компьютерных системах Для очной и заочной форм обучения
Омск, 2014
Данные методические указания включают в себя 12 тем для изучения языка программирования высокого уровня Си. Эти темы помогут студентам освоить как базовые понятия программирования на алгоритмическом языке Си (линейная структура, программы разветвляющейся и циклической структуры, массивы), так и более сложные вопросы (структуры, функции, работа с файлами, работа с динамической памятью). В каждой теме изложены краткие теоретические сведения, приведены примеры программ, которые помогут в разработке самостоятельных программ согласно вариантам заданий. Ответы на приведенные в методических указаниях контрольные вопросы способствуют закреплению материала.
Общие положения
Содержание контрольной работы должно соответствовать программе курса «Основы программирования» по специальностям 051001 Профессиональное обучение (по отраслям) Программирование в компьютерных системах; 230115 Программирование в компьютерных системах. Номер варианта работы определяется преподавателем. Как правило, этот номер соответствует номеру в журнале (на главной странице журнала). Например, номер в журнале — 13, то номер варианта в этом случае - 13. Преподаватель задает темы (номера тем), которые включены в контрольную работу. В случае, если темы не оговорены, следует выполнять задачи по всем темам. Кроме того, преподаватель может указать для каждой задачи количество заданий, которые следует выполнять (все задачи содержат несколько заданий). Если это количество не указано, следует выполнять все задания. С помощью номера варианта, номеров тем, количества заданий в каждой теме и таблицы, приведенной в Приложении 1, определяется структура самостоятельной работы. Например, если номер Вашего варианта 13 и преподаватель определил Вам 5 первых тем, в каждой задаче по теме - 2 задания, это значит, что Вы находите в таблице вариантов (Приложение 1) строку с номером 13 и начинаете выполнять задачи с номерами, приведенными в 13-ой строке таблицы. В частности, в теме 1 Вы должны выполнить задачу 5, в ней - два задания, в теме 2 - задачу 7, в ней - два задания и т. д. И так по всем пяти темам. Сроки выполнения самостоятельной работы определяются преподавателем в соответствии с учебным планом конкретной специальности (специализации). Однако самостоятельной работа должна быть сдана не менее чем за 5 дней до начала сессии. 2 Технология выполнения и отчетность по самостоятельной работе В соответствии с учебной программой по дисциплине «Основы программирования» студенты соответствующих специальностей/специализаций должны получить практические умения оперировать языковыми конструкциями определенного языка программирования. В связи с этим самостоятельной работа по курсу «Основы программирования» выполняется на компьютере и в указанной инструментальной среде на определенном языке программирования. Отчет по самостоятельной работе состоит из листингов задач на изучаемом языке программирования с комментариями в виде файлов на диске (файлы размещаются в папке с фамилией студента). Таблица вариантов Таблица вариантов работы
СОДЕРЖАНИЕ
Введение ………………………………………………………………………………..………. 3 Тема №1. Программирование линейной структуры……………………………………..…….. 5 Тема № 2 Программы разветвленной структуры……..……………………………..…….….…8 Тема № 3 Программы разветвленной структуры……..………………………………….….…10 Тема № 4Программы циклической структуры……….……………………………………… 13 Тема № 5Обработка статических массивов…………………………………………………...18 Тема № 6Работа с символьными данными …………………………………………………….22 Тема № 7Функции ……………………………………………………………………………...25 Тема № 8Структуры….……………………………………………….......................….....…......29 Тема № 9Программные средства для работы с файлами…………………………………...…33
Тема №1 Программирование линейной структуры
ОСНОВНЫЕ СВЕДЕНИЯ Чаще всего линейные алгоритмы используются для программирования вычислений по формулам. В этом случае удобно использовать набор стандартных функций Си, содержащихся в заголовочном файле math.h: Sin (x) - sin x; cos (x) – cos x; tan(x) - tg х; log (x) - ln x; log10(x) – lg x; exp(x) - показательная функция ex; sqrt (x)- корень квадратный от х; роw(x, y) – x в степени y; abs(x)- модуль x.; acos(x) – arccos x; asin(x) – arcsin x; atan(x)- arctg x; sinh(x)- sh x; cosh (x) – ch x; tanh(x)-th x. Для тригонометрических функций аргумент х измеряется в радианах и имеет тип double, как и значения функций.
Пример программы линейной структуры: Вычислить площадь и стороны прямоугольного треугольника, если известны гипотенуза c и угол x. Для вычислений воспользуемся формулами: a=c×sin x; b=c×cos x; S=ab Программа вычислений имеет вид:
// вычисление высот и площади треугольника #include <stdio.h> //заголовочный файл для организации ввода-вывода #include <math.h> //заголовочный файл математических функций main() //главная функция { float a,b,c,x, S; //описание переменных вещественного типа printf (“\n Введите гипотенузу и угол треугольника ”); scanf (“%f%f “,&c,&x); // ввод значений вещественного типа a=c*sin(x); b=c*cos(x); S=a*b; printf (“\n Результаты: a=%7.2f b=%7.2f S=%7.2f “,a, b, S); return 0; } Комментарий в программе не влияет на компиляцию программы, а служит для разъяснения действий основных блоков текста и программы в целом. Однострочный комментарий действует от двух символов // до конца строки. Многострочный комментарий заключается в пары символов /* и */. Вторая строка программы #include <stdio.h> является директивой компилятора для включения заголовочного файла stdio.h, в котором содержатся средства ввода-вывода (связи с внешними устройствами), отсутствующие в самом языке Си. Третья строка - #include<math.h> является директивой компилятора для включения заголовочного файла math.h, обеспечивающего выполнение математических функций. Программа на языке Си состоит из ряда функций, из которых функция main (главная) является обязательной и служит точкой входа в программу. В круглые скобки заключаются параметры функции, причем наличие круглых скобок обязательно, если даже список параметров пуст. В фигурные скобки заключаются составной оператор (несколько операторов). Для придания тексту программы наглядности открывающая и соответствующая ей закрывающая фигурные скобки печатаются на одном уровне, а заключенный между ними текст, сдвигается на 1-2 символа вправо, вложенный блок также сдвигается вправо и т.д. Образуется иерархия вложенных блоков, придающая программе на Си характерный вид. В программе описаны переменные a, b, c, х, S вещественного типа (float). В отличие от других языков в Си учитывается регистр при определении имени переменной, т.е. s и S – разные переменные. Функции printf и scanf содержатся в заголовочном файле stdio.h и служат для вывода на экран и ввода с клавиатуры соответственно. Управляющие символы \n в функции printf служат для перевода на новую строку. Символ & в функции scanf указывает на адрес вводимой переменной. Ввод и вывод переменных вещественного типа производится в формате f. Признаком форматного вывода в функции printf является %. При выводе между знаком процента и форматной переменной f можно включить общую ширину поля вывода и число позиций после десятичной точки. Оператор return 0; служит для выхода из функции main в Интегрированную Среду, 0 является признаком успешного окончания программы. Завершает текст программы закрывающая фигурная скобка, означающая конец функции main.
СПИСОК ЗАДАЧ 1. Даны два ненулевых числа. Найти их сумму, разность, произведение и частное. 2. Даны стороны прямоугольника a и b. Найти его площадь S = a-b и периметр P = 2(a + b). 3. Дан диаметр окружности d. Найти ее длину L = П*d. В качестве значения П использовать 3.14. 4. Даны длины ребер a, b, c прямоугольного параллелепипеда. Найти его объем V = a-b-c и площадь поверхности S = 2-(a-b + b-c + a-c). 5. Найти длину окружности L и площадь круга S заданного радиуса R: L = 2* П *R, S = П*R2. В качестве значения П использовать 3.14. 6. Даны катеты прямоугольного треугольника a и b. Найти его гипотенузу c и периметр P: c = √a2 + b2, P = a + b + c. 7. Найти среднее арифметическое и среднее геометрическое трёх заданных чисел. 8. Даны два круга с общим центром и радиусами R1 и R2 (R1 > R2). Найти площади этих кругов S1 и S2, а также площадь S3 кольца, внешний радиус которого равен R1, а внутренний радиус равен R2: S1=П(R1)2, S2 = П(R2)2, S3 = S 1 - S2. В качестве значения П использовать 3.14. 9. Найти расстояние между двумя точками с заданными координатами (x 1 y1) и (x2, y2) на плоскости. Расстояние вычисляется по формуле √(x2-x1)2 + (y2-y1)2. 10. Найти значение функции y = Зх6 - 6х2 - 7 при данном значении х. 11. Дано значение температуры Т в градусах Фаренгейта. Определить значение этой же температуры в градусах Цельсия. Температура по Цельсию Тс и температура по Фаренгейту Тf связаны следующим соотношением: Тс = (Тf – 32)*5/9. 12. Даны два действительных числа a и b. Получить их сумму, разность и произведение. 13. Дано значение температуры Т в градусах Цельсия. Определить значение этой же температуры в градусах Фаренгейта. Температура по Цельсию Тс и температура по Фаренгейту Тf связаны следующим соотношением: Тс = (Тf – 32)*5/9. 14. Даны два действительных положительных числа. Найти среднеарифметическое и среднегеометрическое этих чисел (или их модулей). 15. Известно, что X кг конфет стоит А рублей. Определить, сколько стоит 1 кг и Y кг этих же конфет. 16. Смешано V1 литров воды температуры t1 и V2 литров воды температуры t2. Найти объём и температуру образовавшейся смеси. 17. Известно, что X кг шоколадных конфет стоит А рублей, а Y кг ирисок стоит В рублей. Определить, сколько стоит 1 кг шоколадных конфет, 1 кг ирисок, а также во сколько раз шоколадные конфеты дороже ирисок. 18. Найти корни квадратного уравнения A*x2 + B-x + C = 0, заданного своими коэффициентами A, B, C (коэффициент A не равен 0), если известно, что дискриминант уравнения положителен. Вывести вначале меньший, а затем больший из найденных корней. Корни квадратного уравнения находятся по формуле Х1,2 = (-B ± √D)/(2*A), где D - дискриминант, равный B2 - 4AC. 19. Найти решение системы линейных уравнений вида A1 *x + B1* y = C1 A2 * x + B 2 * y = C2, заданной своими коэффициентами A1 B1 C1 A2, B2, C2, если известно, что данная система имеет единственное решение. Воспользоваться формулами x = (C1B2 - C2B1)/D, y = (A1C2 - A2C1)/D, где D = A1B2 -A2*B1. 20. Найти сумму членов арифметической прогрессии по данным значениям: a, d, n. 21. Дано трехзначное число. Вывести число, полученное при перестановке цифр сотен и десятков исходного числа (например, 123 перейдет в 213). 22. Даны целые числа k, m, действительные числа x, y, z. При k<m2 или заменить модулем соответственно значения x, y или z, а два других уменьшить на 0.5. 23. Дано трехзначное число. Вывести число, полученное при перестановке цифр десятков и единиц исходного числа (например, 123 перейдет в 132). 24. Дано действительное число х. Получить целую часть х; затем число х, округлённое до ближайшего целого; затем число без дробных цифр. 25. Дано целое четырехзначное число. Используя операции div и mod, найти произведение его цифр.
Тема №2 Условный оператор IF ОСНОВНЫЕ СВЕДЕНИЯ Алгоритм разветвленной структуры - это алгоритм, в котором вычислительный процесс осуществляется по одной из ветвей. Если количество ветвей две – то используется условный блок, если больше – то множественный выбор. В программах используют соответственно условный оператор IF или оператор SWITCH для реализации разветвленного алгоритма.
Условный оператор IF Условный оператор в языке Си имеет формат: if (условие) оператор1; else оператор2; (полная форма) или if (условие) оператор1; (сокращенная форма). Если оператор1 и оператор2 состоят из одного оператора, то в фигурные скобки они не заключаются. Если оператор1 и/или оператор2 являются составным оператором (несколько операторов), то он заключается в фигурные скобки. Условие всегда заключается в круглые скобки. В качестве примера приведем программу вычисления наибольшего из значений функции y1=x²+1, y2=7-x², y3=x+1 для любого х.
#include <stdio.h> main() { float x,y1,y2,y3,max; printf("Введите x\n"); scanf(“%f “,&x); y1=x*x+1; y2=7-x*x; y3=x+1; if (y1>y2) max=y1; else max=y2; if (y3>max) max=y3; printf (“x=%8.2f y1=%8.2f y2=%8.2f y3=%8.2f max=%8.2f\n”,x,y1,y2,y3,max); }
СПИСОК ЗАДАЧ Составить программы разветвляющейся структуры согласно вариантам задания 1 (используя IF) и задания 2 (используя SWITCH).
Варианты задания 1(используя IF)
а) max(x,y), б) min(x,y), в) max(x,y),min(x,y).
а) max(x + y + z, x · y · z), б) min2 (x + y + z/2, x · y · z) + 1.
f(x) = 2sin(x), если х>0, 6 - х, если х < 0.
- х, если х < 0, f(x) = х2, если0<х<2, 4, если х > 2.
Тема №3 Множественный выбор ОСНОВНЫЕ СВЕДЕНИЯ Алгоритм разветвленной структуры - это алгоритм, в котором вычислительный процесс осуществляется по одной из ветвей. Если количество ветвей две – то используется условный блок, если больше – то множественный выбор. В программах используют соответственно условный оператор IF или оператор SWITCH для реализации разветвленного алгоритма.
Множественный выбор В программах с множественным выбором используется переключатель switch, который сравнивает значение выражения, указанного за ним, и выполняет один из операторов, метка которого совпадает с этим значением. Общий вид: Switch (выражение) { case метка_1: список_операторов_1; ………………………………………. case метка_n: список_операторов_n; default: операторы; } Значения выражения и меток должны быть целочисленными константами. Например, определим количество дней по введенному номеру месяца.
// множественный выбор #include<stdio.h> #include<conio.h> // Заголовочный файл для работы с терминалом int m; main() { printf("\n Введите номер месяца:"); scanf("%d",&m); printf("\n В %4d месяце дней: ",m);
switch(m){ case 1:case 3:case 5: case 7:case 8:case 10:case 12:printf("тридцать один\n");break; case 2: printf ("двадцать восемь \n");break; case 4: case 6: case 9: case 11: printf("тридцать\n");break; default: printf("\n Номер месяца неверен \n");} getch (); } В примере программы, если номер месяца превышает 12, выводится сообщение о неверном вводе месяца, для чего используется default. Оператор break служит для прерывания цикла проверки и перехода в конец переключателя. В случае отсутствия break, происходит переход на следующую ветвь. Функция getch, подключающаяся заголовочным файлом conio.h, ожидает нажатия любой клавиши. Это позволяет просмотреть результаты, не используя ALT+F5 для просмотра экрана пользователя.
СПИСОК ЗАДАЧ
Тема №4 ОСНОВНЫЕ СВЕДЕНИЯ Операторы циклов В языке Си существует 3 вида циклов: 1) цикл с параметром или цикл типа for; 2) цикл с предусловием или цикл типа while, 3) цикл с постусловием или цикл типа do... while. Во всех этих циклах условие продолжения цикла заключается в круглые скобки. В циклах типов for и while повторяющаяся часть состоит из одного оператора, если требуется выполнить в цикле несколько операторов, они заключаются в фигурные скобки, образуя составной оператор. В цикле с постусловием тело цикла помещается между словами do и while. В отличие от цикла с предусловием, цикл с постусловием выполнится хотя бы один раз. Циклы с пред- и постусловием продолжаются, если условие продолжения истинно.
Цикл с параметром Цикл for используется тогда, когда количество повторений цикла заранее известно или может быть вычислено. Цикл for состоит из заголовка и тела цикла. В заголовке после слова for в круглых скобках записываются через точку с запятой три выражения: А) начальные значения: операторы присваивания, которые выполняются один раз перед выполнением цикла; В) условие, при котором выполняется следующий шаг цикла; если условие неверно, работа цикла заканчивается; если оно неверно в самом начале, цикл не выполняется ни одного раза (говорят, что это цикл с предусловием, то есть условие проверяется перед выполнением цикла); С) действия в конце каждого шага цикла (в большинстве случаев это операторы присваивания). В каждой части заголовка может быть несколько операторов, разделенных запятыми. Примеры заголовков: for (i = 0; i < 10; i ++) {... } for (i = 0, x = 1.; i < 10; i += 2, x *= 0.1){... } • Тело цикла заключается в фигурные скобки; если в теле цикла стоит всего один оператор, скобки можно не ставить. • В тело цикла могут входить любые другие операторы, в том числе и другие циклы (такой прием называется «вложенные циклы»). • Для того, чтобы легче разобраться в программе, все тело цикла и ограничивающие его скобки сдвигаются вправо на 2-3 символа (запись «лесенкой»).
Пример вычисления суммы квадратов натурального ряда чисел от 1 до n. S=
//lab3_1 сумма квадратов натурального ряда #include <stdio.h> main() { int S,n,i; printf(“Введите n ”); scanf(“%d”,&n); for (S=0, i=1; i<=n; i++) S+=i*i; // соответствует S=S+i*i printf (“n=%d S=%d”,n,S); } В разделе инициализации присваиваются начальные значения переменным S и i. При i, не превышающем n, цикл повторяется, иначе выполняется выход из цикла. Оператор инкремента i++ (или декремента i--), эквивалентен i=i +1 (i=i-1). Для досрочного выхода из цикла и перехода на следующий оператор после цикла используется оператор break. Для пропуска всех операторов, оставшихся до конца тела цикла и перехода к следующему повторению цикла используется оператор continue.
СПИСОК ЗАДАЧ Тема №5 ОСНОВНЫЕ СВЕДЕНИЯ Массивы - структурированный тип данных с элементами одного и того же типа, имеющий одно имя и определенное количество элементов. Количество элементов определяет размер массива. Порядковый номер элемента массива называется его индексом. Число индексов называется размерностью массива, например, массив с двумя индексами называется двумерным массивом. Строка символов является массивом символов, вектор – массив чисел, матрица – массив векторов. Обработка массивов выполняется следующим образом: объявление, ввод или инициализация элементов массива, преобразование и вывод. Объявление массива Чтобы использовать массив, надо его объявить – выделить место в памяти компьютера, объём которой зависит от количества элементов и типа массива. Тип массива - это тип входящих в него элементов. Массивы могут быть разных типов: — int, float, char, и т.д. Массив объявляют так же, как и обычные переменные, но после имени массива в квадратных скобках записывается его размер. int A[10], B[20]; // 2 массива по 10 и 20 целых чисел float C[12]; // массив из 12 вещественных чисел При объявлении массива можно сразу заполнить его начальными значениями, перечисляя их внутри фигурных скобок: int A[4] = { 2, 3, 12, 76 }; Если в списке в фигурных скобках записано меньше чисел, чем элементов в массиве, то оставшиеся элементы заполняются нулями. Если чисел больше, чем надо, компилятор сообщает об ошибке. Например, int A[4] = { 2 }; // последние три элемента равны 0 Для повышения универсальности программы размер массива лучше определять через константу. В этом случае для переделки программы для массива другого размера надо только поменять значение этой константы: const int N = 20; //N - константа main() { int A[N]; // размер массива задан через константу ... }
СПИСОК ЗАДАЧ 1. Даны натуральные числа n, A1,..., An. Определить количество членов Ak последовательности A1,..., An: а) являющихся нечётными числами; б) кратных 3 и некратных 5; в) являющихся квадратами чётных чисел; 2. Даны натуральные числа n, A1,..., An. Найти те элементы Ak последовательности n, A1,..., An, которые: а) являются удвоенными нечётными числами; б) при делении на 7 дают остаток 1,2 или 5; 3. Даны целые числа А1,..., А20. Получить сумму членов данной последовательности, которые: а) кратны 5; б) нечётны и отрицательны.
4. Даны натуральное число n, целые числа A1,..., An. Найти количество и сумму тех членов последовательности, которые делятся на 5 и не делятся на 7. 5. Даны целые числа p, q, A1,...,A17 (p>q>0). В последовательности заменить нулями элементы, модуль которых при делении на p даёт в остатке q. 6. Даны натуральные числа n, p, целые числа A1,..., An. Получить произведение элементов последовательности, кратных p. 7. Даны натуральное число n, действительные числа A1,..., An. В последовательности получить удвоенную сумму всех положительных элементов. 8. Даны натуральное число n, действительные числа A1,..., An. В последовательности все отрицательные числа увеличить на 0.5, а все неотрицательные на 0.1. 9. Даны натуральное число n, действительные числа A1,..., An. В последовательности все элементы, меньше 2, заменить нулями. Кроме того, получить сумму элементов, принадлежащих отрезку [3,7], а также число таких элементов. 10. Даны натуральное число n, де ![]() ![]() Живите по правилу: МАЛО ЛИ ЧТО НА СВЕТЕ СУЩЕСТВУЕТ? Я неслучайно подчеркиваю, что место в голове ограничено, а информации вокруг много, и что ваше право... ![]() ЧТО И КАК ПИСАЛИ О МОДЕ В ЖУРНАЛАХ НАЧАЛА XX ВЕКА Первый номер журнала «Аполлон» за 1909 г. начинался, по сути, с программного заявления редакции журнала... ![]() Система охраняемых территорий в США Изучение особо охраняемых природных территорий(ООПТ) США представляет особый интерес по многим причинам... ![]() ЧТО ПРОИСХОДИТ, КОГДА МЫ ССОРИМСЯ Не понимая различий, существующих между мужчинами и женщинами, очень легко довести дело до ссоры... Не нашли то, что искали? Воспользуйтесь поиском гугл на сайте:
|