2012-11-10 2 views

Répondre

1

D'abord, vous devez déterminer dans quel ordre les opérations sont évaluées. Utilisez la colonne associativité de this table pour obtenir de l'aide. Ensuite, comprendre quelle est la valeur de k > i. Utilisez printf pour l'essayer. Enfin, calculez la valeur de la dernière expression et exécutez le programme pour voir si votre réponse est correcte.

+0

Merci la table aide beaucoup! – udjat

1

k > i < j est une expression, et elle sera évaluée complètement avant que printf ne soit appelée; tout printf verra est le résultat de l'évaluation. Quant à ce qu'il évalue, les opérateurs sont simplement évalués individuellement de droite à gauche; si k > i sera évalué en premier, suivi par le résultat de celui appliqué à < avec j sur le côté droit. Notez que cela pourrait aller différemment si nous avions d'autres opérateurs que < et >; ceux-ci ont le même niveau de préséance, de sorte qu'ils sont toujours évalués de gauche à droite. Si, d'autre part, nous avions k + i * j, i * j serait évalué en premier. C'est parce que * a une priorité supérieure à +.

+1

Donc je peux supposer qu'il renvoie 0 ou 1 parce que c'est juste une évaluation vrai/faux? – udjat

+0

@ChuhanFrankQin, Oui, les deux '' <' and '> retour toujours soit 0 ou 1, car ils sont des opérateurs booléens. – jrajav

+0

Merci beaucoup! Je réalise maintenant à quel point ma question était stupide .. – udjat

2

Espérons qu'il imprimerait rien du tout, comme quelque chose aussi confus que cela devrait être illégal. Cependant, si nous devons absolument le faire:

k > i < j serait divisé en deux parties: k > i, puis le résultat de cela est comparé à j. Le résultat d'une comparaison comme ceci est 1 si true ou 0 si false. Puisque k > i est false, nous obtenons 0; puis 0 < j est true donc nous obtenons 1. Par conséquent, cela va imprimer 1.