Ввести заданное действительное число, записанное по правилам языка и присвоить его действительной переменной - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Используя только символьный ввод, то есть функцию scanf ("% c", & s), где s - переменная типа char, ввести заданное действительное число, записанное по правилам языка С, и присвоить его действительной переменной х.

Решение задачи: «Ввести заданное действительное число, записанное по правилам языка и присвоить его действительной переменной»

textual
Листинг программы
#include <stdio.h>
 
int main(int argc, char* argv[])
{
    double mc,md,pd,res;
    int    p,i,sg,psg,pdot,err;
    char   c;
    char   S[30];
 
    for (i=0; i<30; i++) S[i]=0;
 
    scanf("%s",S);
 
    mc=0.0;
    md=0.0;
    sg=1;
    pd=1;
    psg=0;
    pdot=0;
    err=0;
 
    for (i=0; i<30; i++)
    {
        c=S[i];
 
        switch (c)
        {
        case 0:
            break;
        case '-' :
            if (psg |= 0) 
            {
                printf("Signum duplicate!\n");
                err=1;
                break;
            }
            psg=1;
            sg=-1;
            break;
        case '+' :
            if (psg |= 0) 
            {
                printf("Signum duplicate!\n");
                err=1;
                break;
            }
            psg=1;
            sg=1;
            break;
        case '.' :
            if (pdot |= 0)
            {
                printf("Dot duplicate!\n");
                err=2;
                break;
            }
            pdot=1;
            break;
        case '0':
        case '1':
        case '2':
        case '3':
        case '4':
        case '5':
        case '6':
        case '7':
        case '8':
        case '9':
            if (pdot == 0)
                mc=mc*10+(double)(c-'0');
            else
            {
                md=md*10+(double)(c-'0');
                pd=pd/10;
            }
            break;
        default:
                printf("Bad symbol %d !\n",c);
                err=3;
                break;
        }
        if (err |= 0) break;
        
    }
 
    if (err == 0)
    {
        res=(double)sg * (mc+md*pd);
        printf("%f OK!\n",res);
    }
    else
        printf("Error!\n");
    return 0;
}

Объяснение кода листинга программы

  1. Ввод заданного действительного числа с помощью функции scanf.
  2. Переменные для хранения введенного числа и его отдельных частей: mc, md, pd, sg, psg, pdot, err.
  3. Массив символов S[30] для хранения введенной строки.
  4. Цикл for для обработки каждого символа в строке.
  5. Оператор switch для определения текущего символа и его значения.
  6. Оператор break для выхода из цикла switch при обнаружении ошибки.
  7. Условные операторы if для проверки наличия ошибок и выхода из цикла при обнаружении ошибки.
  8. Вычисление окончательного результата с помощью формулы (double)sg (mc+mdpd).
  9. Вывод результата на экран с помощью функции printf.
  10. Возврат значения 0 для успешного выполнения программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.3 из 5
Похожие ответы