Programming Language  C Tutorial Introduction 主講人:虞台文.

Slides:



Advertisements
Similar presentations
Character Arrays (Single-Dimensional Arrays) A char data type is needed to hold a single character. To store a string we have to use a single-dimensional.
Advertisements

Lectures 10 & 11.
What is a pointer? First of all, it is a variable, just like other variables you studied So it has type, storage etc. Difference: it can only store the.
Nirmalya Roy School of Electrical Engineering and Computer Science Washington State University Cpt S 122 – Data Structures Characters and Strings.
Chapter 7: User-Defined Functions II
Lecture 2 Introduction to C Programming
Introduction to C Programming
1 CS 161 Introduction to Programming and Problem Solving Chapter 9 C++ Program Components Herbert G. Mayer, PSU Status 10/20/2014.
Introduction to C Programming
1 Lecture 7  Fundamental data types in C  Data type conversion:  Automatic  Casting  Character processing  getchar()  putchar()  Macros on ctype.h.
Engineering Computing I Chapter 1 – Part B A Tutorial Introduction continued.
1 Homework Assignments Turn in HW1 (If not done yet, catch up!) Questions about HW1? Anyone still stuck on apply / UNIX account? Everyone have the books?
1 Lecture 2  Input-Process-Output  The Hello-world program  A Feet-to-inches program  Variables, expressions, assignments & initialization  printf()
 2007 Pearson Education, Inc. All rights reserved Introduction to C Programming.
