Maison  >  Article  >  développement back-end  >  Une boucle for exécute-t-elle d'abord l'instruction du corps de la boucle, puis évalue-t-elle l'expression ?

Une boucle for exécute-t-elle d'abord l'instruction du corps de la boucle, puis évalue-t-elle l'expression ?

青灯夜游
青灯夜游original
2020-07-23 14:53:4525388parcourir

Non, la boucle for juge d'abord l'expression puis exécute l'instruction du corps de la boucle. La forme générale est "for (expression 1; expression 2; expression 3) {loop body}" ; exécutez d'abord "expression 1" puis exécutez "expression 2", si sa valeur est vraie (non-0), puis exécutez le corps de la boucle, sinon terminez la boucle ; exécutez "expression 3" après avoir exécuté le corps de la boucle.

Une boucle for exécute-t-elle d'abord l'instruction du corps de la boucle, puis évalue-t-elle l'expression ?

La forme générale d'une boucle for est :

for(表达式1; 表达式2; 表达式3){
    语句块
}

Son processus d'exécution est :

1) Exécutez d'abord "Expression 1".

2) Exécutez ensuite "expression 2". Si sa valeur est vraie (non-0), alors exécutez le corps de la boucle, sinon terminez la boucle.

3) Exécutez "expression 3" après avoir exécuté le corps de la boucle.

4) Répétez les étapes 2) et 3) jusqu'à ce que la valeur de "expression 2" soit fausse, puis terminez la boucle.

Dans les étapes ci-dessus, 2) et 3) sont une boucle et seront exécutées à plusieurs reprises. La fonction principale de l'instruction for est d'exécuter en continu les étapes 2) et 3).

"Expression 1" n'est exécutée que lors de la première boucle et ne sera plus exécutée à l'avenir. Cela peut être considéré comme une instruction d'initialisation. "Expression 2" est généralement une expression relationnelle, qui détermine s'il faut continuer la boucle suivante, appelée "condition de boucle". "Expression 3" est souvent une expression avec une opération d'incrémentation ou de décrémentation, de sorte que la condition de boucle devient progressivement "faux".

Le processus d'exécution de la boucle for peut être représenté par la figure suivante :

Une boucle for exécute-t-elle dabord linstruction du corps de la boucle, puis évalue-t-elle lexpression ?

Analysons « calculer le addition de 1 au code "somme de 100":

#include <stdio.h>
int main(){
    int i, sum=0;
    for(i=1; i<=100; i++){
        sum+=i;
    }
    printf("%d\n",sum);
    return 0;
}

Résultat d'exploitation:

5050

Analyse du code:

1) Lors de l'exécution de l'instruction for, attribuez d'abord une valeur initiale à i 1. Déterminez si i

2) Lors de la deuxième boucle, la valeur de i est 2, i

3) Répétez l'étape 2) jusqu'à la 101ème boucle. À ce moment, la valeur de i est 101, et i

De là, nous pouvons résumer la forme générale de la boucle for :

for(初始化语句; 循环条件; 自增或自减){
    语句块
}

Les trois expressions dans la boucle for

" dans la boucle for "Expression 1 (condition d'initialisation)", "Expression 2 (condition de boucle)" et "Expression 3 (auto-incrémentation ou auto-décrémentation)" sont toutes facultatives et peuvent être omises (mais le point-virgule ; doit être conservé).

1) Modifiez le code pour "somme de 1 à 100" et omettez "expression 1 (condition d'initialisation)" :

int i = 1, sum = 0;
for( ; i<=100; i++){
    sum+=i;
}

Comme vous pouvez le voir, déplacez i=1 vers pour en dehors de la boucle.

2) "Expression 2 (condition de boucle)" est omise. Si aucun autre traitement n'est effectué, elle deviendra une boucle infinie. Par exemple :

for(i=1; ; i++) sum=sum+i;

équivaut à :

i=1;
while(1){
    sum=sum+i;
    i++;
}

La boucle dite infinie signifie que la condition de boucle est toujours vraie et que la boucle continuera et ne se terminera jamais. Les boucles infinies sont très préjudiciables au programme et doivent être évitées.

3) Si "expression 3 (auto-incrémentation ou auto-décrémentation)" est omise, les variables dans "expression 2 (condition de boucle)" ne seront pas modifiées. Dans ce cas, des variables modifiées peuvent être ajoutées. à l'instruction du corps de la boucle. Par exemple :

for( i=1; i<=100; ){
    sum=sum+i;
    i++;
}

4) "Expression 1 (instruction d'initialisation)" et "Expression 3 (auto-incrémentation ou auto-décrémentation)" sont omises. Par exemple :

for( ; i<=100 ; ){
    sum=sum+i;
    i++;
}

équivaut à :

while(i<=100){
    sum=sum+i;
    i++;
}

5) 3 expressions peuvent être omises en même temps. Par exemple :

for( ; ; )  语句

est équivalent à :

while(1)  语句

6) "Expression 1" peut être une instruction d'initialisation ou d'autres instructions. Par exemple :

for( sum=0; i<=100; i++ )  sum=sum+i;

7) "Expression 1" et "Expression 3" peuvent être une expression simple ou une expression virgule.

for( sum=0,i=1; i<=100; i++ )  sum=sum+i;

ou :

for( i=0,j=100; i<=100; i++,j-- )  k=i+j;

8) "Expression 2" est généralement une expression relationnelle ou une expression logique, mais elle peut aussi être une valeur numérique ou un caractère du moment que sa valeur est. différent de zéro, le corps de la boucle sera exécuté. Par exemple :

for( i=0; (c=getchar())!=&#39;\n&#39;; i+=c );

Autre exemple :

for( ; (c=getchar())!=&#39;\n&#39; ; )
    printf("%c",c);

Recommandations associées : "Tutoriel en langage C"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn