Хелпикс

Главная

Контакты

Случайная статья





Вывод:Предположительно стоят нули, из-за того, что не заменены intи float



 

Балтийский государственный технический университет «ВОЕНМЕХ» им. Д. Ф. Устинова

Кафедра И5 «Информационные системы и программная инженерия»

Практическая работа №1
по дисциплине «Информатика: Основы программирования»на тему «Структура программы, основные типы данных, ввод/вывод»

Выполнил:
Студент: Беляков В.С
Группа: И402С

Преподаватель:
Бондарев Е.С
Малых Г.О

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



Цель работы –
изучить структуру программы, научиться ис-

пользовать переменные различных типов, освоить функции фор-

матного ввода и вывода, арифметические операции и операции

присваивания.

Задание 1.

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

Текст измененной программы:

Первый измененный код, где я не менял спецификаторы типов:

#include <stdio.h>

#include <stdlib.h>

 

int main (void)

{

int a, b = 5, c;

float x, y = -.5, z, g, h, j, q, w; // Ввёл дополнителные переменные, чтобы было легче разделять на блок-схемы

printf("a=");

scanf("%d", &a);

x = c;

c = a;

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

a = a + b;

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

x = x + b+a;

printf("x=%f\n", x);

b = b + a--;

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

c = c + 1;

x = x - c;

printf("x=%f\n",x);

c = a/b;

printf("c=%4d\n",c);

c = a%b;

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

x = 5.3;

 x = x-1;

 g = x - 1;

 g = g/x;

 y = y + g;

 x = x + 1;

 // y += ((--x-1)/x++)

printf("x = %f\ty = %.2f\n\n x = %.0f\ty = %.0f\n ", x - 1, y, x, y - 1);

z = a/2;

printf(" z = %f\n", z);

z = (float) a/2;

printf(" z = %f\n", z);

y = x/2;

printf(" y = %f\n", y);

y = (int)x/2;

printf(" y = %f\n", y);

 b = b + 1;

 g = x + b;

 h = x - y;

 j = a - 1;

 q = a%2;

 g = g/c;

 h = h/j;

 w = (1/4)*a;

 q = q - g;

 q = q + h;

 q = q + w;

 q = q - y;

 q = q + b;

 z = q;

 y = y + 1; // z = a%2 - (x+b)/c + (x-y)/(a-1) + 1/4*a - y++ + ++b/3. изначально в месте, где было 5 плюсов они стояли слитно, из-за чего выдавало ошибки, и поэтому я разделил их пробелом

printf("a = %d b = %d c = %d x = %f y = %f z = %f\n", a, b, c, x, y, z);

return 0;

}.

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

до изменения

после изменения

 

Таблица тестирования без измененных спецификаторов:

Входные данные Ожидаемый результат Результат работы программы
a=12 a=16 b=23 x=5.3 y=3.0 z=19.451250 a=16 b=23 x=5.3 y=3.0 z=19.451250
a=78515 a=78519 b=78526 c=78519 x=5.300000 y=3.000000 z= 78524.000000 a=78519 b=78526 c=78519 x=5.300000 y=3.000000 z=78524.000000
a=1 a=5 b=12 c=5 x=5.300000 y=3.000000 z=8.365000 a=5 b=12 c=5 x=5.300000 y=3.000000 z=8.365000

 

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

Второй измененный код, где я поменял спецификаторы типов:

#include <stdio.h>

#include <stdlib.h>

 

int main (void)

{

int a, b = 5.0, c;

float x, y = -.5, z, g, h, j, q, w; // Ввёл дополнителные переменные, чтобы было легче разделять на блок-схемы

printf("a="); // по заданию было сказно поменять спецификаторы типов, поэтому я заменил все %d на %f, а %f на %lf

scanf("%f", &a);

x = c;

c = a;

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

a = a + b;

printf("a=%f\n", a);

x = x + b+a;

printf("x=%lf\n", x);

b = b + a--;

printf("b=%f\n", b);

c = c + 1;

x = x - c;

printf("x=%lf\n",x);

c = a/b;

printf("c=%4f\n",c);

c = ((int)a)%((int)b);

printf("c=%f\n",c);

x = 5.3;

 x = x-1;

 g = x - 1;

 g = g/x;

 y = y + g;

 x = x + 1;

 // y += ((--x-1)/x++)

printf("x = %lf\ty = %.2lf\n\n x = %.0lf\ty = %.0lf\n ", x - 1, y, x, y - 1);

z = a/2;

printf(" z = %lf\n", z);

z = (float) a/2;

printf(" z = %lf\n", z);

y = x/2;

printf(" y = %lf\n", y);

y = (int)x/2;

printf(" y = %lf\n", y);

 b = b + 1;

 g = x + b;

 h = x - y;

 j = a - 1;

 q = ((int)a)%2;

 g = g/c;

 h = h/j;

 w = (1/4)*a;

 q = q - g;

 q = q + h;

 q = q + w;

 q = q - y;

 q = q + b;

 z = q;

 y = y + 1; // z = a%2 - (x+b)/c + (x-y)/(a-1) + 1/4*a - y++ + ++b/3. изначально в месте, где было 5 плюсов они стояли слитно, из-за чего выдавало ошибки, и поэтому я разделил их пробелом

printf("a = %f b = %f c = %f x = %lf y = %lf z = %lf\n", a, b, c, x, y, z);

return 0;

}

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

 Таблица тестирования с измененными спецификаторами:

