Írjunk programot,mely beolvas egy egész számot.Cseréljük fel a szám utolsó két számjegyét,majd írassuk ki az így kapott számot. Van egy rész megoldásom az mennyire helyes? Miért nem adja ki ha be írom az 123 at132re
csak 6 os számot ír ki valamit ki felejtettem mutatom .
Itt egy példa amit kí kéne írjon :Pl:ha a szám 123, az új szám 132.
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a, b, c;
printf("a = "); scanf("%d", &a);
if(a > 999)
printf("a tobb mint 3 szamjegyu.\n");
else
printf("%d", a%10 + (a/10)%10 + (a/100)%10);
return 0;
}
Lássuk:
a = 123
a % 10 = 3
(a / 10) % 10 = 12 % 10 = 2
(a / 100) % 10 = 1 % 10 = 1
Ennek megfelelően:
a%10 + (a/10)%10 + (a/100)%10) = 3 + 2 + 1 = 6
...vagyis a program pontosan a műveletek által meghatározott eredményt adja, tehát biztos, hogy a módszerrel probléma van. Mindjárt megpróbálok hasonlókból valami működőképeset összerakni.
Itt az én próbálkozásom:
#include <stdio.h>
int main()
{
int a, b, c;
printf("a = ");
scanf("%d", &a);
if(a > -100 && a < 100)
printf("Kevesebb, mint 3 szamjegyu!\n");
else
{
b = a % 10 * 10;
a /= 10;
c = a % 10;
a /= 10;
a *= 100;
printf("%d", a + b + c);
}
return 0;
}
Megjegyzés: Nem egészen értem, hogy a programodban miért zártad ki a 3-nál több számjegyű számokat, amikor a feladat ezt nem tartalmazza. Gondot inkább a kettőnél kevesebb számjegy okoz, mivel ott nincs mit megcserélni. Azonban ez is okozna, ha nem is hibát, de egy kis értelmezési billegést, ezért a magam változatában megtartottam a három számjegyes határt, csak éppen fordítva, hogy legalább annyinak meg kell lennie. Valójában a túl nagy, az int adatméretén túlcsorduló szám is okozhat hibás működést, ennek a kiküszöbölésével most nem bonyolítottam a programot.
„egy kis értelmezési billegést”
Ezt talán illendő megmagyaráznom... Tételezzük fel, hogy a kétjegyű szám 0-ra végződik, legyen mondjuk 30. A számjegyek megcserélése után 03 lesz, ebből a program nem írja ki a felvezető nullát, ami az egyik (logikusabb) értelmezés szerint teljesen rendben is van, mivel a szám értékére vagyunk kíváncsiak. A másik (korlátoltabb) megközelítés értelmében viszont a beírt két számjegyet akarod látni a képernyőn, csak éppen fordított sorrendben. A felvezető nulla kiíratása a feladattól független, ügyefogyott vizsgálatot igényelne, amin még csavarintana egyet, ha mínusz számról volna szó. Ezért tartottam egyszerűbbnek simán kizárni a kétjegyű számokat is.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!