Più printf nel ciclo For come parte di inizializzazione, condizione e aggiornamento

0

Domanda

Qualcuno potrebbe spiegare a me perché di stampa (32 e il concetto generale di come funziona?

#include <stdio.h>

int main()
{
    int a=1;
    for (printf ("3"); printf ("2"); printf ("1"))

    return 0;
}
c loops printf
2021-11-23 21:56:07
2

Migliore risposta

8

Rientro appropriato renderebbe più chiaro:

#include <stdio.h>

int main()
{
    int a=1;
    for (printf ("3"); printf ("2"); printf ("1"))
        return 0;
}

Così accade quanto segue:

  • a è inizializzato 1. Non so perché questa variabile esiste, poiché non è mai utilizzato.
  • for esegue la sua istruzione di inizializzazione, printf("3");. Questa stampa 3.
  • for valuta la sua ripetizione condizione, printf("2"). Questa stampa 2 e restituisce il numero di caratteri che sono stati stampati, che è 1.
  • Dal momento che la condizione è truthy, va nel corpo del ciclo.
  • Il corpo esegue return 0;. Questo restituisce da main()così la conclusione del ciclo.

Dal momento che il ciclo termina, non abbiamo mai valuta l'aggiornamento espressione, printf("1"), quindi non è mai stampe 1. E abbiamo nessuna ripetizione di nulla.

2021-11-23 22:04:34
0

Sai, un programma decorre dalla sinistra ‘{’ della funzione main(), la fine del diritto '}' della funzione main(), se non c'è un ciclo infinito.

Come il codice mostra, la Tua difficoltà è capire il diagramma di flusso del ciclo for in C language.

Come si può vedere, La sintassi del ciclo for:
for (initializationStatement; testExpression; updateStatement)
{
    // statements inside the body of loop
    for loop body;
}
Come per il loop funziona?

1.L'istruzione di inizializzazione viene eseguita solo una volta.

2.Quindi, l'espressione viene valutata. Se il test espressione viene valutata su false, il ciclo è terminato.

3.Tuttavia, se il test è espressione viene valutata true, istruzioni all'interno del corpo del ciclo for vengono eseguiti, e l'aggiornamento espressione è aggiornato.

4.Di nuovo l'espressione di test viene valutata.

Questo processo continua fino a quando l'espressione è falsa. Quando il test di espressione è falsa, il ciclo termina.

Così, per il ciclo di Diagramma di flusso

enter image description here

In primo luogo, Prendere il vostro codice di esempio:
#include <stdio.h>
int main(){
    for (printf ("3"); printf("2"); printf("1")) break;
    return 0;
}
Uscita
32

1.inizializzazione "printf ("3")"poi, di stampa:

3

2.L'espressione di test "printf("2")"sempre vero, in modo da la stampa:

2

3.per il corpo loop "break"che significa concludere l'esecuzione del ciclo for,

non eseguire l'aggiornamento di espressione "printf("1")"

inoltre, il programma salta fuori del ciclo for, e saltate "return 0;",

quindi, terminare l'esecuzione di questo programma.

Così, l'uscita è

32
In secondo luogo, Prendere il vostro cambiamento di codice di esempio:
#include <stdio.h>
int main(){
    for (printf ("3"); printf("2"); printf("1")) ;
    return 0;
}
Uscita
321212121212121212...121212...1212...

Allo stesso modo,

1.inizializzazione "printf ("3")"poi, di stampa:

3

2.L'espressione di test "printf("2")"sempre vero, in modo da la stampa:

2

3.per il corpo loop "`", vuota, quindi non fare nulla. goto aggiornato espressione

"printf("1")"

4.l'espressione aggiornata "printf("1")"allora stampa

1

5.poi, vai al test di espressione "printf("2")", che è "2.Il test

l'espressione "printf("2")", che è sempre vero, in questo modo la stampa".Perché il

il corpo del ciclo è "`",vuoto, poi sempre goto dall'aggiornamento

l'espressione "printf("1")" per l'espressione di test "printf("2")",

ecco perché dopo la stampa "32"che funzione stampa loop infinito

"12".E, che la funzione non finiscono mai interrompere la stampa "12"a meno che non si

interrompere la funzione.

Così, così, in Modo che l'output è

32121212...121212...121212...
In terzo luogo, Prendere il vostro, di recente modificato il codice come esempio:
#include <stdio.h>

int main()
{
    int a=1;
    for (printf ("3"); printf ("2"); printf ("1")) 

    return 0;
}
Uscita
32

1.il programma inizia a decorrere dalla sinistra ‘{’ della funzione main(),

che l'istruzione di inizializzazione della variabile Temporanea

"int a=1;".

Questa dichiarazione definisce "unint"digitato variabile temporanea "a"e

imposta il suo valore "1"Ma che stampare nulla!

2.quindi, il programma goto ciclo for.

3.l'istruzione di inizializzazione è "printf ("3")"allora stampa

"3"e

vai al test di espressione.

3

4.L'espressione di test "printf("2")"sempre vero, quindi

stampa "2"e goto ciclo for l'espressione del corpo.

2

5.il ciclo for espressione del corpo "return 0"l'espressione

"return 0"ritorno"0'la funzione main(),e alla fine il

esecuzione di main(), Ma non stampare nulla.

Così, il risultato è:

32
Fine. Grazie!
2021-11-24 07:01:53

In altre lingue

Questa pagina è in altre lingue

Русский
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................