0% found this document useful (0 votes)
43 views

Selected Topics

This document is a lecture on selected topics in the C programming language. It discusses various concepts such as: - Printing text to output using printf() with format specifiers like %s. - Using field width with integers and strings in printf(). - Comments in C code and how they improve readability. - Examples of complete programs to calculate squares and cubes of numbers. - Operator precedence and associativity rules. - Increment and decrement operators. - Defining variables to store characters and getting/printing characters to output.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
43 views

Selected Topics

This document is a lecture on selected topics in the C programming language. It discusses various concepts such as: - Printing text to output using printf() with format specifiers like %s. - Using field width with integers and strings in printf(). - Comments in C code and how they improve readability. - Examples of complete programs to calculate squares and cubes of numbers. - Operator precedence and associativity rules. - Increment and decrement operators. - Defining variables to store characters and getting/printing characters to output.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 41

www.mohandesyar.

com


(21814) C
1386-1387
Lecture 9
Selected Topics
:
1

www.mohandesyar.com

(21814) C
:C
:

;)"printf ("%s \n %s", "one", "two


which prints:
one
two

www.mohandesyar.com

(21814) C

Integers and strings can also use field width


%nd, %ns where n is again min field width.
Example: printf("%-10d%10s", 21,"abcde")

21

8 wide 5
abcde
wide

10 wide

10 wide

www.mohandesyar.com

(21814) C
:
/*
* Name: Nasser Salmasi
File Header Comment
* Date: 10/3/06
* Assignment: Term Project1
* Description: Johnsons Algorithm.
*/

Blank Lines
(readability)

