C-s feladat ereménye h jott ki?
Adott egy feladat,ird ki a végeredményt:
#include <stdio.h>
#include <conio.h>
#include <string.h>
int main(void)
{
int a= ?, b = ?;
if (a == b || ++a == 2)
printf("T: a=%i, b=%i", a, b);
else
printf("F: a=%i, b=%i", a, b);
}
a köv adatokkal:
a=0, b=0:________________T a.0 b.0
a=0, b=1:________________F a.1 b.1
a=1, b=0:________________T a.2 b.0
a=1, b=1:________________T a.1 b.1
szóval a kérdésem,úgy folyik le a ciklus,
ha A egyenlo B vel akkor igaz /T ág meg végbe/ és a másik fele a feltetelnek ++a==2 nem folyik le. ?!?
ha A es B nem egyenlo akkor megnoveli az A egyel ha egyenlo 2 vel T ag folyik le ha nem akkor viszont az F ??
Annyi ha lényeg, hogy C-ben rövidzárasak az operátorok.
A vagynak van két operandusa, vagy hívjuk bal és jobb oldalnak. Ha az elsőből már egyértelműen kiderül a kifejezés értéke, azaz igaz lesz, akkor a vagy másik oldalát nem fogja kiértékelni. Ha viszont az első operandus hamis, akkor kiértékeli a másikat is.
Ezt pedig értékvizsgálatnak hívják :) Kicsit nézz utána, mi a program, ciklus, utasítás, értékvizsgálat, kiértékelés.
&& logikai operátornál sem feltétlenül végzi el mindkét vizsgálatot, csak ha szükséges, tehát:
if(a && b)... esetén ha 'a' hamis, akkor a b értékét nem vizsgálja, ha pedig 'a' igaz, akkor a 'b'-t is vizsgálja.
#include <stdio.h>
#include <string.h>
int f(int n);
main(){
int a = 3;
printf("%d \n",f(a));
}
int f(int n){
if(n==0)
return 0;
else
return (2 + 3 * f(n-1));
}
az eredmény 26
::::::::::::::::::::::::::::::::::
2 + 3*(2) = 8
2 + 3*(1) = 5
de ez igy nem jo :|
3-ra hívod meg:
1. 2 + 3 * f(3-1) -- (2 + 3 * 8) == 26
2. 2 + 3 * f(3-2) --> (2 + 3 * 2) == 8
3. 2 + 3 * f(3-3) --> (2 + 3 * 0) == 2
4. return 0
A fv. jól működik, csak éppen nem faktoriálist számol, ha ez a célod. Ha nem kitétel a feladatban, hogy rekurziót használj, akkor oldd meg ciklussal.
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!