More on Numerical Computation CS-2301 B-term More on Numerical Computation CS-2301, System Programming for Non-majors (Slides include materials from.
流程控制: while loop 迴圈 Test condition Enter loop Yes (non-0) Execute Loop body no exit F=0 F=F+20 … F=F
1 Key Concepts:  Why C?  Life Cycle Of a C program,  What is a computer program?  A program statement?  Basic parts of a C program,  Printf() function?
Imperative Programming Prof. Béat Hirsbrunner Amine Tafat, PhD Student Matthias Buchs and Raphaël Lesceux, Graduate Students Department of Informatics.
0 Arrays (1/2) #include /* count digits, white space, others */ main() { int c, i, nwhite, nother; int ndigit[10]; nwhite = nother = 0; for (i = 0; i
Functions / Procedures
Introduction to C Programming Overview of C Hello World program Unix environment C programming basics.
CS100A, Fall 1997, Lectures 221 CS100A, Fall 1997 Lecture 22, Tuesday 18 November Introduction To C Goal: Acquire a reading knowledge of basic C. Concepts:
Prof. Béat Hirsbrunner Fulvio Frapolli, PhD Student (exercises) Bachelor students : - Major in computer science (first year, 2nd term) - Major in information.
Guide To UNIX Using Linux Third Edition
Introduction to C Programming
Chapter 3: Introduction to C Programming Language C development environment A simple program example Characters and tokens Structure of a C program –comment.
C Programming. Chapter – 1 Introduction Study Book for one month – 25% Learning rate Use Compiler for one month – 60%
Introduction to C Language
Computer Science 210 Computer Organization Introduction to C.
C Programming A Modern Approach
1 COMP 2130 Introduction to Computer Systems Computing Science Thompson Rivers University.
C Programming Lecture 3. The Three Stages of Compiling a Program b The preprocessor is invoked The source code is modified b The compiler itself is invoked.
By Sidhant Garg.  C was developed between by Dennis Ritchie at Bell Laboratories for use with the Unix Operating System.  Unlike previously.
C Programming Tutorial – Part I CS Introduction to Operating Systems.
C Programming Lecture 4 : Variables , Data Types
Programming I Introduction Introduction The only way to learn a new programming language is by writing programs in it. The first program to.
Outline Symbolic Constants Character Input and Output if … else switch…case.
Programming With C.
Engineering Computing I Chapter 1 – Part A A Tutorial Introduction.
History of C 1950 – FORTRAN (Formula Translator) 1959 – COBOL (Common Business Oriented Language) 1971 – Pascal Between Ada.
1/16 Programski jezik C Vladimir Filipović
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. Chapter 2 Chapter 2 - Introduction to C Programming.
Introduction to C Programming Chapter 2 : Data Input, Processing and Output.
Structure of a C program Preprocessor directive (header file) Program statement } Preprocessor directive Global variable declaration Comments Local variable.
C Program Design Introduction to C Programming 主講人:虞台文.
Prof. Béat Hirsbrunner Ammar Halabi, PhD student (exercises) Dani Rotzetter, Master student (exercises) Bachelor students : Major in computer science (3rd.
1 Homework Done the reading? –K&R –Glass Chapters 1 and 2 Applied for cs240? (If not, keep at it!) Gotten a UNIX account? (If not, keep at it!)
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 1 Chapter 2 - Introduction to C Programming Outline.
Operating System Discussion Section. The Basics of C Reference: Lecture note 2 and 3 notes.html.
Tokens in C  Keywords  These are reserved words of the C language. For example int, float, if, else, for, while etc.  Identifiers  An Identifier is.
Sudeshna Sarkar, IIT Kharagpur 1 Programming and Data Structure Sudeshna Sarkar Lecture 3.
小型系統 心情 vs. 古典樂 心情 vs. 古典樂 浪漫求籤系統 美食導航系統 季潔亭雅鈺熒岱芸 美食導航系統 楊氏音樂模擬大會考人瑋 若維 芷萱 伽倩 楊氏音樂模擬大會考 麥當勞熱量計算系統 火星文困擾你嗎 ? 火星文困擾你嗎 ? 歌詞知多少 - 挑戰你的腦容量英琪 日馨 青雪 鈺娟.
Chapter 1 slides1 What is C? A high-level language that is extremely useful for engineering computations. A computer language that has endured for almost.
From Algorithms to Programs Both are sets of instructions on how to do a task Algorithm: –talking to humans, easy to understand –in plain (English) language.
User-Written Functions
Computer Science 210 Computer Organization
C Programming Tutorial – Part I
Introduction to C CSE 2031 Fall /3/ :33 AM.
Getting Started with C.
Computer Science 210 Computer Organization
Chapter 2 - Introduction to C Programming
Your questions from last session
Homework Applied for cs240? (If not, keep at it!) 8/10 Done with HW1?
C Programming Getting started Variables Basic C operators Conditionals
Introduction to C EECS May 2019.
An Overview of C.
Introduction to C Programming
Introduction to C CSE 2031 Fall /15/2019 8:26 AM.
Programming Language  C Control Flow
INTRODUCTION TO C.
Presentation transcript:

Programming Language  C Tutorial Introduction 主講人:虞台文

Content Background Getting Started IDE (Integrated Development Environment) Main Parts of C Programs Variables and Arithmetic Expressions The for statement Symbolic Constants Character Input and Output Arrays Functions Character Arrays External Variables and Scope

Programming Language  C Tutorial Introduction Background

Textbooks 1. C How to Program, 5th Edition, by Harvey M. Deitel, Paul J. Deitel. 2. The C programming Language, 2nd Editon, by Brian W. Kernighan and Dennis M. Ritchie, Prentice-Hall in 1988.

Grading 1. Homework40% 2. Midterm30% 3. Final30% 4. Other10%

The C Language Currently, the most commonly-used language for embedded systems – High-level assembly Very portable – compilers exist for virtually every processor Easy-to-understand compilation Produces efficient code Fairly concise

C History Developed between 1969 and 1973 along with Unix Due mostly to Dennis Ritchie Designed for systems programming – Operating systems – Utility programs – Compilers – Filters Evolved from B, which evolved from BCPL The Development of the C Language

Computer Architecture ALU Control CPU Input Output Memory Input Device Output Device

Programming Language  C Tutorial Introduction Getting Started

Setting Program Development Environment

%SystemRoot%\system32\cmd.exe /K "F:\VS6\VC98\Bin\VCVARS32.BAT" %SystemRoot%\system32\cmd.exe /K "F:\VS6\VC98\Bin\VCVARS32.BAT"

Setting Program Development Environment

Our First C Program  Hello World

#include main() { printf("hello, world\n"); } #include main() { printf("hello, world\n"); }

Our First C Program  Hello World #include main() { printf("hello, world\n"); } #include main() { printf("hello, world\n"); } include information about standard library define a function called main that received no argument values define a function called main that received no argument values

Our First C Program  Hello World #include main() { printf("hello, world\n"); } #include main() { printf("hello, world\n"); } define a function called main that received no argument values define a function called main that received no argument values

Our First C Program  Hello World #include main() { printf("hello, world\n"); } #include main() { printf("hello, world\n"); } statements of main are enclosed in braces

Our First C Program  Hello World #include main() { printf("hello, world\n"); } #include main() { printf("hello, world\n"); } main calls library function printf

Our First C Program  Hello World

Compiling and Linking

Execution

Exercises 1. Create some typo errors for Hello.c, and redo the compiling/linking process. Watch and understand the screen output reported by cl. 2. Add more printf statements in Hello.c and redo the compiling/linking/execution process.

Programming Language  C Tutorial Introduction IDE

Visual C++ 6.0

Win32 Console Application

Hello_IDE

Hello.c

Building Application

Execution

Files Generated by IDE

Programming Language  C Tutorial Introduction Main Parts of C Programs

Main Parts Headers/Comments/Expressions #include /* Our first C Program */ main() { printf("hello, world\n"); } #include /* Our first C Program */ main() { printf("hello, world\n"); }

Example Identify the three parts in the following program

Remark C++ also uses // to comment a single line.

The Syntax of C Language

Programming Language  C Tutorial Introduction Variables and Arithmetic Expressions

Example: Fahrenheit-Celsius table

Example: Fahrenheit-Celsius Table #include /* print Fahrenheit-Celsius table for fahr = 0, 20,..., 300 */ main() { int fahr, celsius; int lower, upper, step; lower = 0; /* lower limit of temperature scale */ upper = 300; /* upper limit */ step = 20; /* step size */ fahr = lower; while (fahr <= upper) { celsius = 5 * (fahr-32) / 9; printf("%d\t%d\n", fahr, celsius); fahr = fahr + step; } #include /* print Fahrenheit-Celsius table for fahr = 0, 20,..., 300 */ main() { int fahr, celsius; int lower, upper, step; lower = 0; /* lower limit of temperature scale */ upper = 300; /* upper limit */ step = 20; /* step size */ fahr = lower; while (fahr <= upper) { celsius = 5 * (fahr-32) / 9; printf("%d\t%d\n", fahr, celsius); fahr = fahr + step; }

Example: Fahrenheit-Celsius Table #include /* print Fahrenheit-Celsius table for fahr = 0, 20,..., 300 */ main() { int fahr, celsius; int lower, upper, step; lower = 0; /* lower limit of temperature scale */ upper = 300; /* upper limit */ step = 20; /* step size */ fahr = lower; while (fahr <= upper) { celsius = 5 * (fahr-32) / 9; printf("%d\t%d\n", fahr, celsius); fahr = fahr + step; } #include /* print Fahrenheit-Celsius table for fahr = 0, 20,..., 300 */ main() { int fahr, celsius; int lower, upper, step; lower = 0; /* lower limit of temperature scale */ upper = 300; /* upper limit */ step = 20; /* step size */ fahr = lower; while (fahr <= upper) { celsius = 5 * (fahr-32) / 9; printf("%d\t%d\n", fahr, celsius); fahr = fahr + step; }

Statements #include /* print Fahrenheit-Celsius table for fahr = 0, 20,..., 300 */ main() { int fahr, celsius; int lower, upper, step; lower = 0; /* lower limit of temperature scale */ upper = 300; /* upper limit */ step = 20; /* step size */ fahr = lower; while (fahr <= upper) { celsius = 5 * (fahr-32) / 9; printf("%d\t%d\n", fahr, celsius); fahr = fahr + step; } #include /* print Fahrenheit-Celsius table for fahr = 0, 20,..., 300 */ main() { int fahr, celsius; int lower, upper, step; lower = 0; /* lower limit of temperature scale */ upper = 300; /* upper limit */ step = 20; /* step size */ fahr = lower; while (fahr <= upper) { celsius = 5 * (fahr-32) / 9; printf("%d\t%d\n", fahr, celsius); fahr = fahr + step; } Individual statements are terminated by semicolons.

Variable Declarations #include /* print Fahrenheit-Celsius table for fahr = 0, 20,..., 300 */ main() { int fahr, celsius; int lower, upper, step; lower = 0; /* lower limit of temperature scale */ upper = 300; /* upper limit */ step = 20; /* step size */ fahr = lower; while (fahr <= upper) { celsius = 5 * (fahr-32) / 9; printf("%d\t%d\n", fahr, celsius); fahr = fahr + step; } #include /* print Fahrenheit-Celsius table for fahr = 0, 20,..., 300 */ main() { int fahr, celsius; int lower, upper, step; lower = 0; /* lower limit of temperature scale */ upper = 300; /* upper limit */ step = 20; /* step size */ fahr = lower; while (fahr <= upper) { celsius = 5 * (fahr-32) / 9; printf("%d\t%d\n", fahr, celsius); fahr = fahr + step; } } In C, all variables must be declared before they are used. – Usually declared at the beginning of the function before any executable statements. A declaration announces the properties of variables; it consists of a name and a list of variables. In C, all variables must be declared before they are used. – Usually declared at the beginning of the function before any executable statements. A declaration announces the properties of variables; it consists of a name and a list of variables.

Variable Declarations #include /* print Fahrenheit-Celsius table for fahr = 0, 20,..., 300 */ main() { int fahr, celsius; int lower, upper, step; lower = 0; /* lower limit of temperature scale */ upper = 300; /* upper limit */ step = 20; /* step size */ fahr = lower; while (fahr <= upper) { celsius = 5 * (fahr-32) / 9; printf("%d\t%d\n", fahr, celsius); fahr = fahr + step; } #include /* print Fahrenheit-Celsius table for fahr = 0, 20,..., 300 */ main() { int fahr, celsius; int lower, upper, step; lower = 0; /* lower limit of temperature scale */ upper = 300; /* upper limit */ step = 20; /* step size */ fahr = lower; while (fahr <= upper) { celsius = 5 * (fahr-32) / 9; printf("%d\t%d\n", fahr, celsius); fahr = fahr + step; } } The integer data type. What is its range? The integer data type. What is its range?

Integer The range of integer depends on machine – 16-bit machine   – 32-bit machine   int fahr, celsius; int lower, upper, step; int fahr, celsius; int lower, upper, step;

Integer The range of integer depends on machine INT_MIN  INT_MAX int fahr, celsius; int lower, upper, step; int fahr, celsius; int lower, upper, step;

Integer The range of integer depends on machine INT_MIN  INT_MAX int fahr, celsius; int lower, upper, step; int fahr, celsius; int lower, upper, step;

Float A float number is typically a 32-bit quantity, with at least six significant digits and magnitude generally between about and float fahr, celsius; float lower, upper, step; float fahr, celsius; float lower, upper, step; FLT_MIN  FLT_MAX

Fundamental Types TypeSize char 1 byte short 2 bytes int 4 bytes long 4 bytes float 4 bytes double 8 bytes Machine Dependent

TypeSize char 1 byte short 2 bytes int 4 bytes long 4 bytes float 4 bytes double 8 bytes TypeSize char 1 byte short 2 bytes int 4 bytes long 4 bytes float 4 bytes double 8 bytes Fundamental Types in Microsoft C++

Assignment Statements #include /* print Fahrenheit-Celsius table for fahr = 0, 20,..., 300 */ main() { int fahr, celsius; int lower, upper, step; lower = 0; /* lower limit of temperature scale */ upper = 300; /* upper limit */ step = 20; /* step size */ fahr = lower; while (fahr <= upper) { celsius = 5 * (fahr-32) / 9; printf("%d\t%d\n", fahr, celsius); fahr = fahr + step; } #include /* print Fahrenheit-Celsius table for fahr = 0, 20,..., 300 */ main() { int fahr, celsius; int lower, upper, step; lower = 0; /* lower limit of temperature scale */ upper = 300; /* upper limit */ step = 20; /* step size */ fahr = lower; while (fahr <= upper) { celsius = 5 * (fahr-32) / 9; printf("%d\t%d\n", fahr, celsius); fahr = fahr + step; } } Assign a value computed from an expression to a variable.

While Loop #include /* print Fahrenheit-Celsius table for fahr = 0, 20,..., 300 */ main() { int fahr, celsius; int lower, upper, step; lower = 0; /* lower limit of temperature scale */ upper = 300; /* upper limit */ step = 20; /* step size */ fahr = lower; while (fahr <= upper) { celsius = 5 * (fahr-32) / 9; printf("%d\t%d\n", fahr, celsius); fahr = fahr + step; } #include /* print Fahrenheit-Celsius table for fahr = 0, 20,..., 300 */ main() { int fahr, celsius; int lower, upper, step; lower = 0; /* lower limit of temperature scale */ upper = 300; /* upper limit */ step = 20; /* step size */ fahr = lower; while (fahr <= upper) { celsius = 5 * (fahr-32) / 9; printf("%d\t%d\n", fahr, celsius); fahr = fahr + step; } } The body of a while loop is repeatedly executed as long as the condition expression is tested true. while( cond_expression ) statement

Arithmetical Operations #include /* print Fahrenheit-Celsius table for fahr = 0, 20,..., 300 */ main() { int fahr, celsius; int lower, upper, step; lower = 0; /* lower limit of temperature scale */ upper = 300; /* upper limit */ step = 20; /* step size */ fahr = lower; while (fahr <= upper) { celsius = 5 * (fahr-32) / 9; printf("%d\t%d\n", fahr, celsius); fahr = fahr + step; } #include /* print Fahrenheit-Celsius table for fahr = 0, 20,..., 300 */ main() { int fahr, celsius; int lower, upper, step; lower = 0; /* lower limit of temperature scale */ upper = 300; /* upper limit */ step = 20; /* step size */ fahr = lower; while (fahr <= upper) { celsius = 5 * (fahr-32) / 9; printf("%d\t%d\n", fahr, celsius); fahr = fahr + step; } } Can it be “ celsius = 5/9*(fahr-32); ”? Why? Can it be “ celsius = 5/9*(fahr-32); ”? Why?

printf  General-Purpose Output Formatting Function #include /* print Fahrenheit-Celsius table for fahr = 0, 20,..., 300 */ main() { int fahr, celsius; int lower, upper, step; lower = 0; /* lower limit of temperature scale */ upper = 300; /* upper limit */ step = 20; /* step size */ fahr = lower; while (fahr <= upper) { celsius = 5 * (fahr-32) / 9; printf("%d\t%d\n", fahr, celsius); fahr = fahr + step; } #include /* print Fahrenheit-Celsius table for fahr = 0, 20,..., 300 */ main() { int fahr, celsius; int lower, upper, step; lower = 0; /* lower limit of temperature scale */ upper = 300; /* upper limit */ step = 20; /* step size */ fahr = lower; while (fahr <= upper) { celsius = 5 * (fahr-32) / 9; printf("%d\t%d\n", fahr, celsius); fahr = fahr + step; } }

printf  General-Purpose Output Formatting Function printf("%d\t%d\n", fahr, celsius); format string decimaltabdecimalnewline

printf  General-Purpose Output Formatting Function #include /* print Fahrenheit-Celsius table for fahr = 0, 20,..., 300 */ main() { int fahr, celsius; int lower, upper, step; lower = 0; /* lower limit of temperature scale */ upper = 300; /* upper limit */ step = 20; /* step size */ fahr = lower; while (fahr <= upper) { celsius = 5 * (fahr-32) / 9; printf("%d\t%d\n", fahr, celsius); fahr = fahr + step; } #include /* print Fahrenheit-Celsius table for fahr = 0, 20,..., 300 */ main() { int fahr, celsius; int lower, upper, step; lower = 0; /* lower limit of temperature scale */ upper = 300; /* upper limit */ step = 20; /* step size */ fahr = lower; while (fahr <= upper) { celsius = 5 * (fahr-32) / 9; printf("%d\t%d\n", fahr, celsius); fahr = fahr + step; } } Left aligned

printf  General-Purpose Output Formatting Function Synopsis #include int printf(const char *format,...); Description printf writes to the standard output stream using putchar, under control of the string pointed to by format that specifies how subsequent arguments are converted for output. If there are insufficient arguments for the format, the behavior is undefined. If the format is exhausted while arguments remain, the excess arguments are evaluated but are otherwise ignored. printf returns number of characters transmitted, or a negative value if an output or encoding error occurred. Synopsis #include int printf(const char *format,...); Description printf writes to the standard output stream using putchar, under control of the string pointed to by format that specifies how subsequent arguments are converted for output. If there are insufficient arguments for the format, the behavior is undefined. If the format is exhausted while arguments remain, the excess arguments are evaluated but are otherwise ignored. printf returns number of characters transmitted, or a negative value if an output or encoding error occurred.

printf  General-Purpose Output Formatting Function #include /* print Fahrenheit-Celsius table for fahr = 0, 20,..., 300 */ main() { int fahr, celsius; int lower, upper, step; lower = 0; /* lower limit of temperature scale */ upper = 300; /* upper limit */ step = 20; /* step size */ fahr = lower; while (fahr <= upper) { celsius = 5 * (fahr-32) / 9; printf("%3d %6d\n", fahr, celsius); fahr = fahr + step; } #include /* print Fahrenheit-Celsius table for fahr = 0, 20,..., 300 */ main() { int fahr, celsius; int lower, upper, step; lower = 0; /* lower limit of temperature scale */ upper = 300; /* upper limit */ step = 20; /* step size */ fahr = lower; while (fahr <= upper) { celsius = 5 * (fahr-32) / 9; printf("%3d %6d\n", fahr, celsius); fahr = fahr + step; } } Right aligned

Example: Fahrenheit-Celsius Table (Float) #include /* print Fahrenheit-Celsius table for fahr = 0, 20,..., 300 */ main() { float fahr, celsius; float lower, upper, step; lower = 0; /* lower limit of temperature scale */ upper = 300; /* upper limit */ step = 20; /* step size */ fahr = lower; while (fahr <= upper) { celsius = (5.0/9.0) * (fahr-32.0); printf("%3.0f %6.1f\n", fahr, celsius); fahr = fahr + step; } #include /* print Fahrenheit-Celsius table for fahr = 0, 20,..., 300 */ main() { float fahr, celsius; float lower, upper, step; lower = 0; /* lower limit of temperature scale */ upper = 300; /* upper limit */ step = 20; /* step size */ fahr = lower; while (fahr <= upper) { celsius = (5.0/9.0) * (fahr-32.0); printf("%3.0f %6.1f\n", fahr, celsius); fahr = fahr + step; } }

Example: Fahrenheit-Celsius Table (Float) #include /* print Fahrenheit-Celsius table for fahr = 0, 20,..., 300 */ main() { float fahr, celsius; float lower, upper, step; lower = 0; /* lower limit of temperature scale */ upper = 300; /* upper limit */ step = 20; /* step size */ fahr = lower; while (fahr <= upper) { celsius = (5.0/9.0) * (fahr-32.0); printf("%3.0f %6.1f\n", fahr, celsius); fahr = fahr + step; } #include <stdio.h> /* print Fahrenheit-Celsius table for fahr = 0, 20,..., 300 */ main() { float fahr, celsius; float lower, upper, step; lower = 0;/* lower limit of temperature scale */ upper = 300;/* upper limit */ step = 20;/* step size */ fahr = lower; while (fahr <= upper) { celsius = (5.0/9.0) * (fahr-32.0); printf("%3.0f %6.1f\n", fahr, celsius); fahr = fahr + step; } }

More on printf

Statements Simple Statements lower = 0; upper = 300; step = 20; fahr = lower; Null Statement ; // a null statement Compound Statements { celsius = (5.0/9.0) * (fahr-32.0); printf("%3.0f %6.1f\n", fahr, celsius); fahr = fahr + step; } 4 simple statements 1 compound statement

While Statements while( cond_expression ) statement The statement can be: a simple statement a null statement a compound statements

Program Indentation #include /* print Fahrenheit-Celsius table for fahr = 0, 20,..., 300 */ main() { float fahr, celsius; float lower, upper, step; lower = 0; /* lower limit of temperature scale */ upper = 300; /* upper limit */ step = 20; /* step size */ fahr = lower; while (fahr <= upper) { celsius = (5.0/9.0) * (fahr-32.0); printf("%3.0f %6.1f\n", fahr, celsius); fahr = fahr + step; } #include /* print Fahrenheit-Celsius table for fahr = 0, 20,..., 300 */ main() { float fahr, celsius; float lower, upper, step; lower = 0; /* lower limit of temperature scale */ upper = 300; /* upper limit */ step = 20; /* step size */ fahr = lower; while (fahr <= upper) { celsius = (5.0/9.0) * (fahr-32.0); printf("%3.0f %6.1f\n", fahr, celsius); fahr = fahr + step; }

Program Indentation #include /* print Fahrenheit-Celsius table for fahr = 0, 20,..., 300 */ main() { float fahr, celsius; float lower, upper, step; lower = 0; /* lower limit of temperature scale */ upper = 300; /* upper limit */ step = 20; /* step size */ fahr = lower; while (fahr <= upper) { celsius = (5.0/9.0) * (fahr-32.0); printf("%3.0f %6.1f\n", fahr, celsius); fahr = fahr + step; } #include /* print Fahrenheit-Celsius table for fahr = 0, 20,..., 300 */ main() { float fahr, celsius; float lower, upper, step; lower = 0; /* lower limit of temperature scale */ upper = 300; /* upper limit */ step = 20; /* step size */ fahr = lower; while (fahr <= upper) { celsius = (5.0/9.0) * (fahr-32.0); printf("%3.0f %6.1f\n", fahr, celsius); fahr = fahr + step; } Statement

Program Indentation #include /* print Fahrenheit-Celsius table for fahr = 0, 20,..., 300 */ main() { float fahr, celsius; float lower, upper, step; lower = 0; /* lower limit of temperature scale */ upper = 300; /* upper limit */ step = 20; /* step size */ fahr = lower; while (fahr <= upper) { celsius = (5.0/9.0) * (fahr-32.0); printf("%3.0f %6.1f\n", fahr, celsius); fahr = fahr + step; } #include /* print Fahrenheit-Celsius table for fahr = 0, 20,..., 300 */ main() { float fahr, celsius; float lower, upper, step; lower = 0; /* lower limit of temperature scale */ upper = 300; /* upper limit */ step = 20; /* step size */ fahr = lower; while (fahr <= upper) { celsius = (5.0/9.0) * (fahr-32.0); printf("%3.0f %6.1f\n", fahr, celsius); fahr = fahr + step; } Statement

Program Indentation #include /* print Fahrenheit-Celsius table for fahr = 0, 20,..., 300 */ main() { float fahr, celsius; float lower, upper, step; lower = 0; /* lower limit of temperature scale */ upper = 300; /* upper limit */ step = 20; /* step size */ fahr = lower; while (fahr <= upper) { celsius = (5.0/9.0) * (fahr-32.0); printf("%3.0f %6.1f\n", fahr, celsius); fahr = fahr + step; } #include /* print Fahrenheit-Celsius table for fahr = 0, 20,..., 300 */ main() { float fahr, celsius; float lower, upper, step; lower = 0; /* lower limit of temperature scale */ upper = 300; /* upper limit */ step = 20; /* step size */ fahr = lower; while (fahr <= upper) { celsius = (5.0/9.0) * (fahr-32.0); printf("%3.0f %6.1f\n", fahr, celsius); fahr = fahr + step; } Statement Compound Statement

Programming Language  C Tutorial Introduction The for Statement

Example: Fahrenheit-Celsius Table #include /* print Fahrenheit-Celsius table for fahr = 0, 20,..., 300 */ main() { float fahr, celsius; float lower, upper, step; lower = 0; /* lower limit of temperature scale */ upper = 300; /* upper limit */ step = 20; /* step size */ fahr = lower; while (fahr <= upper) { celsius = (5.0/9.0) * (fahr-32.0); printf("%3.0f %6.1f\n", fahr, celsius); fahr = fahr + step; } #include /* print Fahrenheit-Celsius table for fahr = 0, 20,..., 300 */ main() { float fahr, celsius; float lower, upper, step; lower = 0; /* lower limit of temperature scale */ upper = 300; /* upper limit */ step = 20; /* step size */ fahr = lower; while (fahr <= upper) { celsius = (5.0/9.0) * (fahr-32.0); printf("%3.0f %6.1f\n", fahr, celsius); fahr = fahr + step; } There are many ways to do the same task.

Example: Fahrenheit-Celsius Table #include /* print Fahrenheit-Celsius table */ main() { int fahr; for (fahr = 0; fahr <= 300; fahr = fahr + 20) printf("%3d %6.1f\n", fahr, (5.0/9.0)*(fahr-32)); } #include /* print Fahrenheit-Celsius table */ main() { int fahr; for (fahr = 0; fahr <= 300; fahr = fahr + 20) printf("%3d %6.1f\n", fahr, (5.0/9.0)*(fahr-32)); }

The for Statement #include /* print Fahrenheit-Celsius table */ main() { int fahr; for (fahr = 0; fahr <= 300; fahr = fahr + 20) printf("%3d %6.1f\n", fahr, (5.0/9.0)*(fahr-32)); } #include /* print Fahrenheit-Celsius table */ main() { int fahr; for (fahr = 0; fahr <= 300; fahr = fahr + 20) printf("%3d %6.1f\n", fahr, (5.0/9.0)*(fahr-32)); } for ( init-exp ; cond-exp ; loop-exp ) statement for ( init-exp ; cond-exp ; loop-exp ) statement

for vs. while The choice between while and for is arbitrary, based on which seems clearer. The for is usually appropriate for loops in which the initialization and increment are single statements and logically related.

Exercises 3. Modify the temperature conversion program to print the table in reverse order, that is, from 300 degrees to 0.

Exercises 4. Using only the techniques you learned, write a program that calculates the squares and cubes of the number from 0 to 10 and used tabs to print the following table of values. numbersquarecube

Programming Language  C Tutorial Introduction Symbolic Constants

#define  Text Substitution #define name replacement list #define PI Example:

Example: Fahrenheit-Celsius Table #include #define LOWER 0 /* lower limit of table */ #define UPPER 300 /* upper limit */ #define STEP 20 /* step size */ /* print Fahrenheit-Celsius table */ main() { int fahr; for (fahr = LOWER; fahr <= UPPER; fahr = fahr + STEP) printf("%3d %6.1f\n", fahr, (5.0/9.0)*(fahr-32)); } #include #define LOWER 0 /* lower limit of table */ #define UPPER 300 /* upper limit */ #define STEP 20 /* step size */ /* print Fahrenheit-Celsius table */ main() { int fahr; for (fahr = LOWER; fahr <= UPPER; fahr = fahr + STEP) printf("%3d %6.1f\n", fahr, (5.0/9.0)*(fahr-32)); }

Programming Language  C Tutorial Introduction Character Input and Output

getchar() & putchar() Synopsis #include int getchar(void); Description getchar reads a single character from the standard input stream. If the stream is at end-of-file or a read error occurs, getchar returns EOF. Synopsis #include int getchar(void); Description getchar reads a single character from the standard input stream. If the stream is at end-of-file or a read error occurs, getchar returns EOF. Synopsis #include int putchar(int c); Description putchar writes the character c to the standard output stream. putchar returns the character written. If a write error occurs, putchar returns EOF. Synopsis #include int putchar(int c); Description putchar writes the character c to the standard output stream. putchar returns the character written. If a write error occurs, putchar returns EOF. #define EOF (-1)

Example: Typewriter (Version 1) #include /* copy input to output; 1st version */ main() { int c; c = getchar(); while (c != EOF) { putchar(c); c = getchar(); } #include /* copy input to output; 1st version */ main() { int c; c = getchar(); while (c != EOF) { putchar(c); c = getchar(); } } != not equal

Example: Typewriter (Version 2) #include /* copy input to output; 2st version */ main() { int c; c = getchar(); while ((c = getchar()) != EOF) putchar(c); } #include /* copy input to output; 2st version */ main() { int c; c = getchar(); while ((c = getchar()) != EOF) putchar(c); } The return value of an assignment statement is value of the variable after the assignment. simple statement

Example: Typewriter (Version 2) #include /* copy input to output; 2st version */ main() { int c; c = getchar(); while ((c = getchar()) != EOF) putchar(c); } #include <stdio.h> /* copy input to output; 2st version */ main() { int c; c = getchar(); while ((c = getchar()) != EOF) putchar(c); } The return value of an assignment statement is value of the variable after the assignment.

Example: Character Counting (Version 1) #include /* count characters in input; 1st version */ main() { long nc; nc = 0; while (getchar() != EOF) ++nc; printf("%ld\n", nc); } #include /* count characters in input; 1st version */ main() { long nc; nc = 0; while (getchar() != EOF) ++nc; printf("%ld\n", nc); } ++ increment simple statement

Example: Character Counting (Version 1) #include /* count characters in input; 1st version */ main() { long nc; nc = 0; while (getchar() != EOF) ++nc; printf("%ld\n", nc); } #include <stdio.h> /* count characters in input; 1st version */ main() { long nc; nc = 0; while (getchar() != EOF) ++nc; printf("%ld\n", nc); } ++ increment

Example: Character Counting (Version 2) #include /* count characters in input; 2nd version */ main() { double nc; for (nc = 0; getchar() != EOF; ++nc) ; printf("%.0f\n", nc); } #include /* count characters in input; 2nd version */ main() { double nc; for (nc = 0; getchar() != EOF; ++nc) ; printf("%.0f\n", nc); } null statement

Example: Character Counting (Version 2) #include /* count characters in input; 2nd version */ main() { double nc; for (nc = 0; getchar() != EOF; ++nc); printf("%.0f\n", nc); } #include <stdio.h> /* count characters in input; 2nd version */ main() { double nc; for (nc = 0; getchar() != EOF; ++nc); printf("%.0f\n", nc); }

Example: Line Counting #include /* count lines in input */ main() { int c, nl; nl = 0; while ((c = getchar()) != EOF) if (c == '\n') ++nl; printf("%d\n", nl); } #include /* count lines in input */ main() { int c, nl; nl = 0; while ((c = getchar()) != EOF) if (c == '\n') ++nl; printf("%d\n", nl); } == equals to if ( expression ) statement if ( expression ) statement else statement if ( expression ) statement if ( expression ) statement else statement simple statement

Example: Line Counting #include /* count lines in input */ main() { int c, nl; nl = 0; while ((c = getchar()) != EOF) if (c == '\n') ++nl; printf("%d\n", nl); } #include <stdio.h> /* count lines in input */ main() { int c, nl; nl = 0; while ((c = getchar()) != EOF) if (c == '\n') ++nl; printf("%d\n", nl); } simple statement

Example: Line Counting #include /* count lines in input */ main() { int c, nl; nl = 0; while ((c = getchar()) != EOF) if (c == '\n') ++nl; printf("%d\n", nl); } #include /* count lines in input */ main() { int c, nl; nl = 0; while ((c = getchar()) != EOF) if (c == '\n') ++nl; printf("%d\n", nl); } simple statement Can we move to here?

Example: Word Counting OUTIN visible non-visible visible > non-visible This is a test case. OIIIIOIIOIOOOIIIIO OIIIII

Example: Word Counting #include #define IN 1 /* inside a word */ #define OUT 0 /* outside a word */ /* count lines, words, and characters in input */ main() { int c, nl, nw, nc, state; state = OUT; nl = nw = nc = 0; while ((c = getchar()) != EOF) { ++nc; if (c == '\n') ++nl; if (c == ' ' || c == '\n' || c = '\t') state = OUT; else if (state == OUT) { state = IN; ++nw; } printf("%d %d %d\n", nl, nw, nc); } #include #define IN 1 /* inside a word */ #define OUT 0 /* outside a word */ /* count lines, words, and characters in input */ main() { int c, nl, nw, nc, state; state = OUT; nl = nw = nc = 0; while ((c = getchar()) != EOF) { ++nc; if (c == '\n') ++nl; if (c == ' ' || c == '\n' || c = '\t') state = OUT; else if (state == OUT) { state = IN; ++nw; } } printf("%d %d %d\n", nl, nw, nc); } OUTIN visible non-visible visible > non-visible

Exercises 7. Write a program to print a histogram of the frequencies of different characters in its input.

Programming Language  C Tutorial Introduction Arrays

Array is a data structure that stores contiguous data elements of the same type. Examples: intscore[50]; char address[50]; double distance[50]; score address distance 200 bytes 50 bytes 400 bytes

Arrays Examples: intscore[50]; char address[50]; double distance[50]; score address distance score[0] score[1] score[49]

Arrays Examples: intscore[50]; char address[50]; double distance[50]; score address distance address[0] address[1] address[2] address[49]......

Arrays Examples: intscore[50]; char address[50]; double distance[50]; score address distance distance[0] distance[49]

#include /* count digits, white space, others */ main() { int c, i, nwhite, nother; int ndigit[10]; nwhite = nother = 0; for (i = 0; i < 10; ++i) ndigit[i] = 0; while ((c = getchar()) != EOF) if (c >= '0' && c <= '9')++ndigit[c-'0']; else if (c == ' ' || c == '\n' || c == '\t') ++nwhite; else ++nother; printf("digits ="); for (i = 0; i < 10; ++i) printf(" %d", ndigit[i]); printf(", white space = %d, other = %d\n", nwhite, nother); } #include /* count digits, white space, others */ main() { int c, i, nwhite, nother; int ndigit[10]; nwhite = nother = 0; for (i = 0; i < 10; ++i) ndigit[i] = 0; while ((c = getchar()) != EOF) if (c >= '0' && c <= '9')++ndigit[c-'0']; else if (c == ' ' || c == '\n' || c == '\t') ++nwhite; else ++nother; printf("digits ="); for (i = 0; i < 10; ++i) printf(" %d", ndigit[i]); printf(", white space = %d, other = %d\n", nwhite, nother); } Example: Digit Counting && logical and operator || logical or operator

#include /* count digits, white space, others */ main() { int c, i, nwhite, nother; int ndigit[10]; nwhite = nother = 0; for (i = 0; i < 10; ++i) ndigit[i] = 0; while ((c = getchar()) != EOF) if (c >= '0' && c <= '9')++ndigit[c-'0']; else if (c == ' ' || c == '\n' || c == '\t') ++nwhite; else ++nother; printf("digits ="); for (i = 0; i < 10; ++i) printf(" %d", ndigit[i]); printf(", white space = %d, other = %d\n", nwhite, nother); } #include /* count digits, white space, others */ main() { int c, i, nwhite, nother; int ndigit[10]; nwhite = nother = 0; for (i = 0; i < 10; ++i) ndigit[i] = 0; while ((c = getchar()) != EOF) if (c >= '0' && c <= '9')++ndigit[c-'0']; else if (c == ' ' || c == '\n' || c == '\t') ++nwhite; else ++nother; printf("digits ="); for (i = 0; i < 10; ++i) printf(" %d", ndigit[i]); printf(", white space = %d, other = %d\n", nwhite, nother); } Example: Digit Counting

#include /* count digits, white space, others */ main() { int c, i, nwhite, nother; int ndigit[10]; nwhite = nother = 0; for (i = 0; i < 10; ++i) ndigit[i] = 0; while ((c = getchar()) != EOF) if (c >= '0' && c <= '9')++ndigit[c-'0']; else if (c == ' ' || c == '\n' || c == '\t') ++nwhite; else ++nother; printf("digits ="); for (i = 0; i < 10; ++i) printf(" %d", ndigit[i]); printf(", white space = %d, other = %d\n", nwhite, nother); } #include /* count digits, white space, others */ main() { int c, i, nwhite, nother; int ndigit[10]; nwhite = nother = 0; for (i = 0; i < 10; ++i) ndigit[i] = 0; while ((c = getchar()) != EOF) if (c >= '0' && c <= '9')++ndigit[c-'0']; else if (c == ' ' || c == '\n' || c == '\t') ++nwhite; else ++nother; printf("digits ="); for (i = 0; i < 10; ++i) printf(" %d", ndigit[i]); printf(", white space = %d, other = %d\n", nwhite, nother); } Example: Digit Counting

#include /* count digits, white space, others */ main() { int c, i, nwhite, nother; int ndigit[10]; nwhite = nother = 0; for (i = 0; i < 10; ++i) ndigit[i] = 0; while ((c = getchar()) != EOF) if (c >= '0' && c <= '9')++ndigit[c-'0']; else if (c == ' ' || c == '\n' || c == '\t') ++nwhite; else ++nother; printf("digits ="); for (i = 0; i < 10; ++i) printf(" %d", ndigit[i]); printf(", white space = %d, other = %d\n", nwhite, nother); } #include /* count digits, white space, others */ main() { int c, i, nwhite, nother; int ndigit[10]; nwhite = nother = 0; for (i = 0; i < 10; ++i) ndigit[i] = 0; while ((c = getchar()) != EOF) if (c >= '0' && c <= '9')++ndigit[c-'0']; else if (c == ' ' || c == '\n' || c == '\t') ++nwhite; else ++nother; printf("digits ="); for (i = 0; i < 10; ++i) printf(" %d", ndigit[i]); printf(", white space = %d, other = %d\n", nwhite, nother); } Example: Digit Counting

if Statement if (condition 1 ) statement 1 else if (condition 2 ) statement 2 else if (condition 3 ) statement 3... else statement n if (condition 1 ) statement 1 else if (condition 2 ) statement 2 else if (condition 3 ) statement 3... else statement n The dangling else problem

Exercises 5. Write a program that prints its input one word per line. 6. Write a program that prints only a single white character between words.

Exercises 7. Write a program to print a histogram of the frequencies of different characters in its input.

Programming Language  C Tutorial Introduction Functions

Functions we have used printf getchar putchar

Functions A way to encapsulate some computation. Similar to a subroutine or function in Fortran, or a procedure or function in Pascal. A properly designed function allow us to – know what is done, but – ignore how a job is done

Function Definition return-type function-name(parameter declarations, if any) { declarations statements } return-type function-name(parameter declarations, if any) { declarations statements }

Function Definition return-type function-name(parameter declarations, if any) { declarations statements } return-type function-name(parameter declarations, if any) { declarations statements } If absent, return type is considered int. Called formal parameters Called formal parameters

Example: Power #include int power(int m, int n); /* test power function */ main() { int i; for (i = 0; i < 10; ++i) printf("%d %d %d\n", i, power(2,i), power(-3,i)); return 0; } /* power: raise base to n-th power; n >= 0 */ int power(int base, int n) { int i, p; p = 1; for (i = 1; i <= n; ++i) p = p * base; return p; } #include int power(int m, int n); /* test power function */ main() { int i; for (i = 0; i < 10; ++i) printf("%d %d %d\n", i, power(2,i), power(-3,i)); return 0; } /* power: raise base to n-th power; n >= 0 */ int power(int base, int n) { int i, p; p = 1; for (i = 1; i <= n; ++i) p = p * base; return p; }  forward reference

Example: Power #include int power(int m, int n); /* test power function */ main() { int i; for (i = 0; i < 10; ++i) printf("%d %d %d\n", i, power(2,i), power(-3,i)); return 0; } /* power: raise base to n-th power; n >= 0 */ int power(int base, int n) { int i, p; p = 1; for (i = 1; i <= n; ++i) p = p * base; return p; } #include int power(int m, int n); /* test power function */ main() { int i; for (i = 0; i < 10; ++i) printf("%d %d %d\n", i, power(2,i), power(-3,i)); return 0; } /* power: raise base to n-th power; n >= 0 */ int power(int base, int n) { int i, p; p = 1; for (i = 1; i <= n; ++i) p = p * base; return p; }

Example: Power (Version 2) /* power: raise base to n-th power; n >= 0 */ int power(int base, int n) { int i, p; p = 1; for (i = 1; i <= n; ++i) p = p * base; return p; } /* power: raise base to n-th power; n >= 0 */ int power(int base, int n) { int i, p; p = 1; for (i = 1; i <= n; ++i) p = p * base; return p; } /* power: raise base to n-th power; n >= 0; version 2 */ int power(int base, int n) { int i, p; for (p = 1; n < 0; --n) p = p * base; return p; } /* power: raise base to n-th power; n >= 0; version 2 */ int power(int base, int n) { int i, p; for (p = 1; n < 0; --n) p = p * base; return p; }

Example: Power (Version 2) /* power: raise base to n-th power; n >= 0; version 2 */ int power(int base, int n) { int i, p; for (p = 1; n < 0; --n) p = p * base; return p; } /* power: raise base to n-th power; n >= 0; version 2 */ int power(int base, int n) { int i, p; for (p = 1; n < 0; --n) p = p * base; return p; }..... main() { int n, val; n = 5; val = power(2, n); printf("val=%d n=%d %d\n", val, n); }..... main() { int n, val; n = 5; val = power(2, n); printf("val=%d n=%d %d\n", val, n); }..... n=?

Call by Value In C, all function arguments are passed “by value.” – the called function is given the values of its arguments in temporary variables rather than the originals. – Modifying the values of formal parameters doesn’t effect the value of originals How about if a function has arrays as its parameters?

Programming Language  C Tutorial Introduction Character Arrays

Strings in C Null-terminated string  In C, a string is stored as an array of characters containing the characters in the string and terminated with a ' \0 ' to mark the end. char str[]="hello\n"; Example: h (68) e (65) l (6C) o (6F) \n (0A) \0 (00) str

Strings in C

Example: Print the Longest Line while (there's another line) if (it's longer than the previous longest) (save it) (save its length) print longest line while (there's another line) if (it's longer than the previous longest) (save it) (save its length) print longest line

Example: Print the Longest Line while (there's another line) if (it's longer than the previous longest) (save it) (save its length) print longest line while (there's another line) if (it's longer than the previous longest) (save it) (save its length) print longest line Implement a getline() function which returns the length of the line read. Implement a copy() function to save string.

Example: Print the Longest Line /* getline: read a line into s, return length */ int getline(char s[],int lim) { int c, i; for (i=0; i < lim-1 && (c=getchar())!=EOF && c!='\n'; ++i) s[i] = c; if (c == '\n') { s[i] = c; ++i; } s[i] = '\0'; return i; } /* getline: read a line into s, return length */ int getline(char s[],int lim) { int c, i; for (i=0; i < lim-1 && (c=getchar())!=EOF && c!='\n'; ++i) s[i] = c; if (c == '\n') { s[i] = c; ++i; } s[i] = '\0'; return i; } && logical and operator

Example: Print the Longest Line /* getline: read a line into s, return length */ int getline(char s[],int lim) { int c, i; for (i=0; i < lim-1 && (c=getchar())!=EOF && c!='\n'; ++i) s[i] = c; if (c == '\n') { s[i] = c; ++i; } s[i] = '\0'; return i; } /* getline: read a line into s, return length */ int getline(char s[],int lim) { int c, i; for (i=0; i < lim-1 && (c=getchar())!=EOF && c!='\n'; ++i) s[i] = c; if (c == '\n') { s[i] = c; ++i; } s[i] = '\0'; return i; } && logical and operator Simplification s[i++] = c;

Example: Print the Longest Line /* getline: read a line into s, return length */ /* simplified version */ int getline(char s[],int lim) { int c, i; for (i=0; i < lim-1 && (c=getchar())!=EOF && c!='\n';) s[i++] = c; if (c == '\n') s[i++] = c; s[i] = '\0'; return i; } /* getline: read a line into s, return length */ /* simplified version */ int getline(char s[],int lim) { int c, i; for (i=0; i < lim-1 && (c=getchar())!=EOF && c!='\n';) s[i++] = c; if (c == '\n') s[i++] = c; s[i] = '\0'; return i; } && logical and operator

Example: Print the Longest Line /* copy: copy 'from' into 'to'; assume to is big enough */ void copy(char to[], char from[]) { int i; i = 0; while ((to[i] = from[i]) != '\0') ++i; } /* copy: copy 'from' into 'to'; assume to is big enough */ void copy(char to[], char from[]) { int i; i = 0; while ((to[i] = from[i]) != '\0') ++i; }

Example: Print the Longest Line #include #define MAXLINE 1000 /* maximum input line length */ int getline(char line[], int maxline); void copy(char to[], char from[]); /* print the longest input line */ main() { int len; /* current line length */ int max; /* maximum length seen so far */ char line[MAXLINE]; /* current input line */ char longest[MAXLINE]; /* longest line saved here */ max = 0; while ((len = getline(line, MAXLINE)) > 0) if (len > max) { max = len; copy(longest, line); } if (max > 0) /* there was a line */ printf("%s", longest); return 0; } #include #define MAXLINE 1000 /* maximum input line length */ int getline(char line[], int maxline); void copy(char to[], char from[]); /* print the longest input line */ main() { int len; /* current line length */ int max; /* maximum length seen so far */ char line[MAXLINE]; /* current input line */ char longest[MAXLINE]; /* longest line saved here */ max = 0; while ((len = getline(line, MAXLINE)) > 0) if (len > max) { max = len; copy(longest, line); } if (max > 0) /* there was a line */ printf("%s", longest); return 0; }......

Example: Print the Longest Line

Exercises 8. Write a function getlinestr() by modifying getline() described above so that the string read doesn’t include '\n'. 9. Write a function reverse(char s[]) that reverses the character string s. 10. Write a function int strlen(char s[]) that returns the number of characters in string s. 11. Write a program to demonstrate that the about three functions you wrote are correct.

Exercises 12. Write a function int atoi(char s[]) that converts a signed decimal numeric string, assumed the syntax is correct, to an integer, and write a program to verify the correctness of your program. 13. Write a program that reads two integers from the standard input stream and output their minimum and maximum to the standard output stream. You can’t use library function scanf() to read data. 14. (Take home) Write a function void itoa(int n, char s[]) that converts a signed integer to a signed decimal numeric string, and write a program to verify the correctness of your program.

Programming Language  C Tutorial Introduction External Variables and Scope

Local (Private) Variables #include #define MAXLINE 1000 /* maximum input line length */ int getline(char line[], int maxline); void copy(char to[], char from[]); /* print the longest input line */ main() { int len; /* current line length */ int max; /* maximum length seen so far */ char line[MAXLINE]; /* current input line */ char longest[MAXLINE]; /* longest line saved here */ max = 0; while ((len = getline(line, MAXLINE)) > 0) if (len > max) { max = len; copy(longest, line); } if (max > 0) /* there was a line */ printf("%s", longest); return 0; } #include #define MAXLINE 1000 /* maximum input line length */ int getline(char line[], int maxline); void copy(char to[], char from[]); /* print the longest input line */ main() { int len; /* current line length */ int max; /* maximum length seen so far */ char line[MAXLINE]; /* current input line */ char longest[MAXLINE]; /* longest line saved here */ max = 0; while ((len = getline(line, MAXLINE)) > 0) if (len > max) { max = len; copy(longest, line); } if (max > 0) /* there was a line */ printf("%s", longest); return 0; } /* getline: read a line into s, return length */ /* simplified version */ int getline(char s[],int lim) { int c, i; for (i=0; i < lim-1 && (c=getchar())!=EOF && c!='\n';) s[i++] = c; if (c == '\n') s[i++] = c; s[i] = '\0'; return i; } /* copy: copy 'from' into 'to'; assume to is big enough */ void copy(char to[], char from[]) { int i; i = 0; while ((to[i] = from[i]) != '\0') ++i; } /* getline: read a line into s, return length */ /* simplified version */ int getline(char s[],int lim) { int c, i; for (i=0; i < lim-1 && (c=getchar())!=EOF && c!='\n';) s[i++] = c; if (c == '\n') s[i++] = c; s[i] = '\0'; return i; } /* copy: copy 'from' into 'to'; assume to is big enough */ void copy(char to[], char from[]) { int i; i = 0; while ((to[i] = from[i]) != '\0') ++i; }

Local (Private) Variables #include #define MAXLINE 1000 /* maximum input line length */ int getline(char line[], int maxline); void copy(char to[], char from[]); /* print the longest input line */ main() { int len; /* current line length */ int max; /* maximum length seen so far */ char line[MAXLINE]; /* current input line */ char longest[MAXLINE]; /* longest line saved here */ max = 0; while ((len = getline(line, MAXLINE)) > 0) if (len > max) { max = len; copy(longest, line); } if (max > 0) /* there was a line */ printf("%s", longest); return 0; } #include #define MAXLINE 1000 /* maximum input line length */ int getline(char line[], int maxline); void copy(char to[], char from[]); /* print the longest input line */ main() { int len; /* current line length */ int max; /* maximum length seen so far */ char line[MAXLINE]; /* current input line */ char longest[MAXLINE]; /* longest line saved here */ max = 0; while ((len = getline(line, MAXLINE)) > 0) if (len > max) { max = len; copy(longest, line); } if (max > 0) /* there was a line */ printf("%s", longest); return 0; } /* getline: read a line into s, return length */ /* simplified version */ int getline(char s[],int lim) { int c, i; for (i=0; i < lim-1 && (c=getchar())!=EOF && c!='\n';) s[i++] = c; if (c == '\n') s[i++] = c; s[i] = '\0'; return i; } /* copy: copy 'from' into 'to'; assume to is big enough */ void copy(char to[], char from[]) { int i; i = 0; while ((to[i] = from[i]) != '\0') ++i; } /* getline: read a line into s, return length */ /* simplified version */ int getline(char s[],int lim) { int c, i; for (i=0; i < lim-1 && (c=getchar())!=EOF && c!='\n';) s[i++] = c; if (c == '\n') s[i++] = c; s[i] = '\0'; return i; } /* copy: copy 'from' into 'to'; assume to is big enough */ void copy(char to[], char from[]) { int i; i = 0; while ((to[i] = from[i]) != '\0') ++i; } Each local variable comes into existence only when the function is called, and disappears when the function is exited. Hence, also known as automatic variables. Each local variable comes into existence only when the function is called, and disappears when the function is exited. Hence, also known as automatic variables.

Global (Extern) Variables Global variables that are defined external to all functions can be accessed by name by any function. Furthermore, they remain in existence permanently.

Example: Print the Longest Line #include #define MAXLINE 1000 /* maximum input line size */ int max; /* maximum length seen so far */ char line[MAXLINE]; /* current input line */ char longest[MAXLINE]; /* longest line saved here */ int getline(void); void copy(void); /* print longest input line; specialized version */ main() { } /* getline: specialized version */ int getline(void) { } /* copy: specialized version */ void copy(void) { } #include #define MAXLINE 1000 /* maximum input line size */ int max; /* maximum length seen so far */ char line[MAXLINE]; /* current input line */ char longest[MAXLINE]; /* longest line saved here */ int getline(void); void copy(void); /* print longest input line; specialized version */ main() { } /* getline: specialized version */ int getline(void) { } /* copy: specialized version */ void copy(void) { } defined external to all functions

Example: Print the Longest Line #include #define MAXLINE 1000 /* maximum input line size */ int max; /* maximum length seen so far */ char line[MAXLINE]; /* current input line */ char longest[MAXLINE]; /* longest line saved here */ int getline(void); void copy(void); /* print longest input line; specialized version */ main() { } /* getline: specialized version */ int getline(void) { } /* copy: specialized version */ void copy(void) { } #include #define MAXLINE 1000 /* maximum input line size */ int max; /* maximum length seen so far */ char line[MAXLINE]; /* current input line */ char longest[MAXLINE]; /* longest line saved here */ int getline(void); void copy(void); /* print longest input line; specialized version */ main() { } /* getline: specialized version */ int getline(void) { } /* copy: specialized version */ void copy(void) { } defined external to all functions /* print longest input line; specialized version */ main() { int len; extern int max; extern char longest[]; max = 0; while ((len = getline()) > 0) if (len > max) { max = len; copy(); } if (max > 0) /* there was a line */ printf("%s", longest); return 0; } /* print longest input line; specialized version */ main() { int len; extern int max; extern char longest[]; max = 0; while ((len = getline()) > 0) if (len > max) { max = len; copy(); } if (max > 0) /* there was a line */ printf("%s", longest); return 0; }

Example: Print the Longest Line #include #define MAXLINE 1000 /* maximum input line size */ int max; /* maximum length seen so far */ char line[MAXLINE]; /* current input line */ char longest[MAXLINE]; /* longest line saved here */ int getline(void); void copy(void); /* print longest input line; specialized version */ main() { } /* getline: specialized version */ int getline(void) { } /* copy: specialized version */ void copy(void) { } #include #define MAXLINE 1000 /* maximum input line size */ int max; /* maximum length seen so far */ char line[MAXLINE]; /* current input line */ char longest[MAXLINE]; /* longest line saved here */ int getline(void); void copy(void); /* print longest input line; specialized version */ main() { } /* getline: specialized version */ int getline(void) { } /* copy: specialized version */ void copy(void) { } defined external to all functions /* getline: specialized version */ int getline(void) { int c, i; extern char line[]; for (i = 0; i < MAXLINE - 1 && (c=getchar()) != EOF && c != '\n'; ++i) line[i] = c; if (c == '\n') { line[i] = c; ++i; } line[i] = '\0'; return i; } /* getline: specialized version */ int getline(void) { int c, i; extern char line[]; for (i = 0; i < MAXLINE - 1 && (c=getchar()) != EOF && c != '\n'; ++i) line[i] = c; if (c == '\n') { line[i] = c; ++i; } line[i] = '\0'; return i; }

Example: Print the Longest Line #include #define MAXLINE 1000 /* maximum input line size */ int max; /* maximum length seen so far */ char line[MAXLINE]; /* current input line */ char longest[MAXLINE]; /* longest line saved here */ int getline(void); void copy(void); /* print longest input line; specialized version */ main() { } /* getline: specialized version */ int getline(void) { } /* copy: specialized version */ void copy(void) { } #include #define MAXLINE 1000 /* maximum input line size */ int max; /* maximum length seen so far */ char line[MAXLINE]; /* current input line */ char longest[MAXLINE]; /* longest line saved here */ int getline(void); void copy(void); /* print longest input line; specialized version */ main() { } /* getline: specialized version */ int getline(void) { } /* copy: specialized version */ void copy(void) { } defined external to all functions /* copy: specialized version */ void copy(void) { int i; extern char line[], longest[]; i = 0; while ((longest[i] = line[i]) != '\0') ++i; } /* copy: specialized version */ void copy(void) { int i; extern char line[], longest[]; i = 0; while ((longest[i] = line[i]) != '\0') ++i; }

Example: Print the Longest Line #include #define MAXLINE 1000 /* maximum input line size */ int max; /* maximum length seen so far */ char line[MAXLINE]; /* current input line */ char longest[MAXLINE]; /* longest line saved here */ int getline(void); void copy(void); /* print longest input line; specialized version */ main() { } /* getline: specialized version */ int getline(void) { } /* copy: specialized version */ void copy(void) { } #include #define MAXLINE 1000 /* maximum input line size */ int max; /* maximum length seen so far */ char line[MAXLINE]; /* current input line */ char longest[MAXLINE]; /* longest line saved here */ int getline(void); void copy(void); /* print longest input line; specialized version */ main() { } /* getline: specialized version */ int getline(void) { } /* copy: specialized version */ void copy(void) { } defined external to all functions /* print longest input line; specialized version */ main() { int len; extern int max; extern char longest[]; max = 0; while ((len = getline()) > 0) if (len > max) { max = len; copy(); } if (max > 0) /* there was a line */ printf("%s", longest); return 0; } /* print longest input line; specialized version */ main() { int len; extern int max; extern char longest[]; max = 0; while ((len = getline()) > 0) if (len > max) { max = len; copy(); } if (max > 0) /* there was a line */ printf("%s", longest); return 0; } /* getline: specialized version */ int getline(void) { int c, i; extern char line[]; for (i = 0; i < MAXLINE - 1 && (c=getchar()) != EOF && c != '\n'; ++i) line[i] = c; if (c == '\n') { line[i] = c; ++i; } line[i] = '\0'; return i; } /* getline: specialized version */ int getline(void) { int c, i; extern char line[]; for (i = 0; i < MAXLINE - 1 && (c=getchar()) != EOF && c != '\n'; ++i) line[i] = c; if (c == '\n') { line[i] = c; ++i; } line[i] = '\0'; return i; } /* copy: specialized version */ void copy(void) { int i; extern char line[], longest[]; i = 0; while ((longest[i] = line[i]) != '\0') ++i; } /* copy: specialized version */ void copy(void) { int i; extern char line[], longest[]; i = 0; while ((longest[i] = line[i]) != '\0') ++i; } The declarations for referencing external variables are redundant if they are defined in the header part of the same file.

Example: Print the Longest Line (Multiple Source Files)  I /* main.c */ #include #define MAXLINE 1000 /* maximum input line size */ int max; /* maximum length seen so far */ char line[MAXLINE]; /* current input line */ char longest[MAXLINE]; /* longest line saved here */ int getline(void); void copy(void); /* print longest input line; specialized version */ main() { } /* main.c */ #include #define MAXLINE 1000 /* maximum input line size */ int max; /* maximum length seen so far */ char line[MAXLINE]; /* current input line */ char longest[MAXLINE]; /* longest line saved here */ int getline(void); void copy(void); /* print longest input line; specialized version */ main() { } /* functions.c */ /* getline: specialized version */ int getline(void) { } /* copy: specialized version */ void copy(void) { } /* functions.c */ /* getline: specialized version */ int getline(void) { } /* copy: specialized version */ void copy(void) { }

Example: Print the Longest Line (Multiple Source Files)  I /* main.c */ #include #define MAXLINE 1000 /* maximum input line size */ int max; /* maximum length seen so far */ char line[MAXLINE]; /* current input line */ char longest[MAXLINE]; /* longest line saved here */ int getline(void); void copy(void); /* print longest input line; specialized version */ main() { } /* main.c */ #include #define MAXLINE 1000 /* maximum input line size */ int max; /* maximum length seen so far */ char line[MAXLINE]; /* current input line */ char longest[MAXLINE]; /* longest line saved here */ int getline(void); void copy(void); /* print longest input line; specialized version */ main() { } /* functions.c */ /* getline: specialized version */ int getline(void) { } /* copy: specialized version */ void copy(void) { } /* functions.c */ /* getline: specialized version */ int getline(void) { } /* copy: specialized version */ void copy(void) { } /* print longest input line; specialized version */ main() { int len; extern int max; extern char longest[]; max = 0; while ((len = getline()) > 0) if (len > max) { max = len; copy(); } if (max > 0) /* there was a line */ printf("%s", longest); return 0; } /* print longest input line; specialized version */ main() { int len; extern int max; extern char longest[]; max = 0; while ((len = getline()) > 0) if (len > max) { max = len; copy(); } if (max > 0) /* there was a line */ printf("%s", longest); return 0; } /* getline: specialized version */ int getline(void) { int c, i; extern char line[]; for (i = 0; i < MAXLINE - 1 && (c=getchar()) != EOF && c != '\n'; ++i) line[i] = c; if (c == '\n') { line[i] = c; ++i; } line[i] = '\0'; return i; } /* getline: specialized version */ int getline(void) { int c, i; extern char line[]; for (i = 0; i < MAXLINE - 1 && (c=getchar()) != EOF && c != '\n'; ++i) line[i] = c; if (c == '\n') { line[i] = c; ++i; } line[i] = '\0'; return i; } /* copy: specialized version */ void copy(void) { int i; extern char line[], longest[]; i = 0; while ((longest[i] = line[i]) != '\0') ++i; } /* copy: specialized version */ void copy(void) { int i; extern char line[], longest[]; i = 0; while ((longest[i] = line[i]) != '\0') ++i; } Must be kept.

Example: Print the Longest Line (Multiple Source Files)  II /* main.c */ #include #define MAXLINE 1000 /* maximum input line size */ int max; /* maximum length seen so far */ char line[MAXLINE]; /* current input line */ char longest[MAXLINE]; /* longest line saved here */ int getline(void); void copy(void); /* print longest input line; specialized version */ main() { } /* main.c */ #include #define MAXLINE 1000 /* maximum input line size */ int max; /* maximum length seen so far */ char line[MAXLINE]; /* current input line */ char longest[MAXLINE]; /* longest line saved here */ int getline(void); void copy(void); /* print longest input line; specialized version */ main() { } /* functions.c */ #include #include "externdef.h" /* getline: specialized version */ int getline(void) { } /* copy: specialized version */ void copy(void) { } /* functions.c */ #include <stdio.h> #include "externdef.h" /* getline: specialized version */ int getline(void) { } /* copy: specialized version */ void copy(void) { } /* externdef.h */ #define MAXLINE 1000 /* maximum input line size */ extern int max; /* maximum length seen so far */ extern char line[]; /* current input line */ extern char longest[]; /* longest line saved here */ /* externdef.h */ #define MAXLINE 1000 /* maximum input line size */ extern int max; /* maximum length seen so far */ extern char line[]; /* current input line */ extern char longest[]; /* longest line saved here */

Example: Print the Longest Line (Multiple Source Files)  II /* main.c */ #include #define MAXLINE 1000 /* maximum input line size */ int max; /* maximum length seen so far */ char line[MAXLINE]; /* current input line */ char longest[MAXLINE]; /* longest line saved here */ int getline(void); void copy(void); /* print longest input line; specialized version */ main() { } /* main.c */ #include #define MAXLINE 1000 /* maximum input line size */ int max; /* maximum length seen so far */ char line[MAXLINE]; /* current input line */ char longest[MAXLINE]; /* longest line saved here */ int getline(void); void copy(void); /* print longest input line; specialized version */ main() { } /* functions.c */ #include #include "externdef.h" /* getline: specialized version */ int getline(void) { } /* copy: specialized version */ void copy(void) { } /* functions.c */ #include #include "externdef.h" /* getline: specialized version */ int getline(void) { } /* copy: specialized version */ void copy(void) { } /* externdef.h */ #define MAXLINE 1000 /* maximum input line size */ extern int max; /* maximum length seen so far */ extern char line[]; /* current input line */ extern char longest[]; /* longest line saved here */ /* externdef.h */ #define MAXLINE 1000 /* maximum input line size */ extern int max; /* maximum length seen so far */ extern char line[]; /* current input line */ extern char longest[]; /* longest line saved here */ /* getline: specialized version */ int getline(void) { int c, i; extern char line[]; for (i = 0; i < MAXLINE - 1 && (c=getchar()) != EOF && c != '\n'; ++i) line[i] = c; if (c == '\n') { line[i] = c; ++i; } line[i] = '\0'; return i; } /* getline: specialized version */ int getline(void) { int c, i; extern char line[]; for (i = 0; i < MAXLINE - 1 && (c=getchar()) != EOF && c != '\n'; ++i) line[i] = c; if (c == '\n') { line[i] = c; ++i; } line[i] = '\0'; return i; } /* copy: specialized version */ void copy(void) { int i; extern char line[], longest[]; i = 0; while ((longest[i] = line[i]) != '\0') ++i; } /* copy: specialized version */ void copy(void) { int i; extern char line[], longest[]; i = 0; while ((longest[i] = line[i]) != '\0') ++i; }

Exercise 15. (Take home) Write a program to remove all comments from a C program. Don't forget to handle quoted strings and character constants properly. C comments don't nest.