Show description
C Programming Cheat Sheet - CSE240 Concepts
C Programming Cheat Sheet - CSE240 Concepts
C Programming Cheat Sheet
CSE240 Homework 4 Concepts & Patterns
🧠 Programming Methodology
The Three-Step Process
1. INSTRUCTION
Read what the homework says to do
2. TRANSLATION
Convert requirement to C syntax
3. WHY
Understand the reasoning behind the choice
Key Insight: Instruction order ≠ Implementation order. Always think about logical flow, not comment order.
⚡ Essential Function Design Pattern
int myFunction() {
// 1. VALIDATE INPUTS FIRST
if (somethingWrong) {
return errorCode;
}
// 2. PREPARE DATA
convertInputsToProperFormats();
// 3. PERFORM MAIN OPERATION
doTheActualWork();
// 4. CLEAN UP / ORGANIZE
sortOrOrganizeResults();
// 5. REPORT SUCCESS
return successCode;
}
Remember: Always validate before doing work. Check conditions BEFORE attempting operations.
📊 Structs & Arrays of Structs
Basic Struct Syntax
struct studentRecord {
char studentName[MAX_NAME_LENGTH];
char major[MAX_NAME_LENGTH];
schoolYear schoolYear;
unsigned int studentID;
};
// Create array of structs
struct studentRecord list[MAX_STUDENTS];
Accessing Struct Elements
// Access elements using dot notation
list[i].studentName
list[i].major
list[i].schoolYear
list[i].studentID
// Copy strings into struct
strcpy(list[count].studentName, studentName_input);
// Assign direct values
list[count].studentID = studentID_input;
🔢 Enums (Enumeration Types)
typedef enum {
freshman = 0,
sophomore,
junior,
senior
} schoolYear;
String to Enum Conversion
schoolYear yearEnum;
if (strcmp(schoolYear_input, "freshman") == 0) {
yearEnum = freshman;
}
else if (strcmp(schoolYear_input, "sophomore") == 0) {
yearEnum = sophomore;
}
// ... etc
Enum to String Conversion
switch (list[i].schoolYear) {
case freshman:
printf("freshman\n");
break;
case sophomore:
printf("sophomore\n");
break;
// ...…
C Programming Cheat Sheet - CSE240 Concepts
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>C Programming Cheat Sheet - CSE240 Concepts</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
background: linear-gradient(135deg, #0a0a0a 0%, #1a1a1a 100%);
color: #e0e0e0;
font-family: 'Consolas', 'Monaco', 'Courier New', monospace;
line-height: 1.6;
padding: 20px;
min-height: 100vh;
}
.container {
max-width: 1200px;
margin: 0 auto;
}
h1 {
text-align: center;
color: #ffb347;
font-size: 2.5em;
margin-bottom: 30px;
text-shadow: 0 0 10px rgba(255, 179, 71, 0.3);
border-bottom: 3px solid #444;
padding-bottom: 15px;
}
h2 {
color: #ffd700;
font-size: 1.8em;
margin: 30px 0 15px 0;
border-left: 5px solid #ffb347;
padding-left: 15px;
background: rgba(255, 179, 71, 0.1);
padding: 10px 15px;
border-radius: 5px;
}
h3 {
color: #ffb347;
font-size: 1.3em;
margin: 20px 0 10px 0;
}
.concept-box {
background: rgba(40, 40, 40, 0.8);
border: 1px solid #555;
border-radius: 8px;
padding: 20px;
margin: 15px 0;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.3);
}
.code-block {
background: #1e1e1e;
border-left: 4px solid #ffd700;
padding: 15px;
margin: 10px 0;
border-radius: 0 5px 5px 0;
overflow-x: auto;
font-family: 'Consolas', monospace;
}
.highlight {
color: #ffd700;
font-weight: bold;
}
.warning {
color: #ffb347;
background: rgba(255, 179, 71, 0.1);
padding: 10px;
border-radius: 5px;
border-left: 4px solid #ffb347;
margin: 10px 0;
}
.tip {
color: #90ee90;
background: rgba(144, 238, 144, 0.1);
padding: 10px;
border-radius: 5px;
border-left: 4px solid #90ee90;
margin: 10px 0;
}
.grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 20px;
margin: 20px 0;
}
.flow-step {
background: linear-gradient(135deg, #2d2d2d 0%, #3d3d3d 100%);
border: 2px solid #ffb347;
border-radius: 10px;
padding: 15px;
text-align: center;
position: relative;
}
.flow-step::after {
content: "↓";
color: #ffd700;
font-size: 2em;
position: absolute;
bottom: -30px;
left: 50%;
transform: translateX(-50%);
}
.flow-step:last-child::after {
display: none;
}
.comparison {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 15px;
margin: 15px 0;
}
.good {
background: rgba(144, 238, 144, 0.1);
border-left: 4px solid #90ee90;
padding: 15px;
}
.bad {
background: rgba(255, 99, 71, 0.1);
border-left: 4px solid #ff6347;
padding: 15px;
}
ul {
margin: 10px 0;
padding-left: 20px;
}
li {
margin: 5px 0;
color: #ccc;
}
.syntax {
color: #87ceeb;
}
.keyword {
color: #ffd700;
}
.string {
color: #98fb98;
}
.comment {
color: #696969;
}
</style>
</head>
<body>
<div class="container">
<h1>C Programming Cheat Sheet</h1>
<p style="text-align: center; color: #888; margin-bottom: 40px;">CSE240 Homework 4 Concepts & Patterns</p>
<h2>🧠 Programming Methodology</h2>
<div class="concept-box">
<h3>The Three-Step Process</h3>
<div class="grid">
<div class="flow-step">
<strong class="highlight">1. INSTRUCTION</strong><br>
Read what the homework says to do
</div>
<div class="flow-step">
<strong class="highlight">2. TRANSLATION</strong><br>
Convert requirement to C syntax
</div>
<div class="flow-step">
<strong class="highlight">3. WHY</strong><br>
Understand the reasoning behind the choice
</div>
</div>
<div class="warning">
<strong>Key Insight:</strong> Instruction order ≠ Implementation order. Always think about logical flow, not comment order.
</div>
</div>
<h2>⚡ Essential Function Design Pattern</h2>
<div class="concept-box">
<div class="code-block">
<span class="keyword">int</span> <span class="syntax">myFunction</span>() {
<span class="comment">// 1. VALIDATE INPUTS FIRST</span>
<span class="keyword">if</span> (somethingWrong) {
<span class="keyword">return</span> errorCode;
}
<span class="comment">// 2. PREPARE DATA</span>
convertInputsToProperFormats();
<span class="comment">// 3. PERFORM MAIN OPERATION</span>
doTheActualWork();
<span class="comment">// 4. CLEAN UP / ORGANIZE</span>
sortOrOrganizeResults();
<span class="comment">// 5. REPORT SUCCESS</span>
<span class="keyword">return</span> successCode;
}
</div>
<div class="tip">
<strong>Remember:</strong> Always validate before doing work. Check conditions BEFORE attempting operations.
</div>
</div>
<h2>📊 Structs & Arrays of Structs</h2>
<div class="concept-box">
<h3>Basic Struct Syntax</h3>
<div class="code-block">
<span class="keyword">struct</span> <span class="syntax">studentRecord</span> {
<span class="keyword">char</span> <span class="syntax">studentName</span>[MAX_NAME_LENGTH];
<span class="keyword">char</span> <span class="syntax">major</span>[MAX_NAME_LENGTH];
<span class="syntax">schoolYear</span> schoolYear;
<span class="keyword">unsigned int</span> <span class="syntax">studentID</span>;
};
<span class="comment">// Create array of structs</span>
<span class="keyword">struct</span> <span class="syntax">studentRecord</span> list[MAX_STUDENTS];
</div>
<h3>Accessing Struct Elements</h3>
<div class="code-block">
<span class="comment">// Access elements using dot notation</span>
list[i].studentName
list[i].major
list[i].schoolYear
list[i].studentID
<span class="comment">// Copy strings into struct</span>
<span class="syntax">strcpy</span>(list[count].studentName, studentName_input);
<span class="comment">// Assign direct values</span>
list[count].studentID = studentID_input;
</div>
</div>
<h2>🔢 Enums (Enumeration Types)</h2>
<div class="concept-box">
<div class="code-block">
<span class="keyword">typedef enum</span> {
freshman = <span class="highlight">0</span>,
sophomore,
junior,
senior
} <span class="syntax">schoolYear</span>;
</div>
<h3>String to Enum Conversion</h3>
<div class="code-block">
<span class="syntax">schoolYear</span> yearEnum;
<span class="keyword">if</span> (<span class="syntax">strcmp</span>(schoolYear_input, <span class="string">"freshman"</span>) == <span class="highlight">0</span>) {
yearEnum = freshman;
}
<span class="keyword">else if</span> (<span class="syntax">strcmp</span>(schoolYear_input, <span class="string">"sophomore"</span>) == <span class="highlight">0</span>) {
yearEnum = sophomore;
}
<span class="comment">// ... etc</span>
</div>
<h3>Enum to String Conversion</h3>
<div class="code-block">
<span class="keyword">switch</span> (list[i].schoolYear) {
<span class="keyword">case</span> freshman:
<span class="syntax">printf</span>(<span class="string">"freshman\n"</span>);
<span class="keyword">break</span>;
<span class="keyword">case</span> sophomore:
<span class="syntax">printf</span>(<span class="string">"sophomore\n"</span>);
<span class="keyword">break</span>;
<span class="comment">// ... etc</span>
}
</div>
</div>
<h2>🔤 String Operations</h2>
<div class="concept-box">
<div class="comparison">
<div class="good">
<h4 class="highlight">✅ CORRECT</h4>
<div class="code-block">
<span class="comment">// Compare strings</span>
<span class="keyword">if</span> (<span class="syntax">strcmp</span>(str1, str2) == <span class="highlight">0</span>) {
<span class="comment">// strings are equal</span>
}
<span class="comment">// Copy strings</span>
<span class="syntax">strcpy</span>(destination, source);
</div>
</div>
<div class="bad">
<h4 class="highlight">❌ WRONG</h4>
<div class="code-block">
<span class="comment">// Can't use == with strings!</span>
<span class="keyword">if</span> (str1 == str2) {
<span class="comment">// This compares addresses!</span>
}
<span class="comment">// Can't assign strings directly!</span>
destination = source;
</div>
</div>
</div>
<h3>strcmp() Return Values</h3>
<ul>
<li><span class="highlight">0</span> → strings are identical</li>
<li><span class="highlight">> 0</span> → first string comes after second alphabetically</li>
<li><span class="highlight">< 0</span> → first string comes before second alphabetically</li>
</ul>
</div>
<h2>🔄 Loop Patterns</h2>
<div class="concept-box">
<h3>Basic Array Traversal</h3>
<div class="code-block">
<span class="comment">// Loop through all existing elements</span>
<span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="highlight">0</span>; i < count; i++) {
<span class="comment">// Process list[i]</span>
}
</div>
<h3>Bubble Sort Pattern</h3>
<div class="code-block">
<span class="comment">// Nested loops for bubble sort</span>
<span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="highlight">0</span>; i < count - <span class="highlight">1</span>; i++) {
<span class="keyword">for</span> (<span class="keyword">int</span> j = <span class="highlight">0</span>; j < count - <span class="highlight">1</span> - i; j++) {
<span class="keyword">if</span> (<span class="syntax">strcmp</span>(list[j].studentName, list[j + <span class="highlight">1</span>].studentName) > <span class="highlight">0</span>) {
<span class="comment">// Swap using temp variable</span>
temp = list[j];
list[j] = list[j + <span class="highlight">1</span>];
list[j + <span class="highlight">1</span>] = temp;
}
}
}
</div>
<div class="warning">
<strong>Why count - 1?</strong> If you have 5 elements, you only need 4 comparisons (pairs: 0-1, 1-2, 2-3, 3-4)
</div>
</div>
<h2>✅ Input Validation Patterns</h2>
<div class="concept-box">
<h3>Essential Validation Checks</h3>
<div class="code-block">
<span class="comment">// 1. Check if array/list is full</span>
<span class="keyword">if</span> (count >= MAX_STUDENTS) {
<span class="keyword">return</span> <span class="highlight">2</span>; <span class="comment">// or appropriate error code</span>
}
<span class="comment">// 2. Check for duplicates</span>
<span class="keyword">for</span> (<span class="keyword">int</span> i = <span class="highlight">0</span>; i < count; i++) {
<span class="keyword">if</span> (<span class="syntax">strcmp</span>(list[i].name, newName) == <span class="highlight">0</span>) {
<span class="keyword">return</span> <span class="highlight">0</span>; <span class="comment">// duplicate found</span>
}
}
<span class="comment">// 3. Check if list is empty (for display functions)</span>
<span class="keyword">if</span> (count == <span class="highlight">0</span>) {
<span class="syntax">printf</span>(<span class="string">"List is empty.\n"</span>);
<span class="keyword">return</span>;
}
</div>
</div>
<h2>📁 File I/O Patterns</h2>
<div class="concept-box">
<h3>Reading Files</h3>
<div class="code-block">
<span class="keyword">FILE</span>* file;
file = <span class="syntax">fopen</span>(fileName, <span class="string">"rb"</span>); <span class="comment">// "rb" = read binary</span>
<span class="comment">// Always check if file exists!</span>
<span class="keyword">if</span> (file == <span class="highlight">NULL</span>) {
<span class="syntax">printf</span>(<span class="string">"%s not found\n"</span>, fileName);
<span class="keyword">return</span>;
}
<span class="comment">// Read data in same order it was saved</span>
<span class="syntax">fread</span>(&count, <span class="keyword">sizeof</span>(count), <span class="highlight">1</span>, file);
<span class="syntax">fclose</span>(file);
</div>
<h3>Writing Files</h3>
<div class="code-block">
<span class="keyword">FILE</span>* file;
file = <span class="syntax">fopen</span>(fileName, <span class="string">"wb"</span>); <span class="comment">// "wb" = write binary</span>
<span class="comment">// Save data in specific order</span>
<span class="syntax">fwrite</span>(&count, <span class="keyword">sizeof</span>(count), <span class="highlight">1</span>, file);
<span class="syntax">fclose</span>(file);
</div>
<div class="tip">
<strong>Critical:</strong> Read and write data in the EXACT same order, or your program will crash!
</div>
</div>
<h2>🎯 Common Return Value Patterns</h2>
<div class="concept-box">
<div class="code-block">
<span class="comment">// Standard return codes for add functions</span>
<span class="keyword">return</span> <span class="highlight">0</span>; <span class="comment">// Error: item already exists</span>
<span class="keyword">return</span> <span class="highlight">1</span>; <span class="comment">// Success: item added</span>
<span class="keyword">return</span> <span class="highlight">2</span>; <span class="comment">// Error: list is full</span>
</div>
<h3>How Calling Functions Use Return Values</h3>
<div class="code-block">
<span class="keyword">int</span> result = <span class="syntax">addSort</span>(name, major, year, id);
<span class="keyword">if</span> (result == <span class="highlight">0</span>)
<span class="syntax">printf</span>(<span class="string">"Student is already on the list!\n"</span>);
<span class="keyword">else if</span> (result == <span class="highlight">1</span>)
<span class="syntax">printf</span>(<span class="string">"Student successfully added!\n"</span>);
<span class="keyword">else</span>
<span class="syntax">printf</span>(<span class="string">"Unable to add. List is full!\n"</span>);
</div>
</div>
<h2>💡 Key Programming Insights</h2>
<div class="concept-box">
<ul>
<li><span class="highlight">count</span> tracks how many items exist, also points to next empty spot</li>
<li><span class="highlight">Arrays are zero-indexed:</span> first element is [0], last is [count-1]</li>
<li><span class="highlight">Always validate inputs</span> before performing operations</li>
<li><span class="highlight">String operations</span> require special functions (strcmp, strcpy)</li>
<li><span class="highlight">Enum conversion</span> requires explicit if/else or switch statements</li>
<li><span class="highlight">File I/O order matters:</span> read in same sequence as write</li>
<li><span class="highlight">Struct swapping:</span> use temp variable to swap entire structs</li>
</ul>
</div>
<h2>⚠️ Common Mistakes to Avoid</h2>
<div class="concept-box">
<div class="comparison">
<div class="bad">
<h4>❌ Don't Do This</h4>
<ul>
<li>Use == to compare strings</li>
<li>Assign strings with = operator</li>
<li>Forget to check if list is full</li>
<li>Try to add before validating</li>
<li>Use count as loop limit when it can change</li>
<li>Forget to increment count after adding</li>
</ul>
</div>
<div class="good">
<h4>✅ Do This Instead</h4>
<ul>
<li>Use strcmp() for string comparison</li>
<li>Use strcpy() for string copying</li>
<li>Check count >= MAX_SIZE first</li>
<li>Validate all inputs before processing</li>
<li>Use count-1 for loop limits</li>
<li>Always count++ after successful add</li>
</ul>
</div>
</div>
</div>
<div style="text-align: center; margin-top: 40px; padding: 20px; border-top: 2px solid #444; color: #888;">
<p>Keep this cheat sheet handy for future C programming assignments!</p>
<p>Remember: <span class="highlight">Validate → Prepare → Process → Organize → Return</span></p>
</div>
</div>
</body>
</html>