{"id":147,"date":"2021-05-05T01:04:33","date_gmt":"2021-05-05T05:04:33","guid":{"rendered":"https:\/\/pressbooks.bccampus.ca\/engineeroer\/?post_type=chapter&#038;p=147"},"modified":"2021-05-07T12:21:52","modified_gmt":"2021-05-07T16:21:52","slug":"how-to-think-like-a-computer-scientist-c-version","status":"publish","type":"chapter","link":"https:\/\/pressbooks.bccampus.ca\/engineeroer\/chapter\/how-to-think-like-a-computer-scientist-c-version\/","title":{"raw":"How to Think Like a Computer Scientist C Version","rendered":"How to Think Like a Computer Scientist C Version"},"content":{"raw":"<strong>OER Reviewed:<\/strong> <a href=\"https:\/\/open.umn.edu\/opentextbooks\/textbooks\/how-to-think-like-a-computer-scientist-c-version\" target=\"_blank\" rel=\"noopener\">How to Think Like a Computer Scientist C Version (Green Tea Press)<\/a>\r\n\r\n<strong>Reviewer:<\/strong> James Bailey (No current affiliation)\r\n\r\n<strong>Rating<\/strong>\r\n\r\nEach criterion asks the reviewer to rate it on a scale of 1 to 5 (1 = very poor and 5 = excellent).\r\n<h1>Comprehensiveness - Rating: 5<\/h1>\r\n<em>The OER covers all areas and ideas of the subject appropriately and provides an effective index and\/or glossary.<\/em>\r\n<p class=\"p1\">This book gives a \u201clean and lively\u201d introduction to computer programming. It is intended to give a taste of what programming is about rather than to make the reader into an expert programmer. There is a careful selection of topics so it will be manageable for novice programmers and also form a good basis for further learning.<\/p>\r\n<p class=\"p1\">The author covers only incremental development of software (starting with a very simple, working program and then adding a little at a time so it always works) which is probably the easiest way for a novice to start. Every chapter ends with a Glossary which immediately precedes a set of Exercises. There is an Index at the end of the book.<\/p>\r\n<p class=\"p1\">A note about the Glossaries: the author says \u201cComputer scientists have the annoying habit of using common English words to mean something different from their common English meaning.\u201d I noticed that the glossaries tend to leave out words whose technical meaning is close to the English meaning (probably to keep the glossaries from becoming cumbersome), but here were a couple terms which I felt should have been included:<\/p>\r\n\r\n<ul>\r\n \t<li class=\"p1\"><strong>typecast<\/strong> in Chapter 3;<\/li>\r\n \t<li class=\"p1\"><strong>call-by-reference<\/strong> (evaluation) in Chapter 7.;<\/li>\r\n<\/ul>\r\n<h1>Content Accuracy - Rating: 5<\/h1>\r\n<em>Content, including diagrams and other supplementary material, is accurate, error-free, and unbiased.<\/em>\r\n<p class=\"p1\">The content is based on ANSI C and is accurate. I found an error in one diagram: on page 109 the diagram is not consistent with the body of the text (the values of <code>point<\/code> are inconsistent).<\/p>\r\n\r\n<h1>Relevance\/Longevity - Rating: 5<\/h1>\r\n<em>Content is up-to-date, but not in a way that will quickly make the OER obsolete within a short period of time.\u00a0 The OER is written and\/or arranged in such a way that necessary updates will be relatively easy and straightforward to implement.<\/em>\r\n<p class=\"p1\">C is extremely stable. This book is based on ANSI C (possibly the C98 standard of the language) and will remain current so long as ANSI C is considered to be the standard, which is to say for the foreseeable future.<\/p>\r\n\r\n<h1>Clarity - Rating: 5<\/h1>\r\n<em>The OER is written in lucid, accessible prose, and provides adequate context for any jargon\/technical terminology used.<\/em>\r\n<p class=\"p1\">The author writes very clearly, concisely, and in simple English. Technical terms are explained when they are introduced and also in the Glossary at the end of each chapter. New concepts are introduced as they are needed and are motivated by previous content.<\/p>\r\n<p class=\"p1\">The author often helps students understand the learning objectives of the Exercises with helpful hints such as: \u201cThe point of this exercise is to use the output function <code>printf<\/code> to display values with different types, and to practice developing programs gradually by adding a few statements at a time\u201d or \u201cThe point of this exercise is to use some of the arithmetic operations, and to start thinking about compound entities like the time of day that are represented with multiple values. Also, you might run into problems computing percentages with <code>ints<\/code>, which is the motivation for floating point numbers in the next chapter.\u201d<\/p>\r\n\r\n<h1>Consistency - Rating: 5<\/h1>\r\n<em>The OER is internally consistent in terms of terminology and framework.<\/em>\r\n<p class=\"p1\">I found that the flow of the book was predictable\u2014I don\u2019t remember being surprised. Font usage is consistent and conveys meaning because it follows usual typesetting conventions: Roman (serif) is used for regular text; Roman boldface is used for chapter titles, section headings, and for terms which are being defined; italic is used to reference other books; typewriter is used for program code and URLs; etc.<\/p>\r\n<p class=\"p1\">Roughly speaking, this text is organised around header files so similar tasks which might be used in a program are grouped together. Sections start with easily understood statements and proceed to more abstruse ones.<\/p>\r\n\r\n<h1>Modularity - Rating: 5<\/h1>\r\n<em>The OER is easily and readily divisible into smaller reading sections that can be assigned at different points within the course (i.e., enormous blocks of text without subheadings should be avoided).\u00a0 The OER should not be overly self-referential, and should be easily reorganized, and realigned with various subunits of a course without presenting much disruption to the reader.<\/em>\r\n<p class=\"p1\">Each chapter is based on previous chapters and, given the prerequisite material, can stand by itself.<\/p>\r\n<p class=\"p1\">The Exercises are well thought out. They challenge students to apply their knowledge and and push them in new directions.<\/p>\r\n<p class=\"p1\">The well-designed sections in this text are well thought out and are less than 5 pages long. There is a nice flow through the book\u2014topics arise naturally from previous topics. Topics tend to build on previous topics (there is a hierarchical structure of the concepts presented) and because the text might be described as \u201clean\u201d there is not much that could be left out without affecting later sections.<\/p>\r\n<p class=\"p1\">If someone wanted to add a topic, it would probably be possible to find a section in the text which it could be put after.<\/p>\r\n<p class=\"p1\">If you want to edit, reorganise, or add to this book, then the L<span class=\"s1\">a<\/span>TeX source code <span class=\"s2\">is available from <\/span><a href=\"https:\/\/github.com\/tscheffl\/ThinkC\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/tscheffl\/ThinkC<\/a><span class=\"s2\">.<\/span><\/p>\r\n\r\n<h1>Organization\/Structure\/Flow - Rating: 5<\/h1>\r\n<em>The topics in the OER are presented in a logical, clear fashion.<\/em>\r\n<p class=\"p1\">This book has a nice flow\u2014topics arise naturally from what was previously presented. From time to time an Exercise will present a problem which motivates the topic in the next section. Learning occurs through problem solving: there is a problem which we want to solve by computing; elementary methods are used to find an easy but lengthy solution; more advanced methods are presented; they are used to find a more concise solution; and the new, more powerful methods are used to solve more difficult problems.<\/p>\r\n\r\n<h1>Interface - Rating: 5<\/h1>\r\n<em>The OER is free of significant interface issues, including navigation problems, distortion of images\/charts, and any other display features that may distract or confuse the reader.<\/em>\r\n<p class=\"p1\">I was not aware of any interface problems. There are clickable links in the Table of Contents and Index, and the few that I tried worked as I expected. There are a small number of references between Exercises with clickable links to make it easier to find the Exercise which is being referred to. The images were clear, simply drawn, and without distortion.<\/p>\r\n\r\n<h1>Grammatical\/Spelling Errors - Rating: 4<\/h1>\r\n<em>The OER contains no grammatical or spelling errors.<\/em>\r\n<p class=\"p1\">Here are a few examples of typographical (English) errors which will be spotted by a fluent English speaker, immediately understood, and corrected:<\/p>\r\n\r\n<ul>\r\n \t<li>page 77: \u201cseparated by comma\u201d should be \u201cseparated by commas.\u201d<\/li>\r\n \t<li>page 92: \u201cThe compiler compute the necessary array size\u2026\u201d should be \u201cThe compiler computes the necessary array size\u2026\u201d<\/li>\r\n \t<li>page 111: \u201cpersons age\u201d should be \u201cperson\u2019s age.\u201d<\/li>\r\n<\/ul>\r\n<p class=\"p1\">Programming typographical errors which will be caught when they are copied into a program because they produce compiler errors:<\/p>\r\n\r\n<ul>\r\n \t<li>page 52: <code>printf (\"%f\\n\" dist);<\/code> should be <code>printf(\"%f\\n\", dist);<\/code> (comma missing).<\/li>\r\n \t<li>page 52: <code>printf (\"dy is %f\\n\", dy;<\/code> should read <code>printf (\"dy is %f\\n\", dy);<\/code> (close parenthesis missing).<\/li>\r\n \t<li>page 66: <code>printf(\"%.0f\\t%f\\n\", x ,log(x));<\/code> the format string is used without explanation. It should probably be <code>printf(\"%.1f\\t%f\\n\", x ,log(x));<\/code> In any event, the construction <code>printf(\"%.1f\u2026<\/code> needs an explanation.<\/li>\r\n \t<li>page 66: \u201cEscape sequences can be included anywhere in a string, although in these examples the sequence is the whole string.\u201d It is not clear what the author intended by this.<\/li>\r\n \t<li>page 75: Exercise 6.4 One way to evaluate e<sup>\u2212x<sup>2<\/sup><\/sup> is to use the infinite series expansion<\/li>\r\n<\/ul>\r\n<p style=\"text-align: center;\">[latex]e^{-x^2}=1-2x+\\dfrac{3x^2}{2!}-\\dfrac{4x^3}{3!}+\\dfrac{5x^4}{4!}\\cdots[\/latex]<\/p>\r\nThis is not correct. It should be\r\n<p style=\"text-align: center;\">[latex]e^{-x^2}=1-x^2+\\dfrac{x^4}{2!}-\\dfrac{x^6}{3!}+\\dfrac{x^8}{4!}+\\cdots[\/latex]<\/p>\r\nor\r\n<p style=\"text-align: center;\">[latex](1-x)e^{-x}=1-2x+\\dfrac{3x^2}{2!}-\\dfrac{4x^3}{3!}+\\dfrac{5x^4}{4!}\\cdots[\/latex]<\/p>\r\n<p class=\"p1\">Students who write the program in this exercise will test it with several values and use a calculator to check their results. There is no way for them to track down where the error is!<\/p>\r\n\r\n<ul>\r\n \t<li class=\"p1\">page 110 \u201c(without the s)\u201d should be \u201c(without the *s)<\/li>\r\n<\/ul>\r\n<h1>Diversity and Inclusion - Rating: 5<\/h1>\r\n<em>The OER reflects diversity and inclusion regarding culture, gender, ethnicity, national origin, age, disability, sexual orientation, education, religion. It does not include insensitive or offensive language in these areas.<\/em>\r\n<p class=\"p1\">This textbook is abstract and there are no cultural references. It assumes that the reader is fluent in English and has high school level algebra and knowledge of the most common functions i.e. the exponential, logarithm, and trigonometric functions (Exercise 6.4 on page 75 is an exception). I was not aware of any gender specific references or anything which might single out any person or group. I am aware that \u201cprimary\u201d and \u201csecondary\u201d are being substituted for \u201cmaster\u201d and \u201cslave\u201d in server software, but I couldn\u2019t see any problem similar to this one.<\/p>\r\n\r\n<h1>Recommendation<\/h1>\r\n<ol>\r\n \t<li><em>Do you recommend this resource for the specific course taught in the first-year engineering common curriculum (in place of a commercially available resource)?\r\n<\/em>Yes.<\/li>\r\n \t<li><em>If yes, please briefly summarize the reasons for recommending this resource\r\n<\/em>\r\n<p class=\"p1\">This text uses C to provide a gentle introduction to programming. The concepts are presented in a generic way so they can be built upon or transferred to similar languages such as C++, C#, Java, Perl, PHP, Python, etc.<\/p>\r\n<\/li>\r\n \t<li><em>What gaps in content have you identified?\r\n<\/em>\r\n<p class=\"p1\">This OER provides a nice introduction to programming in C and by the end of it a student should be able to write simple programs which perform a variety of tasks and display the results on the terminal. However, it is aimed at students in general, not specifically STEMM (Science, Technology, Engineering, Mathematics, and Medicine) students. It does not stress calculations, so an engineering student would probably need a single page reference card listing the mathematics functions which are available when the header file <code>&lt;math.h&gt;<\/code> is loaded. The format string of <code>printf<\/code> needs further explanation. For example, \u201cprecision\u201d and \u201cwidth\u201d should be discussed. An introduction to reading and writing to disc (for example <code>fscanf<\/code> and <code>fprintf<\/code> found in <code>&lt;stdio.h&gt;<\/code>) is needed so results can be stored, retrieved later, and inserted into reports.<\/p>\r\n<p class=\"p1\">I would probably make students aware of <a href=\"https:\/\/en.wikipedia.org\/wiki\/C_standard_library\" target=\"_blank\" rel=\"noopener\">Wikipedia: <span class=\"s1\">C standard library<\/span><\/a><\/p>\r\n<\/li>\r\n<\/ol>","rendered":"<p><strong>OER Reviewed:<\/strong> <a href=\"https:\/\/open.umn.edu\/opentextbooks\/textbooks\/how-to-think-like-a-computer-scientist-c-version\" target=\"_blank\" rel=\"noopener\">How to Think Like a Computer Scientist C Version (Green Tea Press)<\/a><\/p>\n<p><strong>Reviewer:<\/strong> James Bailey (No current affiliation)<\/p>\n<p><strong>Rating<\/strong><\/p>\n<p>Each criterion asks the reviewer to rate it on a scale of 1 to 5 (1 = very poor and 5 = excellent).<\/p>\n<h1>Comprehensiveness &#8211; Rating: 5<\/h1>\n<p><em>The OER covers all areas and ideas of the subject appropriately and provides an effective index and\/or glossary.<\/em><\/p>\n<p class=\"p1\">This book gives a \u201clean and lively\u201d introduction to computer programming. It is intended to give a taste of what programming is about rather than to make the reader into an expert programmer. There is a careful selection of topics so it will be manageable for novice programmers and also form a good basis for further learning.<\/p>\n<p class=\"p1\">The author covers only incremental development of software (starting with a very simple, working program and then adding a little at a time so it always works) which is probably the easiest way for a novice to start. Every chapter ends with a Glossary which immediately precedes a set of Exercises. There is an Index at the end of the book.<\/p>\n<p class=\"p1\">A note about the Glossaries: the author says \u201cComputer scientists have the annoying habit of using common English words to mean something different from their common English meaning.\u201d I noticed that the glossaries tend to leave out words whose technical meaning is close to the English meaning (probably to keep the glossaries from becoming cumbersome), but here were a couple terms which I felt should have been included:<\/p>\n<ul>\n<li class=\"p1\"><strong>typecast<\/strong> in Chapter 3;<\/li>\n<li class=\"p1\"><strong>call-by-reference<\/strong> (evaluation) in Chapter 7.;<\/li>\n<\/ul>\n<h1>Content Accuracy &#8211; Rating: 5<\/h1>\n<p><em>Content, including diagrams and other supplementary material, is accurate, error-free, and unbiased.<\/em><\/p>\n<p class=\"p1\">The content is based on ANSI C and is accurate. I found an error in one diagram: on page 109 the diagram is not consistent with the body of the text (the values of <code>point<\/code> are inconsistent).<\/p>\n<h1>Relevance\/Longevity &#8211; Rating: 5<\/h1>\n<p><em>Content is up-to-date, but not in a way that will quickly make the OER obsolete within a short period of time.\u00a0 The OER is written and\/or arranged in such a way that necessary updates will be relatively easy and straightforward to implement.<\/em><\/p>\n<p class=\"p1\">C is extremely stable. This book is based on ANSI C (possibly the C98 standard of the language) and will remain current so long as ANSI C is considered to be the standard, which is to say for the foreseeable future.<\/p>\n<h1>Clarity &#8211; Rating: 5<\/h1>\n<p><em>The OER is written in lucid, accessible prose, and provides adequate context for any jargon\/technical terminology used.<\/em><\/p>\n<p class=\"p1\">The author writes very clearly, concisely, and in simple English. Technical terms are explained when they are introduced and also in the Glossary at the end of each chapter. New concepts are introduced as they are needed and are motivated by previous content.<\/p>\n<p class=\"p1\">The author often helps students understand the learning objectives of the Exercises with helpful hints such as: \u201cThe point of this exercise is to use the output function <code>printf<\/code> to display values with different types, and to practice developing programs gradually by adding a few statements at a time\u201d or \u201cThe point of this exercise is to use some of the arithmetic operations, and to start thinking about compound entities like the time of day that are represented with multiple values. Also, you might run into problems computing percentages with <code>ints<\/code>, which is the motivation for floating point numbers in the next chapter.\u201d<\/p>\n<h1>Consistency &#8211; Rating: 5<\/h1>\n<p><em>The OER is internally consistent in terms of terminology and framework.<\/em><\/p>\n<p class=\"p1\">I found that the flow of the book was predictable\u2014I don\u2019t remember being surprised. Font usage is consistent and conveys meaning because it follows usual typesetting conventions: Roman (serif) is used for regular text; Roman boldface is used for chapter titles, section headings, and for terms which are being defined; italic is used to reference other books; typewriter is used for program code and URLs; etc.<\/p>\n<p class=\"p1\">Roughly speaking, this text is organised around header files so similar tasks which might be used in a program are grouped together. Sections start with easily understood statements and proceed to more abstruse ones.<\/p>\n<h1>Modularity &#8211; Rating: 5<\/h1>\n<p><em>The OER is easily and readily divisible into smaller reading sections that can be assigned at different points within the course (i.e., enormous blocks of text without subheadings should be avoided).\u00a0 The OER should not be overly self-referential, and should be easily reorganized, and realigned with various subunits of a course without presenting much disruption to the reader.<\/em><\/p>\n<p class=\"p1\">Each chapter is based on previous chapters and, given the prerequisite material, can stand by itself.<\/p>\n<p class=\"p1\">The Exercises are well thought out. They challenge students to apply their knowledge and and push them in new directions.<\/p>\n<p class=\"p1\">The well-designed sections in this text are well thought out and are less than 5 pages long. There is a nice flow through the book\u2014topics arise naturally from previous topics. Topics tend to build on previous topics (there is a hierarchical structure of the concepts presented) and because the text might be described as \u201clean\u201d there is not much that could be left out without affecting later sections.<\/p>\n<p class=\"p1\">If someone wanted to add a topic, it would probably be possible to find a section in the text which it could be put after.<\/p>\n<p class=\"p1\">If you want to edit, reorganise, or add to this book, then the L<span class=\"s1\">a<\/span>TeX source code <span class=\"s2\">is available from <\/span><a href=\"https:\/\/github.com\/tscheffl\/ThinkC\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/tscheffl\/ThinkC<\/a><span class=\"s2\">.<\/span><\/p>\n<h1>Organization\/Structure\/Flow &#8211; Rating: 5<\/h1>\n<p><em>The topics in the OER are presented in a logical, clear fashion.<\/em><\/p>\n<p class=\"p1\">This book has a nice flow\u2014topics arise naturally from what was previously presented. From time to time an Exercise will present a problem which motivates the topic in the next section. Learning occurs through problem solving: there is a problem which we want to solve by computing; elementary methods are used to find an easy but lengthy solution; more advanced methods are presented; they are used to find a more concise solution; and the new, more powerful methods are used to solve more difficult problems.<\/p>\n<h1>Interface &#8211; Rating: 5<\/h1>\n<p><em>The OER is free of significant interface issues, including navigation problems, distortion of images\/charts, and any other display features that may distract or confuse the reader.<\/em><\/p>\n<p class=\"p1\">I was not aware of any interface problems. There are clickable links in the Table of Contents and Index, and the few that I tried worked as I expected. There are a small number of references between Exercises with clickable links to make it easier to find the Exercise which is being referred to. The images were clear, simply drawn, and without distortion.<\/p>\n<h1>Grammatical\/Spelling Errors &#8211; Rating: 4<\/h1>\n<p><em>The OER contains no grammatical or spelling errors.<\/em><\/p>\n<p class=\"p1\">Here are a few examples of typographical (English) errors which will be spotted by a fluent English speaker, immediately understood, and corrected:<\/p>\n<ul>\n<li>page 77: \u201cseparated by comma\u201d should be \u201cseparated by commas.\u201d<\/li>\n<li>page 92: \u201cThe compiler compute the necessary array size\u2026\u201d should be \u201cThe compiler computes the necessary array size\u2026\u201d<\/li>\n<li>page 111: \u201cpersons age\u201d should be \u201cperson\u2019s age.\u201d<\/li>\n<\/ul>\n<p class=\"p1\">Programming typographical errors which will be caught when they are copied into a program because they produce compiler errors:<\/p>\n<ul>\n<li>page 52: <code>printf (\"%f\\n\" dist);<\/code> should be <code>printf(\"%f\\n\", dist);<\/code> (comma missing).<\/li>\n<li>page 52: <code>printf (\"dy is %f\\n\", dy;<\/code> should read <code>printf (\"dy is %f\\n\", dy);<\/code> (close parenthesis missing).<\/li>\n<li>page 66: <code>printf(\"%.0f\\t%f\\n\", x ,log(x));<\/code> the format string is used without explanation. It should probably be <code>printf(\"%.1f\\t%f\\n\", x ,log(x));<\/code> In any event, the construction <code>printf(\"%.1f\u2026<\/code> needs an explanation.<\/li>\n<li>page 66: \u201cEscape sequences can be included anywhere in a string, although in these examples the sequence is the whole string.\u201d It is not clear what the author intended by this.<\/li>\n<li>page 75: Exercise 6.4 One way to evaluate e<sup>\u2212x<sup>2<\/sup><\/sup> is to use the infinite series expansion<\/li>\n<\/ul>\n<p style=\"text-align: center;\">[latex]e^{-x^2}=1-2x+\\dfrac{3x^2}{2!}-\\dfrac{4x^3}{3!}+\\dfrac{5x^4}{4!}\\cdots[\/latex]<\/p>\n<p>This is not correct. It should be<\/p>\n<p style=\"text-align: center;\">[latex]e^{-x^2}=1-x^2+\\dfrac{x^4}{2!}-\\dfrac{x^6}{3!}+\\dfrac{x^8}{4!}+\\cdots[\/latex]<\/p>\n<p>or<\/p>\n<p style=\"text-align: center;\">[latex](1-x)e^{-x}=1-2x+\\dfrac{3x^2}{2!}-\\dfrac{4x^3}{3!}+\\dfrac{5x^4}{4!}\\cdots[\/latex]<\/p>\n<p class=\"p1\">Students who write the program in this exercise will test it with several values and use a calculator to check their results. There is no way for them to track down where the error is!<\/p>\n<ul>\n<li class=\"p1\">page 110 \u201c(without the s)\u201d should be \u201c(without the *s)<\/li>\n<\/ul>\n<h1>Diversity and Inclusion &#8211; Rating: 5<\/h1>\n<p><em>The OER reflects diversity and inclusion regarding culture, gender, ethnicity, national origin, age, disability, sexual orientation, education, religion. It does not include insensitive or offensive language in these areas.<\/em><\/p>\n<p class=\"p1\">This textbook is abstract and there are no cultural references. It assumes that the reader is fluent in English and has high school level algebra and knowledge of the most common functions i.e. the exponential, logarithm, and trigonometric functions (Exercise 6.4 on page 75 is an exception). I was not aware of any gender specific references or anything which might single out any person or group. I am aware that \u201cprimary\u201d and \u201csecondary\u201d are being substituted for \u201cmaster\u201d and \u201cslave\u201d in server software, but I couldn\u2019t see any problem similar to this one.<\/p>\n<h1>Recommendation<\/h1>\n<ol>\n<li><em>Do you recommend this resource for the specific course taught in the first-year engineering common curriculum (in place of a commercially available resource)?<br \/>\n<\/em>Yes.<\/li>\n<li><em>If yes, please briefly summarize the reasons for recommending this resource<br \/>\n<\/em><\/p>\n<p class=\"p1\">This text uses C to provide a gentle introduction to programming. The concepts are presented in a generic way so they can be built upon or transferred to similar languages such as C++, C#, Java, Perl, PHP, Python, etc.<\/p>\n<\/li>\n<li><em>What gaps in content have you identified?<br \/>\n<\/em><\/p>\n<p class=\"p1\">This OER provides a nice introduction to programming in C and by the end of it a student should be able to write simple programs which perform a variety of tasks and display the results on the terminal. However, it is aimed at students in general, not specifically STEMM (Science, Technology, Engineering, Mathematics, and Medicine) students. It does not stress calculations, so an engineering student would probably need a single page reference card listing the mathematics functions which are available when the header file <code>&lt;math.h&gt;<\/code> is loaded. The format string of <code>printf<\/code> needs further explanation. For example, \u201cprecision\u201d and \u201cwidth\u201d should be discussed. An introduction to reading and writing to disc (for example <code>fscanf<\/code> and <code>fprintf<\/code> found in <code>&lt;stdio.h&gt;<\/code>) is needed so results can be stored, retrieved later, and inserted into reports.<\/p>\n<p class=\"p1\">I would probably make students aware of <a href=\"https:\/\/en.wikipedia.org\/wiki\/C_standard_library\" target=\"_blank\" rel=\"noopener\">Wikipedia: <span class=\"s1\">C standard library<\/span><\/a><\/p>\n<\/li>\n<\/ol>\n","protected":false},"author":922,"menu_order":1,"template":"","meta":{"pb_show_title":"on","pb_short_title":"","pb_subtitle":"","pb_authors":[],"pb_section_license":""},"chapter-type":[],"contributor":[],"license":[],"class_list":["post-147","chapter","type-chapter","status-publish","hentry"],"part":76,"_links":{"self":[{"href":"https:\/\/pressbooks.bccampus.ca\/engineeroer\/wp-json\/pressbooks\/v2\/chapters\/147","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pressbooks.bccampus.ca\/engineeroer\/wp-json\/pressbooks\/v2\/chapters"}],"about":[{"href":"https:\/\/pressbooks.bccampus.ca\/engineeroer\/wp-json\/wp\/v2\/types\/chapter"}],"author":[{"embeddable":true,"href":"https:\/\/pressbooks.bccampus.ca\/engineeroer\/wp-json\/wp\/v2\/users\/922"}],"version-history":[{"count":8,"href":"https:\/\/pressbooks.bccampus.ca\/engineeroer\/wp-json\/pressbooks\/v2\/chapters\/147\/revisions"}],"predecessor-version":[{"id":230,"href":"https:\/\/pressbooks.bccampus.ca\/engineeroer\/wp-json\/pressbooks\/v2\/chapters\/147\/revisions\/230"}],"part":[{"href":"https:\/\/pressbooks.bccampus.ca\/engineeroer\/wp-json\/pressbooks\/v2\/parts\/76"}],"metadata":[{"href":"https:\/\/pressbooks.bccampus.ca\/engineeroer\/wp-json\/pressbooks\/v2\/chapters\/147\/metadata\/"}],"wp:attachment":[{"href":"https:\/\/pressbooks.bccampus.ca\/engineeroer\/wp-json\/wp\/v2\/media?parent=147"}],"wp:term":[{"taxonomy":"chapter-type","embeddable":true,"href":"https:\/\/pressbooks.bccampus.ca\/engineeroer\/wp-json\/pressbooks\/v2\/chapter-type?post=147"},{"taxonomy":"contributor","embeddable":true,"href":"https:\/\/pressbooks.bccampus.ca\/engineeroer\/wp-json\/wp\/v2\/contributor?post=147"},{"taxonomy":"license","embeddable":true,"href":"https:\/\/pressbooks.bccampus.ca\/engineeroer\/wp-json\/wp\/v2\/license?post=147"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}