Introdução à Linguagem C Prof. Yandre Maldonado - 1 Prof. Yandre Maldonado e Gomes da Costa Introdução à Linguagem C Prof. Yandre Maldonado - 2 • Linguagem C: – Desenvolvida por Dennis Ritchie nos laboratórios da AT&T Bell (EUA) no início dos anos 70; Algol Algol BCPL BCPL BB CC (1960 (1960––Europa) Europa) (Inglaterra) (Inglaterra) (1970 (1970––EUA) EUA) (1972 (1972––EUA) EUA) – C é uma das linguagens de maior aceitação: • Portabilidade (Compiladores disponíveis para PC’s, Mainframes, etc.) • Muitos compiladores C produzem código bastante otimizado; • Reúne tanto características de alto nível quanto de baixo nível (muitas vezes chamada de nível médio); – Em 1983 foi criado o comitê ANSI-C; Introdução à Linguagem C Prof. Yandre Maldonado - 3 • C vs. C++ C C++ • Linguagem C: linguagem de programação imperativa estruturada; • Linguagem C++: • Linguagem Orientada a Objetos; • Formadas pela linguagem C adicionada de um conjunto de instruções voltados à OO; • Quem sabe programar em C conhece a maior parte de C++; Introdução à Linguagem C Prof. Yandre Maldonado - 4 • Turbo C vs. Turbo Pascal • • • • • Termos básicos similares; Algumas funções semelhantes; C tem maior controle direto sobre o computador; O C possui fraca verificação de erros; A linguagem C é “case sensitive”; “C “C éé aa linguagem linguagem de de um um programador” programador” Herbert Herbert Schildt Schildt Introdução à Linguagem C Prof. Yandre Maldonado - 5 • A linguagem C é utilizada na criação de diversos tipos de aplicação, tais como: • • • • • • • Sistemas Operacionais; Processadores de Texto; Planilhas Eletrônicas; Sistemas Gerenciadores de BD; Processadores Gráficos; Problemas de Engenharia; Compiladores; “C “C éé uma uma linguagem linguagem versátil” versátil” Introdução à Linguagem C Prof. Yandre Maldonado - 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 Linguagem de demáquina; máquina; -- Bits Bitseebytes; bytes; -- Endereços Endereçosde dememória; memória; Introdução à Linguagem C Prof. Yandre Maldonado - 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 Prof. Yandre Maldonado - 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 Prof. Yandre Maldonado - 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 Prof. Yandre Maldonado - 10 • 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 Prof. Yandre Maldonado - 11 • 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: auto break case char const continue default do double else enum extern float for goto if int long main register return short signed sizeof static struct switch typedef union unsigned void volatile while Introdução à Linguagem C Prof. Yandre Maldonado - 12 • 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 Prof. Yandre Maldonado - 13 • 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 <stdio.h> <stdio.h> #include <conio.h> #include <conio.h> void void main main () () {{ printf printf (“Oi (“Oi mundo.”); mundo.”); getch (); getch (); }} #include #include <stdio.h> <stdio.h> #include <conio.h> #include <conio.h> void void main() main() {{ clrscr(); clrscr(); printf("oi printf("oi mundo"); mundo"); getch (); getch (); }} Introdução à Linguagem C Prof. Yandre Maldonado - 14 • 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 Significado %c Caractere simples %d Decimal %ld Long %e Notação científica %f Ponto flutuante %o Octal %s Cadeia de caracteres %u Decimal sem sinal %x Hexadecimal Introdução à Linguagem C Prof. Yandre Maldonado - 15 • 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 Prof. Yandre Maldonado - 16 • 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 Prof. Yandre Maldonado - 17 • Outras funções de E/S: • putchar() • A função putchar() imprime uma variável do tipo caracter na tela; • Arquivo de inclusão: <stdio.h> • Exemplo: #include #include <stdio.h> <stdio.h> #include <conio.h> #include <conio.h> main() main() { { char char letra; letra; clrscr(); clrscr(); letra='a'; letra='a'; putchar(letra); putchar(letra); getch(); getch(); }} Introdução à Linguagem C Prof. Yandre Maldonado - 18 • 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: <conio.h> • Exemplo: #include #include <stdio.h> <stdio.h> #include #include <conio.h> <conio.h> main() main() {{ char char letra; letra; clrscr(); clrscr(); printf printf ("Digite ("Digite um um caracter: caracter: "); "); letra=getch(); letra=getch(); printf ("\nCaractere digitado: %c\n", letra); printf ("\nCaractere digitado: %c\n", letra); getch getch (); (); }} Introdução à Linguagem C Prof. Yandre Maldonado - 19 • 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: <conio.h> • Exemplo: #include #include <stdio.h> <stdio.h> #include #include <conio.h> <conio.h> main() main() {{ char char letra; letra; clrscr(); clrscr(); printf printf ("Digite ("Digite um um caracter: caracter: "); "); letra=getche(); letra=getche(); printf ("\nCaractere digitado: %c", letra); printf ("\nCaractere digitado: %c", letra); getch getch (); (); }} Introdução à Linguagem C Prof. Yandre Maldonado - 20 • Programa para calcular a área de um círculo: #include #include <stdio.h> <stdio.h> #include #include <conio.h> <conio.h> 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 Prof. Yandre Maldonado - 21 • 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 Prof. Yandre Maldonado - 22 #include #include <stdio.h> <stdio.h> #include #include <conio.h> <conio.h> #include #include <math.h> <math.h> 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 scanf ("%f", ("%f", &R); &R); printf printf ("Digite ("Digite oo valor valor da da altura altura do do cilindro: cilindro: "); "); scanf scanf ("%f", ("%f", &H); &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 printf ("\n\n\nFim ("\n\n\nFim da da execução!\n"); execução!\n"); getch(); getch(); }} Introdução à Linguagem C Prof. Yandre Maldonado - 23 #include #include <stdio.h> <stdio.h> #include <conio.h> Raízes da Equação do 2º #include <conio.h> #include #include <math.h> <math.h> void void main 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 scanf ("%f", ("%f", &c); &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 printf ("\nE ("\nE oo valor valor de de x2 x2 ‚: ‚: %f", %f", x2); x2); printf printf ("\n\n\nFim ("\n\n\nFim da da execução!\n\n"); execução!\n\n"); getch (); getch (); }} grau Introdução à Linguagem C Operadores: Prof. Yandre Maldonado - 24 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 Prof. Yandre Maldonado - 25 • 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 Prof. Yandre Maldonado - 26 • 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 Prof. Yandre Maldonado - 27 • 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 Prof. Yandre Maldonado - 28 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 Prof. Yandre Maldonado - 29 • Comandos de Decisão (Estruturas de Seleção) if • if-else; if (expressão (expressão de de teste) teste) {{ • switch; instrução instrução 1; 1; instrução 2; instrução 2; Bloco 1 • Comando if-else ... ... instrução instrução n; n; • Estrutura geral ⇒ }} else else Esta estrutura de seleção é {{ instrução instrução 1; 1; capaz de tomar uma decisão instrução 2; instrução 2; ... ... simples, se a expressão de Bloco 2 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; Introdução à Linguagem C Prof. Yandre Maldonado - 30 • Exemplo de programa com if-else: dados dois valores inteiros X e Y descubra qual é o maior; #include #include <stdio.h> <stdio.h> #include <conio.h> #include <conio.h> void void main() main() {{ int int X, X, Y; Y; printf ("Digite inteiro para para X: X: "); "); printf ("Digite um um valor valor inteiro scanf ("%d", &X); scanf ("%d", &X); printf printf ("Digite ("Digite um um valor valor inteiro inteiro para para Y: Y: "); "); scanf ("%d", &Y); scanf ("%d", &Y); if if (X>Y) (X>Y) {{ printf printf ("O ("O valor valor de de XX éé maior maior que que oo de de Y.\n"); 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 Prof. Yandre Maldonado - 31 • 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) {{ case case constante1: constante1: instrução instrução 1; 1; ... ... instrução instrução n; n; break; break; case case constante2: constante2: instrução instrução 1; 1; ... ... instrução instrução n; n; break; break; ... ... case case constante constante n: n: instrução 1; instrução 1; ... ... instrução instrução n; n; break; break; default: default: instrução instrução 1; 1; ... ... instrução instrução n; n; }} Introdução à Linguagem C Prof. Yandre Maldonado - 32 • 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 Prof. Yandre Maldonado - 33 • 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 Prof. Yandre Maldonado - 34 • Exemplo de programa com o comando switch: #include #include <stdio.h> <stdio.h> #include #include <conio.h> <conio.h> void main void main () () {{ char char op; op; printf uma \n\n"); printf ("Escolha ("Escolha uma opcao: opcao: \n\n"); printf (" 1 Primeira opcao;\n\n"); printf (" 1 Primeira opcao;\n\n"); printf printf (" (" 2 2- Segunda Segunda opcao;\n\n"); 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':("Voce escolheu a primeira opcao!\n\n"); printf printf ("Voce escolheu a primeira opcao!\n\n"); break; break; case '2': case '2':("Voce escolheu a segunda opcao!\n\n"); printf printf break; ("Voce escolheu a segunda opcao!\n\n"); break; case '3': case '3':("Voce escolheu a terceira opcao!\n\n"); printf printf break; ("Voce escolheu a terceira opcao!\n\n"); break; case '4': case '4':("Voce escolheu a quarta opcao!\n\n"); printf 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 Prof. Yandre Maldonado - 35 • 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 Prof. Yandre Maldonado - 36 • 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 Prof. Yandre Maldonado - 37 • 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 Prof. Yandre Maldonado - 38 • Exemplo de uso do comando for: um programa que imprime os números de 1 a 20 na tela; #include #include <stdio.h> <stdio.h> #include #include <conio.h> <conio.h> 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 Prof. Yandre Maldonado - 39 • 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 Prof. Yandre Maldonado - 40 • 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 Prof. Yandre Maldonado - 41 • 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 <stdio.h> <stdio.h> #include #include <conio.h> <conio.h> 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 Prof. Yandre Maldonado - 42 • 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 Prof. Yandre Maldonado - 43 • 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 <stdio.h> <stdio.h> #include #include <conio.h> <conio.h> 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 Prof. Yandre Maldonado - 44 • 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 Prof. Yandre Maldonado - 45 • 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 Prof. Yandre Maldonado - 46 • 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 Prof. Yandre Maldonado - 47 • O seguinte programa carrega uma matriz de inteiros com os números de 0 a 99: #include #include <stdio.h> <stdio.h> #include #include <conio.h> <conio.h> 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 Prof. Yandre Maldonado - 48 • Para a leitura de vetores de caracteres, pode-se utilizar a função gets(), da biblioteca <stdio.h>; • • • 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 <stdio.h>; • Forma geral: puts(matriz_a_ser_escrita); Introdução à Linguagem C Prof. Yandre Maldonado - 49 • O seguinte programa lê uma matriz de caracteres (string) digitada pelo usuário e posteriormente imprime na tela: #include #include <stdio.h> <stdio.h> #include #include <conio.h> <conio.h> 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); // // ou ou printf 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 Prof. Yandre Maldonado - 50 • 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; ... } AAdeclaração Exemplo: declaraçãomostrada mostradaao aolado lado struct pessoa apenas apenasdefine defineaaforma formada da { estrutura, estrutura,neste nestecaso casoainda aindanão não char nome[30]; foi criada nenhuma variável, foi criada nenhuma variável, char endereco[40]; portanto portantoainda aindanão nãohouve houvegasto gasto char cidade[20]; de int idade; dememória. memória. }; Introdução à Linguagem C Prof. Yandre Maldonado - 51 • 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 Prof. Yandre Maldonado - 52 • • 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 Prof. Yandre Maldonado - 53 • 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; Introdução à Linguagem C Prof. Yandre Maldonado - 54 • Exercícios: 1. Faça um algoritmo que permita ao usuário digitar valores inteiros e positivos para uma matriz de tamanho físico 10X10, e que ao final informe qual é a média, e o valor do maior número digitado. 2. Faça um algoritmo que permita armazenar os nomes e as quatro notas bimestrais para um total de 20 alunos. Depois de armazenadas as informações, o algoritmo deverá fazer uma varredura sobre as mesma a fim de identificar qual dos alunos obteve a maior nota no 3º bimestre e informar o seu nome. 3. Faça um algoritmo que armazene as seguintes informações sobre um conjunto de no máximo 30 carros que estão a venda: modelo, ano, preço, e placa. Ao final, o algoritmo deve percorrer as informações a fim de descobrir qual dos carros é o mais barato, e deve informar seu modelo e ano.