week11 - clark science center€¦ · hw9a.asm test0.asm 231lib.asm hw9a.o test0.o 231lib.o nasm...

Post on 30-Jul-2020

4 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

mith College

Computer Science

Dominique Thiébaut dthiebaut@smith.edu

CSC231Week 11— Introduction to C

Fall 2019

https://kristv.com/sponsored/bay-area-bicycles/2019/02/25/from-training-wheels-to-two-wheels-tips-for-helping-kids-learn-to-ride/

hw9a.asm

test0.asm

231Lib.asm

hw9a.o

test0.o

231Lib.o

nasm

nasm

nasm

test0

ld

Outline

• Recursion: Towers of Hanoi

• C

D. Thiebaut, Computer Science, Smith College

Towers of Hanoi…in Assembly

• In Python first

• In Assembly next

https://media-cdn.tripadvisor.com/media/photo-s/0f/00/ee/18/ulun-danu-bratan-temple.jpg

D. Thiebaut, Computer Science, Smith College

https://youtu.be/2SUvWfNJSsM

What's the relationship

between Towers of Hanoi

and Serpinski?

Watch on

your own!

D. Thiebaut, Computer Science, Smith College

A B C

D. Thiebaut, Computer Science, Smith College

Write it in Python!

getcopy hanoi0.py

D. Thiebaut, Computer Science, Smith College

moveDisk( 5, Source, Dest, Extra )

moveDisk( 4, Source, Extra, Dest )

moveDisk( 1, Source, Dest, Extra )

moveDisk( 4, Extra, Dest, Source )

D. Thiebaut, Computer Science, Smith College

moveDisk( 5, Source, Dest, Extra )

moveDisk( 4, Source, Extra, Dest )

moveDisk( 1, Source, Dest, Extra )

moveDisk( 4, Extra, Dest, Source )

D. Thiebaut, Computer Science, Smith College

moveDisk( 5, Source, Dest, Extra )

moveDisk( 4, Source, Extra, Dest )

moveDisk( 1, Source, Dest, Extra )

moveDisk( 4, Extra, Dest, Source )

D. Thiebaut, Computer Science, Smith College

getcopy hanoi.asm

D. Thiebaut, Computer Science, Smith College

C for Assembly

Language Programmers

Computer Science Dominique Thiebaut

• Dennis Ritchie

• 1969 to 1973

• AT&T Bell Labs

• Close to Assembly

• Unix

• Standard

