AP CSP Written Response Guide | Strategy, Examples & 20 Practice Prompts

The AP CSP written response is worth 30% of your exam score — 6 points across 6 rubric rows, answered on exam day using your Personalized Project Reference. This guide gives you the row-by-row formula, weak vs. full-credit answer comparisons drawn from College Board scoring patterns, the most common mistakes identified in Chief Reader Reports, and 20 original practice prompts aligned to the 2026 exam format.

AP CSP Written Response Guide

Row-by-row strategy • Weak vs. full-credit examples • 20 practice prompts for 2026 • Chief Reader insights

6Rubric Rows
30%of AP Score
60Minutes on Exam Day
20Practice Prompts

How the Written Response Works

The AP CSP written response is Section II of the exam. On exam day, you receive a printed copy of your Personalized Project Reference (PPR) — screenshots of your list code segment and your procedure code segment. You answer two sets of prompts about your own code. You have approximately 60 minutes for this section.

  • Question 1 (1 point): Describes your program’s purpose, the users it serves, and how it addresses a need. No PPR reference required.
  • Question 2 (5 points): Five parts (a–e), each targeting one rubric row. References your PPR code directly.
The math that makes this urgent: Score all 6 points here and you only need about 32 out of 70 correct on the MCQ to earn a 3. The written response is your highest-leverage 60 minutes of exam prep.

The 2026 exam date is May 14, 2026. PPR submission deadline: April 30, 2026 at 11:59 PM ET.

See official CB prompts and scoring guidelines (2023–2025) →

Row-by-Row Strategy & Examples

Each row below shows the formula, a weak answer, and a full-credit answer using a sample project: a Grade Tracker that stores student scores in a list and uses a procedure getLetterGrade(score) to classify each score.

1 Program Purpose & Function 1 pt

Question 1 asks about your program’s users and how it addresses a need. This is standalone — no PPR reference needed.

Formula: [Who uses it] + [what problem or need they have] + [how your specific program feature addresses that need]
Weak — loses the point

“My program is a grade tracker that calculates letter grades for students.”

Full Credit

“Students who want to monitor their academic standing use this program. A key concern is not knowing whether their current score will result in a passing grade. The program addresses this by allowing students to enter any numeric score and immediately receive the corresponding letter grade, eliminating manual calculation.”

Why the weak answer fails: It describes what the program does (function), not why users need it (purpose). The rubric requires purpose — the problem being solved — not a restatement of features.
Purpose vs. Function trap: Purpose = WHY it exists. Function = WHAT it does. Row 1 asks for purpose. “My program calculates grades” is function. “Students need to know if they’re passing” is purpose.
2 Data Abstraction 1 pt

Show how your list stores data. Name the list, describe what each element represents, and identify where in your code the list is used.

Formula: The list [name] stores [what each element is]. It is used in [procedure or section of code] to [what role it plays in producing output].
Weak — loses the point

“My program uses a list called scores to store scores. The list is used in the procedure.”

Full Credit

“The list scores stores individual numeric grade values entered by the user, where each element represents one student’s score out of 100. The list is iterated over inside getLetterGrade, which accesses each element to determine and display the corresponding letter grade for every score stored.”

Key difference: The full-credit answer names what each element represents and explains the role the list plays in the procedure. The weak answer restates the variable name without meaningful description.
3 Managing Complexity 1 pt — Most Missed

Explain why your list is necessary to manage complexity. The rubric does not want you to describe what the list stores. It wants you to argue why a list was required.

Formula: Without the list [name], the program would need [describe the harder/impossible alternative]. Using a list means [how it simplifies the code or makes it scalable].
Weak — loses the point

“My list manages complexity because it stores all the scores in one place instead of using many variables.”

Full Credit

“Without the scores list, the program would require a separate variable for each score (score1, score2, score3, etc.), and the getLetterGrade procedure would need a separate call for each variable. The number of variables and procedure calls would need to change every time a score is added. Using a list allows the procedure to iterate over any number of scores with a single loop, regardless of how many entries the user provides.”

