Just a couple of minor points to add to dick.scherrer.
In a fixed length data set all logical records have the same length. If the data set is FB these logical records are in a block that always contains a multiple of the logical record length.
In a variable length data set, each logical record can have a different length. The record length is stored in a prefix called a Record Descriptor Word (RDW). The data blocks can also vary in length. Like a logical record each data block stores its length in a prefix called a Block Descriptor Word (BDW).
I generally use VB data for print type data; this saves output space, most of the time, anyway, and you don't have to blank the rightmost part of a data line as is often the case with fixed length records, which usually speeds up your program. I've been doing this for almost 40 years, so it's second nature to me, but most people find fixed length records easier to handle than variable length records.
This manual,
http://publibz.boulder.ibm.com/cgi-bin/bookmgr_OS390/BOOKS/dgt2d490/3.1.3.1.1?SHELF=dgt2bka0&DT=20100628133137 is mainly intended for Assembler programmers, but the link points directly to good descriptions of BDWs and RDWs. z/OS usually fills in BDWs for you; even Assembler programmers rarely create them.