C Tutorial - PowerPoint PPT Presentation

1 / 60
About This Presentation
Title:

C Tutorial

Description:

Hello World Program. Data Types & Variables. printf() Arithmetic & Logical Operations ... hello './ ' indicates the following file 'hello' resides under the ... – PowerPoint PPT presentation

Number of Views:174
Avg rating:3.0/5.0
Slides: 61
Provided by: Ton16
Category:
Tags: hello | tutorial

less

Transcript and Presenter's Notes

Title: C Tutorial


1
C Tutorial
  • CSU480
  • Donghui Zhang

Adapted from Wei Qians C tutorial slides.
2
What we do
  • Hello World Program
  • Data Types Variables
  • printf()
  • Arithmetic Logical Operations
  • Conditionals
  • Loops
  • Arrays Strings

3
  • Pointers
  • Functions
  • Command-Line Argument
  • Data Structure
  • Memory Allocation
  • Programming Tips

4
Hello World Program
  • The source code
  • include
  • int main()
  • printf("Hello World\n")
  • return(0)

5
  • How to compile
  • gcc hello.c o hello
  • gcc is the compiling command.
  • hello.c is the source file, and hello is
    compiler-generated executable file.

6
  • How to execute
  • ./hello
  • ./ indicates the following file hello
    resides under the current execution directory.

7
Data Types Variables
  • Data Types
  • char - character variable 1 bytes
  • int - integer variable 4
  • short - short integer 2
  • long - long integer 4
  • float - single precision real number 4
  • double - double precision real variable 8
  • unsigned - cant be used with float and double
    type.
  • unsigned variables can not represent
  • negative values.

8
  • Variable Declaration
  • int length 100
  • char num 9 //The actual value is 57
  • float deposit 240.5
  • unsigned short ID 0x5544
  • Try the following statements, and see what
    happens
  • unsigned char value -1
  • printf(The value is d \n, value)
  • unsigned char value 300
  • printf(The value is d \n, value)

9
  • unsigned char value -1
  • printf(The value is d \n, value)
  • The value is 255.
  • unsigned char value 300
  • printf(The value is d \n, value)
  • The value is 44.

10
  • Local variable
  • Local variables are declared within the body of
    a function, and can only be used within that
    function.
  • Static variable
  • Another class of local variable is the static
    type. It is specified by the keyword static in
    the variable declaration.
  • The most striking difference from a non-static
    local variable is, a static variable is not
    destroyed on exit from the function.
  • Global variable
  • A global variable declaration looks normal, but
    is located outside any of the program's
    functions. So it is accessible to all functions.

11
  • An example
  • int global 10 //global variable
  • int func (int x)
  • static int stat_var //static local variable
  • int temp //(normal) local variable
  • int name50 //(normal) local variable

12
printf()
  • The printf() function can be instructed to print
    integers, floats and string properly.
  • The general syntax is
  • printf( format, variables)
  • An example
  • int stud_id 5200
  • char name Mike
  • printf(s s ID is d \n, name, stud_id)

13
  • Format Identifiers
  • d decimal integers
  • x hex integer
  • c character
  • f float and double number
  • s string
  • p pointer
  • How to specify display space for a variable
  • printf(The student id is 5d \n, stud_id)
  • The value of stud_id will occupy 5 characters
    space in the print-out.

14
  • Why \n
  • It introduces a new line on the terminal
    screen.
  • More about printf()
  • man printf

15
Arithmetic Operations
  • Arithmetic operators
  • int i 10
  • int j 15
  • int add i j
  • int diff j i
  • int product i j
  • int quotient j / i
  • Int residual j i
  • i //Increase by 1
  • i-- //Decrease by 1

16
  • Comparing them
  • int i 10
  • int j 15
  • float k 15.0
  • j / i ?
  • j i ?
  • k / i ?
  • k i ?

17
  • The Answer
  • j / i 1
  • j i 5
  • k / i 1.5
  • k i It is illegal.

18
  • Whats wrong with the following code