• Many languages based on C. (C++, Obj. C, C#)

• Many influenced by C (Java, Python, Perl)

Computer Science Dominique Thiebaut

• Dennis Ritchie

• 1969 to 1973

• AT&T Bell Labs

• Close to Assembly

• Unix

• Standard

• Many languages based on C. (C++, Obj. C, C#)

• Many influenced by C (Java, Python, Perl)

Computer Science Dominique Thiebaut

Missing from C…

• Exceptions

• Garbage collection

• OOP

• Polymorphism

• But…

• Exceptions

• Garbage collection

• OOP

• Polymorphism

• But… it is usually faster!

Missing from C…

Example: N-Queens Problem

http://www.science.smith.edu/dftwiki/index.php/CSC231:_N-Queens_Problem:_interpreted_vs_compiled

Example: N-Queens Problem

http://www.science.smith.edu/dftwiki/index.php/CSC231:_N-Queens_Problem:_interpreted_vs_compiled

Language Execution Time

Python 48 secC 1.4 secC with -O3 optimization      0.4 sec

Good Reference

• Essential C, by Nick Parlante, Stanford U. http://cslibrary.stanford.edu/101/EssentialC.pdf

Computer Science Dominique Thiebaut

JAVA

C

JAVA

C

POINTERS

OOP

(simplification)

Hello World!

#include <stdio.h>

int main() { printf("\nHello World\n"); return 0;}

Computer Science Dominique Thiebaut

Hello World!• Library

• Strings

• Block-structured language

• main() #include <stdio.h>

int main() { printf("\nHello World\n"); return 0;}

Computer Science Dominique Thiebaut

Hello World!• Library

• Strings

• Block-structured language

• main() #include <stdio.h>

int main() { printf("\nHello World\n"); return 0;}

Computer Science Dominique Thiebaut

getcopy C/hello.c

Compiling on Marax

• gcc Gnu compiler

• man gcc for help

[~/handout]$ gcc hello.c[~/handout]$ ./a.out

Hello World

[~/handout]$ gcc -o hello hello.c[~/handout]$ ./hello

Hello World

Computer Science Dominique Thiebaut

Files

Computer Science Dominique Thiebaut

• Write your own Hello World! program

• Make it print something like: ************ * C Rocks! * ************

Exercise

Computer Science Dominique Thiebaut

getcopy C/hello.c

[~/handout]$ gcc -o hello hello.c[~/handout]$ ./helloHello World!

• http://www.gnu.org/software/gnu-c-manual/gnu-c-manual.html

Computer Science Dominique Thiebaut

Good Reference

on C Compiler

Printing

•printf( "string with %-operators", list of vars);

•%d int

•%f float

•%s string

Computer Science Dominique Thiebaut

printf( "%3d %1.3f %s\n", 2, 3.14159, "CSC231 Assembly" );

Variables

Computer Science Dominique Thiebaut

• Simple types

• No string type!

• No booleans (only 0 for false and !0 for true)

• No classes, no objects, no OOP!

Variables

int -> integer variableshort -> short integerlong -> long integerfloat -> single precision real (floating point) variabledouble -> double precision real (floating point) variablechar -> character variable (single byte)

Computer Science Dominique Thiebaut

Comments

Computer Science Dominique Thiebaut

We stopped hereLast Time

We stopped hereLast Time

Strings(and String Functions)

Computer Science Dominique Thiebaut

Use "…" for strings

Use 'x' for characters

Strings

Computer Science Dominique Thiebaut

Strings

Computer Science Dominique Thiebaut

Strings

Computer Science Dominique Thiebaut

Strings

Computer Science Dominique Thiebaut

Strings

Computer Science Dominique Thiebaut

[~/handout/C]$ gcc strings.c[~/handout/C]$ ./a.out

sentence = hello world![~/handout/C]

Strings

Computer Science Dominique Thiebaut

A Few String Functionsstrcpy( dest, src )

copies the string pointed to by src to dest

strcat( dest, src )concatenate the string pointed to by src todest

strlen( src )returns the number of characters in thestring

more at https://www.tutorialspoint.com/c_standard_library/string_h.htm

A Few String Functionsstrstr( haystack, needle )

returns a pointer to the needle (string) in the stack (string), or NULL if not found.

strchr( haystack, char-needle )returns a pointer to the needle (char) in the stack (string), or NULL if not found.

more at https://www.tutorialspoint.com/c_standard_library/string_h.htm

Strings end with ‘\0’

Computer Science Dominique Thiebaut

'h' 'e' 'l' 'l' 'o' '\0'msg

Strings end with ‘\0’

Computer Science Dominique Thiebaut

'h' 'e' 'l' 'l' 'o' \0msg

msg2 'h' 'e' 'l' 'l' 'o' ' ' 't' 'h' 'e' 'r' 'e' '\0'

Strings end with ‘\0’

Computer Science Dominique Thiebaut

'h' 'e' 'l' 'l' 'o' \0msg

msg2 'h' 'e' 'l' 'l' 'o' ' ' 't' 'h' 'e' 'r' 'e' '\0'

msg3 'h' 'e' 'l' 'l' 'o' '\0' 't' 'h' 'e' 'r' 'e' '\0'

Strings end with ‘\0’

Computer Science Dominique Thiebaut

'h' 'e' 'l' 'l' 'o' '\0'msg

msg2 'h' 'e' 'l' 'l' 'o' ' ' 't' 'h' 'e' 'r' 'e' '\0'

msg3 'h' 'e' 'l' 'l' 'o' '\0' 't' 'h' 'e' 'r' 'e' '\0'

msg4 '\0' 'e' 'l' 'l' 'o' '\0' 't' 'h' 'e' 'r' 'e' '\0'

Strings end with ‘\0’

Computer Science Dominique Thiebaut

~/handout/C]$ ./a.outsentence = Hello world!sentence = Hello[~/handout/C]$

Strings end with ‘\0’

Computer Science Dominique Thiebaut

~/handout/C]$ ./a.outsentence = Hello world!sentence = Hello[~/handout/C]$

Strings end with ‘\0’

Computer Science Dominique Thiebaut

'h'

'e'

'l'

'l'

'o'

'\0'

Strings

are Mutable

• make the program compute your email account as the first letter of your first name and the first 8 letters of your last name.

Exercise

Computer Science Dominique Thiebaut

getcopy C/exercise1.c

For-Loops

Computer Science Dominique Thiebaut

For-Loops

Computer Science Dominique Thiebaut

While-Loops

Computer Science Dominique Thiebaut

Infinite Loops

Computer Science Dominique Thiebaut

