39
Lecture 1 Xiaoguang Wang STAT 598W Jan 14th, 2014 (STAT 598W) Lecture 1 1 / 39

Lecture 1 - Purdue University · Lecture 1 Xiaoguang Wang STAT 598W Jan 14th, 2014 (STAT 598W) Lecture 1 1 / 39. Outline 1 Introduction: C Language 2 Basic ... It was designed to

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Lecture 1 - Purdue University · Lecture 1 Xiaoguang Wang STAT 598W Jan 14th, 2014 (STAT 598W) Lecture 1 1 / 39. Outline 1 Introduction: C Language 2 Basic ... It was designed to

Lecture 1

Xiaoguang Wang

STAT 598W

Jan 14th, 2014

(STAT 598W) Lecture 1 1 / 39

Page 2: Lecture 1 - Purdue University · Lecture 1 Xiaoguang Wang STAT 598W Jan 14th, 2014 (STAT 598W) Lecture 1 1 / 39. Outline 1 Introduction: C Language 2 Basic ... It was designed to

Outline

1 Introduction: C Language

2 Basic Syntax

3 Control Flow

4 Functions

(STAT 598W) Lecture 1 2 / 39

Page 3: Lecture 1 - Purdue University · Lecture 1 Xiaoguang Wang STAT 598W Jan 14th, 2014 (STAT 598W) Lecture 1 1 / 39. Outline 1 Introduction: C Language 2 Basic ... It was designed to

Outline

1 Introduction: C Language

2 Basic Syntax

3 Control Flow

4 Functions

(STAT 598W) Lecture 1 3 / 39

Page 4: Lecture 1 - Purdue University · Lecture 1 Xiaoguang Wang STAT 598W Jan 14th, 2014 (STAT 598W) Lecture 1 1 / 39. Outline 1 Introduction: C Language 2 Basic ... It was designed to

Some History

Developed by Dennis Ritchie between 1969 and 1973. (Bell Labs)

It was designed to be used with UNIX operating system, but it wasextended to other systems.

Procedures is the basic structure of C language.

The language was designed to be compiled with a separated devicecalled “compiler”. It lets us to do low-level tasks in the computer(memory tasks).

(STAT 598W) Lecture 1 4 / 39

Page 5: Lecture 1 - Purdue University · Lecture 1 Xiaoguang Wang STAT 598W Jan 14th, 2014 (STAT 598W) Lecture 1 1 / 39. Outline 1 Introduction: C Language 2 Basic ... It was designed to

Advantages

One of the most flexible languages.

Most of potential employers demand Quants with C++ experience.

Comunication with statistical packages (R and Matlab).

(STAT 598W) Lecture 1 5 / 39

Page 6: Lecture 1 - Purdue University · Lecture 1 Xiaoguang Wang STAT 598W Jan 14th, 2014 (STAT 598W) Lecture 1 1 / 39. Outline 1 Introduction: C Language 2 Basic ... It was designed to

How to access C/C++?

In this class we will use Linux operating system. You can do the sameprocedures with Microsoft Visual Studio (Windows)

In order to use Linux OS within Itap’s computers:

We will use a SSH client:Standard Software > Telecommunications > SecureCRT

We will use a SFTP client:Standard Software > Telecommunications > SecureFX

Please follow the instructions in class.

(STAT 598W) Lecture 1 6 / 39

Page 7: Lecture 1 - Purdue University · Lecture 1 Xiaoguang Wang STAT 598W Jan 14th, 2014 (STAT 598W) Lecture 1 1 / 39. Outline 1 Introduction: C Language 2 Basic ... It was designed to

Servers

Stat students: skew.stat.purdue.edu

Math students: bers.math.purdue.edu (?)

Or if you want direct access to Itap’s folders:expert.ics.purdue.edu

(STAT 598W) Lecture 1 7 / 39

Page 8: Lecture 1 - Purdue University · Lecture 1 Xiaoguang Wang STAT 598W Jan 14th, 2014 (STAT 598W) Lecture 1 1 / 39. Outline 1 Introduction: C Language 2 Basic ... It was designed to

SSH Client

If you want to install SecureCRT/FX in you home computer:

Go to http://www.itap.purdue.edu/security/download andfollow the instructions to download both programs.

You will receive two emails with how-to-install information.

If you have questions please let me know.

