From 03287ab627b36d1a542431beabced56d6ea3802c Mon Sep 17 00:00:00 2001 From: tmeissner Date: Mon, 2 Nov 2015 00:09:24 +0100 Subject: [PATCH] Add remeainig prog examples of chapter 05 --- c_primer_plus/chapter05/05.c | 47 ++++++++++++++++++++++++++++++ c_primer_plus/chapter05/06.c | 47 ++++++++++++++++++++++++++++++ c_primer_plus/chapter05/07.c | 50 ++++++++++++++++++++++++++++++++ c_primer_plus/chapter05/08.c | 46 ++++++++++++++++++++++++++++++ c_primer_plus/chapter05/09.c | 55 ++++++++++++++++++++++++++++++++++++ 5 files changed, 245 insertions(+) create mode 100644 c_primer_plus/chapter05/05.c create mode 100644 c_primer_plus/chapter05/06.c create mode 100644 c_primer_plus/chapter05/07.c create mode 100644 c_primer_plus/chapter05/08.c create mode 100644 c_primer_plus/chapter05/09.c diff --git a/c_primer_plus/chapter05/05.c b/c_primer_plus/chapter05/05.c new file mode 100644 index 0000000..a394144 --- /dev/null +++ b/c_primer_plus/chapter05/05.c @@ -0,0 +1,47 @@ +#include +#include + + + +int getNumber(void); + + +int main(void) { + + int count = 0; + int sum = 0; + int end = getNumber(); + + if (end >= 0) { + + while (count++ < end) { + if ((INT_MAX - sum) < count) { + printf("Integer overflow\n"); + return 1; + } else { + sum = sum + count; + } + } + + printf("sum = %d\n", sum); + + } + + return 0; + +} + + +int getNumber(void) { + + int number; + + printf("How far should we add: "); + + if (!scanf("%d", &number) || number < 0) { + number = -1; + } + + return number; + +} diff --git a/c_primer_plus/chapter05/06.c b/c_primer_plus/chapter05/06.c new file mode 100644 index 0000000..4e36dcd --- /dev/null +++ b/c_primer_plus/chapter05/06.c @@ -0,0 +1,47 @@ +#include +#include + + + +int getNumber(void); + + +int main(void) { + + int count = 0; + int sum = 0; + int end = getNumber(); + + if (end >= 0) { + + while (count++ < end) { + if (INT_MAX / count < count || (INT_MAX - sum) < count * count) { + printf("Integer overflow\n"); + return 1; + } else { + sum = sum + count * count; + } + } + + printf("sum = %d\n", sum); + + } + + return 0; + +} + + +int getNumber(void) { + + int number; + + printf("How far should we add: "); + + if (!scanf("%d", &number) || number < 0) { + number = -1; + } + + return number; + +} diff --git a/c_primer_plus/chapter05/07.c b/c_primer_plus/chapter05/07.c new file mode 100644 index 0000000..d2ee9d3 --- /dev/null +++ b/c_primer_plus/chapter05/07.c @@ -0,0 +1,50 @@ +#include +#include +#include + + + +double cubeNumber(double number); + + +int main (void) { + + double number; + double cube_number; + int error = 0; + + printf("Give a number: "); + + if (scanf("%lf", &number) != 1 || isnan(number)) { + printf("Not a number!\n"); + error = 1; + } else { + cube_number = cubeNumber(number); + if (cube_number != NAN) { + printf("%lf\n", cube_number); + } else { + printf("Floating point exception occured!\n"); + error = 1; + } + } + + return error; + +} + + +double cubeNumber (double number) { + + double i; + + feclearexcept(FE_ALL_EXCEPT); + + i = pow(number, 3); + + if (fetestexcept(FE_ALL_EXCEPT) == 0) { + i = NAN; + } + + return i; + +} diff --git a/c_primer_plus/chapter05/08.c b/c_primer_plus/chapter05/08.c new file mode 100644 index 0000000..89cfd32 --- /dev/null +++ b/c_primer_plus/chapter05/08.c @@ -0,0 +1,46 @@ +#include +#include +#include + + + +int getNumber(char * s, bool *error); + + +int main(void) { + + int first_operand; + int second_operand; + bool first_error; + bool second_error; + + printf("This program computes moduli.\n"); + + second_operand = getNumber("Enter an integer to serve as the second operand: ", &second_error); + first_operand = getNumber("Now enter the first operand: ", &first_error); + + do { + printf("%d %% %d is %d\n", first_operand, second_operand, first_operand % second_operand); + first_operand = getNumber("Now enter the first operand (<= 0 to quit): ", &first_error); + } while (!first_error && !second_error); + + return 0; + +} + + +int getNumber(char * s, bool *error) { + + int number; + + *error = false; + + printf("%s", s); + + if (!scanf("%d", &number) || number < 0) { + *error = true; + } + + return number; + +} diff --git a/c_primer_plus/chapter05/09.c b/c_primer_plus/chapter05/09.c new file mode 100644 index 0000000..a47f1a7 --- /dev/null +++ b/c_primer_plus/chapter05/09.c @@ -0,0 +1,55 @@ +#include +#include +#include +#include + + + +double getNumber(char * s); +void calcTemperatures(double fahrenheit); + + +int main(void) { + + double fahrenheit; + + printf("This program calculates Celsius & Kelvin from Fahrenheit.\n"); + fahrenheit = getNumber("Now enter the temp in Fahrenheit: "); + + while (!isnan(fahrenheit)) { + calcTemperatures(fahrenheit); + fahrenheit = getNumber("Now enter the first operand (q to quit): "); + }; + + return 0; + +} + + +double getNumber(char * s) { + + double number; + + printf("%s", s); + + if (!scanf("%lf", &number) || isnan(number)) { + number = NAN; + } + + return number; + +} + + +void calcTemperatures(double fahrenheit) { + + const float celsius_div = 5.0 / 9.0; + const float celsius_offset = 32.0; + const float kelvin_offset = 273.16; + + const double celsius = celsius_div *(fahrenheit - celsius_offset); + const double kelvin = celsius + kelvin_offset; + + printf("%.2lf Fahrenheit are %.2lf Celsius or %.2lf Kelvin.\n", fahrenheit, celsius, kelvin); + +}