Всё для Учёбы — студенческий файлообменник
1 монета
doc

Студенческий документ № 081045 из СИЮ

ПРАКТИЧЕСКАЯ РАБОТА № 1.

СТРУКТУРА ПРОГРАММЫ, ОСНОВНЫЕ ТИПЫ ДАННЫХ, ВВОД/ВЫВОД, ПРОГРАММИРОВАНИЕ АРИФМЕТИЧЕСКИХ ВЫРАЖЕНИЙ.

ПРЕДИСЛОВИЕ

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

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

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

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

Пример оформления отчета приведен в данной практической работе, начиная со страницы 11.

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

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

Теоретический материал.

Функция форматного вывода

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

Спецификация преобразования начинается с символа %:

% [флаги][ ширина_поля_вывода . точность] спецификатор_типа.

Обязательными являются только знак % и спецификатор типа. Основные спецификаторы типа приведены в таблице 1.

Таблица 1

Символ Тип аргумента; вид печати d, i int; десятичное целое число со знаком u unsigned int; беззнаковое десятичное целое c char, int; один символ f double; десятичная дробь, количество знаков после точки задается точностью (по умолчанию равно 6) e, E double; вещественное число в экспоненциальной форме записи, количество знаков после точки в мантиссе задается точностью (по умолчанию равно 6) g, G double; использует %e или %E, если порядок меньше, чем -4, или больше или равен точности; в противном случае использует %f. Завершающие нули и завершающая десятичная точка не печатаются В списке аргументов допускается использовать переменные, константы, выражения.

Функция форматного ввода

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

% ширина_поля_ввода спецификатор_типа

Обязательными являются только знак % (признак начала спецификации) и спецификатор типа. Основные спецификаторы типа приведены в таблице 2.

Таблица 2

Символ Тип вводимого данного d десятичное целое: int i целое: int. Целое может быть восьмеричным (с 0 слева) или шестнадцатеричным (с 0x или 0X слева) u беззнаковое десятичное целое: unsigned int c символы: char. Считывается любой символ, в том числе разделитель e, f, g число с плавающей точкой: float

В отличие от функции printf() аргументами для функции scanf() могут быть только адреса объектов программы, в частном случае - адреса ее переменных. Выражение для получения адреса переменной будет таким: &имя_переменной.

Задание 1.

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

#include

#include int main (void)

{ int a, b = 5, c;

double x, y = -.5, z;

printf("a=");

scanf("%d", &a);

x = c = a;

printf("x = c = a : a=%d c=%d x=%f\n",a, c, x);

a += b; printf("a += b : a=%d\n", a);

x *= b+a; printf("x *= b+a : x=%lf\n", x);

b += a--;

printf("b += a-- : a=%d b=%d\n", a, b);

x -= ++c; printf("x -= ++c : c=%d x=%lf\n", c, x);

c = a/b; printf("c = a/b : c=%4d\n",c);

c = a%b;

printf("c = a%%b : c=%d\n",c);

y += (a+1)/a++;

printf("y += (a+1)/a++ : a=%d y=%.3lf\ty=%.0lf\n",

a, y, y);

b = 3*(y-=.6)+ 2*b+1;

printf("b = 3*(y-=.6)+2*b+1 : b=%d y=%.1lf\n",

b, y);

z = a/2;

printf("z = a/2 : z = a/2 : z=%lf\n", z);

z = (double) a/2;

printf("z = (double)a/2 : z=%lf\n", z);

y = (x = 5.7)/2;

printf("y = (x = 5.7)/2 : x=%lf y=%lf\n", x, y);

y = (int) x/2;

printf("y = (int)x/2 : y=%f\n", y);

z = (b-3)/2 - x/5 +(c/=2) + 1/4*z - y++ + ++b/3.;

printf("z = (b-3)/2 - x/5 +(c/=2) + 1/4*z - y++ \

+ ++b/3. : \n\a=%d b=%d c=%d x=%lf y=%lf z=%lf\n",

a,b,c,x,y,z);

system ("pause");

return 0; } Задание 2.

Выражения, записанные в одной строке, записывать одним оператором-выражением. Переменные c и d объявить как целые, переменные a и b - как вещественные. Значения переменных b и d вводить с клавиатуры. После вычисления каждого выражения выводить на экран значения всех переменных.

Написать программу для вычисления следующих выражений:

a=5, c=5

a=a+b-2 c=c+1, d=c-a+d

a=a*c, c=c-1 a=a/10, c=c/2, b=b-1, d=d*(c+b+a)

Задание 3. Программирование арифметических выражений.

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

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

Вариант 1

Вариант 2

Вариант 3

Вариант 4

Вариант 5

Вариант 6

Вариант 7

Вариант 8

Вариант 9

Вариант 10

Вариант 11

Вариант 12

Вариант 13

Вариант 14

Z= Вариант 15

Вариант 16

Вариант 17

Вариант 18

Вариант 19

G=

Вариант 20

Вариант 21

Вариант 22

Вариант 23

Z= Вариант 24

Вариант 25

Вариант 26

G=

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

1. Какова структура программы на языке Си?

2. Зачем нужна директива #include?

3. Что такое main()?

4. Перечислите стандартные типы данных языка Си.

5. Что такое void?

6. Что такое явное и неявное приведение типов? Как и когда оно используется?

7. Как проинициализировать переменную?

8. Какие операции относятся к арифметическим операциям? Каков приоритет каждой из них?

9. Как выполняется операция деления в случае целочисленных операндов и в случае, когда хотя бы один из операндов вещественный?

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

11. Чем отличается префиксная форма операции инкремента или декремента от постфиксной?

12. Почему функции scanf() и printf() называются функциями форматного ввода и вывода? Как они работают?

13. Чем отличается форматная строка функции scanf() от форматной строки функции printf()?

14. Что может быть использовано в качестве аргументов в функции scanf()? Сколько их должно быть?

15. Что может быть использовано в качестве аргументов в функции printf()? Сколько их должно быть?

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

ВОЕНМЕХ

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

Тема:.....................................

Студент Иванов А. С.

Группа И - 000

Санкт-Петербург

2017 Условие задачи.

Дано натуральное число К. Определить сумму его делителей, включая 1 и само число.

Схема алгоритма

Листинг программы:

#include #include

int main (void) {

setlocale(LC_ALL,"Russian");

int k,s,i; printf ("Введи число k=");

scanf ("%d", &k);

do { printf ("Повторите ввод k=");

scanf ("%d", &k);

} while (k<=0);

if (k==1) s=1;

else { s=1+k;

for (i=2; i<=k/2; i++)

if (k%i==0)

s+=i; }

printf ("s=%d\n", s);

return 0;

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

К Сумма делителей Должно быть Получено 6 12 12 -10 Повторите ввод Повторите ввод 12 28 28

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

2

14

Показать полностью… https://vk.com/doc69801468_442775731
195 Кб, 1 марта 2017 в 19:45 - Россия, Москва, СИЮ, 2017 г., doc
Рекомендуемые документы в приложении