#include <stdio.h>
int main(void) {
/* print the message */
printf(Whatever you want!");
return 0;
}

Inline Comment

Indenting Use Tab Key!


4

www.mohandesyar.com

( 21814) C

:
Print the squares and cubes of integers from
1 through 3.
Declare variables needed.
Calculate the numbers.
Print the results.

www.mohandesyar.com

The Complete Program


#include <stdio.h>
int main(void) {
int n, square, cube;

/* n is input, square & cube are output */

printf("Table of squares and cubes\n");


n = 1;
square = n * n; cube = n * square; /* first line of output */
printf("%d %d %d\n", n, square, cube);
n = 2;
note
square = n * n; cube = n * square; /* second line of output */
printf("%d %d %d\n", n, square, cube);
n = 3;
square = n * n; cube = n * square; /* third line of output */
printf("%d %d %d\n", n, square, cube);
return 0;
}
6

www.mohandesyar.com
/*
* Name: Nasser Salmasi
header comment
* * Date:
Oct 6, 2006
* Assignment: Squares Cubes
* Description: Make a table of the integers from 1 3 and their squares and cubes.
*/
#include <stdio.h>

readability
(blank lines)

inline comments

int main(void) {
int n, square, cube;
// n is input, square & cube are output
printf("Table of squares and cubes\n");
n = 1;
square = n * n; cube = n * square; // first line of output
printf("%d %d %d\n", n, square, cube);
n = 2;
square = n * n; cube = n * square; // second line of output
printf("%d %d %d\n", n, square, cube);
n = 3;
square = n * n; cube = n * square; // third line of output
printf("%d %d %d\n", n, square, cube);
return 0;
}

indentation -- Use Tab Key!

www.mohandesyar.com

(21814) C
Same Program in Unreadable Form
#include <stdio.h>
int main(void) { int n, square, cube;
printf("Table of squares and cubes\n");
n = 1; square = n * n; cube = n * square;
printf("%d %d %d\n", n, square, cube); n = 2;
square = n * n; cube = n * square;
printf("%d %d %d\n", n, square, cube); n = 3;
square = n * n; cube = n * square;
printf("%d %d %d\n", n, square, cube);
return 0; }

www.mohandesyar.com

(21814) C
Precedence

Precedence = rank or priority.


Some operators have priority over others (i.e
should be done first)
1 + 2 * 3 same as 1 + (2 * 3) (i.e. = 7)
i.e. * has higher precedence than binary + or -

Parentheses force precedence.


(1 + 2) * 3 is equal to 9
9

www.mohandesyar.com

(21814) C
Associativity
When operators have same precedence we
must use rules of associativity (left to right or
right to left)
+ - same precedence, left to right assoc.
1+2+3-4+5 means (((1+2)+3)-4)+5 = 7
* / % same precedence, left to right assoc.
5 / 2 * 2 means (5/2)*2 = 4 not 5/(2*2) = 1

10

www.mohandesyar.com

(21814) C

Precedence /Associatively Table


operation
()
+(plus) -(minus)
* /%
+= (assignment)

precedence
1 (highest)
2
3
4
14 (lowest)

associatively
L to R
R to L
L to R
L to R
R to L

11

www.mohandesyar.com

(21814) C

Use Parentheses!!!!!!!!
Best to force precedence and associatively with
parentheses.
Easier to read
Everyone gets confused about these rules!

12

www.mohandesyar.com

(21814) C
Increment, Decrement Examples
Let b = 2 and c = 3.
After assignment a = (++b) + (++c);
the values will be a=7, b=3, c=4
After the assignment a = (b++) + (c++);
the values will be a=5,b=3,c=4
--i; is a perfectly good statement.
Same as i = i - 1;

13

www.mohandesyar.com

(21814) C
Examples - Expressions
If c = 0, then what are values of a, b, c after
these two statements are executed.
a = ++c;
b = a++;
a= , b= ,c=
Avoid expressions like a = c + ++c; where
a variable and it's increment or decrement
occur in same expression (see the code).

14

www.mohandesyar.com

(21814) C
Assignment Operator
An assignment has a value!
a = (b = 0); same as a=0; b=0;
or a = b = 0; (because of right to left
associatively).

15

www.mohandesyar.com

(21814) C
int a = -2, b = 3, c = 4, d = 5;
d *= a-- + ++ b * c - c % 2;
What is d after executing this statement?

But, please dont write like this!

16

www.mohandesyar.com

(21814) C
Find the 8 Programming Errors
#include <stdio>;
#define TOPBOTTOM "III";
# define MIDDLE "\nI"
void main(void) {
printf("/n/n/n");
printf(TOPBOTTON)
printf(MIDDLE); printf(MIDDLE);
printf(\n);
prinf(TOPBOTTOM);
}
17

www.mohandesyar.com

(21814) C


:
;'char b = 'z
b A-Z, a-z, 0-9
.
b .
)( :
;]char Name[20
18

www.mohandesyar.com

(21814) C
:

:
;'char b = 'z
;)(b = getchar
;)printf( %c, b
;)putchar (b

19

www.mohandesyar.com

Some other useful functions


These all require #include <ctype.h>
isalpha(c) - returns nonzero if c is letter
isdigit(c) - returns nonzero if c is a digit (0-9)
isspace(c) - returns nonzero if c is space, tab or
newline.
islower(c) - returns nonzero if c is lower case.
isupper(c) - returns nonzero if c is upper case.
toupper(c) returns upper case char.
tolower(c) returns lower case char.
20

www.mohandesyar.com

(21814) C
:
;int i
;i = 2147483647
;)printf("%d %d %d", i, i+1, i*i

21

www.mohandesyar.com

Whats going on here?

Computers store only so many digits.


When an operation creates more than they
have, the higher digits are lost.
Just like 5-digit odometer on a car.
What comes after 99,999? -- 00,000
right?
Same in computers -- next integer after the
largest integer is the smallest integer
22

www.mohandesyar.com

(21814) C
:C
:

)) (Size (


.

23

www.mohandesyar.com

(21814) C
FILE* INDATA; // *fp means fp points to a FILE structure
INDATA=fopen(Data1.txt","r");
fscanf(INDATA," %i\n",&Machine_Number);

for(f1=1;f1<=group_number;f1++){
for(f2=1;f2<=job_number[f1];f2++){
for(f3=1;f3<=Machine_Number;f3++){
fscanf(INDATA," %i" ,&time_M[f1][f2][f3]);
}
}
fscanf(INDATA,"\n");
}
fclose(INDATA);
24

www.mohandesyar.com

( 21814) C

fopen(filename, mode)
int a, b, c;
FILE *fp; // *fp means fp points to a FILE structure
fp = fopen("data.txt", "r");
fscanf(filepointer, string, &var1, &var2, )
// read three integers from the file
fscanf(fp, "%d %d %d", &a, &b, &c);
fclose(filepointer)
fclose(fp);
// close the file

25

www.mohandesyar.com

( 21814) C
test for equality

Open Errors

If fp == NULL, there was an error and your


program cannot proceed!
Possible causes:
filename doesnt exist in current folder.
file is being used (i.e. is opened) by another
application.
file is corrupted (i.e has been damaged).

26

www.mohandesyar.com

( 21814) C

File Mode - text files


mode can be "r" "w", "a"
"r" open a text file for reading from the
beginning (fscanf)
"w" open a text file for writing from the
beginning (fprintf). Replaces any existing file or
creates new one.
"a" open a text file for writing starting at the
end (fprintf).

27

www.mohandesyar.com

( 21814) C
In text files, numbers, characters, and strings
are all stored as text characters.
'a' stored as the character a.
"a string" stored as the characters a string.
1234567890 (a 4 byte int) stored as the 10
ASCII characters 1234567890.
123.456 (a 4 byte float) stored as the 7 ASCII
characters 123.456.
White space is used to separate.
28

www.mohandesyar.com

( 21814) C
fscanf(filepointer, formatString, var, var,)
white space
FILE *fp;
int a, c;
double b;
fp = fopen("input.txt", "r");
fscanf(fp, "%d %lf %d", &a, &b, &c);
printf("%d\n%f\n%d", a, b, c);
fclose(fp);

input.txt

234

5.345

567
234, 5.345, and 567 will be assigned to a, b, and c
respectively
29

www.mohandesyar.com

How scanf (or fscanf) Reads

When using %d, %f, or %lf, scanf:


1. skips white space
2. reads the ASCII digits (and/or '+' , '-', '.')
until it encounters white space.
3. converts the digits to an integer, float, or
double
Returns number of successful conversions or
EOF (if encountered an error).

30

www.mohandesyar.com

(21814) C
:
fprintf .
printf.

31

www.mohandesyar.com

Foxtrot Version

32

www.mohandesyar.com

(21814) C
:


HW.txt
.

Report.txt .

33

www.mohandesyar.com

(21814) C

Bubble sort
Sort an array of numbers or characters
into numeric or alphabetic order.
1) Compare last two -- swap, if out of order
2)Compare next to last two -- etc.
3) Start again at end but stop one shy of beginning
4) Continue

