[Язык C] Данные в языке Си (глава 3)


Третья глава в книжке Стивена Прата “C Primer Plus”.

Упражнения по программированию и их решения:

1. Экспериментальным путем выясните, как ваша система обрабатывает переполнение при выполнении операций над целыми числами и над числами с плавающей запятой, а также потерю значимости при выполнении операций над числами с плавающей запятой; т.е. напишите программу, в которой присутствуют такие проблемы. (Для получения сведений о наибольших и наименьших значениях просмотрите обсуждение limits.h и float.h в главе 4).

#include <stdio.h>
#include <limits.h>
#include <float.h>
int main(void)
{
printf("Max int value = %d\n", INT_MAX);
printf("Max float val = %e\n", FLT_MAX);
printf("Min float val = %e\n", FLT_MIN);
printf("Int overflow: %d + 1 = %d\n", INT_MAX, INT_MAX + 1);
printf("Float-point overflow: %e * 2 = %e\n", FLT_MAX, FLT_MAX * 2);
printf("Float-point underflow: %e / 2 = %e", FLT_MIN, FLT_MIN / 2);
getchar();
return 0;
}

2. Напишите программу, которая приглашает ввести некоторое значение в коде ANSI, например, 66, а затем выводит символ, которому соответствует введенный код.

#include <stdio.h>
int main(void)
{
char ascii;
printf("Enter ASCII code:\n");
scanf("%d", &ascii);
printf("ASCII code for %d is %c", ascii, ascii);
getchar();getchar();
return 0;
}

3. Напишите программу, которая выдает предупредительный звуковой сигнал, а затем выводит следующий текст:
Напуганная внезапным звуком, Вика вскрикнула:
«Во имя всех звезд, что это было!»

#include <stdio.h>
int main(void)
{
printf("\aScared by sudden sound, Vika yelled:\n");
printf("\"By the all stars, what was it!\"");
getchar();
return 0;
}

4. Напишите программу, которая считывает число с плавающей запятой и выводит его сначала в десятичном представлении, потом в экспоненциальном представлении и затем в двоично-экспоненциальном представлении, если система его поддерживает. Вывод должен быть представлен в следующем формате (фактическое количество отображаемых цифр показателя степени зависит от системы):
Введите значение с плавающей запятой: 64.25
Запись с фиксированной запятой: 64.250000
Экспоненциальная форма записи: 6.425000e+Ol
двоично-экспоненциальное представление: Oxl.Olp+6

#include <stdio.h>
int main(void)
{
float num1;
printf("Enter float value: ");
scanf("%f", &num1);
printf("Fixed-point: %f\n", num1);
printf("Exponential: %e\n", num1);
printf("P notation: %a\n", num1); // doesn't work in ANSI C
getchar();getchar();
return 0;
}

5. В году содержится примерно 3.156 х 107 секунд. Напишите программу, которая предлагает ввести возраст в годах, а затем выводит на экран эквивалентное значение в секундах.

#include <stdio.h>
int main(void)
{
int years, seconds;
printf("Your age:\n");
scanf("%d", &years);
seconds = years * 3.156e7;
printf("Your live already more than %d seconds", seconds);
getchar();getchar();
return 0;
}

6. Масса одной молекулы воды приблизительно составляет 3.0 х 10-23 грамм. Кварта воды весит примерно 950 грамм. Напишите программу, которая предлагает ввести значение объема воды в квартах и отображает количество молекул воды в этом объеме.

#include <stdio.h>
int main(void)
{
float quarts, grams, molecules;
printf("How much water do you drink daily (in quarts):\n");
scanf("%f", &quarts);
grams = quarts * 950;
molecules = grams / 3.0e-23;
printf("You consume daily %e water molecules", molecules);
getchar();getchar();
return 0;
}

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

#include <stdio.h>
int main(void)
{
float height_cm, height_inches;
float cm_to_inch = 2.54;
printf("Your height in cm:\n");
scanf("%f", &height_cm);
height_inches = height_cm / cm_to_inch;
printf("Your height in inches is %f", height_inches);
getchar();getchar();
return 0;
}

8. В американской системе единиц измерений объема пинта равна 2 чашкам, чашка — 8 унциям, унция — 2 столовым ложкам, а столовая ложка — 3 чайным ложкам. Напишите программу. которая предлагает ввести объем в чашках и отображает эквивалентные значения в пинтах, унциях, столовых ложках и чайных ложках. Почему для этой программы тип с плавающей запятой подходит больше, чем целочисленный?

#include <stdio.h>
int main(void)
{
float cups, pints, ounces, tablespoons, teaspoons;
printf("Enter number of cups:\n");
scanf("%f", &cups);
pints = cups / 2;
ounces = cups * 8;
tablespoons = ounces * 2;
teaspoons = tablespoons * 3;
printf("%.2f cups = %.2f pints\n", cups, pints);
printf("%.2f cups = %.2f ounces\n", cups, ounces);
printf("%.2f cups = %.2f tablespoons\n", cups, tablespoons);
printf("%.2f cups = %.2f teaspoons", cups, teaspoons);
getchar();getchar();
return 0;
}

Буду рад вашим комментариям!


Запись опубликована в рубрике С (Си). Добавьте в закладки постоянную ссылку.

3 комментария на «[Язык C] Данные в языке Си (глава 3)»

  1. Артем говорит:

    спасибо, друг!!!

  2. Николя говорит:

    Последняя задача решена неправильно. В 1 пинте содержится 2 чашки. Соответственно:
    pints = cups * 2;
    И во всех остальных вычислениях должны быть обратные операции(то есть деление, а не умножение)

    • Компьютерщик говорит:

      нет, у меня всё верно. ты сам поставь значение в свою формулу, например, если пользователь вводит 1 (чашку)… и увидишь что будет

Добавить комментарий

🇬🇧 Attention! Comments with URLs/email are not allowed.
🇷🇺 Комментарии со ссылками/email удаляются автоматически.