Hogy állapítsam meg hogy a szám páros, vagy páratlan? (c-ben)
Egy programot készítem.A lényege, ha páros az user által beírt szám kivon egyet.Ha páratlan hozzáad 1-et.
A problémám hogy nem tudom hogyan kell megkülönböztetni a páratlan és páros számokat.
Ezt műveltem eddig :
#include <stdio.h>
#include <stdlib.h>
int main() {
int a ;
printf("adj meg 1 szamot");
scanf("%d", &a);
if (a% 2);
{
printf("Az eredmeny %d \n.",a-1);
}
if(a% 1);
{
printf("Az eredmeny %d.",a+1);
}
system("pause");
return 0;
}
} de annyit csinál a program hogy a beírt számhoz hozzáad, egyet leírja az eredményt majd kivon egyet és azt is leírja. tudnátok segíteni ?
A #1-ben írt kódot így kell használni:
//...
printf("adj meg 1 szamot");
scanf("%d", &a);
printf("Az eredmeny %d.", a + a%2*2 - 1);
//...
%, azaz modulus számítás elég lassú művelet. Ha páros számokról van szó én ajánlom az 1-el való bináris és-elést, ami igazzal tér vissza, ha a szám páratlan és sokkal gyorsabb, kevésbé memória igényes művelet :)
if (a & 1)
{
/*a is odd*/
}
else
{
/*a is even*/
}
Ad2:
Ha egy elágazást kell csinálni, ami két állapotú érdemes az if_else -et használni a kettős if helyett, mert 1: ez is gyorsítja a programot, 2: a feltétel vagy igaz, vagy nem, így olvashatóbb is a kód. Persze van, ahol a feltételnek több állapota is van, olyankor tényleg használható a több egymás utáni if, csak akkor vigyázni kell, hogy a feltétel maga ne változhasson meg ellenőrzések kötött, ha azt az ellenőrzés nem követeli meg.
1. Ezt bőven kioptimalizálja a fordító, ugyanaz az assembly lesz belőle. Nem ezen érdemes spórolni, viszont az elvet sokkal szebben jelöli, hogy hogy vizsgálunk oszthatóságot. Olvashatóbb program.
2. A & nem igazságértékkel "tér vissza" (igazából nem tér vissza semmivel, mert nem függvény, legalábbis intek között), hanem számmal.
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!