34

www.mohandesyar.com

(21814) C
Bubble sort first pass
4
4
4
4
4
1

6
6
6
6
1
4

1
1
1
1
6
6

8
8
2
2
2
2

2
2
8
8
8
8

9
9
9
9
9
9

start
loop1
loop2
loop3
loop4
end pass 1

35

www.mohandesyar.com

(21814) C
Bubble sort -- second pass
1
1
1
1
1

4
4
4
4
2

6
6
6
2
4

2
2
2
6
6

8
8
8
8
8

9
9
9
9
9

start pass two


loop1
loop2
loop3
end of pass two

36

www.mohandesyar.com

(21814) C
Bubble sort - 3rd pass
1 2 4 6 8 9
start pass three
1 2 4 6 8 9
loop1
1 2 4 6 8 9
loop2
1 2 4 6 8 9
end of pass three
(Note: nothing actually done)

37

www.mohandesyar.com

(21814) C
Bubble sort - 4rd pass
1 2 4 6 8 9
1 2 4 6 8 9
1 2 4 6 8 9

start pass four


loop1
end of pass four

38

www.mohandesyar.com

(21814) C
Bubble sort - 5th pass
1 2 4 6 8 9
1 2 4 6 8 9

start of pass 5
done

Note that this computer algorithm is quite


different from the way we do this by hand.
Another example of the difficulty of doing
something with a computer that is easy with
human brain.

39

www.mohandesyar.com

(21814) C
Bubble sort - code
void bubble(int a[], int n) {
int i, j;
// i counts passes, j cycles thru swap positions
// numbers are: a[0], a[1], a[n-2], a[n-1]
for(i=0; i < n-1; ++i)
for(j=n-1; j > i; --j)
if( a[j-1] > a[j]) // if out of order, swap
swap(&a[j-1], &a[j]);
return;
}
40

www.mohandesyar.com

(21814) C
Bubble Sort Analysis

Assume N items to sort.


1st pass N-1 loops.
2nd pass N-2 loops.
Last pass 1 loop.
(N-1) + (N-2) + + 1 = N*(N-1)/2
Execution time increases as square of size, which
is not as good as QuickSort, N*ln(N).

41

You might also like