|
||||||||||||||||||||||||||||||||||||||||||||||||||
Вывод:Предположительно стоят нули, из-за того, что не заменены intи float
Балтийский государственный технический университет «ВОЕНМЕХ» им. Д. Ф. Устинова Кафедра И5 «Информационные системы и программная инженерия» Практическая работа №1 Выполнил: Преподаватель: Санкт-Петербург
пользовать переменные различных типов, освоить функции фор- матного ввода и вывода, арифметические операции и операции присваивания. Задание 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; }. Результаты работы программ: до изменения после изменения
Таблица тестирования без измененных спецификаторов:
Вывод:поменялись только сам код и и скорость загрузки консоли. Второй измененный код, где я поменял спецификаторы типов: #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; } Результаты работы программы:
Таблица тестирования с измененными спецификаторами:
Вывод:Предположительно стоят нули, из-за того, что не заменены 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; } Результаты работы программы: Таблица тестирования:
Вывод:от ожидаемого результата разница только в том, что появились цифры после ноля, что означает, что результаты стали точнее.
Задание 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); } Результаты работы программы: Таблица тестирования:
Вывод:Программа работает нормально
|
||||||||||||||||||||||||||||||||||||||||||||||||||
|