Uttryck Repetition - Operatorer Repetition

Dagens föreläsning
Repetition
Funktioner
Programmeringsteknik för Ingenjörer
VT05
Räckvidd (scope)
Föreläsning 5
Programmeringsteknik VT05
Repetition - Datatyper
2
Repetition - Uttryck
• En datatyp har en grupp värden samt en grupp
operationer som är giltiga för dess värden.
Ett uttryck är en syntaktiskt korrekt kombination av
konstanter, variabler, funktionsanrop, tilldelningar och
operatorer.
• C har ett antal primitiva datatyper som är
fördeklarerade.
Exempel:
(a + b) / (c + d)
• Dessa är heltal, flyttal och tecken.
a = 5.7 + 9.7 * 0.4
b = sqrt(3.5 – 0.5)
Programmeringsteknik VT05
3
Repetition - Operatorer
4
Repetition - Kontrollflöde
Relationsoperatorer
<
mindre än
>
större än
<=
mindre än eller lika med
>=
större än eller lika med
==
lika med
!=
inte lika med
Logikoperatorer
!
negation
&&
logiskt ”och”
||
logiskt ”eller”
Programmeringsteknik VT05
Programmeringsteknik VT05
Sekvens:
Satserna exekveras en efter en.
Standard
Urval:
Man väljer om satser ska exekveras eller ej.
If-sats, if-else-sats, switch-sats
Repetition:
Satsen exekveras ett visst antal gånger
while-loop, do-loop, for-loop
5
Programmeringsteknik VT05
6
1
Top-down design
Funktionsanrop
Programmet börjar alltid med ett anrop till main(). När en
funktion anropas ges kontroll till den funktionen. Efter att
funktionen är klar med sitt jobb, ges kontrollen tillbaka till
den anropande funktionen.
”top-down” metod för att lösa problem.
– Försök dela upp programmet i mindre och mindre delproblem.
När delproblemen är enkla nog, använd funktioner för att
lösa delproblemen (och därmed hela problemet).
Syntax:
funktionsnamn();
Program är ofta uppdelade på flera källkodsfiler där varje fil
kan innehålla noll eller flera funktioner.
Om funktionen har något returvärde kan detta värde lagras
i en variabel eller användas direkt i en beräkning.
int slumptal = rand(); // tilldelning
if (x && rand()) {... // uttryck
Programmeringsteknik VT05
7
Programmeringsteknik VT05
Funktionsprototyp
8
Exempel
#include <stdio.h>
En funktion bör deklareras innan den används. ANSI C
tillhandahåller en deklarationssyntax som kallas
funktionsprototyp.
/* funktionsprototyp */
double pow2(double tal);
double pow2(double tal);
int main (void) {
double mitt_tal = 5.0;
double retval;
Detta berättar för kompilatorn att pow2 är en funktion som
tar en double som argument och att den returnerar en
double.
retval = pow2(mitt_tal);
printf("Kvadraten: %.2f\n",retval);
return 0;
OBS! Identifierare som anges i parameterlistan i en
funktionsprototyp påverkar inte deklarationen utan är
enbart av dokumentationssyfte.
Programmeringsteknik VT05
}
OBS! Kommer ej att kompilera!
9
Programmeringsteknik VT05
Funktionsdefinition
10
Exempel
#include <stdio.h>
C-källkoden, som beskriver vad en funktion gör, kallas
funktionsdefinition.
/* Funktionsprototyp */
double pow2(double tal);
Syntax:
returtyp funktionsnamn ( parameterlista ) {
deklarationer
satser
}
int main (void) {
printf("Kvadraten är: %.2f\n",pow2(5.0));
return 0;
}
• Allt innan första krullparentesen kallas funktionshuvud.
• Allt mellan krullparenteserna kallas funktionskropp.
• Parameterlistan är en komma-separerad lista med
deklarationer.
Programmeringsteknik VT05
/* Funktionsdeklaration */
double pow2(double tal) {
return (tal * tal);
}
11
Programmeringsteknik VT05
12
2
Funktionsanrop
Funktionsanrop och variabler
Aktuellt argument – Ett uttryck mellan paranteserna i
funktionsanropet.
Argumenten skickas ”call-by-value”. Detta betyder att varje
argument utvärderas och värdet av argumentet skickas
till funktionen. Värdena lagras i motsvarande lokala
variabel.
pow2(5.0);
Formell parameter – En identifierare som representerar
värdet av det aktuella argumentet i
funktionsdeklarationen.
Alltså, om en variabel skickas till en funktion så ändras inte
värdet på variabeln i den anropande miljön.
Variabler i en funktion är lokala för den funktionen.
Ändringar av de variablerna kommer inte att påverka
andra variabler med samma namn utanför funktionen.
double pow2(double tal) {
return (tal * tal);
}
Programmeringsteknik VT05
13
Programmeringsteknik VT05
Return
Programflöde
return används för att returnera värden från funktioner till
den anropande miljön.
return;
return ++a;
return (a * b);
Programflödet är sekventiellt.
Sats efter sats i den beskrivna ordningen.
Återhoppet sker till anropsstället.
...
funktion1() {
...
sats;
funktion2();
sats;
...
}
Om return-satsen innehåller ett utryck evalueras först
uttrycket och värdet av uttrycket returneras.
När return påträffas avbryts exekveringen av funktionen
och kontrollen ges åter till den anropande miljön.
Programmeringsteknik VT05
14
15
Funktioner utan indata
funktion2() {
...
...
return ...;
}
Programmeringsteknik VT05
16
Funktioner med flera argument
void hello_world(void) {
printf("Hello World!\n");
}
En funktion kan ta flera argument, typ får vara olika.
Exempel:
Denna funktion returnerar ingenting (void). Den tar heller
inga argument.
int many(double x, int y, char z) {
int temp;
temp = (int)(x / y);
temp += z;
return temp;
}
Funktionen anropas med:
hello_world();
Observera att den inte anropas med
hello_world(void);
Programmeringsteknik VT05
17
Programmeringsteknik VT05
18
3
Räckvidd (Scope)
Exempel
{
Grundregeln är att identifierare bara är tillgängliga inne i
det block där de deklarerades.
int a = 2;
printf("a = %d\n", a);
{
int a = 5;
printf("a = %d\n", a);
}
printf("a = %d\n", a);
De finns inte utanför blocket.
Detta låter som en enkel regel, men programmerare väljer
ofta att använda samma identifierare på olika variabler.
Frågan uppstår då vilket objekt identifieraren refererar
till...
}
Vad skrivs ut?
Programmeringsteknik VT05
19
Programmeringsteknik VT05
20
Exempel
#include <stdio.h>
int main (void) {
int a = 1, b = 2, c = 3;
printf("a = %d b = %d c = %d\n", a, b, c);
{
int b = 4;
float c = 5.0F;
printf("a = %d b = %d c = %f\n", a, b, c);
a = b;
{
int c = b;
printf("a = %d b = %d c = %d\n", a, b, c);
}
printf("a = %d b = %d c = %f\n", a, b, c);
}
printf("a = %d b = %d c = %d\n", a, b, c);
return 0;
}
Programmeringsteknik VT05
21
4