Pouvez-vous me dire pourquoi la sortie de ce programme est C'était ma question d'examen. P> abbbcde code>? #include <stdio.h>
int main (void)
{
int i;
for (i = 0; i < 2; i++)
{
printf ("A");
for (; i < 3; i++)
printf ("B");
printf ("C");
for (; i < 4; i++)
printf ("D");
printf ("E");
}
return 0;
}
3 Réponses :
int
main (void)
{
int i;
for (i = 0; i < 2; i++)
{
printf ("A"); // prints once
for (; i < 3; i++)
{
printf ("B"); // i = 0 at beginning, and loops until i = 2 => 3 times
}
printf ("C"); // prints once
for (; i < 4; i++)
{
printf ("D"); // i = 3 at beginning, so it prints once
}
printf ("E"); // prints once
} // next loop, i is already 4, which is more than 2, so first loop stops
return 0;
}
Si vous indentez le code correctement, cela vous aidera à comprendre ce qui se passe:
#include <stdio.h>
int main(void)
{
int i;
for (i = 0; i < 2; i++)
{
printf("A"); // prints A 1 time, i is still 0
for (; i < 3; i++) // prints B 3 times, i will now be 3, the cycle ends
printf("B");
printf("C"); // prints C 1 time, this is not in any inner loop
for (; i < 4; i++) // prints D once, as i is 3, the cycle only runs once
printf("D");
printf("E"); // again prints E once
} // as i is 4 the cycle will end, the condition is i < 2
return 0;
}
Parce que vous avez une boucle pour que vous vérifiez si je suis moins de trois. Il commence à zéro, zéro est inférieur à trois de sorte qu'il imprime B une fois, il en ajoute un à I et je l'en devient un, qui est toujours inférieur à trois, il imprime un autre B. puis il annonce un à moi , qui est toujours inférieur à zéro, ce qui la fait imprimer B une troisième fois. Ensuite, cela en ajoute un autre à I, ce qui en fait trois, ce qui n'est pas inférieur à trois, donc il continue le programme en tapant c. P>
Parler de manière informelle, sans bretelles, le corps du
pour code> boucle est la ligne suivanteCela me semble évident, il est donc difficile de l'expliquer. Il serait plus facile d'expliquer où vous vous trompez si vous avez dit ce que vous B> pensait que la production devrait être.
Écrivez
i = 0 code> sur un morceau de papier. Ensuite, passez par la ligne de code par ligne, en ajoutant les caractères et mettez à jour la valeur que vous avez écrite chaque fois quei code> est incrémenté.Adam a édité mon code, merci. Ce code a du sens maintenant.
@Turuudo: Bien que cela change quelque peu la question. Pourquoi ne pas modifier la question à
int main () {printf ("abbbcde");} code>?@Adam j'ai retourné votre édition. Vous ne devriez pas "expliquer" le code en modifiant la question.
@Bathsheba - Dites-vous que la réponse acceptée sur le lien que vous avez fourni est incorrecte?
@Melebius - C'est le seul moyen d'expliquer le code et les résultats qu'il obtiendra.
@Adam Non, vous devriez écrire une réponse pour expliquer le code. Ne pas rendre la question non pertinente en le modifiant.
@songyuanyao: Dans ce cas, je pense que je vais raccrocher mes outils pour la journée et dirigez-vous pour un beau déjeuner long. J'ai appris quelque chose de nouveau aujourd'hui. Drôle j'avais ceci dans ma tête que
int principal (void) code> était valide c mais non valide c ++Je vais nettoyer certains de mes commentaires.
@Bathsheba pour que tu les penses le contraire. Heureux de savoir que je ne manque pas quelque chose. :)
@Adam J'ai initialement affiché une réponse en réponse à votre version modifiée de la question, qui, dans Retrospect, n'a pas eu de sens donné ce qu'ils avaient demandé à l'origine. C'était une perte de temps de mon temps. La bonne façon de répondre à la question de quelqu'un est de poster une réponse.
@songyuanyao: Ce que je dois faire, c'est de relire Stroustrup Methinks.
Ceci est uniquement Code de langue C. J'ai ajouté C ++ Hash Cause je pensais que ma question recevrait plus de popularité.
@Thomassablik C ++ fournit à la fois
stdio.h code> etcstdio code>. Y comprisstdio.h code> vous donneprintf code> dans l'espace de noms global tandis quecstdio code> vous donneprintf code> dans leSTD CODE> Espace de noms (et la mise en œuvre est définie s'il le traite également dans l'espace de noms global). Il est donc techniquement valide C ++. Cela dit, c'est certainement aussi valable C et je suis d'accord, il était probablement ciblé C.@Turuudo Veuillez ne pas utiliser de balises non liées, surtout de ne pas recevoir plus de popularité - il s'agit d'une mauvaise utilisation! Les balises sont utilisées pour spécifier la question de la question. Si vous utilisez la balise C ++ pour une question C, vous pouvez obtenir une réponse C ++ qui ne fonctionnera pas dans C.
@Melebius d'accord, je garderai ça à l'esprit.