You are on page 1of 103

Linguagem C

Disciplina: Introdução a Algoritmos e Programação
Curso: Engenharia de Energia
Prof. Alexandre Gonçalves
Aula 9

Introdução    

A linguagem C foi criada por Dennis Ritchie, em
1972, no centro de Pesquisas da Bell
Laboratories.
Sua primeira utilização importante foi a reescrita
do Sistema Operacional UNIX, que até então era
escrito em Assembly.
Em meados de 1970 o UNIX saiu do laboratório
para ser liberado para as universidades.
Com isso a linguagem se popularizou e no início
de 1980 já existiam várias versões de
compiladores C.

Introdução 

O C é uma linguagem de propósito geral, sendo
adequada à programação estruturada. No
entanto é mais utilizada para escrever aplicativos
básicos, tais como, compiladores, analisadores
léxicos, bancos de dados, editores de texto, etc.. 

A linguagem C pertence a uma família de
linguagens cujas características são:
portabilidade, modularidade, compilação
separada, recursos de baixo nível, geração de
código eficiente, confiabilidade, simplicidade e
facilidade de uso.

. Depois de escrever o módulo fonte em um editor de textos. que termina com o executável criado pelo lincador. Essa ação desencadeia uma seqüência de etapas.Visão geral de um programa C    A geração do programa executável a partir do programa fonte obedece a uma seqüência de operações antes de tornar-se um executável. cada qual traduzindo a codificação do usuário para uma forma de linguagem de nível inferior. é necessário utilizar um compilador C.

Visão geral de um programa C Editor (módulo fonte em C) Pré-processador (novo fonte expandido) Compilador (arquivo objeto) Lincador (executável) .

Estrutura de um programa C  Estrutura #include <nome_da_biblioteca> main() { bloco de comandos. } .h> main() { printf("Meu primeiro programa em C"). }  Exemplo #include <stdio.

 Por exemplo. .Estrutura de um programa C  Bibliotecas são arquivos contendo várias funções que podem ser incorporadas aos programas escritos em C.  A diretiva #include faz com que o texto contido na biblioteca especificada seja inserido no programa.h e conio. as bibliotecas iostream.h permitem a utilização de diversos comandos de entrada e saída.

Por exemplo. duas variáveis definidas como total e Total serão de maneira distinta.Estrutura de um programa C  A linguagem C é sensível a letras maiúsculas e minúsculas. .

 Os tipos mais utilizados são: int (para números inteiros).  A linguagem C não possui tipo de dados boolean (que pode assumir valores verdadeiro ou falso).Variáveis  As variáveis são declaradas após a especificação de seus tipos. . deve-se utilizar vetores de tipo char. Para tal. float (para números reais) e char (para caractere). pois considera verdadeiro qualquer valor diferente de 0 (zero).  A linguagem C não possui um tipo especial para armazenar cadeias de caracteres (strings).

Exemplos  float X. Declara uma variável chamada estado_civil em que pode ser armazenado um caractere. char nome[40]. .Variáveis .  Declara uma variável chamada nome em que podem ser armazenados até 40 caracteres. Z.   Declara uma variável chamada Y e Z em que podem ser armazenados dois número reais.   Declara uma variável chamada X em que pode ser armazenado um número real.   float Y. char estado_civil.

Variáveis - Exemplos 

A linguagem C possui cinco tipos básicos que podem ser
utilizados na declaração de variáveis: int, float, double,
void e char; 

A partir desses tipos básicos, podem ser definidos
outros, por exemplo, unsigned char, unsigned int, long
double (80 bits).

Comando de atribuição 

O comando de atribuição é utilizado para conceder
valores ou operadores a variáveis, sendo representado
pelo caractere “=“ 

Exemplos:    

x = 4;
x = x + 4;
y = 2.5;
estado_civil = ‘S’;

Comando de atribuição 

Em C, os caracteres são representados entre apóstrofos
( ‘ ). As cadeias de caracteres devem ser representadas
por ( “ ); 

Caso seja necessário armazenar uma cadeia de
caracteres dentro de uma variável, deve-se utilizar uma
função para manipulação de caracteres  

strcpy(nome, “Programação”);

Para que seja possível a utilização da biblioteca strcpy
deve-se importar (incluir) a biblioteca string.h;

Comando de entrada  O comando de entrada é utilizado para receber dados digitados pelo usuário. cin >> X.  Um valor digitado pelo usuário será armazenado na variável X gets(nome).  Um ou mais caracteres digitados pelo usuário serão armazenados na variável nome. Os dados recebidos são armazenados em variáveis. .  Os comandos de entrada mais utilizados são cin. gets e scanf.