If you are familiar with other types of SSH/SFTP clients (PuTTY), youcan use them.

(STAT 598W) Lecture 1 8 / 39

Page 9: Lecture 1 - Purdue University · Lecture 1 Xiaoguang Wang STAT 598W Jan 14th, 2014 (STAT 598W) Lecture 1 1 / 39. Outline 1 Introduction: C Language 2 Basic ... It was designed to

Linux

Basic commands:

ls: list files and directories

rm file1: remove file1

mv file1: move file1

cp file1 file2: copy file1 to to file2.

cd dir: change directory

mkdir dir: make directory.

man command: getting help of command.

More information: http://www.ee.surrey.ac.uk/Teaching/Unix/

(STAT 598W) Lecture 1 9 / 39

Page 10: Lecture 1 - Purdue University · Lecture 1 Xiaoguang Wang STAT 598W Jan 14th, 2014 (STAT 598W) Lecture 1 1 / 39. Outline 1 Introduction: C Language 2 Basic ... It was designed to

Text editor

You can use any type of text editor (notepad, for example) but it isrecommended you learn emacs.

There are many emacs references on the web:http://www.cs.princeton.edu/courses/archive/spr97/cs126/help/emacs.html

(STAT 598W) Lecture 1 10 / 39

Page 11: Lecture 1 - Purdue University · Lecture 1 Xiaoguang Wang STAT 598W Jan 14th, 2014 (STAT 598W) Lecture 1 1 / 39. Outline 1 Introduction: C Language 2 Basic ... It was designed to

Outline

1 Introduction: C Language

2 Basic Syntax

3 Control Flow

4 Functions

(STAT 598W) Lecture 1 11 / 39

Page 12: Lecture 1 - Purdue University · Lecture 1 Xiaoguang Wang STAT 598W Jan 14th, 2014 (STAT 598W) Lecture 1 1 / 39. Outline 1 Introduction: C Language 2 Basic ... It was designed to

First Example

#include <stdio.h>

void main()

{

printf("First Program\n");

}

Compile the previous code using gcc. More details onhttp://www.network-theory.co.uk/docs/gccintro/.

(STAT 598W) Lecture 1 12 / 39

Page 13: Lecture 1 - Purdue University · Lecture 1 Xiaoguang Wang STAT 598W Jan 14th, 2014 (STAT 598W) Lecture 1 1 / 39. Outline 1 Introduction: C Language 2 Basic ... It was designed to

Data Types

char: single byte (one character).

int: integer.

float: single-precision floating point.

double: double-precision floatng point.

We can extend the int, float and double types by using long or short:

long double sh;

short int ii;

with their signed and unsigned versions.

(STAT 598W) Lecture 1 13 / 39

Page 14: Lecture 1 - Purdue University · Lecture 1 Xiaoguang Wang STAT 598W Jan 14th, 2014 (STAT 598W) Lecture 1 1 / 39. Outline 1 Introduction: C Language 2 Basic ... It was designed to

Variables

All the variables must be declared before use.

int lower,upper,step;

char c,line[1000];

The variables can be initialized in their declaration:

char esc=’\\’;

int i=0;

The variables can have a fixed value by using the const qualifier:

const double pi=3.14;

const char msg[]="warning";

(STAT 598W) Lecture 1 14 / 39

Page 15: Lecture 1 - Purdue University · Lecture 1 Xiaoguang Wang STAT 598W Jan 14th, 2014 (STAT 598W) Lecture 1 1 / 39. Outline 1 Introduction: C Language 2 Basic ... It was designed to

Operators

Arithmetic operators: +, - , * ,%

Relational operators: >, >=, <, <= and ==,!=.

Logical operators: && and ¦¦.Increment and Decrement operators:

i++ means: i=i+1.i-- means: i=i-1.

(STAT 598W) Lecture 1 15 / 39

Page 16: Lecture 1 - Purdue University · Lecture 1 Xiaoguang Wang STAT 598W Jan 14th, 2014 (STAT 598W) Lecture 1 1 / 39. Outline 1 Introduction: C Language 2 Basic ... It was designed to

Assignment operators

Notation: expr1=(expr1) op (expr2) is equivalent toexpr1 op=expr2.

Examples:

i=i+2 is equiv. to i+=2.x*=y+1 is equiv. to x=x*(y+1)

