Intr In trod oduç ução ão à Li Ling ngua uage gem mC P r o f . Y a n d r e M a l d o n a d o 1
Prof. Yandre Maldonado e Gomes da Costa
Intr In trod oduç ução ão à Li Ling ngua uage gem mC P r o f . Y a n d r e M a l d o n a d o 2
• Linguagem C: – Desenvol Desenvolvid vidaa por Dennis Dennis Ritchi Ritchiee nos laborat laboratório órioss da AT&T Bell (EUA) no início dos anos 70; Algol Algol
BCPL BCPL
BB
CC
(1960 (1960 – Europa) Europa) (1960 (19 60 – Eur Europ opa) a)
(Inglaterra) (Inglaterra)
(1970 (1970 – EUA) EUA) (1970 (19 70 – EUA EUA))
(1972 (1972 – EUA) EUA) (1972 (19 72 – EUA EUA))
– C é um umaa das das lingu linguag agen enss de de maio maiorr ace aceita itaçã ção: o: • Port Portab abiilidad idadee (Compiladores (Compiladores disponíveis para p ara PC’s, Mainframes, etc.)
• Muitos Muitos compi compilador ladores es C produzem produzem código código bastan bastante te otimizado; • Reúne Reúne tanto tanto caract caracter eríst ística icass de de alto nível quanto de baixo nível (muitas vezes chamada de nível médio);
– Em 1983 foi criado criado o comitê comitê ANSI-C; ANSI-C;
Intr In trod oduç ução ão à Li Ling ngua uage gem mC P r o f . Y a n d r e M a l d o n a d o 2
• Linguagem C: – Desenvol Desenvolvid vidaa por Dennis Dennis Ritchi Ritchiee nos laborat laboratório órioss da AT&T Bell (EUA) no início dos anos 70; Algol Algol
BCPL BCPL
BB
CC
(1960 (1960 – Europa) Europa) (1960 (19 60 – Eur Europ opa) a)
(Inglaterra) (Inglaterra)
(1970 (1970 – EUA) EUA) (1970 (19 70 – EUA EUA))
(1972 (1972 – EUA) EUA) (1972 (19 72 – EUA EUA))
– C é um umaa das das lingu linguag agen enss de de maio maiorr ace aceita itaçã ção: o: • Port Portab abiilidad idadee (Compiladores (Compiladores disponíveis para p ara PC’s, Mainframes, etc.)
• Muitos Muitos compi compilador ladores es C produzem produzem código código bastan bastante te otimizado; • Reúne Reúne tanto tanto caract caracter eríst ística icass de de alto nível quanto de baixo nível (muitas vezes chamada de nível médio);
– Em 1983 foi criado criado o comitê comitê ANSI-C; ANSI-C;
Intr In trod oduç ução ão à Li Ling ngua uage gem mC P r o f . Y a n d r e M a l d o n a d o 3
• C vs. C++
C C++ • Ling Lingua uage gem m C: C: ling lingua uage gem m de de prog progra rama maçã çãoo impe impera rati tiva va estruturada; • Linguagem C++: • Ling Lingua uage gem m Ori Orien enta tada da a Obj Objeetos; tos; • Forma Formadas das pela pela lingu linguage agem m C adici adiciona onada da de um um conju conjunto nto de de instr instruçõ uções es volt vo ltad ados os à OO; OO;
• Quem Quem sabe sabe pro progr gram amar ar em em C con conhe hece ce a mai maior or par parte te de C++ C++;;
Intr In trod oduç ução ão à Li Ling ngua uage gem mC P r o f . Y a n d r e M a l d o n a d o 4
• Turbo C vs. Tu Turbo Pa Pascal • • • • •
Term Termos os bási básico coss simi simila lare res; s; Algu Alguma mass funç funçõe õess sem semelha elhant ntes es;; C tem tem maior maior cont control rolee diret diretoo sobre sobre o comput computad ador or;; O C possu possuii frac fracaa veri verific ficaç ação ão de erros; erros; A linguagem C é “case sensitive” ; “C lin guagem gem dde pprog ramador” or” “C éé aa lingua linguag ling uagem em de dee um um prog programad rograma ramador dor” ” Herbert Herbert Schildt Schildt
Intr In trod oduç ução ão à Li Ling ngua uage gem mC P r o f . Y a n d r e M a l d o n a d o 5
• A lin linguage uagem m C é uti utiliza lizadda na cri criaçã ação de diversos tipos de aplicação, tais como: • • • • • • •
Sist Sistem emas as Ope Opera racciona ionais is;; Proc Proceessa ssado dore ress de de Tex Texto to;; Pla Planil nilhas has Elet Eletrô rôni niccas; Sist Sistem emas as Gere Gerenc ncia iado dore ress de BD; BD; Proc Proceessa ssado dore ress Gráf Gráfic icos os;; Prob Proble lem mas de Eng Engen enha hari ria; a; Compiladores; “C llingu ingu guag agem em ve rsáti til” l” “C éé uma uma um a lin lin guage agem m versá ver versát sátil il” ”
Introdução à Linguagem C P r o f . Y a n d r e M a l d o n a d o 6
• C: linguagem de nível médio; C
Alto Altonível: nível: -- Estruturada; Estruturada; -- Modular; Modular; -- Portátil; Portátil;
Baixo Baixonível: nível: -- Linguagem Linguagemde demáquina; máquina; -- Bits Bitseebytes; bytes; -- Endereços Endereçosde dememória; memória;
Introdução à Linguagem C P r o f . Y a n d r e M a l d o n a d o 7
• Primeiros passos na Linguagem C: • C é case sensitive: • Pode-se declarar quatro variáveis diferentes com os nomes Soma, soma, SOMA e SoMa, embora não seja recomendável na maioria das vezes; • Todas as palavras reservadas da linguagem C devem ser descritas em letra minúscula, assim temos: • for : palavra reservada que rotula a estrutura de repetição “para”; • if : palavra reservada que rotula a estrutura de seleção “se”; • For : poderia ser um nome de variável; • If : poderia ser um nome de variável;
Introdução à Linguagem C P r o f . Y a n d r e M a l d o n a d o 8
• Estrutura básica de um programa em C: • Todo programa em C possui no mínimo uma função; • A função main() é obrigatória e é a primeira a ser executada. É a função principal, o ponto de partida do programa que será criado; • Por isso, a noção de função e de programa freqüentemente se confundem quando se programa em linguagem C;
Introdução à Linguagem C P r o f . Y a n d r e M a l d o n a d o 9
• Forma geral de um programa em C: inclusão de arquivos de cabeçalho declaração de variáveis globais main () → declaração da função principal (obrigatória). Os parênteses indicam que trata-se de uma função { → toda função começa com o símbolo “{“, equivale ao “início” (begin) de um bloco de instruções declaração de variáveis locais ... comandos; ... } → toda função termina com o símbolo “}”, equivale ao “fim” (end) de um bloco de instruções
•
As instruções descritas no programa terminam sempre com “;”, como na linguagem Pascal.
Introdução à Linguagem C P r o f . Y a n d r e M a l d o n a d o 1 0
• O menor programa possível em C seria: main () { }
• É um programa vazio, que não contém instruções para executar; • Formatação dos programas: é livre, mas convém manter a legibilidade; main main main main()() { { } }
main main()() {{}}
Bons exemplos
( ( ) ) { { } }
main main ()() {}{}
Maus exemplos
Introdução à Linguagem C P r o f . Y a n d r e M a l d o n a d o 1 1
auto do goto short union
• Comentários: podem ser incluídos em qualquer parte do programa. • Se ocupar apenas uma linha, basta que a mesma seja iniciada com “//”; • Se ocupar mais de uma linha, o comentário deve iniciar com o símbolo “/*” e terminar com o símbolo “*/”; • Palavras reservadas da Linguagem C: break double if signed unsigned
case else int sizeof void
char enum long static volatile
const extern main struct while
continue float register switch
default for return typedef
Introdução à Linguagem C P r o f . Y a n d r e M a l d o n a d o 1 2
• Exercícios: • Por que pode-se dizer que C é uma linguagem de nível médio? • Fale sobre características positivas e negativas da linguagem C. • Descreva a relação existente entre a linguagem C e C++.
Introdução à Linguagem C P r o f . Y a n d r e M a l d o n a d o 1 3
• Instruções de programa: • printf() • Função de E/S; • Para utilizá-la deve-se incluir no cabeçalho o arquivo stdio.h (standard i/o); • Forma geral: • printf(string_de_controle, lista_de_argumentos);
• Primeiro programa em C: #include #include #include #include void main void main () () {{ printf printf (“Oi (“Oi mundo.”); mundo.”); getch getch (); (); }}
#include #include #include #include void void main() main() {{ clrscr(); clrscr(); printf("oi printf("oi mundo"); mundo"); getch getch (); (); }}
Introdução à Linguagem C P r o f . Y a n d r e M a l d o n a d o 1 4
• scanf() • Função de E/S; • Para utilizá-la deve-se incluir no cabeçalho o arquivo stdio.h (standard i/o); • Forma geral: • scanf(string_de_controle, lista_de_argumentos);
• Expressão de controle “\n”: pode ser utilizada dentro da string de controle para iniciar uma nova linha; • Códigos de Formatação
Código %c %d %ld %e %f %o %s %u %x
Significado Caractere simples Decimal Long Notação científica Ponto flutuante Octal Cadeia de caracteres Decimal sem sinal Hexadecimal
Introdução à Linguagem C P r o f . Y a n d r e M a l d o n a d o 1 5
• Tipos de variáveis: Tipo
Bits
Escala
void
0
Sem valor
char
8
-128 a 127
int
16
-32768 a 32767
float
32
-3.4E+38 a 3.4E+38
double
64
-1.7E+308 a 1.7E+308
long int
32
-3.4E+38 a 3.4E+38
unsigned char
8
0 a 255
unsigned int
16
0 a 65535
Introdução à Linguagem C P r o f . Y a n d r e M a l d o n a d o 1 6
• Declaração de variáveis: • tipo nome; • Regras gerais: • Declarar antes do uso; • Incluir na declaração o nome e tipo da variável; • Na ocorrência de mais de uma variável de mesmo tipo, podemos declará-las separando seus nomes por vírgulas em uma mesma linha; • Em C, não existe tipo booleano (lógico) e nem string (cadeia); • O valor zero (0) é considerado falso e qualquer outro valor é considerado verdadeiro;
• Exemplos: int K; double valores; float quadro; char caracter;
Introdução à Linguagem C P r o f . Y a n d r e M a l d o n a d o 1 7
• Outras funções de E/S: • putchar() • A função putchar() imprime uma variável do tipo caracter na tela; • Arquivo de inclusão: • Exemplo: #include #include #include #include main() main() { { char letra; char letra; clrscr(); clrscr(); letra='a'; letra='a'; putchar(letra); putchar(letra); getch(); getch(); } }
Introdução à Linguagem C P r o f . Y a n d r e M a l d o n a d o 1 8
• Outras funções de E/S: • getch() • A função getch() lê um caractere do teclado sem ecoá-lo na tela (no turbo C); • Arquivo de inclusão: • Exemplo: #include #include #include #include main() main() { { char letra; char letra; clrscr(); clrscr(); printf ("Digite um caracter: "); printf ("Digite um caracter: "); letra=getch(); letra=getch(); printf ("\nCaractere digitado: %c\n", letra); printf ("\nCaractere digitado: %c\n", letra); getch (); getch (); } }
Introdução à Linguagem C P r o f . Y a n d r e M a l d o n a d o 1 9
• Outras funções de E/S: • getche() • A função getche() lê um caractere do teclado e imprime o mesmo na tela; • Arquivo de inclusão: • Exemplo: #include #include #include #include main() main() { { char letra; char letra; clrscr(); clrscr(); printf ("Digite um caracter: "); printf ("Digite um caracter: "); letra=getche(); letra=getche(); printf ("\nCaractere digitado: %c", letra); printf ("\nCaractere digitado: %c", letra); getch (); getch (); } }
Introdução à Linguagem C P r o f . Y a n d r e M a l d o n a d o 2 0
• Programa para calcular a área de um círculo: #include #include #include #include
main main () () {{ float float R, R, Area; Area; clrscr(); clrscr(); printf printf ("Digite ("Digite oo raio raio da da circunferencia: circunferencia: "); "); scanf scanf ("%f",&R); ("%f",&R); Area Area == 3.14*R*R; 3.14*R*R; printf printf ("A ("A area area do do circulo circulo ee igual igual a: a: %f\n\n",Area); %f\n\n",Area); getch getch (); (); }}
Introdução à Linguagem C P r o f . Y a n d r e M a l d o n a d o 2 1
• Exercícios: • Faça um programa em C para calcular o volume de um cilindro a partir dos valores da altura e do raio do mesmo. • Dica: V=h*π *R2; • Faça um programa em C para calcular as raízes reais de uma equação do segundo grau do tipo ax2+bx+c=0. • Dica: • ∆=b2-4*a*c; • x1=(-b+delta1/2)/(2*a); • x2=(-b-delta1/2)/(2*a);
Introdução à Linguagem C P r o f . Y a n d r e M a l d o n a d o 2 2
#include #include #include #include #include #include
Volume do Cilindro
void void main main () () {{ float float R, R, H, H, V; V; printf printf ("Calculo ("Calculo do do Volume Volume de de um um Cilindro\n\n"); Cilindro\n\n"); printf printf ("Digite ("Digite oo valor valor do do raio raio da da base base do do cilindro: cilindro: "); "); scanf ("%f", &R); scanf ("%f", &R); printf printf ("Digite ("Digite oo valor valor da da altura altura do do cilindro: cilindro: "); "); scanf ("%f", &H); scanf ("%f", &H); V=3.14*pow(R,2)*H; V=3.14*pow(R,2)*H; printf printf ("\n\nO ("\n\nO Volume Volume do do Cilindro Cilindro ‚‚ igual igual a: a: %.2f", %.2f", V); V); printf ("\n\n\nFim da execução!\n"); printf ("\n\n\nFim da execução!\n"); getch(); getch(); }}
Introdução à Linguagem C P r o f . Y a n d r e M a l d o n a d o 2 3
#include #include #include #include #include #include void main void main () () {{ float float a, a, b, b, c, c, delta, delta, x1, x1, x2; x2; printf ("Calculo das ra¡zes printf ("Calculo das ra¡zes reais reais da da equacao equacao do do tipo tipo ax2+bx+c=0\n\n"); ax2+bx+c=0\n\n"); printf printf ("Digite ("Digite oo valor valor do do coeficiente coeficiente a: a: "); "); scanf ("%f", &a); scanf ("%f", &a); printf printf ("Digite ("Digite oo valor valor do do coeficiente coeficiente b: b: "); "); scanf ("%f", &b); scanf ("%f", &b); printf printf ("Digite ("Digite oo valor valor do do coeficiente coeficiente c: c: "); "); scanf ("%f", &c); scanf ("%f", &c); delta=b*b-4*a*c; delta=b*b-4*a*c; x1=(-b+sqrt(delta))/(2*a); x1=(-b+sqrt(delta))/(2*a); x2=(-b-sqrt(delta))/(2*a); x2=(-b-sqrt(delta))/(2*a); printf printf ("\n\nO ("\n\nO valor valor de de x1 x1 ‚: ‚: %f", %f", x1); x1); printf ("\nE o valor de x2 ‚: %f", x2); printf ("\nE o valor de x2 ‚: %f", x2); printf printf ("\n\n\nFim ("\n\n\nFim da da execução!\n\n"); execução!\n\n"); getch (); getch (); }}
Raízes da Equação do 2º grau
Introdução à Linguagem C
Operadores: P r o f . Y a n d r e M a l d o n a d o 2 4
Op.
Significado
Exemplo
=
Atribuição
A=5; caracter=‘B’;
*=
Aritmético de atribuição (multiplicação)
N*=2; equivale a N=N*2;
/=
Aritmético de atribuição (divisão)
N/=4; equivale a N=N/4;
%=
Aritmético de atribuição (módulo)
N%=5; equivale a p igual ao resto da divisão de p por 5;
+=
Aritmético de atribuição (adição)
N+=3; equivale a N=N+3;
-=
Aritmético de atribuição (subtração)
N-=2; equivale a N=N-2;
+
Soma
A=A+1;
-
Subtração
Total=subtotal-desconto;
*
Multiplicação
nota=nota*2;
/
Divisão
Comissão=lucro/4;
%
Módulo (retorna o resto da divisão)
Resto=8%3;
++
Incrementa de um o operando
i++;
--
Decrementade um o operando
j--;
Introdução à Linguagem C P r o f . Y a n d r e M a l d o n a d o 2 5
• Alguns cuidados devem ser tomados quando se utiliza os operadores de incremento: • k=3*n++; é equivalente a k=(3*n); n=n+1; • k=3*++n é equivalente a n=n+1; k=3*(n);
Introdução à Linguagem C P r o f . Y a n d r e M a l d o n a d o 2 6
• Outros operadores: Op. • Relacionais:
• Lógicos:
Significado
>
Maior
>=
Maior igual
<
Menor
<=
Menor igual
==
Igual
!=
Diferente
Op. && || !
Significado Lógico E Lógico OU Lógico de negação
Introdução à Linguagem C P r o f . Y a n d r e M a l d o n a d o 2 7
• Tabela de precedência de operadores: Op. ++ -! * / % + < <= > >=
Tipo Incremento Decremento Lógico Não Multiplicação Divisão Resto Adição Subtração Menor Menor igual Maior Maior igual
Introdução à Linguagem C P r o f . Y a n d r e M a l d o n a d o 2 8
Op.
Tipo
< <= > >= == != && || = *= /= %= += -=
Menor Menor igual Maior Maior igual Igual Diferente E (lógico) OU (lógico) Atribuição Atribuição (mult.) Atribuição (div.) Atribuição (resto) Atribuição (adição) Atribuição (subt.)
Introdução à Linguagem C P r o f . Y a n d r e M a l d o n a d o 2 9
• Comandos de Decisão (Estruturas de Seleção) (expressão de teste) • if-else; (expressão de teste) {{ • switch; instrução instrução 1; 1; instrução 2; instrução 2; Bloco 1 • Comando if-else ... ... instrução n; instrução n; • Estrutura geral ⇒ }} Esta estrutura de seleção é { { instrução instrução 1; 1; capaz de tomar uma decisão instrução 2; instrução 2; ... ... Bloco 2 simples, se a expressão de instrução instrução n; n; }} teste for verdadeira, o bloco de instruções 1 será executado e o 2 ignorado. Se a expressão de teste for falsa acontecerá o contrário; A palavra else pode ser omitida juntamente com o seu bloco de instruções (bloco 2). Neste caso, caso a expressão de teste seja falsa, a execução salta para a próxima instrução seguinte ao bloco 1; if if
else else
Introdução à Linguagem C P r o f . Y a n d r e M a l d o n a d o 3 0
• Exemplo de programa com if-else: dados dois valores inteiros X e Y descubra qual é o maior; #include #include #include #include void void main() main() {{ int int X, X, Y; Y;
printf printf ("Digite ("Digite um um valor valor inteiro inteiro para para X: X: "); "); scanf ("%d", &X); scanf ("%d", &X); printf printf ("Digite ("Digite um um valor valor inteiro inteiro para para Y: Y: "); "); scanf scanf ("%d", ("%d", &Y); &Y); if if (X>Y) (X>Y) {{ printf ("O valor de X é maior que o de Y.\n"); printf ("O valor de X é maior que o de Y.\n"); }} else else {{ printf printf ("O ("O valor valor de de YY éé maior maior que que oo de de X.\n"); X.\n"); } } getch getch (); (); }}
Introdução à Linguagem C P r o f . Y a n d r e M a l d o n a d o 3 1
• O comando switch: • Instrução de seleção múltipla; • Equivalente ao case do Pascal; • Permite a seleção exclusiva de um entre vários blocos de instruções; • Forma geral ⇒
switch switch
{{
(expressão) (expressão)
constante1: constante1: instrução instrução 1; 1; ... ... instrução instrução n; n; break; break; case constante2: case constante2: instrução instrução 1; 1; ... ... instrução instrução n; n; break; break; ... ... case constante n: case constante n: instrução instrução 1; 1; ... ... instrução instrução n; n; break; break; default: default: instrução instrução 1; 1; ... ... instrução instrução n; n; }} case case
Introdução à Linguagem C P r o f . Y a n d r e M a l d o n a d o 3 2
• Observações referentes à sintaxe: • O corpo do switch deve estar entre chaves; • O corpo de cada case pode conter um número qualquer de instruções, sendo que a última deve ser um break. Caso este break não apareça, todas as instruções que estiverem dentro do switch (inclusive dos demais case’s) que aparecerem na seqüência serão executadas; • A instrução break causa a saída imediata do corpo do switch; • Quando a instrução switch é executada, a expressão é avaliada e o controle é transferido diretamente para o grupo de instruções correspondentes ao valor de expressão;
Introdução à Linguagem C P r o f . Y a n d r e M a l d o n a d o 3 3
• Se nenhum case corresponder ao valor da expressão, o grupo de instruções declaradas em default serão executadas. Isto quando o default existir, pois ele é opcional; • O padrão ANSI C determina que um switch possa ter pelo menos 257 comandos case; • O comando switch só pode testar igualdade, enquanto que o if pode avaliar expressões lógicas e relacionais; • Duas constantes case no mesmo switch não podem ter o mesmo valor;
Introdução à Linguagem C P r o f . Y a n d r e M a l d o n a d o 3 4
• Exemplo de programa com o comando switch: #include #include #include #include void main () void main () { { char op; char op; printf ("Escolha uma opcao: \n\n"); printf ("Escolha uma opcao: \n\n"); printf (" 1 - Primeira opcao;\n\n"); printf (" 1 - Primeira opcao;\n\n"); printf (" 2 - Segunda opcao;\n\n"); printf (" 2 - Segunda opcao;\n\n"); printf (" 3 - Terceira opcao;\n\n"); printf (" 3 - Terceira opcao;\n\n"); printf (" 4 - Quarta opcao;\n\n"); printf (" 4 - Quarta opcao;\n\n"); op=getch(); op=getch(); switch (op) switch (op) { { case '1': case '1': printf ("Voce escolheu a primeira opcao!\n\n"); printf ("Voce escolheu a primeira opcao!\n\n"); break; break; case '2': case '2': printf ("Voce escolheu a segunda opcao!\n\n"); printf ("Voce escolheu a segunda opcao!\n\n"); break; break; case '3': case '3': printf ("Voce escolheu a terceira opcao!\n\n"); printf ("Voce escolheu a terceira opcao!\n\n"); break; break; case '4': case '4': printf ("Voce escolheu a quarta opcao!\n\n"); printf ("Voce escolheu a quarta opcao!\n\n"); break; break; default: default: printf ("Voce nao escolheu nenhuma das opcoes oferecidas!\n\n"); printf ("Voce nao escolheu nenhuma das opcoes oferecidas!\n\n"); } } getch (); getch (); } }
Introdução à Linguagem C P r o f . Y a n d r e M a l d o n a d o 3 5
• Exercício: Faça um algoritmo para calcular o valor total a pagar por um consumidor que abasteceu seu carro, sabendo que serão informados o tipo de combustível escolhido (G/A/D) e o número de litros consumido. Considere os seguintes preços por litro de combustível: – Gasolina R$ 1,50; – Álcool R$ 0,90; – Diesel R$ 0,80.
Introdução à Linguagem C P r o f . Y a n d r e M a l d o n a d o 3 6
• Comandos de Iteração (Estruturas de Controle de Repetições)
• Controle de Repetição por Contador: • Comando for;
• Controle de Repetição Lógico: • Iteração Pré-teste (equivalente ao while do Pascal): • Comando while; • Iteração Pós-teste (equivalente ao repeat do Pascal): • Comando do-while;
Introdução à Linguagem C P r o f . Y a n d r e M a l d o n a d o 3 7
• Comando for: • Permite a repetição da execução de um bloco de instruções controlada por um contador; • Forma geral: for (inicialização; condição; incremento) bloco de instruções;
• Onde: • inicialização: é a atribuição do valor inicial ao contador; • condição: estabelece a condição limite de parada para a repetição do laço; • incremento: estabelece o valor segundo o qual o contador deve variar;
Introdução à Linguagem C P r o f . Y a n d r e M a l d o n a d o 3 8
• Exemplo de uso do comando for: um programa que imprime os números de 1 a 20 na tela; #include #include #include #include
void void main main () () {{ int int i; i; for for (i=1;i<=20;i++) (i=1;i<=20;i++) printf printf ("Numero: ("Numero: %d\n",i); %d\n",i); getch getch (); (); }}
Introdução à Linguagem C P r o f . Y a n d r e M a l d o n a d o 3 9
• Exercícios: 1. Durante trinta dias de um determinado mês, foram colhidas as temperaturas médias diárias de uma determinada região em graus celsius. Faça um algoritmo que calcule e informe a temperatura média do mês, e a temperatura mais alta do mês. 2. Faça um algoritmo que calcule o fatorial de um número inteiro fornecido pelo usuário.
Introdução à Linguagem C P r o f . Y a n d r e M a l d o n a d o 4 0
• Comando while: • Permite a repetição da execução de um bloco de instruções controlada por uma condição lógica;
• Forma geral: while (condição) bloco de instruções;
• Onde: • condição: pode ser qualquer expressão (aritmática, lógica ou relacional), e é verdadeira quando diferente de 0 (zero); • bloco de instruções: comando ou bloco de comandos que devem ter a execução realizada enquanto a condição for verdadeira; • A execução do laço while se encerra quando a condição for falsa, neste caso o controle de execução passa para a primeira linha que aparecer após o bloco de instruções;
Introdução à Linguagem C P r o f . Y a n d r e M a l d o n a d o 4 1
• Exemplo de uso do comando while: um programa que imprime na tela os números inteiros digitados pelo usuário, até que este digite um valor negativo; #include #include #include #include void void main main () () {{ int int n=0; n=0; while while (n>=0) (n>=0) {{ printf printf ("Digite ("Digite um um numero: numero: "); "); scanf scanf ("%d",&n); ("%d",&n); }} }}
Introdução à Linguagem C P r o f . Y a n d r e M a l d o n a d o 4 2
• Comando do-while: • Permite a repetição da execução de um bloco de instruções controlada por uma condição lógica. Esta condição é testada após a execução do bloco, isso significa que um laço do-while será executado pelo menos uma vez;
• Forma geral: do { bloco de instruções; } while (condição);
• Onde: • condição: pode ser qualquer expressão (aritmática, lógica ou relacional), e é verdadeira quando diferente de 0 (zero); • bloco de instruções: comando ou bloco de comandos que devem ter a execução realizada enquanto a condição for verdadeira; • A execução do laço do-while se encerra quando a condição for falsa, neste caso o controle de execução passa para a primeira linha que aparecer após o comando do-while;
Introdução à Linguagem C P r o f . Y a n d r e M a l d o n a d o 4 3
• Exemplo de uso do comando do-while: um programa que imprime na tela os números inteiros digitados pelo usuário, até que este digite um valor negativo; #include #include #include #include
void void main main () () {{ int int n; n; do do {{ printf printf ("Digite ("Digite um um numero: numero: "); "); scanf scanf ("%d",&n); ("%d",&n); }} while while (n>=0); (n>=0); }}
Introdução à Linguagem C P r o f . Y a n d r e M a l d o n a d o 4 4
• Exercícios: 1. Faça um algoritmo para calcular a soma entre os números de um conjunto de números inteiros e positivos a ser fornecido pelo usuário utilizando os comandos while e do-while; 2. Faça um algoritmo que permita ao usuário inserir dados para as seguintes perguntas: • Idade (inteiro); • Altura (real); • Sexo (caracter, m ou f); Sabe-se que o número de entrevistados é indefinido, e depois de inseridos os dados o algoritmo deverá informar: • O número de mulheres cuja idade está entre 20 e 35 anos; • O número de homens que tem mais de 1.80m de altura;
Introdução à Linguagem C P r o f . Y a n d r e M a l d o n a d o 4 5
• Agregados de Dados •
•
Homogêneos: conjuntos (ou matrizes) • Coleção de variáveis de mesmo tipo referenciadas por um nome comum; • Cada elemento específico é acessado através de um índice; • Os elementos ocupam posições contíguas de memória; • Equivalente ao array (vetor) em Pascal; Heterogêneos: estruturas • Reúnem uma coleção de variáveis que podem ser referenciadas por um nome; • Maneira conveniente de se ter informações relacionadas agrupadas; • Equivalente ao record (registro) em Pascal;
Introdução à Linguagem C P r o f . Y a n d r e M a l d o n a d o 4 6
• Vetores e Matrizes (Agregados Homogêneos) •
Forma geral: tipo nome_mat [tamanho];
•
Exemplo 1: uma vetor para armazenar até 10 valores inteiros: int vetor_inteiro [10];
•
Exemplo 2: uma vetor para armazenar 20 caracteres (equivalente a string do Pascal): char nome_pessoa [20];
•
Em C, toda vetor tem 0 como o índice do seu primeiro elemento. Portanto, quando você escreve char p[10];
você está declarando uma vetor de caracteres que tem dez elementos, p[0] até p[9].
Introdução à Linguagem C P r o f . Y a n d r e M a l d o n a d o 4 7
•
O seguinte programa carrega uma matriz de inteiros com os números de 0 a 99: #include #include #include #include
void void main main () () {{ int int x[100]; x[100]; int int i; i; for for (i=0;i<100;++i) (i=0;i<100;++i) x[i]=i; x[i]=i; for for (i=0;i<100;++i) (i=0;i<100;++i) printf printf (" (" %d %d ,",x[i]); ,",x[i]); printf printf ("\n\n"); ("\n\n"); getch(); getch(); }}
Introdução à Linguagem C P r o f . Y a n d r e M a l d o n a d o 4 8
• Para a leitura de vetores de caracteres, pode-se utilizar a função gets(), da biblioteca ; •
Forma geral: gets(matriz_a_ser_lida);
•
Exemplo: ler uma cadeia de caracteres a ser digitada pelo usuário na matriz nome descrita a seguir: char nome[25]; ... gets(nome);
•
Para escrever uma vetor de caracteres na tela, pode-se utilizar a função puts(), também presente na biblioteca ; •
Forma geral: puts(matriz_a_ser_escrita);
Introdução à Linguagem C P r o f . Y a n d r e M a l d o n a d o 4 9
•
O seguinte programa lê uma matriz de caracteres (string) digitada pelo usuário e posteriormente imprime na tela: #include #include #include #include void void main main () () {{ char char nome[25]; nome[25]; printf printf ("Digite ("Digite um um nome: nome: "); "); gets(nome); gets(nome); printf printf ("O ("O nome nome que que voce voce digitou digitou e: e: "); "); puts(nome); puts(nome); // printf // ou ou printf ("O ("O nome nome que que voce voce digitou digitou e: e: %s\n\n", %s\n\n", nome); nome); getch (); getch (); }}
Introdução à Linguagem C P r o f . Y a n d r e M a l d o n a d o 5 0
•
Estruturas: • •
A palavra chave struct informa ao compilador que um modelo de estrutura está sendo definido; Forma geral: struct identificador { tipo nome_da_variável; tipo nome_da_variável; tipo nome_da_variável; ... }
•
Exemplo: struct pessoa { char nome[30]; char endereco[40]; char cidade[20]; int idade; };
AAdeclaração declaraçãomostrada mostradaao aolado lado apenas apenasdefine defineaaforma formada da estrutura, estrutura,neste nestecaso casoainda aindanão não foi foicriada criadanenhuma nenhumavariável, variável, portanto portantoainda aindanão nãohouve houvegasto gasto de dememória. memória.
Introdução à Linguagem C P r o f . Y a n d r e M a l d o n a d o 5 1
• Declaração de Matrizes Bidimensionais • Para declarar uma matriz bidimensional de inteiros de tamanho 10x10, pode-se fazer: int matriz [10] [10];
• Para atribuir o valor 30 à célula de índices 5 (na primeira dimensão) e 4 (na segunda dimensão), pode-se fazer: matriz [5][4]=30;
Introdução à Linguagem C P r o f . Y a n d r e M a l d o n a d o 5 2
•
Para se criar uma variável do tipo da estrutura definida anteriormente, você deve declarar: struct pessoa cliente;
•
assim, você estaria criando uma variável chamada cliente do tipo da estrutura pessoa; A quantidade de bytes consumidos por uma variável de um tipo de estrutura equivale a soma dos valores gastos por cada um de seus membros (ou campos); •
•
No caso anterior teríamos: 30+40+20+2=92 bytes;
Os membros individuais de uma estrutura são referenciados através do operador ponto. Para atribuir o valor 45 a idade da variável cliente declarada anteriormente, poderíamos ter: cliente.idade=45;
Introdução à Linguagem C P r o f . Y a n d r e M a l d o n a d o 5 3
• Matrizes de Estruturas: • Pode-se criar matrizes de estruturas; • Para criar uma matriz para armazenar informações referentes a 50 pessoas, de acordo com a estrutura pré-definida anteriormente, poderíamos fazer: struct pessoa clientes[50];
• Neste caso, para atribuirmos o valor 30 ao campo idade do cliente de índice 17, poderíamos fazer: clientes[17].idade=30;