Uma função que calcula a média aritmética de dois valores:
float media(float a, float b)
{
float m = (a + b) / 2.0;
return m;
}
media
float
antes do identificador indica o tipo do resultadoa
e b
são os dois valores de tipo float
que devem fornecidos para executar a funçãoO corpo da função está delimitado entre chavetas:
{
float m = (a + b) / 2.0;
return m;
}
m
)return
termina a função e devolve o resultado ao contexto onde a função foi chamadaUm expressão: identificador(arg1, arg2, ...)
main
main
pode chamar outra função e assim sucessivamentemain
(direta ou indirectamente) z = media(x*0.5, y+1);
printf("%f\n", media(x*0.5,y+1));
Vamos escrever um programa que lê três números e calcula as médias dois a dois.
Introduza 3 números: 3.5 9.6 10.2
Médias
3.5 e 9.6: 6.55
9.6 e 10.2: 9.9
3.5 e 10.2: 6.85
#include <stdio.h>
float media(float a, float b) {
float m = (a + b)/2;
return m;
}
int main(void) {
float x, y, z;
printf("Introduza 3 números: ");
scanf("%f %f %f", &x, &y, &z);
printf("Médias\n");
printf("%f e %f: %f\n", x, y, media(x,y));
printf("%f e %f: %f\n", y, z, media(y,z));
printf("%f e %f: %f\n", x, z, media(x,z));
return 0;
}
float media(float, float);
int
float media(float, float); // protótipo
int main(void) {
...
printf(..., x, y, media(x,y)); // uso
...
return 0;
}
float media(float a, float b) { // definição
m = (a + b)/2.0;
return m;
}
void
return
void print_time(int n)
{
printf("T minus %d and counting\n", n);
}
int main(void) {
print_time(3);
print_time(2);
print_time(1);
return 0;
}
return
void
deve usar a instrução return
para especificar o resultadoreturn expressão ;
return 0;
return n;
return (x + y) / 2.0;
return
Podemos usar return
para terminar a execução da função a meio do corpo.
int max(int a, int b)
{
if(a >= b)
return a; // termina imediatamente
// se a execução chegar a este ponto,
// então a < b; logo o máximo é b
return b;
}
return
return
em funções que não retornam resultados (void
)return
serve apenas para terminar a execução da funçãovoid print_time(int n)
{
if (n < 0)
return; // terminar imediatemente
printf("T minus %d and counting\n", n);
}
return
return
pode dificultar a compreensão do fluxo de execução// máximo de 2 valores
// NB: modifica o primeiro argumento
int max(int a, int b) {
if (b > a)
a = b;
return a;
}
int main(void) {
int x = 1, y = 2;
printf("%d\n", max(x,y)); // imprime 2
printf("%d %d\n", x, y); // imprime 1, 2
return 0;
}
// Tenta trocar os valores de a, b;
// não funciona porque a,b são temporários
void trocar(int a, int b) {
int t;
t = a;
a = b;
b = t;
}
int main(void) {
int x = 1, y= 2;
trocar(x, y);
printf("%d %d\n", x, y); // imprime 1, 2
return 0;
}
Escrever um programa que imprime os algarismos das dezenas e unidades de um inteiro até 99.
Exemplos de execução:
12
um dois
78
sete oito
7
zero sete
Dado o valor de um algarismo de 0–9, imprimir o texto correspondente em português:
0 | "zero" |
1 | "um" |
2 | "dois" |
3 | "três" |
4 | "quatro" |
5 | "cinco" |
6 | "seis" |
7 | "sete" |
8 | "oito" |
9 | "nove" |
Vamos definir uma função auxiliar:
void imprime_algarismo(int a);
void
)A definição da função é longa mas simples: uma sequência de condições if
em cascata.
void imprime_algarismo(int a) {
if (a == 0)
printf("zero");
else if (a == 1)
printf("um");
else if (a == 2)
printf("dois");
else if (a == 3)
printf("três");
else if (a == 4)
printf("quatro");
(continua no slide seguinte)
(continuação do slide anterior)
else if (a == 5)
printf("cinco");
else if (a == 6)
printf("seis");
else if (a == 7)
printf("sete");
else if (a == 8)
printf("oito");
else if(a == 9)
printf("nove");
else
printf("algarismo inválido!");
}
n
é um inteiro entre 0 e 99:
n%10
é são as unidades;n/10
remove unidades; restam as dezenasint main(void) {
int n, d, u;
scanf("%d", &n);
if (!(n>=0 && n<=99)) {
printf("número inválido\n");
return -1; // erro
}
u = n % 10; // unidades (0..9)
d = n / 10; // dezenas (0..9)
imprime_algarismo(d); printf(" ");
imprime_algarismo(u); printf("\n");
return 0; // OK
}
if
sA decomposição em funções permitiu: