Lecture P1: Introduction to C

Similar documents
FEEG Applied Programming 5 - Tutorial Session

Sources: On the Web: Slides will be available on:

Informatica e Sistemi in Tempo Reale

The programming language C. sws1 1

A Python Tour: Just a Brief Introduction CS 303e: Elements of Computers and Programming

CP Lab 2: Writing programs for simple arithmetic problems

Embedded Systems. Review of ANSI C Topics. A Review of ANSI C and Considerations for Embedded C Programming. Basic features of C

Chapter 2: Algorithm Discovery and Design. Invitation to Computer Science, C++ Version, Third Edition

1.3 Conditionals and Loops

QUIZ-II QUIZ-II. Chapter 5: Control Structures II (Repetition) Objectives. Objectives (cont d.) 20/11/2015. EEE 117 Computer Programming Fall

VISUAL GUIDE to. RX Scripting. for Roulette Xtreme - System Designer 2.0

VHDL Test Bench Tutorial

Name: Class: Date: 9. The compiler ignores all comments they are there strictly for the convenience of anyone reading the program.

Introduction to Python

Chapter 13: Program Development and Programming Languages

Random Fibonacci-type Sequences in Online Gambling

VB.NET Programming Fundamentals

6. Control Structures

We will learn the Python programming language. Why? Because it is easy to learn and many people write programs in Python so we can share.

Session 7 Fractions and Decimals

Decision Logic: if, if else, switch, Boolean conditions and variables

CSC 221: Computer Programming I. Fall 2011

Introduction to Python

C++ Programming Language

CS 141: Introduction to (Java) Programming: Exam 1 Jenny Orr Willamette University Fall 2013

Stacks. Linear data structures

Repetition Using the End of File Condition

arrays C Programming Language - Arrays

The C Programming Language course syllabus associate level

Computer Science 281 Binary and Hexadecimal Review

Introduction to Java Applications Pearson Education, Inc. All rights reserved.

River Dell Regional School District. Computer Programming with Python Curriculum

Chapter One Introduction to Programming

So far we have considered only numeric processing, i.e. processing of numeric data represented

Debugging. Common Semantic Errors ESE112. Java Library. It is highly unlikely that you will write code that will work on the first go

Introduction to Programming (in C++) Loops. Jordi Cortadella, Ricard Gavaldà, Fernando Orejas Dept. of Computer Science, UPC

Example. Introduction to Programming (in C++) Loops. The while statement. Write the numbers 1 N. Assume the following specification:

KS3 Computing Group 1 Programme of Study hours per week

Binary Number System. 16. Binary Numbers. Base 10 digits: Base 2 digits: 0 1

Python Loops and String Manipulation

Bachelors of Computer Application Programming Principle & Algorithm (BCA-S102T)

CSE 1223: Introduction to Computer Programming in Java Chapter 2 Java Fundamentals

Base Conversion written by Cathy Saxton

COMP 250 Fall 2012 lecture 2 binary representations Sept. 11, 2012

Senem Kumova Metin & Ilker Korkmaz 1

University of Hull Department of Computer Science. Wrestling with Python Week 01 Playing with Python

PL / SQL Basics. Chapter 3

Tutorial on C Language Programming

1 Description of The Simpletron

Beginning to Program Python

CS 241 Data Organization Coding Standards

Oct: 50 8 = 6 (r = 2) 6 8 = 0 (r = 6) Writing the remainders in reverse order we get: (50) 10 = (62) 8

Algorithm & Flowchart & Pseudo code. Staff Incharge: S.Sasirekha

Pseudo code Tutorial and Exercises Teacher s Version

Moving from CS 61A Scheme to CS 61B Java

ECE 0142 Computer Organization. Lecture 3 Floating Point Representations

Keywords are identifiers having predefined meanings in C programming language. The list of keywords used in standard C are : unsigned void

ADVANCED SCHOOL OF SYSTEMS AND DATA STUDIES (ASSDAS) PROGRAM: CTech in Computer Science

COS 217: Introduction to Programming Systems

What makes a good coder and technology user at Mountfields Lodge School?

Week 2 Practical Objects and Turtles

CS 40 Computing for the Web

AQA GCSE in Computer Science Computer Science Microsoft IT Academy Mapping

1 Abstract Data Types Information Hiding

Exercise 1: Python Language Basics

CSI 333 Lecture 1 Number Systems

MATLAB Programming. Problem 1: Sequential

Module 816. File Management in C. M. Campbell 1993 Deakin University

Lecture 2 Mathcad Basics

The C Programming Language

Computer Programming Tutorial

ASCII Encoding. The char Type. Manipulating Characters. Manipulating Characters

Objectives. Python Programming: An Introduction to Computer Science. Lab 01. What we ll learn in this class

Python Programming: An Introduction to Computer Science

Chapter 13: Program Development and Programming Languages

Python Programming: An Introduction to Computer Science

WESTMORELAND COUNTY PUBLIC SCHOOLS Integrated Instructional Pacing Guide and Checklist Computer Math

Useful Number Systems

Course Title: Software Development

What is a Loop? Pretest Loops in C++ Types of Loop Testing. Count-controlled loops. Loops can be...

Instructional Design Framework CSE: Unit 1 Lesson 1

Microcontroller Systems. ELET 3232 Topic 8: Slot Machine Example

Cosmological Arguments for the Existence of God S. Clarke

CHM 579 Lab 1: Basic Monte Carlo Algorithm

Simulation Tools. Python for MATLAB Users I. Claus Führer. Automn Claus Führer Simulation Tools Automn / 65

what operations can it perform? how does it perform them? on what kind of data? where are instructions and data stored?

Chapter 2: Elements of Java

Chapter 1: Key Concepts of Programming and Software Engineering

CGN Computer Methods

CS1010 Programming Methodology A beginning in problem solving in Computer Science. Aaron Tan 20 July 2015

1 Introduction. 2 An Interpreter. 2.1 Handling Source Code

KITES TECHNOLOGY COURSE MODULE (C, C++, DS)

TECHNOLOGY Computer Programming II Grade: 9-12 Standard 2: Technology and Society Interaction

Computer Science 217

Computer Programming I

Memory management. Announcements. Safe user input. Function pointers. Uses of function pointers. Function pointer example

Lecture 22: C Programming 4 Embedded Systems

How to Write a Simple Makefile

Transcription:

Learning to Program Lecture P1: Introduction to C Programming is learned with practice and patience. Don t expect to learn solely from these lectures. Do exercises. Experiment and write lots of code. printf("this is a C program.\n"); Do reading. Finish King Chapters 1-6 today! Aspects of learning to program. Language syntax. Algorithms. Libraries. These are different skills and learning processes. 2 C Background An Example Born along with in the early 1970 s. One of most popular languages today. C Features. Concise. Widespread usage. Exposes low-level details of machine. Consequences. Positive: you can do whatever you want.! Flexible and powerful. Negative: you can do whatever you want.! Shoot yourself in the foot. 3 Print a table of values of function f(x) = 2 - x 3. A first attempt: x f(x) 0.0 2.000 0.1 1.999 0.2 1.992 0.3 1.973 0.4 1.936 0.5 1.875 0.6 1.784 0.7 1.657 0.8 1.488 0.9 1.271 1.0 1.000 1.1 0.669 1.2 0.272 1.3-0.197 1.4-0.744 1.5-1.375 1.6-2.096 1.7-2.913 1.8-3.832 1.9-4.859 double x, y; table1.c printf(" x f(x)\n"); x = 0.0; y = 2.0 - x*x*x; x = 0.1; y = 2.0 - x*x*x;... x = 1.9; y = 2.0 - x*x*x; 4

