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
On This Page
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 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.
Question 1 asks about your program’s users and how it addresses a need. This is standalone — no PPR reference needed.
“My program is a grade tracker that calculates letter grades for students.”
“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.”
Show how your list stores data. Name the list, describe what each element represents, and identify where in your code the list is used.
“My program uses a list called scores to store scores. The list is used in the procedure.”
“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.”
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.
“My list manages complexity because it stores all the scores in one place instead of using many variables.”
“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.”
Name your procedure, identify its parameter, explain what the procedure does, and explain how the parameter affects its behavior.
“The procedure getLetterGrade takes score as a parameter and returns a letter grade.”
“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.”
Explain how your procedure uses sequencing, selection, and iteration together. All three must be present inside the procedure. Walk through the logic in order.
“The procedure loops through the list, checks the score, and returns the letter grade.”
“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.”
Describe two different calls to your procedure with two different argument values that produce two different results. Identify what condition the difference tests.
“I tested the procedure with high scores and low scores to make sure it returned the right grade.”
“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.”
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.
See how these strategies apply to real College Board prompts
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.
Question 1 — Program Purpose (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.
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.
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.
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)
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.
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.
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.
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?
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)
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.
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.
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)
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.
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.
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.
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)
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.
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.
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.
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.
Message Sent!
Thanks for reaching out. I'll get back to you within 24 hours.
tanner@apcsexamprep.com
Courses
AP CSA, CSP, & Cybersecurity
Response Time
Within 24 hours
Prefer email? Reach me directly at tanner@apcsexamprep.com