Входные данные Ожидаемый результат Результат работы программы
a=12 a=16 b=23 x=5.3 y=3.0 z=19.451250 a = 0.000000 b = 0.000000 c = 0.000000 x = 5.300000 y = 3.000000 z = 1094713344.000000
a=78515 a=78519 b=78526 c=78519 x=5.300000 y=3.000000 z= 78524.000000 a = 0.000000 b = 0.000000 c = 0.000000 x = 5.300000 y = 3.000000 z = 1201232256.000000
a=123.456   a = 0.000000 b = 0.000000 c = 0.000000 x = 5.300000 y = 3.000000 z = 1123477888.000000

 

Вывод:Предположительно стоят нули, из-за того, что не заменены intи float

Третий измененный код, где я поменял ВСЕ спецификаторы типов:

#include <stdio.h>

#include <stdlib.h>

 

int main (void)

{

float a, b = 5.0, c; // Поменял их тоже

double x, y = -.5, z, g, h, j, q, w; // Ввёл дополнителные переменные, чтобы было легче разделять на блок-схемы

printf("a="); // по заданию было сказно поменять спецификаторы типов, поэтому я заменил все %d на %f, а %f на %lf

scanf("%f", &a);

x = c;

c = a;

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

a = a + b;

printf("a=%f\n", a);

x = x + b+a;

printf("x=%lf\n", x);

b = b + a--;

printf("b=%f\n", b);

c = c + 1;

x = x - c;

printf("x=%lf\n",x);

c = a/b;

printf("c=%4f\n",c);

c = ((int)a)%((int)b); // Все отдельные деления с остатком пришлось использовать int

printf("c=%f\n",c);

x = 5.3;

 x = x-1;

 g = x - 1;

 g = g/x;

 y = y + g;

 x = x + 1;

 // y += ((--x-1)/x++)

printf("x = %lf\ty = %.2lf\n\n x = %.0lf\ty = %.0lf\n ", x - 1, y, x, y - 1);

z = a/2;

printf(" z = %lf\n", z);

z = (float) a/2;

printf(" z = %lf\n", z);

y = x/2;

printf(" y = %lf\n", y);

y = (double)x/2;

printf(" y = %lf\n", y);

 b = b + 1;

 g = x + b;

 h = x - y;

 j = a - 1;

 q = ((int)a)%2;

 g = g/c;

 h = h/j;

 w = (1/4)*a;

 q = q - g;

 q = q + h;

 q = q + w;

 q = q - y;

 q = q + b;

 z = q;

 y = y + 1; // z = a%2 - (x+b)/c + (x-y)/(a-1) + 1/4*a - y++ + ++b/3. изначально в месте, где было 5 плюсов они стояли слитно, из-за чего выдавало ошибки, и поэтому я разделил их пробелом

printf("a = %f b = %f c = %f x = %lf y = %lf z = %lf\n", a, b, c, x, y, z);

return 0;

}

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

Таблица тестирования:

Входные данные Ожидаемый результат Результат работы программы
a=12 a=16 b=23 x=5.3 y=3.0 z=19.451250 a = 16.000000 b = 23.000000 c = 16.000000 x = 5.300000 y = 3.650000 z = 18.757917
a=78515 a=78519 b=78526 c=78519 x=5.300000 y=3.000000 z= 78524.000000 a=78519.000000 b=78526.000000 c = 78519.000000 x = 5.300000 y=3.650000 z=78523.349877
a=123.456   a = 127.455994 b = 134.455994 c=127.000000 x = 5.300000 y=3.650000 z = 131.726509

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

 

Задание 2.

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

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)

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

Текст программы:

#include <stdio.h>

#include <stdlib.h>

 

int main()

{

int c, d;

float a, b;

printf("b=");

scanf("%f", &b);

printf("d=");

scanf("%d", &d);

 a = c = 5; //a=5, c=5

 printf ("a= %f\n", a);

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

a = a + b - 2; //a=a+b-2

printf ("a= %f\n", a);

 d += ++c - a; //c=c+1, d=c-a+d

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

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

a *= c--; //a=a*c, c=c-1

printf ("a= %f\n", a);

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

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

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

 printf ("a= %f\n", a);

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

 printf ("b= %f\n", b);

}

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

Таблица тестирования:

Входные данные Ожидаемый результат Результат работы программы
b=12 d=21 d= 264 a= 9.000000 c= 2 b= 11.000000 d= 264 a= 9.000000 c= 2 b= 11.000000
b=123 d=456 d= 67065 a= 75.599998 c= 2 b= 122.000000 d= 67065 a= 75.599998 c= 2 b= 122.000000
b=56.78 d=0 d= -4963 a= 35.868000 c= 2 b= 55.779999 d= -4963 a= 35.868000 c= 2 b= 55.779999

Вывод:Программа работает нормально



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.