Professional Documents
Culture Documents
Programação Estruturada
n A linguagem C é uma linguagem estruturada
em bloco simples. Uma característica
Curso de Linguagem C distintiva de uma linguagem estruturada em
bloco é a compartimentalização de seu
código e de seus dados, que é a habilidade
Rodolfo Jardim de Azevedo de uma linguagem tem de seccionar e
esconder do resto do programa todas as
Instituto de Computação instruções necessárias para a realização de
UNICAMP uma determinada tarefa.
1
1
Curso de Linguagem C
2
2
Curso de Linguagem C
main() {
n Todo programa em C tem que ter a n Inicia um bloco de código.
função main, é na primeira linha desta
função que o programa começa a ser
executado e quando a última linha for
executada, o programa será encerrado.
printf(“Alo mundo\n”); }
n Chamada a uma função em C. A função n Encerra um bloco de código.
printf é utilizada para imprimir uma
mensagem na tela, neste caso, a
mensagem Alo mundo que é chamado
de parâmetro passado à função.
3
3
Curso de Linguagem C
Chaves Comentários
n Todo bloco de código escrito em C n Na linguagem C, os comentários são
deve vir entre chaves. Não é necessário delimitados por /* e */ como pode ser
colocar um ponto e vírgula depois de visto na primeira linha do programa
fechar chaves pois cada comando anterior. Não é permitido colocar
dentro do bloco já possui o seu comentários aninhados. Os
terminador. comentários podem vir em qualquer
posição do programa e não apenas em
linhas separadas. Eles também podem
começar em uma linha e terminar em
outra.
4
4
Curso de Linguagem C
5
5
Curso de Linguagem C
6
6
Curso de Linguagem C
int soma = 0;
7
7
Curso de Linguagem C
8
8
Curso de Linguagem C
9
9
Curso de Linguagem C
10
10
Curso de Linguagem C
Register Static
n Sempre que uma variável for declarada n Variáveis static são variáveis existem
do tipo register, o compilador fará o durante toda a execução do programa,
máximo possível para mante-la num mas só podem ser acessadas de dentro
dos registradores do microprocessador, do bloco que a declarou.
acelerando assim o acesso a seu valor.
É pratica comum, declarar as variáveis
de controle de loop como sendo
register.
Exemplo: printf()
/* Exemplo de variável static */ n Rotina de finalidade geral para saída
main() pelo console
{
printf(“%d\n”, numero()); /* imprimirá 0 */ n A função printf() serve para mostrar
printf(“%d\n”, numero()); /* imprimirá 1 */ mensagens na tela. Sua forma geral é
}
numero() printf(“string de controle”, lista argumentos);
{
static valor = 0; /* atribuição só executada 1 vez */
return valor ++;
}
11
11
Curso de Linguagem C
12
12
Curso de Linguagem C
13
13
Curso de Linguagem C
14
14
Curso de Linguagem C
if Exemplo
/* programa do número mágico */
n O comando if serve para executar #include <stdlib.h>
comandos de acordo com uma main()
determinada condição {
int magico, adivinhacao;
n A forma geral do comando if é
magico = rand() % 10; /* gerar um número */
if (condição) comando; printf(“Adivinhe o número: ”);
else comando; scanf(“%d”, &adivinhacao);
if (adivinhacao == magico)
n onde a parte else é opcional
printf(“** número certo **”);
else
printf(“-- número errado --”);
}
if aninhados Exemplos
n C permite que sejam colocados if (x) if (x) {
comandos if dentro de outros comandos if (y) printf(“1”); if (y) printf(“1”);
else printf(“2”); }
if. A isto chamamos de if aninhados.
else printf(“2”);
n Quando se trata de if aninhados, o
comando else se refere ao if mais n Neste caso, o else n Neste caso, o else
próximo que não possui um comando pertence ao pertence ao primeiro
else. Tanto o if quanto o else devem segundo if. if.
estar dentro do mesmo bloco de código.
15
15
Curso de Linguagem C
default:
seqüência de comandos
}
16
16
Curso de Linguagem C
Inicialização Condição
n Na forma mais simples, inicialização é n A condição é uma expressão de relação
um comando de atribuição que o que testa se a condição final desejada
compilador usa para estabelecer a pelo loop for ocorreu.
variável de controle de loop. n Aqui também pode ser colocado
n A inicialização pode conter qualquer qualquer comando válido em C.
comando válido em C.
17
17
Curso de Linguagem C
Incremento Exemplo 1
n O incremento define a maneira como a /* imprimir os números de 1 a 100 */
variável de controle do loop será main()
alterada cada vez que o computador {
repetir o loop. int x;
n Também aqui, podemos colocar for (x = 1; x <= 100; x ++) printf(“%d ”, x);
qualquer comando válido em C. }
Exemplo 2 Exemplo 3
/* imprimir os números de 100 a 1 */ /* imprimir os números de 0 a 100, 5 em 5 */
main() main()
{ {
int x; int x;
for (x = 100; x > 0; x --) printf(“%d ”, x); for (x = 0; x <= 100; x = x + 5)
} printf(“%d ”, x);
}
18
18
Curso de Linguagem C
while Exemplo 1
n O while executa um comando (ou bloco pausa()
de comandos) enquanto uma condição {
for verdadeira. char tecla = ‘\0’;
n A forma geral do while é: printf(“Tecle ESPAÇO para continuar...”);
while (condição) while (tecla != ‘ ’)
comando; tecla = getche();
}
19
19
Curso de Linguagem C
Exemplo 2 do while
n O exemplo anterior pode ser reescrito n Ao contrário do loop for e do loop while,
sem utilizar variável. Veja: que testam a condição no começo do
main() loop, o loop do while verifica a condição
{ somente no final. Desta forma, o loop
printf(“Tecle ESPAÇO para continuar...”); será executado pelo menos uma vez. A
while (getche() != ‘ ’); forma geral do loop do while é:
} do {
comando;
} while (condição);
20
20
Curso de Linguagem C
21
21
Curso de Linguagem C
E x e m p l o \0
puts strcpy
n Mostra uma string na tela. n Copia uma string em outra.
n Forma geral: n Forma geral:
puts(nome_string); strcpy(para, de);
n Exemplo: n Lembre-se que a string para deve ser
main() grande o suficiente para conter de.
{ main()
puts(“Esta é uma mensagem”); { char str[80];
} strcpy(str, “alo”);
}
22
22
Curso de Linguagem C
strcat strcmp
n Adiciona uma string em outra. n Compara 2 strings.
n Forma geral: n Forma geral:
strcat(s1, s2); strcmp(s1, s2)
n s2 será anexada ao final de s1. n A função retorna:
main()
{ char primeiro[20], segundo[10]; 0 se s1 igual a s2
strcpy(primeiro, “bom”); >0 se s1 > s2
strcpy(segundo, “ dia”); <0 se s2 > s1
strcat(primeiro, segundo);
printf(“%s\n”, primeiro);
}
23
23
Curso de Linguagem C
24
24
Curso de Linguagem C
25
25
Curso de Linguagem C
26
26
Curso de Linguagem C
Exemplo 1 Exemplo 2
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
main() main()
{ char *str; { float *p;
str = (char *) malloc(101 * sizeof(char)); p = (float *) calloc(100, sizeof(float));
if (str) { if (!p) {
strcpy(str, “Isto é um teste”); printf(“alocação fracassada - abortado”);
printf(“%s”, str); exit(1);
free(str); }
} free(p);
} }
27
27
Curso de Linguagem C
Exemplo Observações
main() n Vetores são passados por referência.
{ int x = 3, y = 4;
printf(“%d %d\n”, x, y);
n Quando uma função é feita para
processa(x, &y); receber um parâmetro por referência, o
printf(“%d %d\n”, x, y); parâmetro deve ser declarado como um
} ponteiro na lista de argumentos da
função.
int processa(int a, int *b) n Para conjuntos grandes de dados, a
{ a = 6;
passagem de parâmetros por referência
b = 7;
}
é mais rápida.
28
28
Curso de Linguagem C
main() Exemplo
n A função main também recebe /* Função para imprimir os parâmetros */
argumentos. Eles são os parâmetros da main(int argc, char *argv[ ])
linha de comando passados ao {
programa. Os dois parâmetros são argc int i;
e argv. Veja como eles devem ser for (i = 0; i < argc; i ++)
declarados: printf(“argv[%d]: %s\n”, i, argv[i]);
main(int argc, char *argv[ ]) }
n Argc conterá o número de parâmetros
passados e argv conterá os
parâmetros.
inteiros Protótipos
n Quando o tipo de uma função não é n Como vimos, as funções que não
declarado, por default, ele será int. retornam int, devem ser identificadas
n Se for necessário definir uma função que antes de serem referenciadas, para
retorna valores de outros tipos, o tipo deve isto, deve ser definido um protótipo para
ser especificado.
a função.
n Quando a função não é do tipo int, ela deve
n Forma geral
ser identificada antes de ser chamada da
primeira vez. Assim, o compilador poderá tipo nome_função(tipo_parâmetros);
gerar um código correto para a chamada à
função.
Exemplo Recursividade
float metade(float); n A linguagem C permite que as próprias
main() funções se chamem. A esta
{ característica damos o nome de
printf(“%f\n”, metade(3)); recursividade.
} n Existem muitos problemas que se
float metade(float numero) tornariam extremamente difíceis de
{ serem implementados sem a
return (numero / 2); recursividade.
}
29
29
Curso de Linguagem C
Preprocessador #define
n Antes do programa ser compilado, ele é n O comando define serve para definir um
submetido ao preprocessador. Esta identificador e uma string. O compilador
característica é muito útil. substituirá o identificador pela string
n Todos os comandos do preprocessador toda vez que for encontrado no arquivo-
são iniciados por um sinal #, sendo os fonte. O identificador é chamado de
dois mais usados: nome de macro, e o processo de
• #define substituição é chamado de substituição
• #include de macro.
#define indentificador string
Exemplo #include
#define mensagem “Isto é um teste.\n” n Instrui o compilador a incluir um outro arquivo
#define verdadeiro 1 fonte com aquele que contém o comando
#include. O nome do arquivo a ser incluído deve
#define falso !verdadeiro estar entre aspas ou entre o sinal de maior e
menor.
main() n Se o nome do arquivo for colocado entre aspas,
{ o compilador procurará pelo arquivo na seguinte
seqüência: diretório atual, diretórios configurados
if (verdadeiro) printf(mensagem); no compilador e diretórios padrões. Caso o nome
if (falso) printf(mensagem); do arquivo esteja entre < >, não será procurado
} no diretório atual.
30
30
Curso de Linguagem C
31
31
Curso de Linguagem C
32
32
Curso de Linguagem C
33
33
Curso de Linguagem C
usuários Estruturas
n Em C podem ser criados 5 tipos n Em C, uma estrutura é uma coleção de
diferentes de dados personalizados: variáveis que são referenciadas pelo mesmo
nome.
• estrutura
n É uma forma conveniente de manter juntas
• campo de bit
informações relacionadas.
• união
n Forma geral:
• enumeração struct nome_estrutura {
• typedef tipo1 var1;
n O uso de tipos definido pelo usuário tipo2 var2;
facilita a programação e dá maior poder } var_estrutura;
ao programador.
34
34
Curso de Linguagem C
35
35
Curso de Linguagem C
Exemplo Uniões
struct dispositivo { n Em C, uma união é uma localização de
unsigned ativo : 1; memória que é usada por muitas
unsigned pronto : 1; variáveis diferentes, que podem ser de
unsignet erro : 1; tipos diferentes.
unsigned : 2; n A declaração e o acesso a uma união é
unsigned ultimo_erro : 3; feita de forma semelhante as
} estruturas, só que usando a palavra
reservada union no lugar de struct.
Exemplo Enumerações
union dois_bytes { n Enumeração é um conjunto de
int inteiro; constantes inteiras com nome e e
char caracter[2]; especifica todos os valores legais que
} valor; uma variável daquele tipo pode ter.
main() n Para declarar:
{ enum nome_tipo { lista de constantes }
valor.inteiro = ‘A’ * 256 + ‘B’; nome_var;
printf(“%c %c”, valor.caracter[0], n Todas as constantes receberão valores
valor.caracter[1]); inteiros a começar por zero, a não ser
} que seja especificado o contrário.
Exemplo sizeof
enum tamanhos {pequeno, medio, grande = n Como estamos trabalhando só com
5} tamanho; computadores IBM PC, até agora, não nos
main() preocupamos com os tamanhos das
{ variáveis pois já sabemos seus valores.
tamanho = pequeno; printf(“%d”, tamanho); n C possui o operador sizeof com a finalidade
de garantir a portabilidade dos programas
tamanho = medio; printf(“%d”, tamanho); entre ambientes cujos tamanhos das
tamanho = grande; printf(“%d”, tamanho); variáveis sejam diferentes.
} n sizeof retorna a quantidade de bytes que
uma variável ocupa na memória.
36
36
Curso de Linguagem C
Exemplos typedef
n Alocar memória para 10 floats: n C permite que sejam definidos
float *numeros; explicitamente novos tipos de dados
numeros = (float *) calloc(10, sizeof(float)); usando a palavra reservada typedef.
n Imprimir o tamanho gasto por uma n typedef não cria realmente uma nova
variável inteira: classe de dados, mas sim define um
printf(“%d”, sizeof(int)); novo nome para uma tipo já existente.
n O uso do typedef torna os programas
em C mais legíveis e mais portáteis
pois bastará alterar a definição do
typedef quando trocar de ambiente.
37
37
Curso de Linguagem C
Operador ? Exemplo
n O operador ? pode ser usado para n A seqüência de comandos:
substituir comandos if / else que x = 10;
tenham a forma geral: if (x > 9) y = 100;
if (condição) else y = 200;
expressão1; n pode ser substituída por:
else x = 10;
expressão2; y = x > 9 ? 100 : 200;
n Forma geral:
condição ? expressão1 : expressão 2;
38
38
Curso de Linguagem C
39
39
Curso de Linguagem C
40
40
Curso de Linguagem C
Curso de Linguagem C
245
Exercício (parte 7)
main()
{ pessoa pessoas[5], *velho, *novo;
int i;
for(i = 0; i < 5; i++) le_pessoa(&pessoas[i]);
velho = novo = pessoas;
for(i = 1; i < 5; i++) {
velho = mais_velho(velho, &pessoas[i]);
novo = mais_novo(novo, &pessoas[i]);
}
puts(“O mais novo é\n”); mostra_pessoa(novo);
puts(“O mais velho é\n”); mostra_pessoa(velho);
}
41
41