Ввести заданное действительное число, записанное по правилам языка и присвоить его действительной переменной - 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;
}
Объяснение кода листинга программы
- Ввод заданного действительного числа с помощью функции scanf.
- Переменные для хранения введенного числа и его отдельных частей: mc, md, pd, sg, psg, pdot, err.
- Массив символов S[30] для хранения введенной строки.
- Цикл for для обработки каждого символа в строке.
- Оператор switch для определения текущего символа и его значения.
- Оператор break для выхода из цикла switch при обнаружении ошибки.
- Условные операторы if для проверки наличия ошибок и выхода из цикла при обнаружении ошибки.
- Вычисление окончательного результата с помощью формулы (double)sg (mc+mdpd).
- Вывод результата на экран с помощью функции printf.
- Возврат значения 0 для успешного выполнения программы.