(STAT 598W) Lecture 1 16 / 39

Page 17: Lecture 1 - Purdue University · Lecture 1 Xiaoguang Wang STAT 598W Jan 14th, 2014 (STAT 598W) Lecture 1 1 / 39. Outline 1 Introduction: C Language 2 Basic ... It was designed to

Formatted Ouput

printf: converts, formats and prints its arguments on the standardoutput device. Example:#include <stdio.h>

int main()

{

printf ("Characters: %c %c \n", ’a’, 65);

printf ("Decimals: %d %ld\n", 1977, 650000L);

printf ("Preceding with blanks: %10d \n", 1977);

printf ("Preceding with zeros: %010d \n", 1977);

printf ("floats: %4.2f %+.0e %E \n", 3.1416, 3.1416, 3.1416);

printf ("Width trick: %*d \n", 5, 10);

printf ("%s \n", "A string");

return 0;

}

More details on:http://www.cplusplus.com/reference/clibrary/cstdio/printf/.

(STAT 598W) Lecture 1 17 / 39

Page 18: Lecture 1 - Purdue University · Lecture 1 Xiaoguang Wang STAT 598W Jan 14th, 2014 (STAT 598W) Lecture 1 1 / 39. Outline 1 Introduction: C Language 2 Basic ... It was designed to

Formatted Input

scanf: input analog of printf.#include <stdio.h>

int main ()

{

char str [80];

int i;

printf ("Enter your family name: ");

scanf ("%s",str);

printf ("Enter your age: ");

scanf ("%d",&i);

printf ("Mr. %s , %d years old.\n",str,i);

printf ("Enter a hexadecimal number: ");

scanf ("%x",&i);

printf ("You have entered %#x (%d).\n",i,i);

return 0;

}

(STAT 598W) Lecture 1 18 / 39

Page 19: Lecture 1 - Purdue University · Lecture 1 Xiaoguang Wang STAT 598W Jan 14th, 2014 (STAT 598W) Lecture 1 1 / 39. Outline 1 Introduction: C Language 2 Basic ... It was designed to

Input/Output

It’s a good idea to learn some C standard input/output functions, but wewill use the C++ library “iostream” pretty soon.

(STAT 598W) Lecture 1 19 / 39

Page 20: Lecture 1 - Purdue University · Lecture 1 Xiaoguang Wang STAT 598W Jan 14th, 2014 (STAT 598W) Lecture 1 1 / 39. Outline 1 Introduction: C Language 2 Basic ... It was designed to

Outline

1 Introduction: C Language

2 Basic Syntax

3 Control Flow

4 Functions

(STAT 598W) Lecture 1 20 / 39

Page 21: Lecture 1 - Purdue University · Lecture 1 Xiaoguang Wang STAT 598W Jan 14th, 2014 (STAT 598W) Lecture 1 1 / 39. Outline 1 Introduction: C Language 2 Basic ... It was designed to

If-Else

To express decisions. Syntax:

if (expression)

statement 1;

else

statement 2;

And it is possible to construct else-if structures:

if (expression)

statement 1;

else if (expression)

statement 2;

else if (expression)

statement 3;

else

statement 4;

(STAT 598W) Lecture 1 21 / 39

Page 22: Lecture 1 - Purdue University · Lecture 1 Xiaoguang Wang STAT 598W Jan 14th, 2014 (STAT 598W) Lecture 1 1 / 39. Outline 1 Introduction: C Language 2 Basic ... It was designed to

Examples

Example 1:

if(n > 0)

average = sum / n;

else{

printf("can’t compute average\n");

average = 0;

}Example 2:if(grade >= 90)

printf("A");

else if(grade >= 80)

printf("B");

else if(grade >= 70)

printf("C");

else if(grade >= 60)

printf("D");

else printf("F");

(STAT 598W) Lecture 1 22 / 39

Page 23: Lecture 1 - Purdue University · Lecture 1 Xiaoguang Wang STAT 598W Jan 14th, 2014 (STAT 598W) Lecture 1 1 / 39. Outline 1 Introduction: C Language 2 Basic ... It was designed to

Loops: While and For

Syntax:

while(expression)

statement

Syntax:

for(expr1; expr2; expr3)

statement

(STAT 598W) Lecture 1 23 / 39