Printf Library Function Anatomy of Printf Contact between your C program and outside world. Puts characters on "standard output." By default, stdout is the "terminal" that you re typing at. Internally, all numbers represented in BINARY (0 s and 1 s). printf() displays more useful representation (int, double). %f to print double double x, y; x = 0.927; y = 2.2; \n is newline character Formatted output. How do you want the numbers to look? integers, how many digits? real numbers, how many digits after decimal place? Very flexible. 4 6 0. 9 2. 2 0 0... 1 3 space in printf statement 6 7 Running a Program in When you type commands, you are controlling an abstract machine called the " shell." Compile: convert the program from human s language (C) to machine s language. 1st try: syntax errors in C program eventually, a file named a.out Execute: start the machine. (at first instruction in main) 1st try: semantic errors in C program eventually, desired "printf" output % gcc table.c x f(x) 0.0 2.000 0.1 1.999 0.2 1.992 0.3 1.973 0.4 1.936 0.5 1.875 0.6 1.784 0.7 1.657 0.8 1.488 0.9 1.271 1.0 1.000 1.1 0.669 1.2 0.272 1.3-0.197 1.4-0.744 1.5-1.375 1.6-2.096 1.7-2.913 1.8-3.832 1.9-4.859 Anatomy of a While Loop Previous program repeats the same code over and over. Repetitive code boring to write and hard to debug. Use while loop to repeat code. x 0 x < 2.0 false true y 2 - x 3 print x, y x x + 0.1 x = 0.0; while (x < 2.0) { y = 2 - x*x*x; printf("%f %f\n", x, y); x = x + 0.1; C code 9 10

While Loop Example Print a table of values of function f(x) = 2 - x 3. A second attempt. double x, y; table2.c Anatomy of a Function Convenient to break up programs into smaller modules or functions. Layers of abstraction. Makes code easier to understand. Makes code easier to debug. Makes code easier to change later on. uses while loop printf(" x f(x)\n"); x = 0.0; while (x < 2.0) { y = 2.0 - x*x*x; x = x + 0.1; f(x) = 2 - x 3 1.2 0.272 Input Output double f(double x) { return 2 - x*x*x; C function 11 12 Anatomy of a Function C function similar to mathematical function. Prototype or interface is first line of C function. specifies input argument(s) and their types can be integers, real numbers, strings, vectors, user-defined specifies return value function Anatomy of a C Program table3.c double f(double x) { return 2.0 - x*x*x; Body or implementation. The rest, enclosed by { scratch space statements stop execution of function double sum(double x, double y) { double z; z = x + y; return z; output type sum function function name input 2 type input 2 name declaration flow control statement double x, y; assignment statement printf(" x f(x)\n"); x = 0.0; while (x < 2.0) { function call y = f(x); statement x = x + 0.1; output value 13 14

Print 10 "random" integers. Random Integers Library function rand() in stdlib.h returns integer between 0 and RAND_MAX (32,767 = 2 16-1 on arizona). Random Integers Print 10 "random" integers between 0 and 599. No precise match in library. Try to leverage what s there to accomplish what you want. i++; int.c int i = 0; while (i < 10) { printf("%d\n", rand()); i = i + 1; % gcc int.c 16838 5758 10113 17515 31051 5627 23010 7419 16212 4086 int600.c int randominteger(int n) { return rand() % n; of p divided by q int i = 0; while (I < 10) { printf("%d\n", randominteger(600)); i++; p % q gives remainder % gcc int600.c 168 575 101 175 310 562 230 341 16 386 16 17 Random M x N Pattern * * * * ** *** * ** ** * * * * * **** * *** ** * * * * * * * * * * * * * * * *** ** * ** * * * * **** ** * * * * * * * * ** *** *** * * * * * *** * ** * * * * * * **** *** * ** * * * * * *** * *** ** ** * *** * * *** ** ** * * ** * * * ** ** ** * **** * * ** ** * ***** * * ** ** ** ** ** * **** * ** ** ** *** * *** * ** ** *** * ** ** ** * * * * * * ** ** ** * * * ** Random M x N Pattern Top-down design. Break a big problem into smaller subproblems. Break down subproblems into sub-subproblems. Repeat until all details filled in. loop M times print a random row loop N times print a random element if coin flip is heads print "*" else print " " 18 19

#define M 9 #define N 9 int randominteger(int n) {... int i, j; randpattern.c Print random M x N pattern. i = 0; while (i < M) { j = 0; while (j < N) { if (randominteger(2) == 1) printf("*"); else printf(" "); j++; Print a random element. printf("\n"); i++; Print a random row. Libraries How is library function printf() created? User doesn t need to know details (see COS 217). User doesn t want to know details (abstraction). How is library function rand() created? Linear feedback shift register? Cosmic rays? Depends on compiler and operating system. Caveat 1: "random" numbers are not really random.! Can never have all properties of random bits. Computers do exactly what we tell them to do! Caveat 2: on many systems, our randominteger()is very poor. Moral: check assumptions about library function. 20 21 Gambler s Ruin Simulate gambler placing $1 even bets. Will gambler always go broke. If so, how long will it take if gambler starts with $c? Gambler s Ruin gambler.c int randominteger(int n) {... Cash Å $6 Time Å $0 scanf() takes input from terminal while I still have money left, repeat print money left int cash, seed; scanf("%d %d", &cash, &seed); srand(seed); srand() sets random seed while (cash > 0) { if (randominteger(2) == 1) cash++; else cash--; printf("%d\n", cash); make a bet 22 23

Gambler s Ruin Simulate gambler placing $1 even bets. Q. How long does the game last if we start with $c? Gambler s Ruin Simulate gambler placing $1 even bets. Q. How long does the game last if we start with $c? % gcc gambler.c % gcc gambler.c To print plot, replace: 4 543 4 1234 3 3 4 2 5 3 4 4 3 3 4 4 3 5 2 6 1 7 0 6 7 8 9 Hmmm. 4 543 4 1234 *** *** **** ** ***** *** **** **** *** *** **** **** *** ***** ** ****** * ******* ****** ******* ******** ********* printf("%d\n", cash); with i = cash; while (i > 0) { printf("*"); i--; printf("\n"); 24 25 Top-Down Design of Numerical Experiment Gambler s Ruin Experiment Goal: run experiment to see how long it takes to go broke. Find out how this changes for different values of c. for all initial cash values between 2 and 9 run numerical experiments repeat 5 times how long before ruin? do gambler s ruin and return value single experiment (code as before) gexperiment.c int randominteger(int n) {... int doit(int cash) { int cnt = 0; while (cash > 0) { if (randominteger(2) == 1) cash++; else cash--; cnt++; return cnt; 26 27

Gambler s Ruin Experiment Gambler s Ruin Experiment repeat for all initial cash values 2 to 9 repeat 5 times int cash, t; cash = 2; while (cash < 10) { printf("%2d ", cash); t = 0; while (t < 5) { printf("%7d", doit(cash)); t++; printf("\n"); cash++; gexperiment.c (cont) initial cash % gcc gexperiment.c # bets 2 2 6 304 2 2 3 33 17 15 53 29 4 22 1024 7820 22 54 5 243 25 41 7 249 6 494 14 124 152 14 7 299 33 531 49 93 8 218 10650 36 42048 248 9 174090315 83579 299 759 69 How long will it take to go broke?! Guaranteed to go broke, but expected wait is infinite! Layers of abstraction. Random bit Å gambler s ruin sequence Å experiment. 28 29 Programming Advice Understand your program. What would the machine do? Read, understand, and borrow from similar code. Develop programs incrementally. Test each piece separately before continuing. Plan multiple lab sessions. Debugging Find the FIRST bug and fix it. Syntax error - illegal C program. Compiler error messages are good - tell you what you need to change. Semantic error - wrong C program. Use "printf" method. Always a logical explanation. 30 31

Programming Style Concise programs are the norm in C. Poor Indentation fact.c Your goal: write READABLE and EFFICIENT programs. Use consistent indenting. automatic indenting in emacs Choose descriptive variable names. Use comments as needed. "Pick a style that suits you, then use it consistently." -Kernighan and Ritchie #define l11l 0xFFFF #define ll1 for #define ll111 if #define l1l1 unsigned #define l111 struct #define lll11 short #define ll11l long #define ll1ll putchar #define l1l1l(l) l=malloc(sizeof(l111 llll1));l->lll1l=1-1;l->ll1l1=1-1; #define l1ll1 *lllll++=l1ll%10000;l1ll/=10000; #define l1lll ll111(!l1->lll1l){l1l1l(l1->lll1l);l1->lll1l->ll1l1=l1;\ lllll=(l1=l1->lll1l)->lll;ll=1-1; #define llll 1000 l111 llll1 { l111 llll1 * lll1l,*ll1l1 ;l1l1 lll11 lll [ llll];;main (){l111 llll1 *ll11,*l1l,* l1, *ll1l, * malloc ( ) ; l1l1 ll11l l1ll ; ll11l l11,ll,l;l1l1 lll11 *lll1,* lllll; ll1(l =1-1 ;l< 14; ll1ll("\t\"8)>l\"9!.)>vl" [l]^ L ),++l );scanf("%d",&l);l1l1l(l1l) l1l1l(ll11 ) (l1=l1l)-> lll[l1l->lll[1-1] =1]=l11l;ll1(l11 =1+1;l11<=l; ++l11){l1=ll11; lll1 = (ll1l=( ll11=l1l))-> lll; lllll =( l1l=l1)->lll; ll=(l1ll=1-1 );ll1(;ll1l-> lll1l l11l!= *lll1;){l1ll +=l11**lll1++ ;l1ll1 ll111 (++ll>llll){ l1lll lll1=( ll1l =ll1l-> lll1l)->lll; ll1(;l1ll; ){l1ll1 ll111 (++ll>=llll) { l1lll * lllll=l11l; ll1(l=(ll=1-1);(l<llll)&& (l1->lll[ l]!=l11l);++l); ll1 (;l1;l1= l1->ll1l1,l= llll){ll1(--l ;l>=1-1;--l, ++ll)printf( (ll)?((ll%19)?"%04d":(ll= 19,"\n%04d") ):"%4d",l1-> lll[l] ) ; ll1ll(10); 33 34 Summary Lots of material. C is a structured programming language. Functions, loops. Simple but powerful tools. Lecture P1: Supplemental Notes Programming maturity comes with practice. Everything seems simpler in lecture and textbooks. Always more difficult when you do it yourself! Learn main ideas from lecture, learn to program by writing code. 35

Anatomy of a While Loop The while loop is a common repetition structure. Anatomy of a For Loop The for loop is another common repetition structure. while (condition) { statements; while loop initialize expression 1 for (expr1; expr2; expr3) { statements; increment expression 3 condition true statements loop-continuation condition expression 2 true statements false false body 37 38 Anatomy of a Do-While Loop The do-while loop is not-so-common repetition structure. For Loop Example Print a table of values of function f(x) = 2 - x 3. A fourth attempt. statements do { statements; while (condition) do-while loop table4.c double x, y; condition true uses for loop printf(" x f(x)\n"); for (x = 0.0; x < 2.0; x = x + 0.1) { y = 2 - x*x*x; false 39 40

Final Attempt Print a table of values of function f(x) = 2 - x 3. A fifth attempt. What is a C Program? C PROGRAM: a sequence of FUNCTIONS that manipulate data. main() function executed first. no need for { if only one statement double f (double x) { return 2.0 - x*x*x; double x; table5.c x += 0.1 is shorthand in C for x = x+ 0.1 printf(" x f(x)\n"); for (x = 0.0; x < 2.0; x += 0.1) printf("%4.1f %6.3f\n", x, f(x)); A FUNCTION consists of a sequence of DECLARATIONS followed by a sequence of STATEMENTS. Can be built-in like printf(...). Or user-defined like f(x) or sum(x, y). A DECLARATION names variables and defines type. double double x; integer int i; A STATEMENT manipulate data or controls execution. assignment: x = 0.0; control: while (x < 2.0) {... function call: printf(...); 41 42 Print 10 "random" integers. Random Integers Library function rand() in stdlib.h returns integer between 0 and RAND_MAX (32,767 = 2 16-1 on arizona). Random Integers Print 10 "random" integers between 0 and 599. No precise match in library. Try to leverage what s there to accomplish what you want. int.c int i; for (i = 0; i < 10; i++) printf("%d\n", rand()); % gcc int.c 16838 5758 10113 17515 31051 5627 23010 7419 16212 4086 int600.c int randominteger(int n) { return rand() % n; of p divided by q int i; for (i = 0; i < 10; i++) printf("%d\n", randominteger(600)); p % q gives remainder % gcc int600.c 168 575 101 175 310 562 230 341 16 386 43 44

Random Real Numbers Print 10 "random" real numbers between 0.0 and 1.0. No precise match in library. Try to leverage what s there to accomplish what you want. real.c int i; for (i = 0; i < 10; i++) printf("%f\n", 1.0 * rand() / RAND_MAX); Integer division: 16838 / 32767 = 0. C has conversions for mixed types: 1.0 * 15838 / 32767 = 0.513871. % gcc real.c 0.513871 0.175726 0.308634 0.534532 0.947630 0.171728 0.702231 0.226417 0.494766 0.124699 45