Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Практикум по программированию на языке Си - A4.doc
Скачиваний:
4
Добавлен:
01.04.2025
Размер:
670.21 Кб
Скачать

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ

И.С. Кислицкая

ПРАКТИКУМ ПО ПРОГРАММИРОВАНИЮ НА ЯЗЫКЕ СИ

Учебно-методическое пособие

Липецк – 2010

УДК 681.3.06

ББК 32.973-018.1

П12

Кислицкая И.С. Практикум по программированию на языке Си / И.С. Кислицкая. – Липецк, 2010. – 100 с.

ISBN 5-94723-967-1

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

Рецензенты:

И.А. Шуйкова, кандидат технических наук, доцент, ЛШУ

Г.О.Федоркова, кандидат технических наук, доцент ЛГТУ

ISBN 5-94723-967-1

© Кислицкая И.С., 2010

Предисловие

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

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

  • Простые (скалярные) типы данных языка Си. Составление и отладка простейшей Си-программы

  • Составление и отладка разветвляющихся программ на Си

  • Реализация циклов в языке Си

  • Составление алгоритмов и программ обработки массивов

  • Указатели. Динамическое управление памятью

  • Обработка символьных строк

  • Указатели в параметрах функций

  • Работа со структурами

  • Потоки ввода/вывода в Си

  • Реализация динамических информационных структур

Для каждой лабораторной работы даны методические рекомендации к её выполнению, рассмотрены примеры выполнения заданий. Все программы, тексты которых приведены в качестве примеров, отлажены и протестированы. Тексты программ содержат комментарии. К каждой теме приведён список заданий для самостоятельного выполнения (по вариантам), дифференцированных по сложности. Так, задания I-го уровня требуют решения простых задач, которые сводятся к типовым алгоритмам. Задания II-го уровня содержат более сложные задачи, требующие использования сочетания стандартных приёмов и некоторого творческого подхода. Задания III-го уровня требуют применения нестандартных приёмов, разработки нетривиальных алгоритмов и рекомендуются для выполнения более подготовленным студентам.

Лабораторная работа №1 “ Простые (скалярные) типы данных языка Си. Составление и отладка простейшей Си-программы”

Методические указания

  1. Переменным и функциям следует давать имена, отражающие их назначение.

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

  3. Каждый ввод данных с клавиатуры предваряйте приглашением.

  4. Текст программы снабжайте комментариями. Комментарий к определению функции обязателен. Он должен содержать: назначение функции; описание возвращаемого значения; смысл каждого формального параметра.

Пример

Определить длину окружности и площадь круга по известному радиусу. Определение длины окружности и площади круга оформить в виде отдельных функций.

#include <stdio.h> //Директива препроцессора

#define PI 3.1415 //Директива препроцессора

double circlen(double r); //Прототип функции circlen

double circsqr(double r); //Прототип функции circsqr

void main()

{

double r=1; //Объявление переменной r с инициализацией

double len; //Объявление переменной len с инициализацией

len = circlen (r); //Вызов функции circlen

printf("Length=%.1lf\n",len); //Печать результата на экране

double s;

s= circsqr (r); //Вызов функции circsqr

printf("Square = %.1lf\n",s);

}

/*

Функция circlen() возвращает длину окружности радиуса r

*/

double circlen (double r)

{

double d;

d=2*PI*r;

return d;

}

/*

Функция circsqr() возвращает площадь круга с радиусом r

*/

double circsqr (double r)

{

double p;

p=PI*r*r;

return p;

}

Задания для самостоятельного выполнения

Задания I уровня сложности

Вариант 1

Найти объем и площадь полной поверхности шара, радиус которого известен.

Вариант 2

Найти объем и площадь полной поверхности конуса, если известны его высота и радиус основания.

Вариант 3

Найти полное сопротивление цепи, состоящей из двух резисторов R1 и R2, при их а) последовательном; б) параллельном соединении.

Вариант 4

Определить объем и площадь полной поверхности прямоугольного параллелепипеда, если известны его измерения.

Вариант 5

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

Вариант 6

Определить максимальный КПД тепловой машины, если температура нагревателя равна t1oC, а температура холодильника - t2oC.

Указание. Максимальный КПД тепловой машины определяется выражением max=(T1-T2)/T1, где T1 и T2 - температура по абсолютной шкале. ToK=toC+273.

Вариант 7

Вычислить среднюю кинетическую энергию молекул идеального газа при температуре toC.

Указание. Cредняя кинетическая энергия E теплового движения молекул идеального газа связана с абсолютной температурой Т газа уравнением: Е=3/2kT, где k=1.381023 ДжК-1 (постоянная Больцмана). ToK=toC+273.

Вариант 8

Определить напряжение на выходе источника постоянного тока с известной величиной ЭДС Е В, внутренним сопротивлением R1 Ом при подключении нагрузки с электрическим сопротивлением R2 Ом.

Указание. U=IR2, I=Е / (R1+R2).

Вариант 9

Определить, с какой силой действует магнитное поле с индукцией В Тл на проводник длиной L м, расположенный перпендикулярно вектору индукции. Сила тока в проводнике равна I А.

Указание. Модуль силы Ампера F определяется выражением: F=IBL.

Вариант 10

Составьте программу, определяющую период свободных колебаний математического маятника по его длине L. Длина маятника, демонстрирующего вращение Земли в Исаакиевском соборе в Санкт-Петербурге, равна 98 м. Определите период его свободных колебаний.

Указание. Формула периода колебаний математического маятника: , где g – ускорение свободного падения.

Вариант 11

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

Вариант 12

Определить путь, пройденный телом за t секунд при постоянном ускорении а, если его начальная скорость vo.

Вариант 13

Заданы действительная и мнимая части комплексного числа z = x + iy. Преобразовать его в тригонометрическую форму и напечатать в виде: z = r(cosφ + isinφ).

Указание. .

Вариант 14

Треугольник задается координатами своих сторон на плоскости. Найти: а) площадь треугольника; б) периметр треугольника.

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

Лабораторная работа №2 “Составление и отладка разветвляющихся программ на Си”

Методические указания

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

  2. Если в какой-либо ветви вычислений условного оператора требуется выполнить более одного оператора, то их следует объединять в блок.

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

Пример

На плоскости в декартовой системе координат заданы своими координатами две точки и квадрат со стороной а с центром в начале координат. Определить, лежат ли эти точки:

а) обе внутри квадрата (либо на его сторонах);

б) обе снаружи квадрата;

в) одна внутри, другая снаружи квадрата.

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

#include <stdio.h>

#include <windows.h>

#include <wincon.h>

int sqrxy(double a, double x, double y);

void main()

{

SetConsoleOutputCP(1251); //Русификация консоли

double a=6,x1=9,y1=10,x2=1,y2=7;

int t1,t2;

t1= sqrxy (a,x1,y1); //Вызов функции sqrxy для точки (х1,y1)

t2= sqrxy (a,x2,y2); //Вызов функции sqrxy для точки (х2,y2)

if (t1 && t2)

puts("Обе точки внутри квадрата.");

else

if (t1==0 && t2==0)

puts("Обе точки снаружи квадрата.");

else

puts("Одна точка внутри, другая снаружи.");

}

/*

Функция sqrxy() возвращает 1, если точка с координатами x,y лежит внутри квадрата со стороной a, иначе функция возвращает 0

*/

int sqrxy (double a, double x, double y)

{

if ((x<=a/2 && x>=-a/2) && (y>=-a/2 && y<=a/2))

return 1;

else

return 0;

}

Задания для самостоятельного выполнения

Задания I уровня сложности