There are actually three different versions of the Apple //c. One can determine the version by entering Applesoft BASIC (a version of the Basic programming language which is part of every Apple //c) and typing in the following command:
PRINT PEEK (64447)
The value displayed on the monitor screen will designate the particular edition of Apple //c.
  • IF PEEK (64447) = 255 THEN Original Apple //c

    • 65C02 microprocessor
    • 128K of RAM
    • 128K ROM IC

  • IF PEEK (64447) = 0 THEN UniDisk 3.5 Apple //c

    • 256K ROM IC instead of 128K ROM
    • support for external UniDisk 3.5 inch diskette drive
    • Mini-Assembler
    • built-in diagnostics; STEP and TRACE Monitor commands

  • IF PEEK (64447) = 3 THEN Memory expansion Apple //c

    • Same as above plus support for optional memory expansion card

Depending upon point of view, there are actually five different editions of this line; the Apple //c+ was issued with two different keyboards ("crappy" and "good"). Much criticism of the Apple //c+ is due simply to the inadvertency of owning an Apple //c+ with a "crappy" keyboard. The "crappy" version is mushy and the keys stick quite a bit. The "good" version is robust and the keys do not stick at all. The author has disassembled several Apple //c's and has observed two very different keyboard constructions (i.e., the state of the keyboard is not a quality issue, but is truly two different designs, thus editions). The size and the connectors of the keyboards are identical, thus, one can swap out a "crappy" for a "good."

Sources:

Apple II Apple IIc Technical Reference Manual New York : Addison-Wesley (1987). pp. xxiii-xxv ISBN 0201177528

Personal knowledge.

Side note: This book lists the code for the firmware for the Apple //c (Appendix 1) which includes a pair of amusing comments in the code.

page 414:
* * * * * * * * * * * * * * * * *
* Code beyond this point is not *
* sacred... It may be perverted *
* in any manner by any pervert. *
* * * * * * * * * * * * * * * * *
page 409:
*********************************************************************
* the following two bytes must be $90 and $4B in locations $C411 and
* and $c412 respectively. the bcc ($90) is never taken by the
* slinky code and the $4b is used to duplicate the mouse entry
* point found in slot 7. this 'fix' enables some programs
* to still work correctly. (tim, you owe me a beer for this one!)
********************************************************************