int grade2 // A4, B3, C2, D1, F0
int hour2 // credit hour
int total_grade grade0hour0
grade1hour1 int total_hour hour0 hour
1 float gpa total_grade / total_hour
  • Always gets an integer GPA.
  • E.g. if grades are A and B, and hours are 3 and
    2.
  • correct gpa (4332) / 5 3.6,
  • but the above program generates gpa3.0
  • How to fix?

float gpa total_grade 1.0 / total_hour
19
Logical Operations
  • What is true and false in C
  • In C, there is no specific data type to
    represent true and false. C uses value 0 to
    represent false, and uses non-zero value to
    stand for true.
  • Logical Operators
  • A B A and B
  • A B A or B
  • A B Is A equal to B?
  • A ! B Is A not equal to B?

20
  • A B Is A greater than B?
  • A B Is A greater than or equal to
    B?
  • A Is A less than B?
  • A Is A less than or equal to
    B?
  • Dont be confused
  • and have different meanings from and .
  • and are bitwise operators.
  • Some practices
  • Please compute the value of the following
    logical expressions?

21
  • int i 10 int j 15 int k 15 int m 0

  • if( i
  • if( i ! j k
  • if( j k)
  • if( j k m)
  • if(i)
  • if(m j i )

22
  • int i 10 int j 15 int k 15 int m 0

  • if( i false
  • if( i ! j k true
  • if( j k) true
  • if( j k m) false
  • if(i) true
  • if(m j i ) true
  • Did you get the correct answers?

23
Conditionals
  • if statement
  • Three basic formats,
  • if (expression)
  • statement
  • if (expression)
  • statement
  • else
  • statement

24
  • if (expression)
  • statement
  • else if (expression)
  • statement
  • else
  • statement

25
  • An example
  • if(score 90)
  • a_cnt
  • else if(score 80)
  • b_cnt
  • else if(score 70)
  • c_cnt
  • else if (score 60)
  • d_cnt
  • else
  • f_cnt

26
  • The switch statement
  • switch (expression) 
  • case item1
  • statement
  • break
  • case item2
  • statement
  • break
  • default
  • statement
  • break

27
  • What does Func( B ) return?
  • int Func( char c )
  • int grade
  • switch ( c )
  • case A
  • grade 4
  • case B
  • grade 3
  • case C
  • grade 2
  • return grade
  • Answer 2!
  • Reason case is a label. Jumps to a location
    inside switch and executes sequentially.
  • Solution break!

28
  • Correct version
  • int Func( char c )
  • int grade
  • switch ( c )
  • case A
  • grade 4 break
  • case B
  • grade 3 break
  • case C
  • grade 2 break
  • return grade
  • Whats wrong with the code?
  • If c is not A or B or C, return an arbitrary
    integer.
  • Solution default!

29
  • int Func( char c )
  • int grade
  • switch ( c )
  • case A
  • grade 4 break
  • case B
  • grade 3 break
  • case C
  • grade 2 break
  • default
  • grade 0 // or assert(false) or anything you
    like
  • return grade

30
Loops
  • for statement
  • for (expression1 expression2 expression3)
  • statement
  • expression1 initializes
  • expression2 is the terminate test
  • expression3 is the modifier

31
  • An example
  • int x
  • for (x0 x
  • printf("xd \n",x)

32
  • The while statement
  • while (expression)
  • statement
  • while loop exits only when the expression is
    false.
  • An example
  • int x 0
  • while (x
  • printf("xd \n",x)
  • x

33
Arrays Strings
  • Arrays
  • int ids50
  • char name100
  • int table_of_num3040
  • Accessing an array
  • ids0 40
  • i ids1 j
  • table_of_num34 100
  • Note In C (and Java) Array subscripts start at
    0 and end one less than the array size.

34
Arrays Strings
  • A common mistake
  • int ids50
  • ids10 98 // ERROR array out of bound!!!

35
  • Strings
  • Strings are defined as arrays of characters.
  • The only difference from a character array is, a
    symbol \0 is used to indicate the end of a
    string.
  • For example, suppose we have a character array,
    char name8, and we store into it a string
    Dave.
  • Note the length of this string 4, but it
    occupies 5 bytes.

36
Functions
  • Functions are easy to use they allow complicated
    programs to be broken into small blocks, each of
    which is easier to write, read, and maintain.
  • How a function looks like
  • returntype function_name(parameters)    
  •  
  • localvariables declaration  
  • functioncode
  • return result  

37
  • Sample function
  • int addition(int x, int y)
  • int add
  • add x y
  • return add
  • How to make a call?
  • int main()
  • int result
  • int i 5, j 6
  • result addition(i, j)
  • return 0

38
Pointers
  • Pointer is the most beautiful part of C, but also
    brings most trouble to C programmers. Over 90
    bugs in the C programs came from pointers.
  • What is a pointer
  • A pointer is a variable which contains the
    address in memory of another variable.
  • In C we have a specific type for pointers. Either
    it is a int, char, void, it all occupy 4
    bytes.
  • But first study memory layout...

39
Memory
word 0
word 1
word 2
  • A sequential list of words, starting from 0.
  • 32bit architecture (e.g. Win32 programming) each
    word is 4 bytes.
  • A 256MB RAM has about 64 million words.
  • Number each word using its smallest byte number.

Stack
Heap
40
Memory
0
1
2
3
  • Local variables are stored in stack, growing
    upwards.
  • Multiple-byte variables address is the smallest
    byte number.
  • Complete/half word req.

900
904
908
V4
912
V3
V2
916
V1
920
924
928
932
936
940
944
41
Whats the print out?
  • int main()
  • int d
  • char c
  • short s
  • int p
  • int arr2
  • printf( p, p, p, p, p\n,
  • d, c, s, p, arr )
  • return 0
  • // suppose d 920 (in practice a
  • // 4-byte hex number such as
  • // 0x22FC3A08)

0
1
2
3
900
904
arr
908
912
p
c
s
916
d
920
924
928
932
936
940
944
Solution 920, 919, 916, 912, 904
Note according to a bug in gcc, the address of
arr will be 900 instead of 904.
42
Usage of pointer
  • p d
  • p 10
  • c (char)1
  • p arr
  • (p1) 5
  • p0 d
  • ( (char)p 1 ) c

0
1
2
3
900
904
arr0
908
arr1
920
912
p
1
c
s
916
10
d
920
924
928
932
936
940
944
Note according to a bug in gcc, the address of
arr will be 900 instead of 904.
43
Usage of pointer
  • p d
  • p 10
  • c (char)1
  • p arr
  • (p1) 5 // int p
  • p0 d
  • ( (char)p 1 ) c
  • Q arr0 ?

0
1
2
3
900
904
arr0
10
908
5
arr1
904
912
p
1
c
s
916
10
d
920
924
928
932
936
940
A 266!
944
Note according to a bug in gcc, the address of
arr will be 900 instead of 904.
44
  • Pass pointer parameters into function
  • void swap(int px, int py)      
  • int temp  
  • temp px  
  • px py
  • py temp
  • int a 5 int b 6
  • swap(a, b)
  • What will happen
  • int a
  • int b
  • swap(a, b)

45
  • You will have a running error. If the code
    happens inside the kernel, you might crash the
    system.
  • Note never read/write the content of a
    uninitialized pointer.

46
  • Dynamic memory allocation
  • Allows the program determine how much memory it
    needs at run time, and allocate exactly the right
    amount of storage.
  • The region of memory where dynamic allocation
    and deallocation of memory can take place is
    called the heap.
  • Note the program has the responsibility to free
    the dynamic memory it allocated.

47
  • Functions for the dynamic memory allocation
  • void malloc(size_t number_of_bytes)
  • allocates dynamic memory
  • size_t sizeof(type)
  • returns the number of bytes of type
  • void free(void p)
  • releases dynamic memory allocation
  • An example of dynamic memory allocation
  • int ids //id arrays
  • int num_of_ids 40
  • ids malloc( sizeof(int) num_of_ids)
  • .. Processing ...
  • free(ids)

48
Usage of pointer
  • p (int) malloc(sizeof(int)3)
  • p2 arr1 3
  • s (short)( (p2) )
  • free( p )

0
1
2
3
900
904
arr0
266
908
5
arr1
904
912
p
1
c
s
916
10
d
920
924
928
932
936
940
944
Note according to a bug in gcc, the address of
arr will be 900 instead of 904.
49
Usage of pointer
  • p (int) malloc(sizeof(int)3)
  • p2 arr1 3
  • s (short)( (p2) )
  • free( p )

0
1
2
3
900
904
arr0
266
908
5
arr1
932
912
p
1
15
c
s
916
Q what if you say p20 afterwards?
10
d
920
924
A run time error.
928
Q what if you do not call free(p)?
932
936
A memory leak.
p2 15
940
944
Note according to a bug in gcc, the address of
arr will be 900 instead of 904.
50
Data Structure
  • A data structure is a collection of one or more
    variables, possibly of different types.
  • An example of student record
  • struct stud_record
  • char name50
  • int id
  • int age
  • int major

51
  • A data structure is also a data type
  • struct stud_record my_record
  • struct stud_record pointer
  • pointer my_record
  • Accessing a field inside a data structure
  • my_record.id 10
  • or
  • pointer-id 10

52
  • Allocating a data structure instance
  • struct stud_record pointer
  • pointer malloc(sizeof(struct stud_record))
  • pointer-id 10
  • Never calculate the size of data structure
    yourself. Give it to sizeof() function.
  • Note can use typedef, e.g.
  • typedef struct stud_record ..... Record

53
Case Study Linked List
void DeleteAll( Node head )
while ( head ! NULL ) Node current
head head head-next free( curr
ent ) int main() Node head NU
LL Insert( head, 1234 ) Insert( head, 45
67 ) DeleteAll( head ) return 0
  • include
  • typedef struct tmpNode
  • int ssn
  • struct tmpNode next
  • Node
  • void Insert( Node head, int ssn )
  • Node node (Node)malloc(sizeof(Node))
  • node-ssn ssn
  • node-next head
  • head node

Flawed!
54
Case Study Linked List
void DeleteAll( Node head )
while ( head ! NULL ) Node current
head head head-next free( curr
ent ) int main() Node head NU
LL Insert( head, 1234 ) Insert( head,
4567 ) DeleteAll( head ) return 0
  • include
  • typedef struct tmpNode
  • int ssn
  • struct tmpNode next
  • Node
  • void Insert( Node phead, int ssn )
  • Node node (Node)malloc(sizeof(Node))
  • node-ssn ssn
  • node-next phead
  • phead node

Correct version!
55
Command-Line Argument
  • In C you can pass arguments to main() function.
  • Main() prototype
  • int main(int argc, char argv)
  • argc indicates the number of arguments
  • argv is an array of input string pointers.
  • How to pass your own arguments
  • ./hello 10

56
  • What value is argc and argv?
  • Lets add two printf statement to get the value
    of argc and argv.
  • include
  • int main(int argc, char argv))
  • int i0
  • printf("Hello World\n")
  • printf(The argc is d \n, argc)
  • for(i0 i
  • printf(The dth element in argv is s\n,
    i, argvi)
  • return(0)

57
  • The output
  • The argc is 2
  • The 0th element in argv is ./hello
  • The 1th element in argv is 10
  • The trick is the system always passes the name
    of the executable file as the first argument to
    the main() function.
  • How to use your argument
  • Be careful. Your arguments to main() are always
    in string format.
  • Taking the above program for example, the
    argv1 is string 10, not a number. You must
    convert it into a number before you can use it.

58
Programming Tips
  • Replacing numbers in your code with macros
  • define MAX_NAME_LEN 50
  • char nameMAX_NAME_LEN
  • Avoiding global variables
  • Giving variables and functions a nice name
  • Dont repeat your code
  • Dont let the function body to exceed one screen

59
  • Indenting your code
  • If(expression)
  • if(expression)
  • Commenting your code
  • Dont rush into coding. Plan first.
  • Printing out more debugging information
  • Using debugger

60
C Vs. C
  • C is a superset of C
  • C has all the characteristics of C
  • Object-oriented!
  • Using g to compile your source code
Write a Comment
User Comments (0)
About PowerShow.com