• Write a program that displays the first 10 fibonacci terms. Use a loop!

• You may use this code to get started. You can start printing 1, 2, 3 or 1, 1, 2, 3… Both solutions are fine. int fibn=1, fibn1=1, fibn2=0; fibn = fibn1 + fibn2; … printf( "%d\n", fibn );

Exercise, Part 1

Computer Science Dominique Thiebaut

• Take the solution for the previous exercise (getcopy C/fibonacci0.c) and replace the for-loop with a while loop that prints all the terms that less than 1000.

Computer Science Dominique Thiebaut

Exercise, Part 2

Symbolic Constants

Computer Science Dominique Thiebaut

Symbolic Constants

Computer Science Dominique Thiebaut

Symbolic Constants

Computer Science Dominique Thiebaut

After

preproce

ssing

Conditionals

Computer Science Dominique Thiebaut

Conditionals

Computer Science Dominique Thiebaut

&& and

|| or

! not

Conditionals (cont’d)

Computer Science Dominique Thiebaut

Computer Science Dominique Thiebaut

ints or chars, something countable

Conditionals (cont’d)

Pointers

Computer Science Dominique Thiebaut

Concept

Computer Science Dominique Thiebaut

x6.5

0FFF1F0A

px

RAM

Concept

Computer Science Dominique Thiebaut

x6.5

0FFF1F0A

px

RAM

Example: Initialize an Array

Computer Science Dominique Thiebaut

Using

indexing

3 4 1 9 3 4 6 6 1 0

0 1 2 3 4 5 6 7 8 9

A

Example: Initialize an Array

Computer Science Dominique Thiebaut

Using

indexing

Example: Initialize an Array

Computer Science Dominique Thiebaut

3 4 1 9 3 4 6 6 1 0

0 1 2 3 4 5 6 7 8 9

A

Using

pointers

Computer Science Dominique Thiebaut

Using

pointers

Example: Initialize an Array

./a.outp=0x7fff88d54560 A[0] = 0.00 *p = 0.00p=0x7fff88d54564 A[1] = 1.00 *p = 1.00p=0x7fff88d54568 A[2] = 2.00 *p = 2.00p=0x7fff88d5456c A[3] = 3.00 *p = 3.00p=0x7fff88d54570 A[4] = 4.00 *p = 4.00p=0x7fff88d54574 A[5] = 5.00 *p = 5.00p=0x7fff88d54578 A[6] = 6.00 *p = 6.00p=0x7fff88d5457c A[7] = 7.00 *p = 7.00p=0x7fff88d54580 A[8] = 8.00 *p = 8.00p=0x7fff88d54584 A[9] = 9.00 *p = 9.00

Computer Science Dominique Thiebaut

Arrays

Computer Science Dominique Thiebaut

v[0]

6.5

0FFF1F00

pv

pv+1

pv+2

pv+3

v[1]

v[2]

v[3]

0FFF1F04

0FFF1F08

0FFF1F0C

0FFF1F10

Arrays

• The name of an array is a pointer to the first cell of the array.

• name is the same as &(name[0])

Computer Science Dominique Thiebaut

* and &• * has two meanings, depending on

context

• “Pointer to”

• “Contents of”

• & means “the address of”

Computer Science Dominique Thiebaut

* and &

Computer Science Dominique Thiebaut

Computer Science Dominique Thiebaut

Exercise• Write a C program that copies Array A into Array B using indexing first, and then using pointers.

getcopy C/copyArrays.c

Exercise• Write a C program that finds the largest integer in Array A, using pointers.

Computer Science Dominique Thiebaut

Functions

Computer Science Dominique Thiebaut

Functions

• Functions are normally declared before they are used

• Functions can return values of simple types (int, char, floats), and even pointers.

• Functions get parameters of simple types, and pointers.

• Passing by value is automatic. Passing by reference requires passing a pointer.

Computer Science Dominique Thiebaut

z = 30z = 11sum( 11, 22) = 33

Computer Science Dominique Thiebaut

Example 1

z = 30x = 11

Example 2 (Incomplete code… Add missing elements!)

Computer Science Dominique Thiebaut

Pass

by Reference!

Exercise

Complete the code

shown here

Computer Science Dominique Thiebaut

getcopy C/decrementArray.c

Exercise

Computer Science Dominique Thiebaut

• Write a C program that uses functions to find the largest integer in A. The result is passed back using a return statement.

Exercise

• Write another program that does the same thing but the max is passed back via a parameter passed by reference.

Computer Science Dominique Thiebaut

top related