Why this row is the hardest: Students write what the list does instead of arguing why a list was necessary. The rubric wants the counterfactual — what would the code look like without it, and why is that worse?
Chief Reader finding (2024): The most common reason students lost this point was giving a data abstraction answer instead of a managing complexity answer. If your answer could earn Row 2, rewrite it for Row 3.
4 Procedural Abstraction 1 pt

Name your procedure, identify its parameter, explain what the procedure does, and explain how the parameter affects its behavior.

Formula: The procedure [name] takes a parameter [param name], which represents [what it means]. When called, the procedure [what it does]. The parameter affects the procedure by [how different argument values change the output or behavior].
Weak — loses the point

“The procedure getLetterGrade takes score as a parameter and returns a letter grade.”

Full Credit

“The procedure getLetterGrade takes a parameter score, which represents a numeric grade between 0 and 100. The procedure uses the value of score to determine which grade range it falls into and returns the corresponding letter (A, B, C, D, or F). The parameter directly changes the output: passing 95 returns ‘A’, while passing 62 returns ‘D’, demonstrating that different argument values produce different letter grade results.”

The parameter explanation is what earns the point. You must show how the parameter changes the procedure’s behavior — not just name it.
5 Algorithm Implementation 1 pt

Explain how your procedure uses sequencing, selection, and iteration together. All three must be present inside the procedure. Walk through the logic in order.

Formula: [Procedure name] first [step 1 — sequencing], then uses [selection — name the condition and both branches], and iterates using [loop — what it loops over and what happens each pass].
Weak — loses the point

“The procedure loops through the list, checks the score, and returns the letter grade.”

Full Credit

getLetterGrade first receives the numeric score parameter (sequencing). It then uses a series of conditional checks: IF score ≥ 90 THEN return ‘A’, ELSE IF score ≥ 80 THEN return ‘B’, continuing through ‘D’ and ‘F’ (selection). When called from the main program, a FOR EACH loop iterates over every element in scores, passing each value to getLetterGrade and displaying the result (iteration). All three components work together: the loop provides iteration, the conditionals inside the procedure provide selection, and the ordered parameter passing and return provide sequencing.”

Common trap: Students name sequencing, selection, and iteration but do not explain how they interact. The rubric rewards a specific walk-through, not a checklist.
Design tip: If your selection is outside your procedure, you will struggle to earn Row 5. The algorithm with all three components must be inside the procedure.
6 Testing 1 pt

Describe two different calls to your procedure with two different argument values that produce two different results. Identify what condition the difference tests.

Formula: Call 1: [procedure]([arg1]) returned [result1]. Call 2: [procedure]([arg2]) returned [result2]. This tests [what condition the difference demonstrates].
Weak — loses the point

“I tested the procedure with high scores and low scores to make sure it returned the right grade.”

Full Credit

“Call 1: getLetterGrade(95) returned ‘A’, confirming the procedure correctly classifies scores at or above 90. Call 2: getLetterGrade(72) returned ‘C’, confirming scores between 70 and 79 are correctly classified. These two calls test that the boundary between the A and C grade ranges produces the expected result for each branch of the conditional.”

Specificity is everything. The grader cannot award this point without seeing actual argument values and actual results. “High and low scores” with no values earns nothing.

Top Mistakes from Chief Reader Reports

These are the most frequently cited reasons students lost points, drawn from the 2024 and 2025 AP CSP Chief Reader Reports. Avoid every one of these.

Row 1

Answering with what the program does (function) instead of why users need it (purpose). “My program displays grades” is not a purpose statement.

Start with the user’s problem or need, then connect your program feature to it.

Row 2

Naming the list without describing what each element represents. “The list stores scores” is insufficient — what does each score represent?

Describe what one element in the list means in the context of the program.

Row 3 — Most Common

Writing a Row 2 answer for Row 3. Describing what the list stores does not explain why a list manages complexity. Students restated their Row 2 answer.

Write the counterfactual: what would the code look like without a list? Why is that worse?

Row 4

