Используя только scanf ("% c", & s) ввести заданное действительное число - C (СИ)
Формулировка задачи:
Используя только символьный ввод, то есть функцию scanf ("% c", & s), где s - переменная типа char, ввести заданное действительное число, записанное по правилам языка С, и присвоить его действительной переменной х.
Поиском пользовалась, похожего ничего не нашла.
Если что, не судите строго).
Буду очень благодарна!
Решение задачи: «Используя только scanf ("% c", & s) ввести заданное действительное число»
textual
Листинг программы
#include <stdio.h>
#include <cstring>
int main(void)
{
double mc,md,pd=1,res;
int i=0,k=0,m,j,z1,z2;
char S[100],c;
scanf_s("%s",S);
mc=0.0;
md=0.0;
res=0.0;
while (S[i]!='.')
{
i++;
k++;
}
m=k;
for (i=0; i<k+1; i++)
{
c=S[i];
switch (c)
{
case '0':
z1 = 0;
mc=mc*10+z1;
break;
case '1':
z1 = 1;
mc=mc*10+z1;
break;
case '2':
z1 = 2;
mc=mc*10+z1;
break;
case '3':
z1 = 3;
mc=mc*10+z1;
break;
case '4':
z1 = 4;
mc=mc*10+z1;
break;
case '5':
z1 = 5;
mc=mc*10+z1;
break;
case '6':
z1 = 6;
mc=mc*10+z1;
break;
case '7':
z1 = 7;
mc=mc*10+z1;
break;
case '8':
z1 = 8;
mc=mc*10+z1;
break;
case '9':
z1 = 9;
mc=mc*10+z1;
break;
}
}
j=i;
while (S[i+1] != '\0')
{
i++;
}
int h=strlen(S);
for (j = m+1; j < h; j++)
{
c=S[j];
switch (c)
{
case '0':
z2=0;
md=md*10+z2;
pd=pd/10;
break;
case '1':
z2=1;
md=md*10+z2;
pd=pd/10;
break;
case '2':
z2=2;
md=md*10+z2;
pd=pd/10;
break;
case '3':
z2=3;
md=md*10+z2;
pd=pd/10;
break;
case '4':
z2=4;
md=md*10+z2;
pd=pd/10;
break;
case '5':
z2=5;
md=md*10+z2;
pd=pd/10;
break;
case '6':
z2=6;
md=md*10+z2;
pd=pd/10;
break;
case '7':
z2=7;
md=md*10+z2;
pd=pd/10;
break;
case '8':
z2=8;
md=md*10+z2;
pd=pd/10;
break;
case '9':
z2=9;
md=md*10+z2;
pd=pd/10;
break;
}
}
res=mc+md*pd;
printf("%f OK!\n",res);
return 0;
}
Объяснение кода листинга программы
В данном коде используется scanf_s для ввода строки (название переменной S).
Далее идет обработка этой строки.
Переменная i и k используются для отслеживания индексов в строке.
В начале цикла, пока не встретится точка, происходит ввод числовой части (переменная mc).
Затем идет ввод десятичной части (переменная md).
После этого происходит ввод и обработка каждой цифры десятичной части (переменная pd).
Цифра считывается, приводится к типу int и добавляется к соответствующей переменной (в зависимости от того, какая цифра была введена).
После обработки всех цифр десятичной части происходит вычисление и вывод результата.