Page 24: Lecture 1 - Purdue University · Lecture 1 Xiaoguang Wang STAT 598W Jan 14th, 2014 (STAT 598W) Lecture 1 1 / 39. Outline 1 Introduction: C Language 2 Basic ... It was designed to

Examples

While statement:

int x = 2;

while(x < 1000)

{

printf("%d\n", x);

x = x * 2;

}

For statement:

for(i=0; i<n; i++)

{

k=i+3

printf("%d\n", k);

}

(STAT 598W) Lecture 1 24 / 39

Page 25: Lecture 1 - Purdue University · Lecture 1 Xiaoguang Wang STAT 598W Jan 14th, 2014 (STAT 598W) Lecture 1 1 / 39. Outline 1 Introduction: C Language 2 Basic ... It was designed to

Useful statements within loops

Break: provides an early exit from a loop. Example:

while(t<=100){

if(t%4==0)

break;

else

t*=4;

}

Continue: it causes the next iteration of a loop to begin. Example:

for(i=0; i < n; i++){

if(a[i]<0)

continue;

else

sum+=a[i]

}

(STAT 598W) Lecture 1 25 / 39

Page 26: Lecture 1 - Purdue University · Lecture 1 Xiaoguang Wang STAT 598W Jan 14th, 2014 (STAT 598W) Lecture 1 1 / 39. Outline 1 Introduction: C Language 2 Basic ... It was designed to

Example

Compile the following:

#include <stdio.h>

#include <math.h>

void main()

{

int i, j;

printf("%d\n", 2);

for(i = 3; i <= 100; i = i + 1)

{

for(j = 2; j < i; j = j + 1)

{

if(i % j == 0)

break;

if(j > sqrt(i))

{

printf("%d\n", i);

break;

}

}

}

return 0;

}

(STAT 598W) Lecture 1 26 / 39

Page 27: Lecture 1 - Purdue University · Lecture 1 Xiaoguang Wang STAT 598W Jan 14th, 2014 (STAT 598W) Lecture 1 1 / 39. Outline 1 Introduction: C Language 2 Basic ... It was designed to

Outline

1 Introduction: C Language

2 Basic Syntax

3 Control Flow

4 Functions

(STAT 598W) Lecture 1 27 / 39

Page 28: Lecture 1 - Purdue University · Lecture 1 Xiaoguang Wang STAT 598W Jan 14th, 2014 (STAT 598W) Lecture 1 1 / 39. Outline 1 Introduction: C Language 2 Basic ... It was designed to

Functions

Some details:

In C there are no procedures, just functions.

The function called: “main” is where the program execution begins.

The “return” statement is the mechanism for returning a value fromthe called function to the user.

Up to now, the return values are of type: void (no value) and int. Wecan extend this to any type of variable.

(STAT 598W) Lecture 1 28 / 39

Page 29: Lecture 1 - Purdue University · Lecture 1 Xiaoguang Wang STAT 598W Jan 14th, 2014 (STAT 598W) Lecture 1 1 / 39. Outline 1 Introduction: C Language 2 Basic ... It was designed to

Syntax

return-type function-name(argument declarations)

{

declarations and statements

}

Example:

int multbytwo(int x)

{

return x * 2;

}

(STAT 598W) Lecture 1 29 / 39

Page 30: Lecture 1 - Purdue University · Lecture 1 Xiaoguang Wang STAT 598W Jan 14th, 2014 (STAT 598W) Lecture 1 1 / 39. Outline 1 Introduction: C Language 2 Basic ... It was designed to

External declarations

In C all the functions should be declared. There are two ways todeclare a function:

By using an #include statement. (Header files)By calling the function directly (Functions defined within the .c file orlocated within the current directory)

In order to understand these facts we need to study the scope rulesfurther.

(STAT 598W) Lecture 1 30 / 39

Page 31: Lecture 1 - Purdue University · Lecture 1 Xiaoguang Wang STAT 598W Jan 14th, 2014 (STAT 598W) Lecture 1 1 / 39. Outline 1 Introduction: C Language 2 Basic ... It was designed to

Scope Rules

The functions and external variables that make up a C program neednot all be compiled at the same time. You can keep several files andpreviously compiled routines can be loaded using libraries.

The scope of an internal variable is the function in which the name isdefined. (the same is true for the parameters of a function)

The scope of an external variable lasts from the point which it isdefined to the end of the file being compiled.