Naming the parameter but not explaining how it changes the procedure’s behavior. The rubric requires a demonstration that different argument values produce different outcomes.

Give a concrete example: “passing 95 returns A, passing 62 returns D.”

Row 5

Listing “sequencing, selection, and iteration” without explaining how they work together. Checking the three boxes is not enough without a walk-through.

Walk through the procedure step by step, labeling each component as you go.

Row 6

Describing tests without naming argument values or results. “I tested with different inputs” earns zero points without specifics.

Write out the exact call and exact return value for each of the two test cases.

20 Practice Prompts for the 2026 AP CSP Written Response

The 20 prompts below are organized by rubric row. Each prompt is written in the style of the 2024 and 2025 AP CSP exam. Practice by writing your answer before reading any feedback, then compare against the row formula above. The PPR scenario for each prompt is described where needed.

How to use these: Write your answer first — aim for 3 to 5 sentences. Then check it against the formula for that row. If your answer could be used for a different project without changing a word, it is too generic to earn the point.

Question 1 — Program Purpose (Row 1)

Prompt 1 — Row 1

Your program is a Recipe Cost Calculator that lets users enter ingredient names and prices to find out the total cost of a recipe. Identify the users of your program and describe how it addresses a specific concern they have.

Prompt 2 — Row 1

Your program is a Workout Logger that records exercise names and reps and displays the total reps completed in a session. Identify the users of your program and explain a specific need the program fulfills.

Prompt 3 — Row 1

Your program is a Quiz Score Tracker that stores quiz scores for a student and calculates the current average. Identify who would use this program and describe one concern of that user that the program addresses.

Prompt 4 — Row 1

Your program is a Movie Watchlist App that lets users add movie titles and ratings, then filters the list to show only movies above a rating threshold they set. Describe the program’s users and how a specific feature of the program addresses their needs.

Data Abstraction & Managing Complexity (Rows 2 & 3)

Prompt 5 — Row 2

Your PPR shows a list called taskNames that stores the name of each to-do item entered by the user. The list is iterated over inside a procedure displayPending(tasks) that prints each task to the screen. Describe what the list stores and how it is used in the procedure.

Prompt 6 — Row 2

Your PPR shows a list called tempReadings that stores temperature values recorded by the user over a week. The list is passed to a procedure getAvgTemp(readings) that returns the average. Describe what each element in the list represents and where the list is used.

Prompt 7 — Row 3

Your program uses a list called playerScores to store the score for each round a user plays. Explain how using this list manages complexity in your program. In your explanation, describe what the program would look like if you had not used a list.

Prompt 8 — Row 3

Your program uses a list called inventoryItems to track the name of each item in stock. A procedure checkStock(items, search) iterates over the list to find a match. Explain why using a list to store inventory items manages complexity. What would need to change if no list were used?

Prompt 9 — Row 3

Your program stores student names in a list called rosterNames and passes it to a procedure that checks attendance. Explain how using rosterNames as a list manages complexity compared to an alternative approach without a list.

Procedural Abstraction (Row 4)

Prompt 10 — Row 4

Your PPR shows a procedure filterByRating(movies, threshold) that returns only the movies from the list with a rating at or above the threshold. Describe what the procedure does and explain how the parameter threshold affects its behavior.

Prompt 11 — Row 4

Your PPR shows a procedure calcDiscount(price, percent) that returns the price after applying a discount percentage. Describe what this procedure does and explain how different values of percent change the result.

Prompt 12 — Row 4

Your PPR shows a procedure classifyBMI(bmi) that returns a health category string based on the bmi value passed in. Describe what the procedure does and explain how the parameter changes the procedure’s output.

Algorithm Implementation (Row 5)

Prompt 13 — Row 5

Your procedure getHighScores(scores, cutoff) iterates over a list of scores and appends any score above the cutoff to a results list, which it then returns. Explain in detail how this procedure uses sequencing, selection, and iteration.

Prompt 14 — Row 5

Your procedure countPassing(grades, passMark) loops through a list of numeric grades and counts how many are at or above passMark, then returns the count. Explain how this procedure implements sequencing, selection, and iteration.

