C: complete course
Understand C from memory and machine-level fundamentals through pointers, data structures, files, dynamic memory and larger programs. Every chapter ends with practical projects so you build while you learn.
1C, compilation and program structure~10 min
What you are learning
1 C, compilation and program structure ~10 min is a core part of C. Learn the vocabulary, syntax, execution or data model, why the feature exists, how it interacts with earlier concepts, and the mistakes that cause real programs to fail.
How it works
Practice the smallest useful version first, then change inputs, combine it with earlier concepts, and inspect what happens when assumptions are wrong. Production code favors clear, testable solutions over clever tricks.
Practical example
#include <stdio.h>
int main(void) { printf("Orbit Code\n"); return 0; }Practice: Change one part of the example, predict the result, run it when supported, then deliberately make one small mistake and fix it.
Projects
Do these after the explanation. Do not copy the example unchanged; build the projects from memory and use the reference only when stuck.
- Build a focused C mini-project
- Build a second project combining this chapter with earlier concepts
- Rebuild the project without copying the example
2Types, variables and operators~12 min
What you are learning
2 Types, variables and operators ~12 min is a core part of C. Learn the vocabulary, syntax, execution or data model, why the feature exists, how it interacts with earlier concepts, and the mistakes that cause real programs to fail.
How it works
Practice the smallest useful version first, then change inputs, combine it with earlier concepts, and inspect what happens when assumptions are wrong. Production code favors clear, testable solutions over clever tricks.
Practical example
#include <stdio.h>
int main(void) { int score = 82; printf("%d\n", score); return 0; }Practice: Change one part of the example, predict the result, run it when supported, then deliberately make one small mistake and fix it.
Projects
Do these after the explanation. Do not copy the example unchanged; build the projects from memory and use the reference only when stuck.
- Build a focused C mini-project
- Build a second project combining this chapter with earlier concepts
- Rebuild the project without copying the example
3Input and output~14 min
What you are learning
3 Input and output ~14 min is a core part of C. Learn the vocabulary, syntax, execution or data model, why the feature exists, how it interacts with earlier concepts, and the mistakes that cause real programs to fail.
How it works
Practice the smallest useful version first, then change inputs, combine it with earlier concepts, and inspect what happens when assumptions are wrong. Production code favors clear, testable solutions over clever tricks.
Practical example
#include <stdio.h>
int main(void) { int n; scanf("%d", &n); printf("%d\n", n); return 0; }Practice: Change one part of the example, predict the result, run it when supported, then deliberately make one small mistake and fix it.
Projects
Do these after the explanation. Do not copy the example unchanged; build the projects from memory and use the reference only when stuck.
- Build a focused C mini-project
- Build a second project combining this chapter with earlier concepts
- Rebuild the project without copying the example
4Conditions and loops~16 min
What you are learning
4 Conditions and loops ~16 min is a core part of C. Learn the vocabulary, syntax, execution or data model, why the feature exists, how it interacts with earlier concepts, and the mistakes that cause real programs to fail.
How it works
Practice the smallest useful version first, then change inputs, combine it with earlier concepts, and inspect what happens when assumptions are wrong. Production code favors clear, testable solutions over clever tricks.
Practical example
#include <stdio.h>
int main(void) { for (int i=1; i<=3; i++) printf("%d\n", i); return 0; }Practice: Change one part of the example, predict the result, run it when supported, then deliberately make one small mistake and fix it.
Projects
Do these after the explanation. Do not copy the example unchanged; build the projects from memory and use the reference only when stuck.
- Build a focused C mini-project
- Build a second project combining this chapter with earlier concepts
- Rebuild the project without copying the example
5Functions and program decomposition~18 min
What you are learning
5 Functions and program decomposition ~18 min is a core part of C. Learn the vocabulary, syntax, execution or data model, why the feature exists, how it interacts with earlier concepts, and the mistakes that cause real programs to fail.
How it works
Practice the smallest useful version first, then change inputs, combine it with earlier concepts, and inspect what happens when assumptions are wrong. Production code favors clear, testable solutions over clever tricks.
Practical example
int add(int a, int b) { return a + b; }
int main(void) { return add(2,3) != 5; }Practice: Change one part of the example, predict the result, run it when supported, then deliberately make one small mistake and fix it.
Projects
Do these after the explanation. Do not copy the example unchanged; build the projects from memory and use the reference only when stuck.
- Build a focused C mini-project
- Build a second project combining this chapter with earlier concepts
- Rebuild the project without copying the example
6Arrays and strings~20 min
What you are learning
6 Arrays and strings ~20 min is a core part of C. Learn the vocabulary, syntax, execution or data model, why the feature exists, how it interacts with earlier concepts, and the mistakes that cause real programs to fail.
How it works
Practice the smallest useful version first, then change inputs, combine it with earlier concepts, and inspect what happens when assumptions are wrong. Production code favors clear, testable solutions over clever tricks.
Practical example
#include <stdio.h>
int main(void) { int a[] = {10,20,30}; printf("%d\n", a[1]); return 0; }Practice: Change one part of the example, predict the result, run it when supported, then deliberately make one small mistake and fix it.
Projects
Do these after the explanation. Do not copy the example unchanged; build the projects from memory and use the reference only when stuck.
- Build a focused C mini-project
- Build a second project combining this chapter with earlier concepts
- Rebuild the project without copying the example
7Pointers fundamentals~22 min
What you are learning
7 Pointers fundamentals ~22 min is a core part of C. Learn the vocabulary, syntax, execution or data model, why the feature exists, how it interacts with earlier concepts, and the mistakes that cause real programs to fail.
How it works
Practice the smallest useful version first, then change inputs, combine it with earlier concepts, and inspect what happens when assumptions are wrong. Production code favors clear, testable solutions over clever tricks.
Practical example
#include <stdio.h>
int main(void) { int n=10; int *p=&n; printf("%d\n", *p); return 0; }Practice: Change one part of the example, predict the result, run it when supported, then deliberately make one small mistake and fix it.
Projects
Do these after the explanation. Do not copy the example unchanged; build the projects from memory and use the reference only when stuck.
- Build a focused C mini-project
- Build a second project combining this chapter with earlier concepts
- Rebuild the project without copying the example
8Pointers and functions~24 min
What you are learning
8 Pointers and functions ~24 min is a core part of C. Learn the vocabulary, syntax, execution or data model, why the feature exists, how it interacts with earlier concepts, and the mistakes that cause real programs to fail.
How it works
Practice the smallest useful version first, then change inputs, combine it with earlier concepts, and inspect what happens when assumptions are wrong. Production code favors clear, testable solutions over clever tricks.
Practical example
#include <stdio.h>
void inc(int *x) { (*x)++; }
int main(void) { int n=1; inc(&n); printf("%d\n", n); return 0; }Practice: Change one part of the example, predict the result, run it when supported, then deliberately make one small mistake and fix it.
Projects
Do these after the explanation. Do not copy the example unchanged; build the projects from memory and use the reference only when stuck.
- Build a focused C mini-project
- Build a second project combining this chapter with earlier concepts
- Rebuild the project without copying the example
9Structures, unions and enums~26 min
What you are learning
9 Structures, unions and enums ~26 min is a core part of C. Learn the vocabulary, syntax, execution or data model, why the feature exists, how it interacts with earlier concepts, and the mistakes that cause real programs to fail.
How it works
Practice the smallest useful version first, then change inputs, combine it with earlier concepts, and inspect what happens when assumptions are wrong. Production code favors clear, testable solutions over clever tricks.
Practical example
#include <stdio.h>
struct Course { int id; char title[20]; };
int main(void) { struct Course c={1,"HTML"}; printf("%s\n", c.title); }Practice: Change one part of the example, predict the result, run it when supported, then deliberately make one small mistake and fix it.
Projects
Do these after the explanation. Do not copy the example unchanged; build the projects from memory and use the reference only when stuck.
- Build a focused C mini-project
- Build a second project combining this chapter with earlier concepts
- Rebuild the project without copying the example
10Dynamic memory~28 min
What you are learning
10 Dynamic memory ~28 min is a core part of C. Learn the vocabulary, syntax, execution or data model, why the feature exists, how it interacts with earlier concepts, and the mistakes that cause real programs to fail.
How it works
Practice the smallest useful version first, then change inputs, combine it with earlier concepts, and inspect what happens when assumptions are wrong. Production code favors clear, testable solutions over clever tricks.
Practical example
#include <stdio.h>
#include <stdlib.h>
int main(void) { int *p=malloc(3*sizeof *p); if(!p) return 1; p[0]=42; printf("%d\n",p[0]); free(p); }Practice: Change one part of the example, predict the result, run it when supported, then deliberately make one small mistake and fix it.
Projects
Do these after the explanation. Do not copy the example unchanged; build the projects from memory and use the reference only when stuck.
- Build a focused C mini-project
- Build a second project combining this chapter with earlier concepts
- Rebuild the project without copying the example
11Linked lists and data structures~30 min
What you are learning
11 Linked lists and data structures ~30 min is a core part of C. Learn the vocabulary, syntax, execution or data model, why the feature exists, how it interacts with earlier concepts, and the mistakes that cause real programs to fail.
How it works
Practice the smallest useful version first, then change inputs, combine it with earlier concepts, and inspect what happens when assumptions are wrong. Production code favors clear, testable solutions over clever tricks.
Practical example
#include <stdio.h>
struct Node { int value; struct Node *next; };Practice: Change one part of the example, predict the result, run it when supported, then deliberately make one small mistake and fix it.
Projects
Do these after the explanation. Do not copy the example unchanged; build the projects from memory and use the reference only when stuck.
- Build a focused C mini-project
- Build a second project combining this chapter with earlier concepts
- Rebuild the project without copying the example
12Stacks, queues and searching~32 min
What you are learning
12 Stacks, queues and searching ~32 min is a core part of C. Learn the vocabulary, syntax, execution or data model, why the feature exists, how it interacts with earlier concepts, and the mistakes that cause real programs to fail.
How it works
Practice the smallest useful version first, then change inputs, combine it with earlier concepts, and inspect what happens when assumptions are wrong. Production code favors clear, testable solutions over clever tricks.
Practical example
#include <stdio.h>
int main(void) { int a[]={3,1,2}; int n=3; for(int i=0;i<n;i++) for(int j=i+1;j<n;j++) if(a[j]<a[i]) {int t=a[i];a[i]=a[j];a[j]=t;} for(int i=0;i<n;i++) printf("%d ",a[i]); }Practice: Change one part of the example, predict the result, run it when supported, then deliberately make one small mistake and fix it.
Projects
Do these after the explanation. Do not copy the example unchanged; build the projects from memory and use the reference only when stuck.
- Build a focused C mini-project
- Build a second project combining this chapter with earlier concepts
- Rebuild the project without copying the example
13Files and persistent data~34 min
What you are learning
13 Files and persistent data ~34 min is a core part of C. Learn the vocabulary, syntax, execution or data model, why the feature exists, how it interacts with earlier concepts, and the mistakes that cause real programs to fail.
How it works
Practice the smallest useful version first, then change inputs, combine it with earlier concepts, and inspect what happens when assumptions are wrong. Production code favors clear, testable solutions over clever tricks.
Practical example
#include <stdio.h>
int main(void) { FILE *f=fopen("notes.txt","w"); if(!f) return 1; fputs("Orbit Code",f); fclose(f); }Practice: Change one part of the example, predict the result, run it when supported, then deliberately make one small mistake and fix it.
Projects
Do these after the explanation. Do not copy the example unchanged; build the projects from memory and use the reference only when stuck.
- Build a focused C mini-project
- Build a second project combining this chapter with earlier concepts
- Rebuild the project without copying the example
14Preprocessor and multi-file programs~36 min
What you are learning
14 Preprocessor and multi-file programs ~36 min is a core part of C. Learn the vocabulary, syntax, execution or data model, why the feature exists, how it interacts with earlier concepts, and the mistakes that cause real programs to fail.
How it works
Practice the smallest useful version first, then change inputs, combine it with earlier concepts, and inspect what happens when assumptions are wrong. Production code favors clear, testable solutions over clever tricks.
Practical example
#ifndef COURSE_H
#define COURSE_H
int add(int,int);
#endifPractice: Change one part of the example, predict the result, run it when supported, then deliberately make one small mistake and fix it.
Projects
Do these after the explanation. Do not copy the example unchanged; build the projects from memory and use the reference only when stuck.
- Build a focused C mini-project
- Build a second project combining this chapter with earlier concepts
- Rebuild the project without copying the example
15Debugging and undefined behavior~38 min
What you are learning
15 Debugging and undefined behavior ~38 min is a core part of C. Learn the vocabulary, syntax, execution or data model, why the feature exists, how it interacts with earlier concepts, and the mistakes that cause real programs to fail.
How it works
Practice the smallest useful version first, then change inputs, combine it with earlier concepts, and inspect what happens when assumptions are wrong. Production code favors clear, testable solutions over clever tricks.
Practical example
#include <stdio.h>
int main(void) { int a=1; printf("%d\n", a); /* inspect bounds and lifetimes when debugging */ return 0; }Practice: Change one part of the example, predict the result, run it when supported, then deliberately make one small mistake and fix it.
Projects
Do these after the explanation. Do not copy the example unchanged; build the projects from memory and use the reference only when stuck.
- Build a focused C mini-project
- Build a second project combining this chapter with earlier concepts
- Rebuild the project without copying the example
16Systems-style C patterns~40 min
What you are learning
16 Systems-style C patterns ~40 min is a core part of C. Learn the vocabulary, syntax, execution or data model, why the feature exists, how it interacts with earlier concepts, and the mistakes that cause real programs to fail.
How it works
Practice the smallest useful version first, then change inputs, combine it with earlier concepts, and inspect what happens when assumptions are wrong. Production code favors clear, testable solutions over clever tricks.
Practical example
#include <stdio.h>
int main(void) { unsigned char byte=255; printf("%u\n", byte); return 0; }Practice: Change one part of the example, predict the result, run it when supported, then deliberately make one small mistake and fix it.
Projects
Do these after the explanation. Do not copy the example unchanged; build the projects from memory and use the reference only when stuck.
- Build a focused C mini-project
- Build a second project combining this chapter with earlier concepts
- Rebuild the project without copying the example
17Capstone: complete C application~42 min
What you are learning
17 Capstone: complete C application ~42 min is a core part of C. Learn the vocabulary, syntax, execution or data model, why the feature exists, how it interacts with earlier concepts, and the mistakes that cause real programs to fail.
How it works
Practice the smallest useful version first, then change inputs, combine it with earlier concepts, and inspect what happens when assumptions are wrong. Production code favors clear, testable solutions over clever tricks.
Practical example
#include <stdio.h>
int main(void) { puts("C capstone: course tracker"); return 0; }Practice: Change one part of the example, predict the result, run it when supported, then deliberately make one small mistake and fix it.
Projects
Do these after the explanation. Do not copy the example unchanged; build the projects from memory and use the reference only when stuck.
- Build a focused C mini-project
- Build a second project combining this chapter with earlier concepts
- Rebuild the project without copying the example