Important: any function is a variable!

(STAT 598W) Lecture 1 31 / 39

Page 32: Lecture 1 - Purdue University · Lecture 1 Xiaoguang Wang STAT 598W Jan 14th, 2014 (STAT 598W) Lecture 1 1 / 39. Outline 1 Introduction: C Language 2 Basic ... It was designed to

Example

void main(){...}

int sp=0;

double val[10]

void compute1(double f){...}

double compute2(int k,double g){...}

(STAT 598W) Lecture 1 32 / 39

Page 33: Lecture 1 - Purdue University · Lecture 1 Xiaoguang Wang STAT 598W Jan 14th, 2014 (STAT 598W) Lecture 1 1 / 39. Outline 1 Introduction: C Language 2 Basic ... It was designed to

Scope Rules

Important vocabulary:

“To define“ a variable: to announce the properties of a variable and tostore that variable in memory.”To declare“ a variable: to announce the properties of a variable.

If an external variable is to be referred before it is defined or if it isdefined in a different .c file then you have to use extern command.

You can have multiple declarations but only one definition.

(STAT 598W) Lecture 1 33 / 39

Page 34: Lecture 1 - Purdue University · Lecture 1 Xiaoguang Wang STAT 598W Jan 14th, 2014 (STAT 598W) Lecture 1 1 / 39. Outline 1 Introduction: C Language 2 Basic ... It was designed to

Example

file 1:

extern int sp;

extern double val[]

extern double compute2(int,double)

void compute1(double)

void main(){...}

void compute1(double f){...}

file2:

int sp=0;

double val[10];

double compute2(int k,double g){...}

(STAT 598W) Lecture 1 34 / 39

Page 35: Lecture 1 - Purdue University · Lecture 1 Xiaoguang Wang STAT 598W Jan 14th, 2014 (STAT 598W) Lecture 1 1 / 39. Outline 1 Introduction: C Language 2 Basic ... It was designed to

Scope Rules

The problem with this structure is that it can become extremelycomplicated.

In order to solve this we can create Header functions (.h) containingonly variable declarations.

We can call it by using #include "name.h".

(STAT 598W) Lecture 1 35 / 39

Page 36: Lecture 1 - Purdue University · Lecture 1 Xiaoguang Wang STAT 598W Jan 14th, 2014 (STAT 598W) Lecture 1 1 / 39. Outline 1 Introduction: C Language 2 Basic ... It was designed to

Example

file 1:

#include "headerfile.h"

void main(){...}

file2:

int sp=0;

double val[10];

void compute1(double f){...}

double compute2(int k,double g){...}

header file:

int sp;

double val[]

double compute2(int,double)

void compute1(double)

(STAT 598W) Lecture 1 36 / 39

Page 37: Lecture 1 - Purdue University · Lecture 1 Xiaoguang Wang STAT 598W Jan 14th, 2014 (STAT 598W) Lecture 1 1 / 39. Outline 1 Introduction: C Language 2 Basic ... It was designed to

Exercise

Simplify the structure of these functions using a header file:

#include <stdio.h>

int multbytwo(int x)

{

return x * 2;

}

int main()

{

int i, j;

i = 3;

j = multbytwo(i);

printf("%d\n", j);

return 0;

}

(STAT 598W) Lecture 1 37 / 39

Page 38: Lecture 1 - Purdue University · Lecture 1 Xiaoguang Wang STAT 598W Jan 14th, 2014 (STAT 598W) Lecture 1 1 / 39. Outline 1 Introduction: C Language 2 Basic ... It was designed to

Exercise

Implement a function that computes n!.

Using the previous function implement the binomial coefficient of nand k .

Implement a procedure that takes any number (including no-senseinput) and computes the CDF of a Binomial(n,p). Include errorwarnings to the user.

(STAT 598W) Lecture 1 38 / 39

Page 39: Lecture 1 - Purdue University · Lecture 1 Xiaoguang Wang STAT 598W Jan 14th, 2014 (STAT 598W) Lecture 1 1 / 39. Outline 1 Introduction: C Language 2 Basic ... It was designed to

Some references

http://www.cplusplus.com/.

http://www.cprogramming.com/tutorial.html#ctutorial

http://www.eskimo.com/~scs/cclass/notes/top.html

(STAT 598W) Lecture 1 39 / 39