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

  1.  
  2. ├ ╠ANGUAGE ╘UTORIAL
  3. -------------------
  4. ╠ESSON 1 OF 11
  5.  
  6.  
  7. ╬OTE: SUBSTITUTIONS FOR SPECIAL C
  8. LANGUAGE CHARACTERS:
  9.  
  10. LEFT CURLY BRACKET:   █
  11. RIGHT CURLY BRACKET:  ▌
  12. BACK SLASH:           \
  13. TILDE:                »
  14. VERTICAL BAR:         ▀
  15. UNDERSCORE:           ñ
  16.  
  17. ╔NPUT AND ╧UTPUT -
  18.  
  19. ╒SING A WORD PROCESSOR, WE BEGIN OUR 
  20. C-PROGRAM WITH MAIN() AND A LEFT 
  21. CURLY BRACKET █.  ╬OW WE CAN WRITE A 
  22. PROGRAM AND FINISH IT WITH A 
  23. RIGHT CURLY BRACKET ▌: 
  24.  
  25. MAIN() 
  26. .........................
  27. YOUR PROGRAM GOES IN HERE
  28. .........................
  29.  
  30. ┼VERYTHING BETWEEN █ AND ▌ 
  31. CONSTITUTES ONE FUNCTION AND IN THIS
  32. CASE IT IS THE FUNCTION MAIN().  
  33.  
  34. ┼VERY C PROGRAM MUST HAVE A MAIN() 
  35. FUNCTION BECAUSE THIS IS WHERE 
  36. EXECUTION BEGINS.  
  37.  
  38. ┴LL C PROGRAMS ARE COMPOSED OF ONE OR 
  39. MORE FUNCTIONS. ╫RITING A TASK, OR A 
  40. RELATED SET OF TASKS, IN TERMS OF 
  41. FUNCTIONS ALLOWS YOU TO BREAK A 
  42. PROGRAM INTO LOGICAL PARTS. ┘OU WILL 
  43. FIND THAT THIS MAKES PROGRAM FLOW AND 
  44. EXECUTION MUCH EASIER TO TRACE AND 
  45. DEBUGGING LESS OF A CHORE.  ╞UNCTIONS 
  46. CAN BE SAVED IN A LIBRARY AND REUSED 
  47. IN OTHER PROGRAMS. ╫HEN YOUR LIBRARY 
  48. IS LARGE ENOUGH WRITING A PROGRAM IS 
  49. MADE EASIER BECAUSE YOU CAN CALL ON 
  50. ALREADY-WRITTEN FUNCTIONS.  
  51.  
  52. ╧NE OF THE THINGS WE WILL WANT TO DO 
  53. IS PRINT TO THE SCREEN.  ╘HERE IS A C 
  54. COMMAND CALLED 'PRINTF', MEANING 
  55. PRINT WITH FORMAT.  
  56.  
  57. PRINTF("THIS IS SOME TEXT TO PRINT.");
  58.  
  59. ╘HE ABOVE COMMAND WILL SIMPLY PRINT:
  60.  
  61. THIS IS SOME TEXT TO PRINT.
  62.  
  63. (ALMOST) EVERY C STATEMENT 
  64. ENDS IN A SEMI-COLON!  
  65.  
  66. ═ORE ON PRINTF -
  67.  
  68. ╘HE FORMAT PART OF PRINTF COMES IN 
  69. HANDY IF WE WANT TO PRINT,SAY,A 
  70. NUMBER WITH A SPECIFIED NUMBER OF 
  71. DECIMAL PLACES.
  72.  
  73. PRINTF("%D",X);
  74. ╘HE SYMBOL '%' INDICATES THAT THE 
  75. VALUE OF A VARIABLE IS SUBSTITUTED 
  76. HERE. ╘HE 'D' MEANS PRINT THE DECIMAL 
  77. NUMBER REPRESENTED BY THE VARIABLE X.  
  78.  
  79. PRINTF("%6D",X);
  80. ╘HIS SAYS THE DECIMAL NUMBER X IS 
  81. PRINTED TO 6 DIGITS.        
  82.  
  83. ╚ERE'S ALMOST A WHOLE PROGRAM:
  84.  
  85. MAIN() 
  86. X=1234
  87. PRINTF("THE ANSWER IS %6D",X);
  88.  
  89. ┴ND WE EXPECT THE PROGRAM TO GIVE 
  90. THE OUTPUT: 
  91.  
  92. THE ANSWER IS 1234
  93.  
  94. ...BUT IT WON'T ( YET ).
  95. IN FACT, YOUR C-COMPILER WON'T 
  96. COMPILE THE PROGRAM!
  97.  
  98. ┴ LOOK AT DATA TYPES -
  99.  
  100. ╫HEN WE WRITE X=1234 WE EXPECT THE C 
  101. COMPILER TO RESERVE SOME MEMORY FOR 
  102. THE VARIABLE X AND PLACE IN THIS 
  103. MEMORY THE NUMBER 1234.  ╔F, 
  104. SUBSEQUENTLY, WE WRITE X=12345678, 
  105. WILL THIS FIT INTO THE MEMORY 
  106. RESERVED FOR THE VARIABLE X?  ╔N 
  107. ORDER TO KNOW ,IN ADVANCE,HOW MUCH 
  108. MEMORY TO SET ASIDE FOR EACH VARIABLE 
  109. WE USE IN OUR C PROGRAM, WE MUST 
  110. DECLARE THE VARIABLE TYPE.╔F X IS AN 
  111. INTEGER (SO WE WILL NOT SET X=1.234) 
  112. THEN WE SAY SO WITH THE DECLARATION: 
  113.  
  114. INT X; 
  115.  
  116. ╔F X WILL TAKE ON VALUES LIKE 1.234 
  117. (A FLOATING POINT NUMBER) THEN 
  118. WE WRITE:  
  119.  
  120. FLOAT X;
  121.  
  122. ╔F X IS A CHARACTER VARIABLE 
  123. (FOR EXAMPLE X='A') THEN 
  124. WE DECLARE THIS TOO: 
  125.  
  126. CHAR X;
  127.  
  128. ─ECLARING THE DATA TYPE -
  129.  
  130. NOW WE MAY WRITE:
  131.  
  132. MAIN() 
  133. INT X;
  134. X=1234;
  135. PRINT("THE ANSWER IS %6D",X);
  136.  
  137. ┴ND NOW OUR PROGRAM WILL PRINT: 
  138.  
  139. THE ANSWER IS 1234 
  140.  
  141. ╫HAT WILL THE FOLLOWING PROGRAM PRINT?
  142.  
  143. MAIN() 
  144. FLOAT X;
  145. X=1234;
  146. PRINT("THE ANSWER IS %6D",X);
  147.  
  148. ┬ECAUSE WE DECLARED X TO BE A 
  149. FLOATING POINT NUMBER THE VALUE OF X 
  150. IS STORED IN A DIFFERENT FORMAT IN 
  151. MEMORY. ┴S A FLOAT, X=1234 WILL BE 
  152. STORED AS A NUMBER LESS THAN 1 
  153. TOGETHER WITH AN EXPONENT 
  154. ("SCIENTIFIC NOTATION").  
  155. ╘HE ABOVE PROGRAM WILL PRINT: 
  156.  
  157. THE ANSWER IS 0 
  158.  
  159. MAIN() 
  160. FLOAT X;
  161. PRINT("THE ANSWER IS %6D",X);
  162.  
  163. ╬OTE THE D.
  164.  
  165. ╘HE PRINTF COMMAND EXPECTED A NUMBER 
  166. IN DECIMAL FORMAT.  ┬UT X WAS STORED 
  167. IN MEMORY IN FLOAT FORMAT.  
  168. ╘HE RESULT IS A MISINTERPRETATION 
  169. OF THE VALUE OF X BY PRINTF!
  170.  
  171. MAIN() 
  172. FLOAT X;
  173. X=1234;
  174. PRINT("THE ANSWER IS %.1F",X); 
  175.  
  176. ╬OTE THE F AND THE '.1'.
  177.  
  178. ╘O TELL PRINTF THE FORMAT IN WHICH X 
  179. WAS STORED, WE USE AN F AND THE 
  180. NUMBER OF PLACES BEFORE AND AFTER THE 
  181. DECIMAL IN THE "FORMAT" PORTION OF 
  182. THE PRINTF COMMAND (I.E. THE PART 
  183. WITHIN QUOTES). ╞OR A FLOAT THE 
  184. DEFAULT, OR ASSUMED, FORMAT IS 6 
  185. PLACES IF NONE IS SPECIFIED.  
  186. ╙O THE ABOVE PROGRAM WILL PRINT:
  187.  
  188. THE ANSWER IS 1234.0
  189.  
  190. ╫HAT WILL THIS PROGRAM PRINT?
  191.  
  192. MAIN() 
  193. CHAR X;
  194. X='A';
  195. PRINTF("AS A CHARACTER, X HAS THE 
  196.         VALUE %C",X);
  197.  
  198. ╘HE VARIABLE X WAS DECLARED TO BE OF 
  199. TYPE CHARACTER AND IT WAS ASSIGNED 
  200. THE VALUE 'A'. ╙O THE OUTPUT IS:
  201.  
  202. ┴S A CHARACTER, X HAS THE VALUE A
  203.  
  204. ╔NTEGERS AND ╞LOATS -
  205.  
  206. FLOAT X;
  207. X=1234+1/2;
  208.  
  209. ╔N THE ABOVE PROGRAM SEGMENT, WHAT 
  210. DO YOU THINK THE VALUE OF X IS?
  211. ╔T'S 1234.0 !!!
  212. ╬UMBERS LIKE 1234 AND 1 AND 2 ARE 
  213. AUTOMATICALLY INTEGERS AND 
  214. DIVIDING THE LAST TWO WOULD GIVE 0 
  215. (DROPPING THE FRACTIONAL PART!) SO 
  216. 1234+0 GIVES 1234 WHICH (BECAUSE X 
  217. IS A FLOATING POINT NUMBER) IS NOW 
  218. CONVERTED TO A FLOAT AND ASSIGNED 
  219. TO X !!!  
  220. ╔N ORDER TO YIELD THE VALUE 1234.5 
  221. WE INCLUDE THE DECIMAL POINTS:
  222.  
  223. X=1234.+1./2.;     
  224.  
  225. ┴ND NOW ALL NUMBERS ARE FLOATING 
  226. POINT AND X WILL BE ASSIGNED THE 
  227. VALUE 1234.5, SO ...INCLUDE THE 
  228. DECIMAL POINTS WHEN NECESSARY!
  229.  
  230. FLOAT X;
  231. X=1234+1./2.;
  232.  
  233. ╚ERE THE 1./2. IS EVALUATED AS .5 
  234. (A FLOAT, BECAUSE OF THE DECIMAL 
  235. POINTS) AND 1234 IS CONVERTED TO A 
  236. FLOAT THEN ADDED, GIVING 1234.5 
  237. WHICH IS ASSIGNED TO X.
  238.  
  239. FLOAT X;
  240. X=1234+1./2;
  241.  
  242. ╚ERE, THE DECIMAL ASSOCIATED WITH 1.  
  243. CAUSES THE 2 TO BE CONVERTED TO A 
  244. FLOAT, SO 1./2 GIVES .5, AND THE 
  245. ADDITION OF 1234 (WHICH IS FIRST 
  246. CONVERTED TO A FLOAT) GIVES 1234.5, 
  247. WHICH IS THEN ASSIGNED TO X.  ╘HE 
  248. CONCLUSION? ├ TENDS TO CONVERT 
  249. NUMBERS IN A MIXED EXPRESSION TO 
  250. FLOATING POINT BEFORE EVALUATION 
  251. ....BUT DON'T RELY ON IT!  ╔F YOU 
  252. WANT FLOATING POINT OPERATIONS 
  253. INCLUDE THE DECIMAL POINTS!
  254.  
  255. ╔NPUT FROM THE KEYBOARD WITH SCANF() -
  256.  
  257. ╬OW THAT WE'VE BEEN INTRODUCED TO 
  258. PRINTF (WHICH WILL PRINT THINGS ON 
  259. THE SCREEN, OR TO THE PRINTER, OR TO 
  260. A DISK FILE, AS WE WILL SEE...) WE 
  261. SHOULD INTRODUCE SCANF WHICH ALLOWS 
  262. US TO INPUT NUMBERS FROM THE 
  263. KEYBOARD.  
  264.  
  265. MAIN() 
  266. CHAR X;
  267. SCANF("%C",X);  /* NOTE THE %C! */
  268. PRINTF("YOU PRESSED THE %C KEY",X);
  269.  
  270. ╔N THE ABOVE THE PHRASE "NOTE THE 
  271. %C!" PLACED BETWEEN THE SYMBOL 
  272. COMBINATIONS '/*' AND '*/' IS A 
  273. COMMENT TO OUR PROGRAM. ╘HIS SERVES 
  274. THE SAME PURPOSE AS 'REM' IN THE 
  275. ┬┴╙╔├ LANGUAGE. ╔T PROVIDES FOR AN 
  276. INFORMATIONAL COMMENT TO CLARIFY THE 
  277. MEANING OF A PART OF A PROGRAM. 
  278. ┼VERYTHING PLACED BETWEEN '/*' AND 
  279. '*/' IS IGNORED BY THE COMPILER.  
  280.  
  281. ╘HE SCANF COMMAND WAITS FOR THE USER 
  282. TO TYPE SOMETHING, AND SCANF("%C",X) 
  283. PUTS THE CHARACTER TYPED, INTO THE 
  284. MEMORY RESERVED FOR THE VARIABLE X.  
  285. ╫HEN THE COMPILED PROGRAM IS RUN IT 
  286. WILL WAIT FOR THE USER TO PRESS A KEY 
  287. (FOLLOWED BY THE ENTER KEY).  ╙UPPOSE 
  288. YOU RAN THE PROGRAM AND PRESSED THE A 
  289. KEY (THEN ENTER).  ╫HAT WOULD THE 
  290. PROGRAM PRINT ON THE SCREEN?
  291. YOU PRESSED THE KEY...
  292. ...IT DIDN'T WORK!!!
  293.  
  294. ┴BOUT MEMORY LOCATIONS...AND THE 
  295. '&' PREFIX -
  296.  
  297. MAIN() 
  298. CHAR X;
  299. SCANF("%C",X);
  300. PRINTF("YOU PRESSED THE %C KEY",X); 
  301.  
  302. ╫HEN SCANF() IS USED, WE MUST TELL IT 
  303. WHERE,IN MEMORY,TO PUT THE CHARACTER 
  304. X.SAYING SCANF("%C",X) IS NOT ENOUGH!  
  305. ╘O IDENTIFY THE MEMORY ADDRESS FOR 
  306. THE VARIABLE X, WE PREFIX X WITH &. 
  307. ╔F X IS ANY VARIABLE (INT OR FLOAT OR 
  308. CHAR) THEN &X IS THE ADDRESS IN 
  309. MEMORY OF X.
  310.  
  311. &X=ADDRESS
  312.  
  313. ╘HE ABOVE PROGRAM MUST BE CHANGED 
  314. TO READ:
  315.  
  316. MAIN() 
  317. CHAR X;
  318. SCANF("%C",&X);   /* NOTE THE &X. */
  319. PRINTF("YOU PRESSED THE %C KEY",X); 
  320.  
  321. ...THEN IT WILL WAIT FOR A KEY-PRESS
  322. (FOR EXAMPLE THE LETTER Z) AND PRINT: 
  323.  
  324. YOU PRESSED THE Z KEY 
  325.  
  326. ╙INCE CHAR X; RESERVED ONLY ENOUGH 
  327. SPACE FOR ONE CHARACTER, WHAT WOULD 
  328. THE PRINTOUT BE IF YOU PRESSED 
  329. SEVERAL KEYS...SAY PQR?  ╫HEN YOU 
  330. PRESSED ENTER KEY...ONLY ONE 
  331. CHARACTER IS DISPLAYED!  
  332.  
  333. ╫HAT'S WRONG WITH THE FOLLOWING 
  334. PROGRAM?
  335.  
  336. MAIN() 
  337. INT X;
  338. CHAR Y;
  339. FLOAT Z;
  340. PRINTF("ENTER 3 NUMBERS(SEPARATED 
  341.         BY A SPACE)");
  342. SCANF("%D%C%F",&X,&Y,&Z);
  343. PRINTF("X=%C Y=%F Z=%D",X,Y,Z);
  344.  
  345. ╬OTE THAT X, Y AND Z ARE DECLARED 
  346. INT, CHAR AND FLOAT.
  347.  
  348. PRINTF("ENTER 3 NUMBERS(SEPARATED 
  349.         BY A SPACE)");
  350.  
  351. ╘HIS LINE JUST PRINTS INSTRUCTIONS:
  352. ENTER 3 NUMBERS(SEPARATED BY A SPACE)
  353.  
  354. SCANF("%D%C%F",&X,&Y,&Z);
  355.  
  356. ╘HIS LINE WAITS FOR YOU TO TYPE IN 
  357. THE 3 NUMBERS.  
  358. ╬OTE THE '&' REQUIRED BY SCANF()!
  359.  
  360. PRINTF("X=%C Y=%F Z=%D",X,Y,Z);
  361.  
  362. ╬OW WE PRINTF() THE 3 NUMBERS, 
  363. EXPECTING THE PRINTOUT TO APPEAR AS:
  364. X=123 Y=123 Z=123  
  365. (ASSUMING THE NUMBERS WERE ALL 123).
  366.  
  367. ╫HAT DO YOU THINK GETS PRINTED ON 
  368. THE SCREEN?
  369.  
  370. ┴LAS, WE GAVE PRINTF() THE DATA TYPES 
  371. IN THE WRONG ORDER!  ┴LTHOUGH SCANF() 
  372. GOT THE INTEGER X AS 123, AND PUT IT 
  373. IN THE RIGHT MEMORY LOCATION ('CAUSE 
  374. WE SAID &X)...AND IT ALSO GOT Y AS 1 
  375. (NOT 123), A SINGLE CHAR.....  
  376. (BECAUSE THE Y MEMORY LOCATION ONLY 
  377. HOLDS A SINGLE CHARACTER!) AND IT 
  378. ALSO GOT Z AND STORED IT AS A 
  379. FLOATING POINT NUMBER, AND PUT IT IN 
  380. THE CORRECT MEMORY LOCATION.  ╙O WHAT 
  381. GETS PRINTED?  
  382.  
  383. MAIN() 
  384. INT X;
  385. CHAR Y;
  386. FLOAT Z;
  387. PRINTF("ENTER 3 NUMBERS (SEPARATED 
  388.         BY A SPACE)");
  389. SCANF("%D%C%F",%X,%Y,%Z);
  390. PRINTF("X=%C Y=%F Z=%D",X,Y,Z);
  391.  
  392. ╘HE PRINTOUT PRODUCED BY THE ABOVE 
  393. PROGRAM (AFTER ENTERING 123
  394. FOR EACH OF X, Y AND Z, SEPARATED 
  395. BY A SPACE) IS:
  396.  
  397. X= Y=-2.000000 Z=16478 
  398.  
  399. ╙O PRINTF() WAS CONFUSED ONCE MORE!
  400.  
  401. ╞IRST: IT INTERPRETED X AS A 
  402. CHARACTER VARIABLE (!) AND OUT CAME 
  403. .  (THE ASCII CODE FOR '' IS 123 
  404. ...BUT MORE ON ASCII LATER).
  405.  
  406. ╙ECOND: IT PRINTED THE CONTENTS OF 
  407. SEVERAL MEMORY LOCATIONS, STARTING 
  408. WITH THE ONE RESERVED FOR Y (A CHAR) 
  409. AS A FLOATING POINT NUMBER (AND OUT 
  410. CAME -2.000000).  
  411.  
  412. ╘HIRDLY: IT WENT TO THE MEMORY 
  413. LOCATION RESERVED FOR Z (WHICH HELD A 
  414. FLOATING POINT NUMBER ... IN 
  415. "SCIENTIFIC" FORMAT, REMEMBER?) AND 
  416. INTERPRETED IT AS AN INTEGER, NAMELY 
  417. 16478 !!!  
  418.  
  419. ╥EVIEW OF PRINTF() AND SCANF() -
  420.  
  421. PRINTF("TEXT AND 'FORMAT' INFO",
  422. IN HERE ARE THE VARIABLES,IF ANY,
  423. SEPARATED BY COMMAS, TO BE 
  424. PRINTED);
  425.  
  426. ┬ETWEEN THE QUOTATION MARKS IS THE 
  427. FORMAT INFORMATION REQUIRED BY 
  428. PRINTF() FOR THE STRING AND/OR 
  429. VARIABLE(S) TO BE PRINTED.  ╘EXT MAY 
  430. BE MIXED WITH THE VARIOUS %D, %C AND 
  431. %F FORMAT INFORMATION.  
  432.  
  433. SCANF("NO TEXT, JUST 'FORMAT' INFO",
  434. VARIABLE NAMES SEPARATED BY COMMAS);
  435.  
  436. ┬ETWEEN THE QUOTATION MARKS IS THE 
  437. VARIABLE TYPE AND FORMAT INFORMATION
  438. FOR SCANF().
  439. SCANF("NO TEXT, JUST 'FORMAT' INFO", 
  440. VARIABLE NAMES SEPARATED BY COMMAS); 
  441. ┴FTER THE QUOTED PART IS THE NAMES OF 
  442. THE VARIABLES, LIKE X,Y,Z....RIGHT?  
  443. WRONG! WRONG! WRONG!
  444. ╔T HAS TO BE THE ADDRESSES OF THE 
  445. VARIABLES, LIKE &X,&Y,&Z!
  446. ╬OTE: THESE ADDRESSES ARE CALLED 
  447. POINTERS,  BECAUSE  THEY 'POINT'
  448. TO THE MEMORY LOCATIONS WHICH ARE 
  449. RESERVED FOR THE VARIABLES.
  450.  
  451. ╙OME FINAL COMMENTS ABOUT PRINTF() 
  452. AND SCANF() -
  453.  
  454. ╫E SAW, EARLIER IN THIS LESSON, THE 
  455. STATEMENT:
  456.  
  457. PRINTF("THE ANSWER IS %6D",X);
  458.  
  459. ╫E MAY SPECIFY THE NUMBER OF SCREEN 
  460. POSITIONS (THE FIELD WIDTH) WHICH THE 
  461. NUMBER IS TO OCCUPY WHEN PRINTF() IS 
  462. INVOKED (IN THE ABOVE EXAMPLE, IT'S 6 
  463. POSITIONS). ╞OR AN INTEGER, THAT'S 
  464. ALL THAT'S NECESSARY, BUT FOR A 
  465. FLOATING POINT NUMBER WE MAY ALSO 
  466. SPECIFY THE NUMBER OF DIGITS AFTER 
  467. THE DECIMAL.╔F WE JUST SAY %F THEN 
  468. WE WILL GET 6 DECIMAL PLACES BY 
  469. DEFAULT.  
  470.  
  471. PRINTF("THE ANSWER IS %.3F",X); 
  472.  
  473. ╔N THIS STATEMENT, IF X WERE A FLOAT 
  474. AND EQUAL TO 12.3456 THEN WHAT DO YOU 
  475. THINK WOULD BE PRINTED?  ╘HE ANSWER 
  476. IS 12.346 ROUNDED TO 3 DECIMAL PLACES!
  477.  
  478. MAIN() 
  479. FLOAT X;
  480. X=-12.3456;
  481. PRINTF("X=%6.3",X);
  482.  
  483. ╬OTE THAT X=-12.3456 CANNOT BE 
  484. PRINTED IN 6 POSITIONS WITH 3 DECIMAL 
  485. PLACES.  ╘HE FIRST 6 POSITIONS WOULD 
  486. GIVE ONLY X=-12.34 (OR X=-12.35 IF 
  487. ROUNDED). ╙INCE PRINTF() IS A SMART
  488. GUY (GAL?) IT ROUNDS THE NUMBER TO 
  489. THE FIELD WIDTH AS NECESSARY IN ORDER 
  490. TO INCLUDE THE DECIMAL POINT WHICH 
  491. ALSO ACCOUNTS FOR ONE POSITION IN THE 
  492. FIELD WIDTH ...AND PRINTS: 
  493.  
  494. X=-12.346
  495.  
  496. ╞OR NUMBERS (EITHER INT OR FLOAT) THE 
  497. FIELD WIDTH IS UNDERSTANDABLE....BUT 
  498. WHAT ABOUT CHAR VARIABLES WHICH ARE 
  499. SINGLE CHARACTERS AND WILL ONLY 
  500. OCCUPY ONE SCREEN POSITION ANYWAY?  
  501.  
  502. ╫HAT DO YOU THING THIS WILL PRINT?
  503.  
  504. X='Z';
  505. PRINTF("X=%6C",X);
  506.  
  507. ╘HE OUTPUT IS:
  508.  
  509. X=     Z
  510.  
  511. ╘HE Z IS RIGHT-JUSTIFIED IN 
  512. A FIELD WIDTH OF 6!
  513.  
  514. ╙OMETHING CALLED 'CAST' -
  515.  
  516. ╙UPPOSE YOU DESPARATELY NEED TO HAVE 
  517. AN INTEGER VARIABLE CONVERTED TO A  
  518. FLOATING POINT NUMBER. ═AYBE YOU 
  519. WANTED TO COMPUTE THE SINE OF AN INT 
  520. CALLED X. USING SIN(X) IS NO GOOD 
  521. BECAUSE THE SIN(X) FUNCTION ONLY 
  522. WORKS FOR FLOATING X.  ┘OU COULD USE 
  523. A "SPARE" FLOAT VARIABLE, SAY:
  524.  
  525. FLOAT Y; 
  526. Y=X;   
  527.  
  528. ╫HICH DOES AN AUTOMATIC CONVERSION 
  529. WHEN IT ASSIGNS THE X-VALUE TO Y, 
  530. FROM INT TO FLOAT. THEN USE: 
  531.  
  532. 'SIN(Y)'
  533.  
  534. ╫HICH IS OK SINCE Y IS NOW A FLOAT.
  535. ╧R, RATHER THAN HAVING TO DECLARE  
  536. 'FLOAT Y;' JUST TO HAVE Y IN RESERVE
  537. FOR THIS "CONVERSION" PURPOSE, YOU 
  538. MAY USE A CAST.
  539.  
  540. ╘HE STATEMENT 'SIN( (FLOAT)X )', WILL 
  541. TEMPORARILY CONVERT THE  INTEGER X TO 
  542. A FLOAT (FOR PURPOSES OF COMPUTING 
  543. THE SIN) BUT LEAVE X UNCHANGED.  ╘HIS 
  544. IS CALLED A CAST (IN C-SPEAK).  
  545.  
  546. INT X;
  547. X=10;
  548.  
  549. PRINTF("HERE'S AN INTEGER, PRINTED TO
  550. 6 DECIMAL PLACES! %.6F",(FLOAT)X); 
  551.  
  552. ╘HE ABOVE CASTS THE INTEGER X FOR 
  553. PRINTF AS A FLOAT, AND YOU GET THE 
  554. OUTPUT: 
  555.  
  556. HERE'S AN INTEGER, PRINTED TO 
  557. 6 DECIMAL PLACES! 10.000000 
  558.  
  559. ┴ FINAL NOTE ON DATA TYPES -
  560.  
  561. ╫E HAVE TALKED ABOUT NUMBERS STORED 
  562. (IN MEMORY) IN INT AND FLOAT FORMAT.
  563. HERE ARE SOME OTHERS:
  564.  
  565. ─OUBLE -
  566. ╫HEREAS THE INT FORMAT CAN REPRESENT 
  567. AN INTEGER IN THE RANGE -32768 TO 
  568. 32767 (WITH SIGN) AND THE FLOAT 
  569. FORMAT CAN HOLD A NUMBER WITH 6 
  570. SIGNIFICANT FIGURES  (ROUGHLY) WE 
  571. ALSO CAN DECLARE A NUMBER TO BE 
  572. DOUBLE WHICH IS AN EXTENDED FLOATING 
  573. POINT NUMBER AND GIVES (ABOUT) 13 
  574. SIGNIFICANT FIGURES. [NOTE TO USERS
  575. OF ├ ╨OWER - FLOAT AND DOUBLE ARE
  576. IDENTICAL]
  577.  
  578. ╒NSIGNED -
  579. ╫E CAN HAVE AN INTEGER WHICH RUNS 
  580. FROM 0 TO 65535 BY DECLARING IT TO BE 
  581. UNSIGNED (WHICH THEN IS ALWAYS 
  582. NON-NEGATIVE). ┴LTHOUGH THIS TYPE 
  583. OCCUPIES THE SAME MEMORY SPACE AS 
  584. INT, DROPPING THE 'SIGN' ALLOWS FOR 
  585. DOUBLE THE MAGNITUDE OF INTEGER.  
  586.  
  587. ╠ONG -
  588. WE CAN ALSO HAVE A LONG INT WHICH 
  589. OCCUPIES TWICE AS MUCH MEMORY AND CAN
  590. REPRESENT INTEGERS FROM (ABOUT) 
  591. -2,000,000,000 TO +2,000,000,000.
  592. [NOTE THAT WITH ├ ╨OWER LONG AND
  593. INT ARE IDENTICAL]
  594.  
  595. ┬ASIC DATA TYPES IN C:
  596.  
  597. INT      - WHOLE NUMBER
  598. FLOAT    - MAY HAVE FRACTIONAL PART
  599. CHAR     - A CHARACTER (SINGLE BYTE)
  600. LONG     - LONG INTEGER
  601. DOUBLE   - DOUBLE-PRECISION FLOAT
  602. UNSIGNED - POSITIVE INTEGER
  603.  
  604. ╘HE SIZES OF NUMERICAL TYPES MAY 
  605. DIFFER FROM ONE MACHINE TO ANOTHER.  
  606. ┘OU MAY ALSO FIND THAT SOME COMPILERS 
  607. DO NOT SUPPORT LONG, DOUBLE, OR 
  608. UNSIGNED DATA TYPES.  
  609.  
  610. ╥EMEMBER ...(ALMOST) ALL C STATEMENTS 
  611. END IN A SEMI-COLON!!!!
  612.  
  613. [END OF LESSON 1 OF 11]
  614.