Oppgaver til kapittel 1¶
Arbeid deg gjennom disse etter at du har lest kapittel 1. Prøv hver enkelt selv før du avslører løsningen — du lærer langt mer av et ærlig forsøk, og feilene underveis, enn av å lese et ferdig program. Skriv koden inn i CLion og kjør den; ikke bare les den.
Når du åpner en løsning vises den uskarp — klikk én gang til for å avsløre den, slik at du ikke ser svaret ved et uhell.
Hvor du skal legge koden din¶
Hver oppgave er sitt eget lille program med sin egen main(), og et CLion-prosjekt kjører én main() om gangen. Du har to muligheter:
Enklest — hold ett prosjekt åpent og bytt ut innholdet i main.cpp for hver oppgave. Kjør det, og lim så inn det neste. (Du mister det forrige forsøket, noe som er greit for rask øving.)
Beholder hver oppgave (anbefalt) — gi hver oppgave sin egen fil i ett enkelt prosjekt (ex1.cpp, ex2.cpp, …) og legg til én linje per fil i CMakeLists.txt:
Velg så hvilket program som skal kjøres fra rullegardinmenyen for kjørekonfigurasjon ved siden av den grønne ▶-knappen. Du trenger ikke forstå CMakeLists.txt ennå — CMake-introduksjon forklarer det i kapittel 2; for nå, bare kopier mønsteret.
1. Presenter deg selv¶
Øver på: Grunnstruktur, Variabler og grunntyper
Deklarer en std::string for navnet ditt og en int for alderen din (akkurat som kapittelets int age = 25). Skriv ut én linje:
Vis løsning
2. Gjennomsnittskarakter¶
Øver på: Operatorer og uttrykk
Du har tre prøvekarakterer: 7, 8 og 10. Skriv ut gjennomsnittet deres. Sørg for at det kommer ut som et desimaltall — 8.33…, ikke et avkortet 8.
Vis løsning
#include <iostream>
int main() {
int a = 7;
int b = 8;
int c = 10;
double average = (a + b + c) / 3.0; // 3.0 er en double, så desimalene beholdes
std::cout << "Average: " << average << "\n";
}
Del på 3 (en int) og C++ gjør heltallsdivisjon — den kaster bort brøkdelen og du får 8. Å skrive 3.0 gjør den ene siden til en double, så desimalene overlever. Det er kapittelets 10 / 3-regel i praksis.
3. Sensoravlesninger¶
Øver på: Strenger og vektorer
Lagre fem sensoravlesninger — 42, 17, 99, 8, 56 — i en std::vector<int>. Skriv ut hvor mange det er, gjennomsnittet deres (som et desimaltall), og det største.
Hint: gå gjennom vektoren for å summere verdiene og holde styr på det største;
readings.size()er antallet.
Vis løsning
#include <iostream>
#include <vector>
int main() {
std::vector<int> readings = {42, 17, 99, 8, 56};
int sum = 0;
int largest = readings[0];
for (int r : readings) {
sum += r;
if (r > largest) {
largest = r;
}
}
double average = static_cast<double>(sum) / readings.size();
std::cout << "Count: " << readings.size() << "\n";
std::cout << "Average: " << average << "\n";
std::cout << "Largest: " << largest << "\n";
}
En områdebasert for besøker hvert element: vi legger hvert til sum og beholder det største som er sett så langt. static_cast<double> holder divisjonen desimal (heltallsdivisjon-regelen igjen), og readings.size() gir antallet elementer.
4. Partall eller oddetall¶
Øver på: Kontrollstrukturer
Bruk en for-løkke til å skrive ut tallene 1 til 10, og merk hvert enkelt som even eller odd.
Hint: et tall er partall når
n % 2 == 0.
Vis løsning
5. Kvadrater¶
Øver på: Funksjoner
Skriv en funksjon int square(int n) som returnerer n * n (du så akkurat denne funksjonen i kapittelet). Bruk så en for-løkke til å skrive ut kvadratene av 1 til og med 5.
Vis løsning
6. Trafikklys¶
Øver på: Enumerasjoner
Definer en enum class TrafficLight med Red, Amber og Green. Skriv en funksjon som skriver ut handlingen for hver enkelt — Stop, Get ready, Go — ved hjelp av en switch, og kall den for alle tre.
Vis løsning
#include <iostream>
enum class TrafficLight {
Red,
Amber,
Green
};
void act(TrafficLight light) {
switch (light) {
case TrafficLight::Red: std::cout << "Stop\n"; break;
case TrafficLight::Amber: std::cout << "Get ready\n"; break;
case TrafficLight::Green: std::cout << "Go\n"; break;
}
}
int main() {
act(TrafficLight::Red);
act(TrafficLight::Amber);
act(TrafficLight::Green);
}
Et fast sett med navngitte verdier håndtert av en switch. Uten default advarer kompilatoren deg hvis du legger til en farge senere og glemmer den her.