home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / genie-commodore-file-library / Information / C.TUTOR.1.SFX / lesson5 < prev    next >
Encoding:
Text File  |  1991-03-07  |  6.7 KB  |  250 lines

  1.  
  2. ├ ╠ANGUAGE ╘UTORIAL
  3. -------------------
  4. ╠ESSON 5 OF 11
  5.  
  6.  
  7.  
  8. ╔F, FOR, AND WHILE -
  9.  
  10.  
  11. MAIN() 
  12. █            /* WHAT'S IN A NAME ? */
  13.   INT I, J;      /* SOME INTEGERS. */
  14.   CHAR NAME[10];  /* 10 CHAR ARRAY */
  15.   FOR (I=0; I<25; I++) 
  16.           /* PRINT '\N', 25 TIMES, */
  17.     PRINTF("\N"); 
  18.           /* TO CLEAR THE SCREEN!  */
  19.   PRINTF("\N TYPE YOUR NAME : "); 
  20.                /* ASK FOR A NAME.  */
  21.   SCANF("%S",&NAME);  
  22.                  /* INPUT THE NAME */
  23.   FOR (I=0, J=0; NAME[I] != '\0'; 
  24.        I++) █   /* A NICE FOR-LOOP */
  25.     IF ( NAME[I] == 'E' ) 
  26.                /* CHECK FOR AN 'E' */
  27.       J++;   /* IF SO, INCREMENT J */
  28.   ▌            /* END OF FOR-LOOP  */
  29.   PRINTF("\N THE LETTER E OCCURS %D
  30.          TIMES IN %S",J,NAME);  
  31. ▌                 /* END OF MAIN() */
  32.  
  33. ╠ET'S LOOK AT THIS PROGRAM A PART AT 
  34. AT TIME.  ╔T'S SUPPOSED TO ASK FOR A 
  35. NAME, THEN PRINT OUT THE NUMBER OF 
  36. TIMES THE LETTER E OCCURS IN THE 
  37. NAME.  
  38.  
  39. MAIN() 
  40. █ 
  41.   INT I, J, NUM;
  42.   CHAR NAME[10];
  43.  
  44. ╘HIS PART IS FAMILIAR. ╬OTE THAT WE 
  45. ALLOW FOR A NAME OF 9 CHARACTERS 
  46. SINCE THE 10TH WILL BE THE 
  47. TERMINATING '\0' (REMEMBER?).            
  48.                                                                            
  49. FOR (I=0; I<25; I++)
  50.   PRINTF("\N");
  51.                                                                               
  52. ╫E USE A FOR LOOP TO PRINT 25 
  53. NEWLINES (THEREBY CLEARING THE SCREEN 
  54. ..NOT VERY ELEGENT, BUT.. ).                                
  55. ╘HE NEW THING HERE IS  I++  WHICH, IN 
  56. C, MEANS INCREMENT I, OR, INCREASE 
  57. THE VALUE OF I BY ONE.
  58. ╥EMEMBER,SINCE THERE IS ONLY ONE 
  59. STATEMENT IN THE FOR LOOP THE SEMI-
  60. COLON AFTER PRINTF ACTS TO TERMINATE
  61. THE LOOP.
  62.  
  63.   PRINTF("\N TYPE YOUR NAME : ");
  64.                                                                               
  65. ╫E NOW ASK FOR YOUR NAME BY PRINTING:                                    
  66.                                                                            
  67.  TYPE YOUR NAME :                                                    
  68.  
  69.   SCANF("%S",&NAME);
  70.  
  71. ╘HEN WE WAIT FOR THE USER TO TYPE IN 
  72. HIS/HER NAME (ENDING WITH THE       
  73. ENTER KEY), AND PUT THIS STRING AT 
  74. MEMORY ADDRESS  &NAME .  
  75.                                                                                
  76.   FOR (I=0, J=0; NAME[I] != '\0';
  77.        I++) █
  78.                                                                               
  79. ╬OW WE GO THROUGH THE NAME[] ARRAY, 
  80. ONE CHARACTER AT-A-TIME, STARTING 
  81. WITH I=0 (THE FIRST CHARACTER IS THE 
  82. ZEROTH!). ╫E WILL COUNT THE NUMBER OF 
  83. TIMES THE LETTER E OCCURS AND STORE 
  84. THIS COUNT IN THE VARIABLE J, SO WE 
  85. ALSO INITIALIZE J=0, TOO! (NOTE THE 
  86. USE OF THE COMMA BETWEEN I=0 AND 
  87. J=0).  ╘HIS FOR-LOOP WILL CONTINUE SO 
  88. LONG AS THE ITH CHARACTER IN THE 
  89. NAME[] ARRAY IS NOT THE NULL '\0'. ╔N 
  90. C THE FINAL ELEMENT IN A STRING IS 
  91. ALWAYS A NULL AS THIS IS HOW C 
  92. DECIDES WHERE A STRING ENDS. ╙INCE 
  93. OUR ARRAY NAME[10] WAS ONLY 
  94. INITIALIZED TO HOLD 10 ELEMENTS AND 
  95. THE FINAL ONE IS RESERVED FOR THE 
  96. NULL THE NAME CANNOT BE MORE THAN 9 
  97. CHARACTERS LONG. ┴NY CHARACTERS WHICH 
  98. ARE ENTERED ABOVE 9 WILL TRUNCATED.
  99. (NOTE THE CONSTRUCTION != WHICH, IN 
  100. C, MEANS NOT EQUAL).  ╧F COURSE, EACH 
  101. TIME WE ADVANCE THROUGH THE 
  102. CHARACTERS IN THE ARRAY NAME[] WE 
  103. MUST INCREMENT I (UNTIL WE REACH THE 
  104. END).                          
  105.                                                                                
  106.     IF ( NAME[I] == 'E' )
  107.                                                                               
  108. ┴ND NOW WE CHECK THE ITH CHARACTER, 
  109. NAME[I], TO SEE IF IT IS EQUIVALENT 
  110. TO THE LETTER E. ╬OTE THE CURIOUS WAY 
  111. WE CHECK FOR ==. ╚AD WE USED 
  112. NAME[I]='E' IT WOULD COMPILE OK, BUT 
  113. THIS ACTUALLY ASSIGNS TO NAME[I] THE 
  114. CHARACTER 'E' RATHER THAN CHECKING 
  115. FOR EQUALITY! ...AND NAME WOULD BE 
  116. ALL E'S.  
  117.  
  118.       J++;
  119.  
  120. ╙INCE THE 'J++;' IS THE ONLY STATEMENT                                                                               
  121. ACTED ON WHEN THE 'IF' CONDITIONAL TESTS
  122. AS TRUE THE SEMI-COLON AFTER 'J++' 
  123. TERMINATES IT.
  124.  
  125. ╬OW, IF WE FIND AN 'E', WE INCREMENT J.
  126.                                                                               
  127. ...AND THIS  ENDS THE FOR-LOOP.
  128.  
  129.  
  130.   PRINTF("\N THE LETTER E OCCURS %D
  131.          TIMES IN %S",J,NAME); 
  132.   ▌ 
  133.  
  134. ...AND, AFTER LEAVING THE FOR-LOOP,
  135. WE PRINT THE RESULTS:
  136.  
  137. ╘HE LETTER E OCCURS J TIMES IN NAME.
  138.  
  139. ┴FTER WE COMPILE AND LINK AND 
  140. EXECUTE, WE GET: 
  141.  
  142.  TYPE YOUR NAME :  PETER
  143.  
  144. ╫E TYPE THIS, THEN PRESS THE ENTER 
  145. KEY, AND GET: 
  146.  
  147. ╘HE LETTER E OCCURS 2 TIMES IN PETER
  148.  
  149.  
  150. ╔F (THIS ) DO THAT ELSE IF (THIS) 
  151. DO THAT ELSE DO THAT -
  152.  
  153. ╫E MAY WISH TO CHECK FOR SEVERAL 
  154. CHARACTERS (NOT JUST 'E'), SO WE 
  155. COULD SAY: 
  156.  
  157. #1 IF ( NAME[I] == 'E' )
  158.     J++; /* INCREMENT J IF AN 'E' */
  159. #2 ELSE IF ( NAME[I] == 'F' )
  160.     K++; /* INCREMENT K IF AN 'F' */
  161. #3 ELSE IF ( NAME[I] == 'G' )
  162.     L++; /* INCREMENT L IF AN 'G' */
  163. #4 ELSE ;     /* ELSE DO NOTHING  */
  164.  
  165. ╘HERE IS ANOTHER WAY OF MAKING TESTS 
  166. OF THIS TYPE CALLED A 'SWITCH' WHICH 
  167. WE'LL GET TO IN ANOTHER LESSON.
  168.  
  169. ╔N LINE 1 WE INCREMENT THE VARIABLE J 
  170. WHICH COUNTS THE NUMBER OF TIMES AN 
  171. 'E' OCCURS.  ╔N LINE 2 WE INCREMENT 
  172. THE VARIABLE K WHICH COUNTS THE 
  173. NUMBER OF TIMES AN 'F' OCCURS.  ╔N 
  174. LINE 3 WE INCREMENT THE VARIABLE L 
  175. WHICH COUNTS THE NUMBER OF TIMES AN 
  176. 'G' OCCURS.  ╔N LINE 4, WHICH IS 
  177. REACHED ONLY IF THE CHARACTER IS NONE 
  178. OF THE ABOVE, WE DO NOTHING.  ╫E 
  179. COULD HAVE DONE SOMETHING 
  180. INTERESTING, BUT WE SHOULD, JUST 
  181. ONCE, DEMONSTRATE A DO NOTHING 
  182. STATEMENT ....JUST THE SEMI-COLON!
  183. (WE WOULD, OF COURSE, HAVE DECLARED K 
  184. AND L AS INT DATA TYPES).
  185.  
  186.  
  187. ═ORE STUFF LIKE 'I++' -
  188.  
  189. ┴LTHOUGH WE COULD HAVE INCREMENTED I 
  190. BY USING I=I+1, WE USED THE INCREMENT 
  191. OPERATOR ++. ╘HERE IS ALSO (WHAT 
  192. ELSE?) A DECREMENT OPERATOR --. ╔N 
  193. FACT THESE CAN BE EITHER PRE- OR 
  194. POST-OPERATIVE.  
  195.  
  196. J=I--   WILL ASSIGN TO J THE VALUE 
  197.         OF I, THEN WILL DECREMENT I.
  198. J=--I   WILL FIRST DECREMENT I,THEN
  199.         ASSIGN TO J THE DECREMENTED
  200.         VALUE OF I.
  201.  
  202. ┴LSO, THE FOLLOWING ASSIGNMENT 
  203. OPERATORS MAY BE USED: 
  204.  
  205. X+=5  INSTEAD OF   X=X+5
  206. X-=5  INSTEAD OF   X=X-5
  207. X*=5  INSTEAD OF   X=X*5
  208. X/=5  INSTEAD OF   X=X/5
  209.  
  210. ╘ESTS FOR EQUALITY && INEQUALITY -
  211.  
  212. ╘O TEST FOR EQUALITY OF, SAY, X AND 5 
  213. WE ASK IF X==5.  HAD WE USED 
  214. SOMETHING LIKE: IF (X=5) THEN X WOULD 
  215. BE ASSIGNED THE VALUE 5 (AND, OF 
  216. COURSE, X WOULD NOW BE EQUAL TO 5 AND 
  217. THE IF-STATEMENTS WOULD CERTAINLY BE 
  218. EXECUTED). ╬OTE VERY CAREFULLY THE 
  219. DIFFERENCE BETWEEN THE ASSIGNMENT 
  220. OPERATOR '=' AND THE TEST FOR 
  221. EQUALITY OPERATOR '=='.  
  222.  
  223. ╫E ALSO USE:
  224.  
  225. IF (X!=5)   != MEANS NOT EQUAL
  226.  
  227. IF (X>5)    > MEANS GREATER THAN
  228.  
  229. IF (X<5)    < MEANS LESS THAN  
  230.  
  231. ╫E ALSO HAVE: 
  232.  
  233. IF (X>5 && X!=7) 
  234.  
  235. ╫HERE && MEANS AND ...SO THIS READS:
  236.  
  237. IF (X IS GREATER THAN 5)
  238.    AND (X IS NOT EQUAL TO 7)
  239.  
  240. ╫E ALSO HAVE: 
  241.  
  242. IF (X==5 ▀▀ X>=7) 
  243.  
  244. ╫HERE ▀▀ MEANS 'OR' ...SO THIS READS:
  245.  
  246. IF (X IS EQUIVALENT TO 5)
  247.    OR (X IS GREATER OR EQUAL TO 7)
  248.  
  249. [END OF LESSON 5 OF 11]
  250.