Prompt 15 — Row 5

Your procedure buildSummary(items, maxLen) loops through a list of strings and adds each to a summary string only if its length is below maxLen, then returns the combined summary. Explain how sequencing, selection, and iteration each appear inside this procedure.

Prompt 16 — Row 5

Your procedure applyLatepenalty(scores, threshold) iterates over student scores and, for each score below threshold, deducts 10 points before adding it to a penalized list, which is then returned. Describe in detail how sequencing, selection, and iteration work together inside this procedure.

Testing (Row 6)

Prompt 17 — Row 6

Your procedure is getLetterGrade(score). Describe two calls to this procedure using different arguments that produce different results. Identify the condition being tested by the difference between the two calls.

Prompt 18 — Row 6

Your procedure is filterByRating(movies, threshold) where movies is a list of ratings. Describe two calls using different values for threshold that return different results. Identify what your testing demonstrates about the procedure’s behavior.

Prompt 19 — Row 6

Your procedure is countPassing(grades, passMark). Describe two specific calls to this procedure, each with a different passMark value, that return different counts. Explain what condition the two calls together demonstrate.

Prompt 20 — Row 6

Your procedure is calcDiscount(price, percent). Describe two calls with different values for percent that return different discounted prices. Name the argument values, name the results, and explain what your testing confirms about how the parameter affects the output.

Ready to practice against real exam conditions?

Frequently Asked Questions

How do you score a perfect 6/6 on the AP CSP written response?

Reference specific variable names, list names, and procedure names from your PPR in every answer. Address each rubric row directly in the order it is asked. For managing complexity, write the counterfactual — what would the code look like without the list? For testing, name exact argument values and exact results. Irrelevant information does not help and can distract the reader from your actual answer.

What is the hardest rubric row on the AP CSP written response?

Row 3, Managing Complexity, is the most commonly missed point. Students consistently write a data abstraction answer for it instead. The rubric wants the counterfactual: what would the program look like without the list, and why is that more complex? If your Row 3 answer sounds like your Row 2 answer, rewrite it.

How long should each written response answer be?

Two to five sentences per row is ideal. Longer is not better — every sentence should directly address the rubric. Use the rubric’s own language where you can: “manages complexity,” “sequencing, selection, and iteration,” “parameter affects the functionality.” Using the exact phrasing removes any ambiguity about which row you are addressing.

Can I earn Row 5 if my selection is outside my procedure?

No. All three components — sequencing, selection, and iteration — must be present inside the procedure referenced in your PPR. If your conditional is in the main program and not inside your procedure, your Row 5 answer will not earn the point. Design your procedure with all three components inside it before the exam.

Should I use my own project or the sample PPR on practice exams?

Use your own Create Task code whenever possible. The written response is answered about your specific code, so the more familiar you are with your own procedure, list, and algorithm, the faster and more precisely you can answer on exam day. Use the sample PPR only to practice the format of the question before your own project is complete.

When is the 2026 AP CSP exam?

The 2026 AP CSP exam is on May 14, 2026. The PPR submission deadline is April 30, 2026 at 11:59 PM ET. Make sure you click “Submit as Final” in the AP Digital Portfolio before that deadline — saving is not the same as submitting.

Get in Touch

Whether you're a student, parent, or teacher — I'd love to hear from you.

Just want free AP CS resources?

Enter your email below and check the subscribe box — no message needed. Students get daily practice questions and study tips. Teachers get curriculum resources and teaching strategies.

Typically responds within 24 hours

Message Sent!

Thanks for reaching out. I'll get back to you within 24 hours.

🏫 Welcome, fellow educator!

I offer curriculum resources, practice materials, and study guides designed for AP CS teachers. Let me know what you're looking for — whether it's classroom materials, a guest speaker, or Teachers Pay Teachers resources.

Email

tanner@apcsexamprep.com

📚

Courses

AP CSA, CSP, & Cybersecurity

Response Time

Within 24 hours

Prefer email? Reach me directly at tanner@apcsexamprep.com