h. #include <stdio.  Um valor digitado pelo usuário será armazenado na variável X  O comando gets e scanf armazenam toda a cadeia de caractere até que seja pressionada a tecla ENTER.  Esses comando exigem a inclusão da biblioteca stdio. ou seja.Comando de entrada scanf("%d".&X).h> . No caso de cin é possível armazenar os caracteres até que seja encontrado o primeiro espaço em branco.

 Os comandos de saída mais utilizados na linguagem C são cout e printf.  Mostra o valor armazenado na variável X.Comando de saída  O comando de saída é utilizado para mostrar dados na tela ou enviá-los a uma impressora. . cout << “Conteúdo de X = “ << X.  Mostra a mensagem “Conteúdo de X = “ e em seguida o valor armazenado na variável X. cout << X.

2f”. printf(“%f”. . X). X).  Mostra o número real armazenado na variável x. printf(“%5. Y).Comando de saída printf(“%d”.  Mostra o número real armazenado na variável X utilizando cinco casas para a parte inteira e duas casas decimais.  Mostra o número inteiro armazenado na variável Y.  Mostra a mensagem “Conteúdo de Y = “ e em seguida o valor armazenado na variável Y. printf(“Conteúdo de Y = %d”.Y).

Comando de saída  No comando printf é necessário indicar o tipo de variável que será mostrada:     %f para variáveis reais %d para variáveis inteiras %c para variáveis que armazenam um único caractere %s para variáveis que armazenam uma conjunto de caracteres .

 Podem englobar várias linhas /* linha de comentário linha de comentário */ Ou // comentário .Comentários  Comentários são textos que podem ser inseridos em programas com o objetivo de documentá-los.  Não são analisados pelo compilador.

Obtém o resto da divisão de x e y.Operadores e funções predefinidas  Operadores de atribuição e cálculo matemático Op era dor = + * / % Exem Comentário plo x=y x+y x–y x*y x/y x%y O conteúdo da variável x é atribuído à variável x. Obtém o quociente da divisão de x e y. Soma o conteúdo de x e y. . Subtrai o conteúdo de y do conteúdo de x Multiplica o conteúdo de x pelo conteúdo de y.

Operadores e funções predefinidas  Operadores lógicos Operador and or not Na linguagem C && || ! Comentário Conjunção Disjunção Negação .

Operadores e funções predefinidas  Operadores matemáticos de atribuição Operador += -= *= /= %= ++ Exemplo x += y x -= y x *= y x /= y x %= y x++ Comentário Equivale a x = x + y Equivale a x = x .y Equivale a x = x * y Equivale a x = x / y Equivale a x = x % y Equivale a x = x + 1 .

Operadores e funções predefinidas  Operadores matemáticos de atribuição Operador ++ ++ ---- Exemplo y=++x y=x++ x-y=--x y=x-- Comentário Equivale a x=x+1 e depois y = x Equivale a y=x e depois x=x+1 Equivale a x=x-1 Equivale a x=x-1 e depois y=x Equivale a y=x e depois x=x-1 .

Operadores e funções predefinidas  Operadores de comparação Op era dor == != <= Exemp Comentário lo x == y x != y x <= y >= x >= y < > x<y x>y O conteúdo de x é igual ao conteúdo de y O conteúdo de x é diferente do conteúdo de y O conteúdo de x é menor ou igual ao conteúdo de y O conteúdo de x é maior ou igual ao conteúdo de y O conteúdo de x é menor que o conteúdo de y O conteúdo de x é maior que o conteúdo de y .

2) é 3 . Por exemplo. Por exemplo.2) é 4 cos cos(x) Calcula o co-seno de x exp exp(x) Obtém o logaritmo natural e elevado à potência x abs abs(x) Obtém o valor absoluto de x floor floor(x) Arredonda um número real para baixo. ceil(3. floor(3.Operadores e funções predefinidas  Funções matemáticas Funç Exempl Comentário ão o ceil ceil(x) Arredonda um número real para cima.

&y) pow pow(x. a parte inteira do número Calcula a potência de x elevado a y Calcula o seno de x . y) sin sin(x) Comentário Obtém o logaritmo natural de x Obtém o logaritmo de base 10 de x Decompõe o número real armazenado em x em duas partes: y recebe a parte fracionária e z.Operadores e funções predefinidas  Funções matemáticas Funç ão log log1 0 modf Exempl o log(x) log10(x ) z=(mod f(x.

Operadores e funções predefinidas  Funções matemáticas Funç ão sqrt tan M_PI Exempl o sqrt(x) tan(x) M_PI Comentário Calcula a raiz quadrada de x Calcula a tangente de x Retorna o valor de pi .

scanf("%d".&n3). calcule e mostre a soma desses números: #include <stdio.h> int main () { int n1. } . // Para o programa a espera de um ENTER getch().h> #include <conio. scanf("%d".&n2). n2. printf("Informe o terceiro número: ").&n4). // Soma os n£meros digitados soma = n1 + n2 + n3 + n4. // Mostra o resultado da soma printf("O resultado foi %d".&n1). scanf("%d". n3. soma. scanf("%d". printf("Informe o segundo número: ").Exemplo 1  Faça um programa que receba quatro números inteiros. // Recebe os quatro n£meros printf("Informe o primeiro número: "). printf("Informe o quarto número: "). soma). n4.

scanf("%f".&n3). media). calcule e mostre a média aritmética entre elas: #include <stdio.h> #include <conio. n2. } . scanf("%f". // Para o programa a espera de um ENTER getch(). // Calcula a m‚dia media = (n1 + n2 + n3) / 3.Exemplo 2  Faça um programa que receba três notas.&n2). // Recebe as três notas printf("Informe a primeira nota: ").2f". n3.h> main() { float n1. media. printf("Informe a segunda nota: "). scanf("%f". printf("Informe a terceira nota: "). // Mostra o resultado da soma printf("O resultado foi %5.&n1).

imp.h> // Calcula o imposto imp = sal * 7/100. // Calcula o salário a receber main() { salreceber = sal + grat .Exemplo 3  Faça um programa que receba o salário base de um funcionário. float sal. grat. // do salário // Para o programa a espera de um ENTER printf("Informe o salário: "). salreceber). calcule e mostre o salário a receber.h> #include <conio. // Mostra o salário a receber // Mostra mensagem antes da leitura printf("O salário final é de %.imp. .2f". sabendo-se que o funcionário tem gratificação de 5% sobre o salário base e paga imposto de 7% sobre esse salário: #include <stdio. } // Calcula a gratificação grat = sal * 5/100.&sal). getch(). scanf("%f". salreceber.

calcule e mostre:  O valor de cada quilowatt  O valor a ser pago por essa residência  O valor a ser pago com desconto de 15% . Faça um programa que receba o valor do salário mínimo e a quantidade de quilowatts consumida por uma residência.Exemplo 4  Sabe-se que o quilowatt de energia custa um quinto do salário mínimo.

// Calcula o valor de cada Kw vlr_kw = vlr_sal / 5. scanf("%f". // Mostra valor a ser pago printf("\nValor a ser pago %f". printf("Informe o salário mínimo: "). printf("Informe a qtde de Kws consumidos: "). vlr_desc). vlr_kw. vlr_reais). // Calcula valor a ser pago com desconto de 15% vlr_desc = vlr_reais . vlr_reais. // Para o programa a espera de um ENTER getch().Exemplo 4 #include <stdio. // Calcula o valor a ser pago pelo residência vlr_reais = vlr_kw * qtd_kw. } . // Calcula o desconto de 15% desc = vlr_reais * 0. // Mostra o valor do Kw printf("Valor do Kw %f".&qtd_kw). vlr_desc. qtd_kw. scanf("%f".h> main () { float vlr_sal.desc.h> #include <conio.2f".15.&vlr_sal). vlr_kw). desc. //Mostra valor com desconto printf("\nValor a ser pago com desconto %.

Estrutura Condicional .

n1). . O comando SE passa para if.Estrutura condicional simples SE condição ENTÃO comando  if (n1 > n2) printf("\nO maior número é %d".

n1. n1). . } Caso sejam necessários vários comandos em um comando if torna-se obrigatório o uso do caractere “{“ para abrir o bloco de comando e “}” para fechar o bloco de comando. n2).Estrutura condicional simples SE condição ENTÃO INÍCIO comando1 comando2 FIM  if (n1 > n2) { printf("\nNúmeros informados: %d e %d". printf("\nO maior número é %d".

else printf("\nO maior número é %d". Caso a condição inicial não seja satisfeita devese utilizar o comando else para a realização de novos testes. . n1).Estrutura condicional simples SE condição ENTÃO comando1 SENÃO comando2  if (n1 > n2) printf("\nO maior número é %d". n2).

Estrutura condicional composta SE condição ENTÃO INÍCIO comando1 comando2 FIM SENÃO INÍCIO comando3 comando4 FIM  if (var = 1) { printf("\nExemplo com dois comandos"). . printf("\nValor da variável é igual a 1"). } else { printf("\nExemplo com dois comandos"). printf("\nOutro valor"). } else if (var = 2) { printf("\nExemplo com dois comandos"). } Estrutura condicional com múltiplos comandos if. printf("\nValor da variável é igual a 2").

. . expr1n sejam verdadeiras. expr2n sejam verdadeiras o comando2 é executado. . expr12. ... expr22. expr2n comando2 OUTROCASO comando adicional FIM  Caso expr11. ... caso expr21. .. expr22..... o comando1 é executado... expr1n comando1 CASO expr21.Estrutura de seleção múltipla ESCOLHA expressão CASO expr11. Se nenhuma expressão for satisfeita os comandos inclusos em OUTROCASO são executados. expr12.

default: printf("O número informado foi %d". break. case 3 : printf("O número informado foi 3"). Se nenhuma expressão for satisfeita a opção default será executada. case 1 e case 2. No exemplo. num). seriam equivalentes ao comando if com um operador lógico “||” (OR). . break. } Deve utilizar o comando break para finalizar o teste em cada comando case.Estrutura de seleção múltipla  switch(num) { case 1 : case 2 : printf("O número informado foi 1 ou 2").

Operadores lógicos .

calcule e mostre a média ponderada e o conceito que segue abaixo: . a uma avaliação semestral e a um exame final. a um trabalho de laboratório. respectivamente. Faça um programa que receba as três notas.Exemplo 1 A nota final de um estudante é calculada a partir de três notas atribuídas. A média das três notas mencionadas obedece aos pesos abaixo.

media = (nota1*2+nota2*3+nota2*5)/10. else if (media < 7. nota2. media. } . printf("Informe a primeira nota: ").0) printf("\nConceito C").media). printf("\nMédia final: %.h> if (media < 5. else printf("\nConceito A").&nota2). else if (media < 8. } else if (media < 6. scanf("%f". main () { float nota1.&nota1). printf("Informe a terceira nota: ").0) { printf("\nConceito E").&nota3).h> #include <conio. scanf("%f".0) printf("\nConceito D"). printf("\nConceito E"). getch(). nota3.0) printf("\nConceito B"). printf("Informe a segunda nota: ").Exemplo 1 #include <stdio.2f ". scanf("%f".

Introdução a Algoritmos e Programação Curso: Engenharia de Energia Prof. Alexandre Gonçalves Aula 4 .Estruturas de Repetição Disciplina.

Introdução    Uma estrutura de repetição é utilizada quando um trecho do algoritmo ou até mesmo o algoritmo inteiro precisa ser repetido. Existem algumas estruturas para executar tais situações:  Número definido de repetições (estrutura FOR)  Número indefinido de repetições e teste no início (estrutura WHILE)  Número indefinido de repetições e teste no final (estrutura DO-WHILE) . O número de repetições pode ser fixo ou estar atrelado a uma condição.

Número definido de repetições  Estrutura FOR .

Número definido de repetições Estrutura FOR   Essa estrutura de repetição é utilizada quando se sabe o número de vezes que um trecho do algoritmo deve ser repetido. Formato geral da estrutura: for (i = valor inicial. condição. . incremento ou decremento de i) comando.

fazer com que a condição assuma valor falso. em algum momento. quando assumir valor falso. . A segunda parte corresponde a uma expressão relacional que.Número definido de repetições Estrutura FOR    A primeira parte atribui um valor inicial à variável i. que tem como função controlar o número necessário de repetições. determinará o fim da repetição. A terceira parte é responsável por alterar o valor da variável i (incremento ou decremento) com o objetivo de.

à variável “a” é atribuído inicialmente inicialmente o valor 1 e depois vai sendo incrementada em uma unidade. .a=a+2) printf("\no valor de a é: %d". A cada incremento o comando printf se repete.a).a=a+1) printf("\no valor de a é: %d".a++) printf("\no valor de a é: %d". for (int a=1. a<=20. for (int a=1. a<=20.a).Número definido de repetições Estrutura FOR  No exemplo abaixo.a). ou incremento em 2 unidades for (int a=1. a<=20.

for (int a=20.Número definido de repetições Estrutura FOR  Para o decremento na estrutura for deve-se inicializar a variável com um valor maior (primeira parte) e decrementar em n unidades (terceira parte).a--) printf("\no valor de a é: %d".a=a-2) printf("\no valor de a é: %d". for (int a=20. .a). a>=1. a>=1. ou incremento em 2 unidades for (int a=20.a=a-1) printf("\no valor de a é: %d".a). a>=1.a).

Número indefinido de repetições e teste no início  Estrutura WHILE .

.  Baseia-se na análise de uma condição.Estrutura WHILE  Essa estrutura é utilizada quando não se sabe o número de vezes que um trecho do algoritmo deve ser repetido.  A repetição será feita enquanto a condição mostrar-se verdadeira. também possa ser utilizada quando se conhece esse número.Número indefinido de repetições e teste no início .  Embora.

 Enquanto a condição for verdadeira. que fica no início.  Nesses casos.Estrutura WHILE  Existem situações em que o teste condicional da estrutura de repetição. o comando será executado. . resulta em um valor falso na primeira comparação.Número indefinido de repetições e teste no início . while (condição) comando. os comandos de dentro da estrutura de repetição não serão executados.

}  Enquanto a condição for verdadeira. comando2. os comandos que estão dentro das chaves serão executados (comando1.Número indefinido de repetições e teste no início . comando2. comando3.Estrutura WHILE while (condição) { comando1. comando3) .

y = 5. } printf("\nx=%d e y=%d". y). x. y). while (x < y) { printf("\nx=%d e y=%d".Número indefinido de repetições e teste no início . x.Estrutura WHILE Exemplo int x = 1. x=x+2. y=y+1. .

Número indefinido de repetições e teste no final  Estrutura DO-WHILE .

já que a condição de parada se encontra no final. os comandos serão repetidos pelo menos uma vez. . while (condição).Número indefinido de repetições e teste no final .  Os comandos serão repetidos até a condição assumir o valor falso.Estrutura DO-WHILE  A diferença em relação a estrutura WHILE é que em DO-WHILE. do comandos.

y). y = 1. y=y*x.Número indefinido de repetições e teste no final . x. } while (x != 6).Estrutura DO-WHILE  Exemplo int x = 1. do { printf("\nx=%d e y=%d". x=x+1. . printf("\nx=%d e y=%d". y). x.

Exemplo 1  Faça um sistema que receba duas notas de cinco alunos. Uma mensagem de acordo com a tabela abaixo: MÉDIA ARITMÉTICA Até 3 Entre 3 e 7 De 7 para cima    MENSAGEM Reprovado Exame Aprovado O total de alunos aprovados. O total de alunos reprovados. calcule e mostre:   A média aritmética das duas notas de cada aluno. . O total de alunos em exame.

&n1). printf("\nMédia: %. printf("\n\nReprovado"). for (int i=1. #include <stdio.&n2). i<=num_alunos. printf("Informe a nota 2: "). media. media_classe). media = (n1 + n2) / 2. te). getch(). i++) { printf("\n\nInforme a nota 1: "). scanf("%f".media).h> #include <conio.2f". } else { ta = ta + 1. printf("\nTotal em exame: %d". } total_classe = total_classe + media. int num_alunos. printf("\n\nAprovado"). ta. ta). total_classe. printf("\nMédia da classe: %.Exemplo 1 if (media <= 3) { tr = tr + 1. } . media_classe. tr=te=ta=0. media_classe = total_classe / num_alunos. total_classe=media_classe=0. printf("\n\nEm exame"). scanf("%f". te. n2.2f".0. } else if (media <= 7) { te = te + 1. } printf("\nTotal de reprovados: %d". tr). tr. printf("\nTotal de aprovados: %d". num_alunos = 5.h> int main () { float n1.

Vetores .

Definição de Vetor  Vetor é conhecido como variável composta homogênea unidimensional  Que trata de um conjunto de variáveis de mesmo tipo. o que as distingue é um índice que referencia sua localização dentro da estrutura  Os índices utilizados na linguagem C para identificar as posições de um vetor começam sempre em 0 (zero) e vão até o tamanho do vetor menos uma unidade . que possuem o mesmo identificador (nome) e são alocadas seqüencialmente na memória  Como as variáveis têm o mesmo nome.

x A 0 * 1 7 9 .Declaração de Vetor int vet[10]. vet 10 5 0 1 3 2 8 3 1 19 44 21 2 4 5 6 7 8 3 2 $ 3 j 4 char x[5].

 Atribui a letra b à quarta posição do vetor (o vetor começa na posição 0).Atribuindo Valores ao Vetor  As atribuições em vetor exigem que seja informada em qual de suas posições o valor ficará armazenado. . x[3] = ‘b’.  Atribui o valor 1 à primeira posição do vetor (o vetor começa na posição 0). vet[0] = 1.

&vet[i]). } .Preenchendo um Vetor   Preencher um vetor significa atribuir valores a todas as suas posições Deve-se implementar um mecanismo que controle o valor do índice int vet[10]. scanf("%d". i<10.i+1). for (int i=0. i++) { printf("Informe o %d. valor do vetor: ".

Preenchendo um Vetor  No exemplo do slide anterior. a estrutura de repetição for foi utilizada para garantir que a variável i assuma todos os valores possíveis para o índice do vetor (de 0 até 9)  Desse modo a posição do vetor varia de acordo com a variação da repetição iniciando em 0 .

valor do vetor é: %d". vet[i]).Mostrando os Elementos do Vetor  Para mostrar os valores contidos em um vetor também é necessário a utilização de um índice for (int i=0. } . i++) { printf("\nO %d.i+1. i<10.

será utilizada uma posição diferente e.Mostrando os Elementos do Vetor  No exemplo do slide anterior. para cada execução da repetição. a estrutura de repetição for foi utilizada para garantir que a variável i assuma todos os valores possíveis para o índice do vetor (de 0 a 9)  Assim. dessa forma. todos os valores do vetor serão mostrados .

} printf("\n").h> #include <conio. scanf("%d". for (int i=0.Exemplo #include <stdio. i<10.&vet[i]). i<10.h> main () { int vet[10]. } getch().i+1. } . i++) { printf("\nO %d. valor do vetor é: %d". for (int i=0. i++) { printf("Informe o %d. vet[i]).i+1). valor do vetor: ".

Matrizes .

 Como as variáveis têm o mesmo nome.Definição de Matriz  Matriz é uma variável composta homogênea multidimensional. . o que as distingue são índices que referenciam sua localização dentro da estrutura.  Ela é formada por uma sequência de variáveis de mesmo tipo. que possuem o mesmo identificador (mesmo nome) e são alocadas sequencialmente na memória.

Definição de Matriz  Uma variável do tipo matriz precisa de um índice para cada uma de suas dimensões. Assim como vetor o cada índice inicia em 0. .

 [dimensão2] representa o tamanho do 2ª dimensão da matriz.Declaração de Matriz tipo_dos_dados nome_variável [dimensão1][dimensão2][..  [dimensãoN] representa o tamanho da n-ésima dimensão da matriz.][dimensãoN].  [dimensão1] representa o tamanho da 1ª dimensão da matriz.  Onde: tipo_dos_dados é o tipo de dados que serão armazenados na matriz..  .  nome_variável é o nome dado à variável do tipo matriz.

Exemplo de Matriz int X[2][6]. X 0 1 2 0 10 5 3 1 45 22 2 3 8 1 4 5 1 19 5 6 .

Atribuindo valores a uma Matriz  Cada elemento de uma matriz pode armazenar um valor  Para fazer este armazenamento. é necessário executar uma atribuição. informando o número das dimensões X[2][5] = 33 X[1][10] = 15 X[3][5][4] =-11 .

ou seja. ou seja. Para cada valor de i. a variável j varia de 0 a 4. é necessário identificar todas as suas posições. exatamente nas linhas. uma matriz bidimensional com três linhas e cinco colunas é mostrada. .  Isto exige a utilização de um índice para cada dimensão da matriz. Observe que a variável i varia dentro do intervalo de 0 a 2.  No exemplo a seguir. as cinco colunas que cada linha possui.Preenchendo uma Matriz  Para preencher uma matriz.

coluna: ".Preenchendo uma Matriz #include <stdio.&mat[i][j]). for (int i=0. i<3. scanf("%d". j<5.j+1). linha e %d.i+1.h> #include <conio. i++) { for (int j=0.h> main () { int mat[3][5]. } . } } getch(). j++){ printf("Informe um valor para a %d.

Simulação do exemplo

Apresentando a Matriz
#include <stdio.h>
#include <conio.h>
main () {
int mat[3][5];
for (int i=0; i<3; i++) {
for (int j=0; j<5; j++){
printf("Informe um valor para a %d. linha e %d. coluna: ",i+1,j+1);
scanf("%d",&mat[i][j]);
}
}
printf("\n");
for (int i=0; i<3; i++) {
for (int j=0; j<5; j++){
printf("\nO valor da %d. linha e %d. coluna é: %d",i+1,j+1,mat[i][j]);
}
}
getch();
}
mat

Registros

. não limitando os desenvolvedores aos tipos primitivos fornecidos por determinada linguagem de programação. Desse modo.Definição  Registros são estruturas de dados capazes de agregar várias informações. podem representar outros registros. ou ainda.  Dessa maneira novas estruturas podem ser criadas. registros são conhecidos como variáveis compostas heterogêneas.  Cada informação contida em um registro é chamada de campo.  Os campos podem ser de diferentes tipos primitivos.

Declaração  Os registros em C são definidos por meio da utilização da palavra reservada struct: struct nome_do_registro { tipo campo1.. .. tipo campo2. . char nome[5]. }. }. tipo campoN. struct REGISTRO { int num. float saldo.

contém num. nome e saldo. struct REGISTRO { int num. no mesmo bloco de comandos. onde cada posição é do tipo REGISTRO e. é possível fazer a declaração da variável com a definição da estrutura. . } x[5][8].Declaração em C  Em alguns momentos.  Nesse caso. char nome[5]. está sendo declarada uma variável x com 5 linhas e 8 colunas. float saldo. portanto.

codigo = 1. struct produto {int codigo. } produto x. o programa precisa manipular o conteúdo de cada campo individualmente. é preciso informar da variável e o do campo desejado. x. separados por um ponto. char descricao[30]. Para tanto. .descricao.Acesso à Registros Exemplo1 Depois de a variável ser declarada.”Geladeira”). strcpy(x.

} produto x[12]. deve-se fazer as atribuições a seguir: struct produto {int codigo. .descricao.Acesso à Registros Exemplo 2 Para armazenar os valores 5 e fogão na quarta posição de um vetor.codigo = 5. strcpy(x[3]. x[3].”fogão”). char descricao[30].

codigo = 11. strcpy(x[5][2]. . char descricao[30].”televisão”).Acesso à Registros Exemplo 3 Para armazenar os valores 11 e “televisão” na terceira coluna da sexta linha de uma matriz.descricao. deve-se fazer as atribuições a seguir: struct produto {int codigo. } produto x[8][4]. x[5][2].

Sub-rotinas .

no momento da “linkedição”.Definição  Um importante recurso apresentado nas linguagens de programação é a modularização.  A linguagem C possibilita a modularização por meio de funções. . scanf().  Existem também muitas outras funções predefinidas na linguagem C. clrscr().  Um programa escrito em C tem. Estas funções são adicionadas aos programas pela diretiva #include. no mínimo. onde um programa pode ser particionado em sub-rotinas específicas. printf(). por onde a execução começa. por exemplo. uma função chamada main.

 Os parâmetros são representados por uma lista de variáveis colocadas dentro de parênteses.  As funções às vezes precisam receber valores externos.  Caso haja retorno deve-se incluir o comando return. denominado retorno.Definição  Além das funções predefinidas. e também podem devolver algum valor produzido para o ambiente externo. chamados parâmetros. várias outras podem ser criadas conforme a necessidade. . logo após o nome da função.

 Caso não haja retorno. .Definição  O tipo do valor retornado deverá ser exatamente igual ao tipo informado antes do nome da função. deverá ser digitada a palavra void.

} main () { soma().h> #include <conio. scanf("%d".Funções sem passagem de parâmetros e sem retorno  Considerado o tipo mais simples de função. printf("\nResultado: %d". s = a + b. #include <stdio. b. printf("Digite o primeiro número: ").&a).s). s. } .h> void soma() { int a. scanf("%d".&b). getch(). printf("\nDigite o segundo número: ").

media(a. float b) { float s. b). printf("\nDigite o segundo número: "). b.2f". getch().Funções com passagem de parâmetros e sem retorno  Esse tipo de função recebe parâmetros no momento em que é chamada (parâmetros). printf("\nResultado: %.h> #include <conio.h> void media(float a. } main () { float a. scanf("%f". ao final. printf("Digite o primeiro número: "). s = (a + b) / 2.&a). s). scanf("%f". mas que. não retorna valor para quem a chamou.&b). } . #include <stdio.

resposta = multiplicacao(). resposta).h> float multiplicacao() { float multiplicando. produto = multiplicando * multiplicador.Funções sem passagem de parâmetros e com retorno  Esse tipo de função não recebe parâmetros no momento em que é chamada.h> #include <conio. produto. scanf("%f". printf("\nDigite o multiplicador: "). printf("Digite o multiplicando: "). printf("\nResultado: %. multiplicador. scanf("%f". return produto. ao final. retorna valor para quem a chamou. } main () { float resposta.&multiplicador).2f". } . getch(). #include <stdio. mas que.&multiplicando).

float divisor) { float q. n2). return q. resposta. retorna valor para quem a chamou. scanf("%f".2f". q = dividendo / divisor. } .h> #include <conio. resposta = divisao(n1. n2.Funções com passagem de parâmetros e com retorno  Esse tipo de função recebe parâmetros no momento em que é chamada. printf("\nDigite o divisor: "). resposta).&n2). #include <stdio. scanf("%f". printf("\nResultado: %. printf("Digite o dividendo: "). e ao final.h> float divisao(float dividendo. getch().&n1). } main () { float n1.

scanf("%d".&y). scanf("%d". } main () { int x. soma = a + b. printf("\nResultado: %d". res. y). número: "). return soma. b = b * 2. printf("Digite o 1. y.h> int dobro(int a. getch(). printf("\nDigite o 2. número: "). res).&x). a = a * 2.h> #include <conio.Passagem de parâmetros por valor #include <stdio. } . res = dobro(x. int b) { int soma.

Passagem de parâmetro por valor Função dobro Função main x 5 a 5 a=a*2 y 3 b 3 b=y*2 res 16 soma return soma res = dobro(5. 3) 16 .

.Passagem de parâmetros por referência  Passagem de parâmetro por referência significa que os parâmetros passados para a função correspondem a endereços de memória ocupados por variáveis. ou seja. apontamento ao seu endereço. toda vez que for necessário acessar determinado valor. isso será feito por meio de referência.  Dessa maneira.

getch().h> #include <conio. res. res). res = dobro(&x. número: "). scanf("%d". soma = *a + *b.h> int dobro(int *a. *b = (*b) * 2. } main () { int x. printf("\nResultado: %d". número: ").&y). return soma. printf("Digite o 1.Passagem de parâmetros por referência #include <stdio. &y). } . printf("\nDigite o 2. *a = (*a) * 2. int *b) { int soma. y. scanf("%d".&x).

3 300 res = dobro(800. a 300 *b = (*b) * 2. 300) soma res 16 return soma 16 .Passagem de parâmetro por referência 10 Função main Função soma 6 x y 5 800 a 800 *a = (*a) * 2.

 O endereço é obtido utilizando-se o nome do vetor (ou da matriz) sem o índice entre colchetes.  Portanto. .Passagem de parâmetros por referência  A linguagem C não permite que vetores e matrizes sejam passados na íntegra como parâmetros para uma função. deve-se passar apenas o endereço da posição inicial do vetor ou da matriz.

&m[i][j]). v). linha e %d.i+1.i+1. i++) { printf("\nSoma da linha %d: %. i++) { for (int j=0. i<3. j++){ printf("Informe um valor para a %d.j+1). float v[]) { for (int i=0.2f". j<5. coluna: ".Passagem de parâmetros por referência #include <stdio.h> void soma_linhas(float m[][5]. v[3]. j++) { v[i] += m[i][j]. i<3. scanf("%f".h> #include <conio. } } soma_linhas(m. v[i]). for (int j=0. i++) { v[i] = 0. for (int i=0. j<5. } getch(). } . for (int i=0. i<3. } } } main () { float m[3][5].

Utilize uma estrutura composta heterogênea como variável global do sistema. juro e desconto. Cada uma dessas vendas tem as seguintes informações: número da venda. Faça um programa para cadastrar vendas com as seguintes características: . .Exercício 1 Uma empresa armazena informações sobre vendas à clientes. data de pagamento. data de vencimento. código do cliente. valor da venda.Implemente uma sub-rotina (função) para o cadastro da venda. .

. caso a data do pagamento seja maior que a data do vencimento deve-se cobrar 0.Implemente uma sub-rotina para listar todas as vendas.Implemente uma sub-rotina para listar as vendas com seu valor total (valor + juro – desconto).Exercício 1 . Obs: O cálculo de juro e desconto devem ser também sub-rotinas. .Implemente uma sub-rotina para baixa da venda em que. .2% de juro ao dia e caso a data do pagamento seja menor que a data do vencimento oferecer um desconto de 5%.

lista(x). }. getch(). JURO = 0. float valor) { } float calcula_desconto(float valor) { } void baixa(int numero. 8. 13. baixa(1. venda x[]) { } void lista_total(venda x[]) { } main () { venda x[TAM_VETOR].05. int TAM_VETOR = 2. x).002. baixa(2. float desconto. cadastro(x). void cadastro(venda x[]) { } void lista(venda x[]) { } float calcula_juro(int vencto.Exercício 1 #include <stdio. int cliente. x). float valor.h> #include <conio. int pagto. int vencto. lista_total(x). float juro. int pagto. int pagto.h> struct venda { int numero. } . float DESCONTO = 0.