gcc
printf()
scanf()
❖ COMP9024 is a 2-in-1 course |
It consists of two parts:
Together, we have Data Structures and Algorithms in C.
But we don’t have the luxury of learning the C programming language through traditional methods (like those used in COMP1511).
It means:
Please work hard in Week 1 and harder after that.
To aid understanding, most of the algorithms (e.g., Bubble Sort) have been visualized in COMP9024.
A picture is more than a thousand words.
❖ How to use CSE VLAB |
Please follow the steps in Introduction to CSE VLAB
Make sure that you know how to use CSE VLAB in Week 1.
Make sure that you understand the C program in Bubble Sort by the end of Week 2.
❖ This term, your Teaching Team consists of ... |
Changwei Zou | ||
Mingqin Yu | ||
... who are they? | ||
Use Help Sessions, or Course Forum | ||
cs9024@cse.unsw.edu.au |
Use UNSW Special Consideration |
❖ This term, your Teaching Team consists of ... (cont) |
John Chen | ||
Deniz Dilsiz | ||
Fangfei Fan | ||
Ziming Gong | ||
Janhavi Jain | ||
Joffrey Ji | ||
Leman Kirme | ||
Ziting Li | ||
Kisaru Liyanage | ||
Thirasara Beruwawela Pathiranage | ||
Adiyat Rahman | ||
Nimish Ukey | ||
Finn Xu | ||
Oliver Xu | ||
Sijia Xu | ||
Mingqin Yu |
❖ Schedule (topics are not absolutely fixed ...) |
Lectures Weekly Prac/Quiz Weekly Tut Assignment Introduction, C language -- Large Assignment Dynamic data structures prac/quiz Tutorial | Analysis of algorithms prac/quiz Tutorial | Graph data structures prac/quiz Tutorial | Graph algorithms prac/quiz Tutorial | Mid-term test (online) (Thursday, 4pm-5pm) -- | Search tree data structures prac/quiz Tutorial | Search tree algorithms prac/quiz Tutorial | String algorithms prac/quiz Tutorial | Randomised algorithms, Review prac/quiz Tutorial | due Final Exam (on campus) --
❖ Assessment Summary |
weekly_lab = mark for weekly practicals/quizzes (out of 2*8) mid_term = mark for mid-term test (out of 12) large_assn = mark for large assignment (out of 12) exam = mark for final exam (out of 60) total = weekly_lab + mid_term + large_assn + exam
To pass the course, you must achieve:
total
❖ Weekly Practical Exercises and Quizzes |
In weeks 2-5, 7-10 :
Practical exercises are provided at the bottom of tutorial web pages (e.g., Tutorial in Week 2).
After completing each weekly practical exercise, please proceed to the weekly quiz on Moodle.
Weekly Quizzes (practical exercises) contribute 16% to overall mark ( 2 marks each x 8 weeks).
Do them yourself! and Don't fall behind!
❖ Large Assignment |
The large assignment gives you experience applying tools/techniques
(but to a larger programming problem than weekly practical exercises)
The assignment will be carried out individually.
The assignment will be released in Week 1 and is due in week 10.
The assignment contributes 12% to overall mark.
Submit your answers in week 10 on Moodle
❖ Mid-term Test |
1-hour online test in Week 6 (Thursday, 4-5pm) on Moodle.
Format:
❖ Final Exam |
2-hour written exam during the exam period.
Format:
If you have any queries about your final exam on Inspera, please contact the UNSW Exams Centre on exams@unsw.edu.au
❖ Complete weekly quizzes and the large assignment on time |
Answers to the quizzes and the large assignment (assessed online via Moodle) will be released to students on completion.
For some assessment items, a late penalty may not be appropriate.
Such assessments will receive a mark of zero if not completed by the specified date. Examples include:
For more details, see COMP9024 Course Outline.
❖ Start with reading, debugging and modifying a runnable program in COMP9024 on GitHub. |
❖ Course Goals |
COMP9021 …
❖ Pre-conditions |
There are no prerequisites for this course.
However we will move at fast pace through the necessary programming fundamentals. You may find it helpful if you are able to:
if
while
for
❖ Post-conditions |
At the end of this course you should be able to:
❖ Access to Course Material |
Ideas for the COMP9024 material are drawn from
❖ Resources |
Textbook
Good books, useful beyond COMP9024 (but coding style …)
❖ Resources (cont) |
Supplementary textbook:
Also, numerous online C resources are available.
❖ Lectures |
Lectures will:
Lecture documents (e.g., programs, notes or slides) will be made available before lecture each week
❖ Weekly Tutorials |
The weekly tutorials/classes, with tutors, aims to:
You may bring your own laptop to access materials or take notes
Important - tutorials provide an opportunity for a more intimate classroom experience where you can interact more closely with the tutors and other students.
Tutorials on Github
❖ Plagiarism (cont) |
Examples of Plagiarism (student.unsw.edu.au/plagiarism):
Using same or similar idea without acknowledging the source
This includes copying ideas from a website, internet
Presenting work as independent when produced in collusion with others
This includes students providing their work to another student
Your submissions will be checked for and will be reported to the Academic Integrity Unit at UNSW.
❖ Summary |
The goal is for you to become a better programmer
❖ Why C? |
❖ Brief History of C |
C and UNIX operating system share a complex history …
❖ Basic Structure of a C Program |
// include files // global definitions // function definitions function_type f(arguments) { // local variables // body of function return …; } . .
|
. . . . . // main function int main(arguments) { // local variables // body of main function return 0; }
|
❖ Compiling with gcc |
C source code: | prog.c | |
↓ | prog | (executable program) |
To compile a program prog.c
gcc prog.c -o prog
To report all warnings, type:
gcc -Wall prog.c -o prog
To run the program, type:
./prog
❖ Sidetrack: Printing Variable Values with printf() |
Formatted output written to standard output (e.g. screen)
int printf(const char *formatString, ...);
formatString
%d | decimal | %f | floating-point | |||
%c | character | %s | string | |||
\n | new line | \" | quotation mark |
Examples:
int num = 3; printf("The cube of %d is %d.\n", num, num*num*num);
The cube of 3 is 27.
char ch = 'z'; int num = 1234567; printf("Your \"login ID\" will be in the form of %c%d.\n", ch, num);
Your "login ID" will be in the form of z1234567.
❖ Basic Elements |
Algorithms are built using
❖ Assignments |
;
{ }
+, -, *, /, %
=, +=, -=, *=, /=, %=
++
--
❖ Assignments (cont) |
Example: The pattern
v = getNextItem(); while (v != 0) { process(v); v = getNextItem(); }
can be written as
while ((v = getNextItem()) != 0) { process(v); }
❖ Conditionals |
if (expression) { some statements; } if (expression) { some statements1; } else { some statements2; }
some statements
expression
some statements1
expression
some statements2
expression
{ }
❖ Conditionals (cont) |
Indentation is very important in promoting the readability of the code
Each logical block of code is indented:
// Style 1
if (x)
{
statements;
}
|
// Style 2 (my preference)
if (x) {
statements;
}
|
// Preferred else-if style
if (expression1) {
statements1;
} else if (exp2) {
statements2;
} else if (exp3) {
statements3;
} else {
statements4;
}
|
❖ Conditionals (cont) |
Relational and logical operators
a > b | a b | |
a >= b | a b | |
a < b | a b | |
a <= b | a b | |
a == b | a b | |
a != b | a b | |
a && b | a b | |
a || b | a b | |
! a | logical not a |
A relational or logical expression evaluates to 1
0
❖ Loops |
C has two different "while loop" constructs
// while loop
while (expression) {
some statements;
}
|
// do .. while loop
do {
some statements;
} while (expression);
|
The do .. while
❖ Loops (cont) |
The "for loop" in C
for (expr1; expr2; expr3) { some statements; }
expr1
expr2
expr3
Example: |
for (i = 1; i < 10; i++) { printf("%d %d\n", i, i * i); }
|
❖ Functions |
Functions have the form
return-type function-name(parameters) { declarations statements return …; }
int square(int n) { int s; s = n * n; return s; }
return_type
void
parameters
void
❖ Functions (cont) |
When a function is called:
return
❖ Functions (cont) |
When a return
return expression;
expression
int add(int m, int n) { return m + n; }
The return statement can also be used to terminate a function of return-type void
return;
❖ Basic Data Types |
char | character | 'A' 'e' '#' | ||
short, int, long | integer | 2 17 -5 | ||
float | floating-point number | 3.14159f | ||
double | double precision floating-point | 3.14159265358979 |
There are other types (e.g., unsigned long
float x; char ch = 'A'; int j = i;
❖ Aggregate Data Types |
Families of aggregate data types:
char s[50]
int v[100]
struct student { char name[32]; int zID; }
❖ Arrays |
An array is
int a[20]; // array of 20 integer values/variables char b[10]; // array of 10 character values/variables
❖ Arrays (cont) |
Larger example:
#define MAX 20
int numbers[MAX]; // array of 20 integer values
for (int i = 0; i < MAX; i++) {
numbers[i] = i * i;
}
❖ Macros in C |
We can define a macro in C (i.e., a symbolic constant)
#define SPEED_OF_LIGHT 299792458.0 #define ERROR_MESSAGE "Out of memory.\n"
Symbolic constants make the code easier to understand and maintain
#define NAME replacement_text
NAME
replacement_text
NAME
"…"
❖ Coding Style |
UNSW Computing provides a style guide for C programs:
C Coding Style Guide (http://wiki.cse.unsw.edu.au/info/CoreCourses/StyleGuide)
Not strictly mandatory for COMP9024, but very useful guideline
❖ Strings |
"String" is a special word for an array of characters
'\0'
char
If a character array t[6]
"hello"
char t[6] = "hello"; ------------------------- | h | e | l | l | o | \0| ------------------------- 0 1 2 3 4 5
❖ Array Initialisation |
Arrays can be initialised by code, or you can specify an initial set of values in declaration.
Examples:
char s[6] = {'h', 'e', 'l', 'l', 'o', '\0'}; char t[6] = "hello"; int arr[5] = {5, 4, 3, 2, 1}; int vec[] = {5, 4, 3, 2, 1};
In the last case, C infers the array length (as if we declared vec[5]
❖ Sidetrack: Reading Variable Values with scanf() |
Formatted input read from standard input (e.g. keyboard)
scanf(format-string, expr1, expr2, …);
Example: InputOutput.c
#include <stdio.h> // printf() and scanf()
int main(void) {
int number;
printf("Enter an integer: \n");
scanf("%d", &number);
printf("You entered: %d \n", number);
return 0;
}
$ gcc InputOutput.c -o InputOutput $ ./InputOutput Enter an integer: 30 You entered: 30
❖ Arrays and Functions |
When an array is passed as a parameter to a function
int total; int vec[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; … total = sum(vec);
Within the function …
❖ Arrays and Functions (cont) |
Since functions do not know how large an array is:
#define N 10 int total; int vec[N] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; … total = sum(vec,N);
❖ Exercise: Arrays and Functions |
Implement a function that sums up all elements in an array.
Use the prototype
int sum(int[], int)
or
int sum(int *, int)
int sum(int vec[], int dim) { int total = 0; for (int i = 0; i < dim; i++) { total += vec[i]; } return total; }
or
int sum(int *vec, int dim) { int total = 0; for (int i = 0; i < dim; i++) { total += vec[i]; } return total; }
❖ Multi-dimensional Arrays |
Examples:
Note: q[0][1]==2.7
r[1][3]==8
Multi-dimensional arrays can also be initialised (must provide # of columns):
float q[][2] = { { 0.5, 2.7 }, { 3.1, 0.1 } };
❖ Sidetrack: Defining New Data Types |
C allows us to define new data type (names) via typedef
typedef ExistingDataType NewTypeName;
Examples:
typedef float Temperature; typedef int Matrix[20][20];
❖ Sidetrack: Defining New Data Types (cont) |
Reasons to use typedef
typedef float Temperature;
typedef float Real; Real complex_calculation(Real a, Real b) { Real c = log(a+b); … return c; }
typedef int Matrix[20][20]; Matrix m;
❖ Structures |
A structure
struct
typedef struct { char name[32]; int zID; } StudentT; StudentT neo;
or
struct Student { char name[32]; int zID; }; struct Student neo;
❖ Structures (cont) |
One structure can be nested inside another:
typedef struct { int day; int month; } DateT; typedef struct { int hour, minute; } TimeT; typedef struct { long tid; // ticket id DateT d; TimeT t; } TicketT;
❖ Structures (cont) |
A structure can be passed as a parameter to a function:
void print_date(DateT d) { printf("%d/%d\n", d.day, d.month); } int is_winter(DateT d) { return ( (d.month >= 6) && (d.month <= 8) ); }
❖ Abstract Data Types |
A data type is …
❖ Abstract Data Types (cont) |
Users of the ADT see only the interface
Builders of the ADT provide an implementation
ADT interface provides
// Stack.h struct Stack; // Create a stack struct Stack *CreateStack(void); ...
ADT implementation gives
// Stack.c struct Stack { ... }; struct Stack *CreateStack(void) { ... }
❖ Abstract Data Types (cont) |
ADT interfaces are opaque
❖ Stack vs Queue |
Stack, aka FILO data structure (first in, last out)
Insert and delete are called push and pop
Applications of Stack:
Insert and delete are called enqueue and dequeue
Applications of Queue:
❖ Compilers |
Compilers are programs that
gcc test.c -o test
gcc -E test.c -o test.i
gcc -c -S test.i -o test.s
gcc -c test.s -o test.o
gcc test.o -o test
❖ Summary |
gcc
char
short
int
long
float
double
if
else
while
for
Produced: 10 Sep 2024