2013-05-08 1 views
5

Studiare per una finale di informatica ......Per ciclo con printf come terzo argomento

Io davvero non riesco a capire questo esempio fuori .....

Capisco che lasciare il primo argomento vuoto fa agire come vero ....

ma non capisco quello che lasciando una variabile nel secondo argomento compie ....

quello che non capisco di più è come una dichiarazione printf " aggiorna "la condizione variabile ...

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

l'output è:

2 1 
3 1 
4 1 
5 1 
6 1 
7 0 

edit:

Ora capisco la parte per-loop struttura .....

Grazie per le risposte - molto penetranti, grazie!

+2

L'istruzione "lasciare il primo argomento vuoto si comporta come VERO" non è vera. La seconda parte di un ciclo for è qual è la condizione, non la prima. –

risposta

14

Un for loop può essere pensato come for (INITIALIZATION; CONDITION; AFTERTHOUGHT)

La prima parte del ciclo è per l'inizializzazione. Lasciare questo vuoto va bene, indica solo che hai già inizializzato qualsiasi variabile richiesta dal ciclo.

Il nella seconda espressione (o condizione) del ciclo for equivale a y!=0. Mantiene il ciclo for in esecuzione fino a y==0.

Il printf nel ripensamento viene eseguito alla fine di ogni iterazione ma non modifica il valore di y. Il corpo del loop cambia tuttavia .

La maggior parte dei libri di testo descriverà questo. Oppure vedi Wikipedia o cplusplus.

0

Questo esegue il programma fino a quando y è 0 perché 0 come un intero è anche falsa

+0

Cerca di non dare un cosa, lui/lei può ovviamente vedere il cosa, si stanno chiedendo perché. –

6

considerare questa struttura in un ciclo for:

for (a; b; c) 
{ 
    d; 
} 

Questo è ciò che accadrà:

  1. Codice a verrà eseguito
  2. La condizione b verrà valutata. Se è falso, il ciclo for si interrompe.
  3. Il codice d viene eseguito.
  4. Il codice c viene eseguito.
  5. Andare al punto 2

Quello che sta succedendo nel vostro alla fine è che la parte "c" del codice è la stampa il valore di y e capita di essere 0. La condizione viene quindi valutata. Dal y == 0, il ciclo for si interromperà perché 0 equivale a false.

0
Leaving a variable y implies the loop will run till y is true 
loop will stop when y becomes false 

Now this condition that you have written in body evaluates value of y 
y = x++ <= 5; 

Whenever x++ <= 5 implies y is true that is 1 
So it starts with x=1 and prints until value of x becomes 7 
and y=x++ <= 5; returns false and loop exits. 
2

Un trucco che ho trovato all'inizio era, se non riuscivo a capire il ciclo for, provare a scomporlo in un ciclo while equivalente. È possibile anche cose paren per renderli più leggibili (fino a quando si segue l'ordine delle operazioni sui vostri parentesi di non rovinare la valutazione il ciclo sarebbe simile a questo con questi cambiamenti:.

#include<stdio.h> 
int main() 
{ 
    int x=1, y=1; 
    while(y) 
    { 
     y = (x++ <= 5); 
     printf("%d %d\n", x, y) 
    } 
    printf("\n"); 
    return 0; 
} 

con quelle coppie cambia rende facile vedere che la tua dichiarazione di stampa non sta cambiando/aggiornando nulla, ma sta solo stampando il risultante del tuo valore 0.

0

Sebbene la risposta fornita da simonc sia perfetta, c'è anche una soluzione pratica. questo programma in Visual Studio, aggiungi un punto di interruzione all'inizio del ciclo for ed esegui ogni istruzione usando il tasto F10. Ti mostrerà chiaramente quale flusso è preso al momento dell'esecuzione. Aiuterà a chiarire tutti i tuoi dubbi. arrivare a tenere d'occhio i valori delle variabili che aiuteranno ulteriormente. Questo mi ha aiutato a superare i miei dubbi. Goditi la programmazione!