Can you explain what an NP statement is when they refer to it in Zero knowledge proofs? When I read about zero knowledge proof, I keep encountering the term NP-statement. I am aware of complexity classes but I am a little unclear on how it ties up to NP-statement.

I came across the following here: C++ library for zkSNARKs

A computation can be expressed as an NP statement, in forms such as the following:


"The C program foo, when executed, returns exit code 0 if given the
input bar and some additional input qux."
"The Boolean circuit foo is satisfiable by some input qux."
"The arithmetic circuit foo accepts the partial assignment bar, when
extended into some full assignment qux."
"The set of constraints foo is satisfiable by the partial assignment
bar, when extended into some full assignment qux."


A prover who knows the witness for the NP statement (i.e., a satisfying input/assignment) can produce a short proof attesting to the truth of the NP statement. 

Can any body show how an NP problem can be described in the form of an NP statement with an example?
Intuitively, an NP problem is one
 that if you have a solution it is computationally easy to verify it, but it is not known if it is also computationally easy to find. Of course there exist formal definitions, based on deterministic and non deterministic Turing machines. Any standard complexity textbook will have these definitions.

Their connection with zero knowledge proofs comes from the 1987, Goldreich, Micali and Wigderson paper that proves that all NP problems have zero knowledge proofs (assuming secure bit commitment).
An excellent tutorial on how this is done can be found in Matthew Green's blog.
All this were written for classical zero knowledge systems, but they apply to zkSnarks as well.