curso de linguagem c

120
1 FATEC de Santo André Tecnologia em Eletrônica Automotiva Linguagens e Técnicas de Programação Notas de Aula Prof.: Rogério Email: [email protected] Página da disciplina: http://sites.google.com/site/fatecprogramacao

Upload: rogerio-cisi

Post on 29-Jun-2015

3.138 views

Category:

Education


6 download

DESCRIPTION

Curso introdutório de Linguagem C, produzido para a disciplina Linguagem e Técnicas de Programação, da Fatec Santo André

TRANSCRIPT

Page 1: Curso de Linguagem C

1

FATEC de Santo André

Tecnologia em Eletrônica Automotiva

Linguagens e Técnicas de Programação

Notas de Aula

Prof.: Rogério

Email: [email protected]

Página da disciplina: http://sites.google.com/site/fatecprogramacao

Page 2: Curso de Linguagem C

2

Objetivo da disciplina

Fornecer noções básicas de lógica, algoritmos e técnicas de programação, utilizando a linguagem de programação C.

Conteúdo Programático 1. Introdução à lógica de programação;2. Algoritmos: pseudocódigo e fluxograma;3. Estruturas de controle sequencial, de seleção e de repetição;4. Técnicas básicas de programação, conceitos e tipos de linguagens de programação;5. Conceitos de programação estruturada e compilação; 6. Visão geral da linguagem C: variáveis, operadores, expressões e principais funções; 7. Compilador e ambiente de desenvolvimento para a linguagem C;8. Vetores;9. Strings;10. Funções;11. Ponteiros;12. Manipulação de arquivos.

Bibliografia utilizada na disciplina

- Linguagem C. Luis Damas; LTC Editora, 10a edição, 2007.- C Completo e Total. Herbert Schildt. Makron Books, 3a edição, 1996.- Primeiro Curso de Programação em C. Edson L. F. Senne; Visual Books. 2a edição, 2006.

Page 3: Curso de Linguagem C

3

Linguagem e Técnicas de Programação

Capítulo 1

Noções básicas de Noções básicas de

algoritmos e programaçãoalgoritmos e programação

Page 4: Curso de Linguagem C

4

AlgoritmoAlgoritmo

• Algoritmo é a descrição de um padrão de comportamento, expresso pela execução de instruções, até que se alcance uma determinada condição.

• Um programa de computador é composto por um ou mais algoritmos.

• Exemplos de algoritmos:

a. Preparar um prato de comida;

b. Controle de injeção de combustível;

c. Compra e venda automática de ações na bolsa de valores.

• Exercício:

- Criar um algoritmo para cadastrar o login e a senha de acesso a um site. A seguir, crie outro algoritmo que libera o acesso ao site, ao ser fornecido o login e a senha corretos – o acesso é bloqueado após três tentativas com erro.

Page 5: Curso de Linguagem C

5

VariVariááveisveis

• Variável: nome de um local de memória onde se pode

colocar qualquer valor, do tipo básico associado à variável.

• Tipos básicos de variável: – char: guarda um caractere.

– int: guarda um número inteiro.

– float e double: guardam um número real.

• Exemplos:

char primeiraLetra;

int anoFabricacao;

float velocidadeCarro;

double velocidadeLuz;

Page 6: Curso de Linguagem C

6

Comandos bComandos báásicossicos

3) Operadores aritméticos:

mais +

menos -

vezes *

dividir /

resto %

decrementa --

incrementa ++

opera e atribui += -= *= /=

2) Operadores lógicos:

e &&

ou ||

não !

4) Operadores relacionais:

é igual? ==

é diferente? !=

é maior? >

é menor? <

é maior ou igual? >=

é menor ou igual? <=

1) Atribuição:

quilometroRodado = 23458;

a = b;

temperaturaAlta = 23.56;

Page 7: Curso de Linguagem C

7

Linguagem e Técnicas de Programação

Capítulo 2

Lógica de Programação Lógica de Programação

Page 8: Curso de Linguagem C

8

Lógica de programação: Lógica de programação:

Bloco de comandos – execução sequencialBloco de comandos – execução sequencial

Pseudocógido Fluxograma

Page 9: Curso de Linguagem C

9

Estrutura de decisãoEstrutura de decisão

Alternativa simples

Alternativa composta

Page 10: Curso de Linguagem C

10

Estruturas de decisãoEstruturas de decisão aninhadas aninhadas

Se a estrutura de decisão tem apenas um comando, o uso de chaves é dispensável; para dois ou mais comandos associados, o uso de

chaves é obrigatório

se (a > b) a = a + 5;senão apenas um comando{ se (a > c) { b = b + 5; a = a + 10; } dois comandos

}

Page 11: Curso de Linguagem C

11

Estrutura de repetição com teste no começoEstrutura de repetição com teste no começo

Page 12: Curso de Linguagem C

12

Estrutura de repetição com teste no finalEstrutura de repetição com teste no final

Page 13: Curso de Linguagem C

13

Comando break (abandone)Comando break (abandone)

Page 14: Curso de Linguagem C

14

Comando continueComando continue

Page 15: Curso de Linguagem C

15

Estrutura de repetição com variável de controleEstrutura de repetição com variável de controle

Page 16: Curso de Linguagem C

16

Pseudocódigo / Fluxograma Pseudocódigo / Fluxograma Algoritmo que encontra o maior e o menor número digitado no teclado. Quando é digitado o número 0, o processamento é interrompido e são escritos na tela os números encontrados.

encontraMaiorMenor(){ int maior, menor, valor;

valor = leTeclado(); maior = valor; menor = valor;

enquanto (valor != 0) { se (valor > maior)

maior = valor; senão { se (valor < menor)

menor = valor; }

valor = leTeclado(); }

imprima(maior, menor); }

Page 17: Curso de Linguagem C

17

ExercíciosExercícios

1) Descrever em pseudocódigo e em fluxograma um

algoritmo que imprime na tela a tabuada de um

número digitado no teclado.

2) Descrever em pseudocódigo e em fluxograma um

algoritmo que imprime o fatorial de um número

digitado no teclado.

3) Descrever em pseudocódigo e em fluxograma um

algoritmo que lê um número inteiro de um teclado,

calcula a somatória de todos os números entre 1 e o

número digitado e escreve na tela o valor obtido.

Page 18: Curso de Linguagem C

18

Linguagem e Técnicas de Programação

Capítulo 3

Introdução à Linguagem Introdução à Linguagem

de Programação Cde Programação C

Page 19: Curso de Linguagem C

19

Linguagens de programaçãoLinguagens de programação

• Linguagem de programação: conjunto finito de símbolos com os quais se escrevem programas de computador.

• Exemplos de linguagem de programação: C, C++, Java, Pascal, Cobol, Basic, PHP, Assembly.

• Dependendo da linguagem de programação, os programas podem ser compilados, interpretados ou montados.

• Linguagens com compilação: C, C++, Pascal, Cobol etc.

• Linguagens com interpretação: Basic, PHP, Perl etc.

• Linguagens com compilação e interpretação: Java.

• Linguagem de montagem ou Assembly é uma notação razoavelmente legível por humanos, correspondente ao código de máquina.

Page 20: Curso de Linguagem C

20

Linguagem de programação com compilaçãoLinguagem de programação com compilação

• Programa descrito em uma linguagem de programação: sequência de comandos compreendida por um ser humano.

• Programa descrito em código de máquina: sequência de 0s e 1s compreendida por uma CPU - Unidade Central de Processamento.

• Compilador: conversor de programas escritos em linguagem de programação para códigos de máquina de uma CPU.

while(i < 10){ printf("%d", i); i++;}

compilador

1001110100110001011001111111010111110001

Page 21: Curso de Linguagem C

21

Comparação entre linguagens de programaçãoComparação entre linguagens de programação

código nível vantagens desvantagens

código de máquina

baixo

acesso a todos os

recursos do hardware

dificuldade de programação

C médio

acesso a todos os

recursos do hardware

erros de programação podem

comprometer o funcionamento do

hardware

Java alto facilidade de programação

baixo aceso aos recursos do hardware

Page 22: Curso de Linguagem C

22

Código-fonte e código-executávelCódigo-fonte e código-executável

• Código-fonte: contém todos os comandos de um programa, expressos em uma linguagem de programação.

• Código-executável: comandos de um programa convertidos para o código de máquina de uma CPU.

• O compilador gera o código-executável, caso não encontre erros no código-fonte.

• No sistema operacional Windows, arquivos com código-executável possuem geralmente (mas não necessariamente), as extensões .exe e .dll.

• No sistema operacional Linux (ou Unix), arquivos com código-executável possuem geralmente (mas não necessariamente), a extensão .sh, entre outras.

Page 23: Curso de Linguagem C

23

Linguagem de programação CLinguagem de programação C

• O C é uma linguagem de propósito geral, pertencendo a uma família de linguagens cujas características são:

- acesso a recursos de baixo nível;

- geração de código eficiente;

- confiabilidade;

- simplicidade;

- muito utilizada para microprocessadores.

Page 24: Curso de Linguagem C

24

Regras geraisRegras gerais

• Os programas, em linguagem C, são compostos por uma ou mais funções.

• As funções podem possuir argumentos e um tipo de retorno.

• Todo programa inicia-se com uma chamada à função main:

main(){

comando1;• comando2;

• ...}

Page 25: Curso de Linguagem C

25

Regras geraisRegras gerais

• A linguagem C faz distinção entre maiúsculas e minúsculas. Exemplo: a variável nomealuno é diferente de nomeAluno.

• Os comandos devem ser finalizados por ponto-e-vírgula.

• O comando inicial das estruturas de decisão e de repetição não são finalizados por ponto-e-vírgula.

Exemplos:

if (a > b && d < e) while( a > 0 ){ {

printf(“mensagem 1”); a = a – 1;printf(“mensagem 2”); printf(“%d”, a);

} }

Sem ponto-e-vírgula! Sem ponto-e-vírgula!

Com ponto-e-vírgula! Com ponto-e-vírgula!

Page 26: Curso de Linguagem C

26

Tipos de VariáveisTipos de Variáveis

• A linguagem C dispõe de quatro tipos básicos de dados. As declarações de variáveis, portanto, podem usar os seguintes tipos:

Número real (ponto flutuante com precisão dupla: 15 dígitos, limitados a: +/-1.7*10+/-308)

8double

Número real (ponto flutuante com precisão simples: 7 dígitos, limitados a: +/-3.4*10+/-38)

4float

Número inteiro (ANSI: de -32768 a 32767

(atualmente: de -2147483648 a 2147483647)

2 (padrão ANSI)

4 (atualmente)

int

Um caractere (ou, reciprocamente, um inteiro de -128 a 127)

1char

ValorTamanho (bytes)Tipo

Page 27: Curso de Linguagem C

27

Especificadores de VariáveisEspecificadores de Variáveis

• Além do tipo da variável, podem ser utilizados alguns “especificadores”:

- unsigned: permite apenas números positivos;

- long: amplia o tamanho de um tipo de variável;

- short: restringe o tamanho de um tipo de variável.

• Exemplos

- long int: variável int com 64 ou 32 bits, dependendo do compilador;

- short int: variável int com 16 ou 8 bits, dependendo do compilador;

- unsigned int: variável int com valores entre 0 e 4 bilhões.

Page 28: Curso de Linguagem C

28

Palavras reservadas da linguagem CPalavras reservadas da linguagem C

Palavras reservadas pelo padrão ANSI

Algumas outras palavras reservadas

asmcdeclinterruptnearfarhuge

Observação importante: palavras reservadas não podem ser usadas como nomes de variáveis.

auto  double  int  struct  break  else  long   switch  case  enum  register  typedef  char  extern  return  union  const  float  short  unsigned  continue  for  signed  void  default  goto  sizeof  volatile  do  if  static  while

Page 29: Curso de Linguagem C

29

Bloco de comandosBloco de comandos

Page 30: Curso de Linguagem C

30

Estrutura de decisãoEstrutura de decisão

Page 31: Curso de Linguagem C

31

Estrutura de repetição com teste no começoEstrutura de repetição com teste no começo

Page 32: Curso de Linguagem C

32

Estrutura de repetição com teste no finalEstrutura de repetição com teste no final

Page 33: Curso de Linguagem C

33

Estrutura de repetição com variável de controleEstrutura de repetição com variável de controle

Page 34: Curso de Linguagem C

34

Comando break (abandone)Comando break (abandone)

Page 35: Curso de Linguagem C

35

Comando continueComando continue

Page 36: Curso de Linguagem C

36

Linguagem e Técnicas de Programação

Capítulo 4

Primeiros programas Primeiros programas

em Linguagem Cem Linguagem C

Page 37: Curso de Linguagem C

37

Função printfFunção printf

Sintaxe: printf ( "expressão de controle", argumentos )

• A função printf permite escrever mensagens no dispositivo padrão de saída (tela).

• A expressão de controle contém caracteres que serão exibidos na tela e pode conter códigos de formatação que indicam o formato em que os argumentos devem ser impressos.

• Cada argumento deve ser separado por vírgula.

• Exemplos:

printf(“\n\nEste eh o numero dois: %d", 2);

printf("Aluno: %s \t Nota: %f", "Pedro", 7.5);

Expressão de controle argumento

Page 38: Curso de Linguagem C

38

Função printfFunção printf

- Formatadores:

%f número em ponto flutuante (float ou double)

%d número em formato decimal

%o número em formato octal

%x número em formato hexadecimal

%c caractere simples

%s cadeia de caracteres

\n nova linha (pula uma linha)

\t tab (insere espaços de uma tabulação)

\" aspas (usado quando se quer imprimir aspas)

\\ barra (usado quando se quer imprimir uma barra)

Page 39: Curso de Linguagem C

39

Função scanfFunção scanf

Sintaxe: scanf("expressão de controle", argumentos)

• A função scanf permite ler dados formatados da entrada padrão (teclado) e gravar no(s) endereço(s) de variável(eis).

• A lista de argumentos contém o(s) endereço(s) de variável(eis).

• O operador de endereço em C é referenciado pelo símbolo &, que retorna o endereço de uma variável ou dispositivo físico.

• Exemplo:

int num;

printf("Digite um numero: ");

scanf("%d", &num);

printf(“Numero digitado: %d", num);

%d é substituído pelo valor da variável num

A variável num recebe o número digitado, utilizando o operador &

Page 40: Curso de Linguagem C

40

Comentários no CódigoComentários no Código

• É sempre aconselhável inserir comentários no código para explicar o funcionamento do programa, tornando-o mais legível.

• Na linguagem C, os comentários são colocados dentro dos marcadores /* e */ em uma ou mais linhas.

• As últimas padronizações da linguagem C permitem também os comentários de uma linha, utilizando o marcador // .

Exemplos:

int a;

// Esta linha é um comentário e não tem influência no código

a = 0;

/* Estas duas linhas também são comentários

e serão descartadas no momento da compilação */

Page 41: Curso de Linguagem C

41

Ambientes de desenvolvimento para Ambientes de desenvolvimento para programação em Linguagem Cprogramação em Linguagem C

● Ambiente de desenvolvimento ou IDE (Integrated Development

Environment):

- edição e depuração (debug) do código-fonte;

- compilador C - geração do arquivo-executável.

● Utilizado para desenvolvimento de programas C e C++;

● Nesta disciplina: Projetos C – Aplicações de Console.

● Algumas IDEs para desenvolvimento de programas em C:

CodeBlocks, DevC++, Eclipse.

Page 42: Curso de Linguagem C

42

Ambiente de desenvolvimentoAmbiente de desenvolvimento

Procedimentos para criar um arquivo-executável:

1) Crie um projeto na aba File > New Project (Console Application – C);

2) Dê um nome ao projeto (que será o nome do arquivo-executável);

3) Salve o projeto em uma pasta específica;

4) Crie um arquivo com a extensão .c que contenha a função main;

5) Escreva o código da função main;

6) Compile o código-fonte;

7) Caso o compilador não encontre erros, será gerado o arquivo-

executável, com a extensão .exe.

Page 43: Curso de Linguagem C

43

Programa-exemploPrograma-exemplo

- Primeiro programa: números na tela

#include <stdio.h>#include <stdlib.h>

/* Primeiro programa de exemplo */

int main() {

int i;for(i = 1; i < 10; i++){

printf ("Numero: %d\t", i);printf ("elevado ao quadrado: %d\n", i*i);

}

return 0;}

Page 44: Curso de Linguagem C

44

Programa-exemploPrograma-exemplo

- Segundo programa: cálculo de fatorial

#include <stdio.h>#include <stdlib.h>

int main(){ int fat = 1; int i, x;

printf("Entre com um numero:"); scanf("%d", &x); for(i = x; i > 1; i--) fat = fat * i;

printf("Fatorial de %d: %d\n\n\n", x, fat);

return 0;}

Page 45: Curso de Linguagem C

45

Programa-exemploPrograma-exemplo

- Terceiro programa: conversão de anos em dias

// Programa-exemplo#include <stdio.h>#include <stdlib.h> int main(){

/* declaracao das variaveis */ int dias;

float anos;  printf ("Entre com o numero de dias: "); // imprime mensagem na tela scanf ("%d", &dias); // entrada de dados  /* Conversao de dias em anos */ anos = dias/365.0;  /* Imprime mensagem

na tela */

printf ("\n\n%d dias equivalem a %f anos.\n", dias, anos);  return 0;}

Page 46: Curso de Linguagem C

46

#include <stdio.h>#include <stdlib.h>

int main() { int i, n; float valor, media, soma = 0;

printf("Quantos numeros serao digitados?\n"); scanf("%d", &n);

for(i = 1; i <= n; i++) { printf("Digite o %do. numero\n", i); scanf("%f", &valor); soma = soma + valor; }

printf("\nSomatoria dos %d valores lidos: %f\n", n, soma); system("pause"); media = soma / n; printf("\nValor medio dos %d valores lidos: %f\n", n, media); return 0;}

Somatória e média

Page 47: Curso de Linguagem C

47

#include <stdio.h>#include <stdlib.h>#include <math.h>

int main(){ char finaliza = 'n'; float num;

while(finaliza != 's') { printf("Digite um numero\n"); scanf("%f", &num); printf("Raiz de %f = %.3f\n", num, sqrt(num)); printf("\nPara encerrar digite s\n");

fflush(stdin); // Limpa buffer do teclado finaliza = getchar(); // Obtém um caracter }

printf("Fim\n"); return 0;}

Estrutura de repetição com finalização

Page 48: Curso de Linguagem C

48

ExercíciosExercícios

1) Crie um fluxograma e um programa em linguagem C, que pergunta ao

usuário qual a sua idade e indica de ele pode ou não votar, ou se seu voto é

opcional.

2) Crie um programa em linguagem C que, ao se digitar um dia de um ano

(entre 1 e 365), indica qual o dia e o mês correspondentes.

3) Pesquise sobre a Tabela ASCII e crie um programa que escreva na tela os

valores desta tabela.

Page 49: Curso de Linguagem C

49

Linguagem e Técnicas de Programação

Capítulo 5

VetoresVetores

Page 50: Curso de Linguagem C

50

VetoresVetores

Vetor é um conjunto de elementos consecutivos, todos do mesmo tipo, que

podem ser acessados individualmente a partir de um único nome.

Vetor unidimensional: tipo nome[tamanho].

Vetor multidimensional: tipo nome[tamanho1][tamanho2].

char cidade[60];

int precoData[31][12];

float temperaturaPosicao[50][50][50];

Nos vetores acima, cidade tem uma dimensão, precoData tem duas

dimensões e temperaturaPosicao tem três dimensões.

Vetores de duas dimensões são também conhecidos como matrizes.

Page 51: Curso de Linguagem C

51

Indexação de vetoresIndexação de vetores

O índice de um vetor começa sempre em 0 e termina em n-1, sendo n o tamanho do vetor:

float notasAlunos[50];

notasAlunos[0] = 7.8;

notasAlunos[1] = 2.5;

notasAlunos[0] = 10.0;

...

notasAlunos[49] = 7.0;

Page 52: Curso de Linguagem C

52

Indexação de vetores multidimensionaisIndexação de vetores multidimensionais

Os índices das dimensões de um vetor começam sempre em 0 e terminam em n-1, m-1 etc, sendo n, m etc o tamanho das dimensões:

int posicao[3][3];

posicao[0][0] = 1;

posicao[0][1] = 2;

posicao[0][2] = 3;

posicao[1][0] = 4;

posicao[1][1] = 5;

posicao[1][2] = 6;

posicao[2][0] = 7;

posicao[2][1] = 8;

posicao[2][2] = 9;

1 2 3

4 5 6

7 8 9

Page 53: Curso de Linguagem C

53

Verificação de limites de tamanhoVerificação de limites de tamanho

A linguagem C não faz verificação de limites de vetores: nada impede que seja

ultrapassado o fim de uma dimensão de um vetor. Porém, escrever em área de

memória não reservada pode “travar” o computador.

Uma atribuição de valores além do limite de um vetor pode “sujar” uma área de

memória reservada para outro programa. Deve-se verificar a atribuição de valores

para um índice maior que o tamanho de uma dimensão do vetor.

Um vetor pode ser inicializado na sua declaração:

int i[5] = {13, -2, 0, -34, 43};

Ex.: o código abaixo será compilado, mas está ERRADO pois invade memória

não reservada. A posição máxima permitida seria precos[4].

float precos[5];

precos[8] = 15.50;

Page 54: Curso de Linguagem C

54

Escrever e ler valores em um vetorEscrever e ler valores em um vetor#include <stdio.h>#include <stdlib.h>

int main(){ float alunos[40][2]; // 40 alunos e 2 provas de cada aluno int i, j; float soma1 = 0, soma2 = 0;

// Zerar a matriz antes de utilizá-la for(i = 0; i < 40; i++) for(j = 0; j < 2; j++) alunos[i][j] = 0; alunos[5][0] = 2.2; alunos[5][1] = 6.8; alunos[12][0] = 7.9; alunos[12][1] = 8.2; for(i = 0; i < 2; i++) soma1 = soma1 + alunos[5][i]; for(i = 0; i < 2; i++) soma2 = soma2 + alunos[12][i]; printf("Media do aluno 5: %f \n", soma1/2); printf("Media do aluno 12: %f \n", soma2/2); return 0;}

Page 55: Curso de Linguagem C

55

Programa-exemploPrograma-exemplo

#include <stdio.h>#include <stdlib.h>

/* Programa que declara um vetor com n=10 números e coloca na i-ésima posição o resultado do fatorial de i*/

const int n = 10;

int main(){ int v[n]; int i;

v[0] = 1;

for(i = 1; i < n; i++) { v[i] = v[i-1] * i; printf("Fatorial de %d: %d\n", i, v[i]); } return 0;}

Page 56: Curso de Linguagem C

56

Programa-exemploPrograma-exemplo#include <stdio.h>#include <stdlib.h>

// Imprime o rendimento de uma aplicação mensal, com a taxa de juros digitadaint main(){

int i;float deposito[12]; // 12 mesesfloat juros, total = 0;

printf("Digite a taxa de juros mensal: "); scanf("%f", &juros);

for(i = 0; i < 12; i++){

printf("Digite o deposito %d: ", i+1); scanf("%f", &deposito[i]); // Recebe os depositos mensais

}

// Calcula os rendimentosfor(i = 0; i < 12; i++){

printf("Deposito do mes %d: %.2f\n", i+1, deposito[i]); total = total + deposito[i] + (total * juros/100.0);printf("Total acumulado: %.2f\n", total);

} return 0;

}

Page 57: Curso de Linguagem C

57

Programa-exemploPrograma-exemplo#include <stdio.h>#include <stdlib.h>

// Cálculo de determinante de matriz 2x2int main(){ int i, j; float det; float m[2][2];

printf("Digite os quatro elementos de uma matriz 2x2\n");

for(i = 0; i < 2; i++) { for(j = 0; j < 2; j++) { printf("Digite um numero\n"); scanf("%f", &m[i][j]); } }

det = m[0][0]*m[1][1] - m[0][1]*m[1][0];

printf("\nDeterminante dessa matriz: %f\n", det);

return 0;}

Page 58: Curso de Linguagem C

58

Programa-exemploPrograma-exemplo#include <stdio.h>#include <stdlib.h>

int main() // Médias de provas de alunos { int i, j, alunos, provas; float soma[40], notas[40][5];

printf("Qual a quantidade de alunos?\n"); scanf("%d", &alunos); printf("Qual a quantidade de provas?\n"); scanf("%d", &provas);

for(i = 0; i < alunos; i++) { soma[i] = 0; for(j = 0; j < provas; j++) { printf("Digite a nota da prova %d do aluno %d\n", j+1, i+1); scanf("%f", &notas[i][j]); soma[i] += notas[i][j]; } } for(i = 0; i < alunos; i++) printf("Media do aluno %d: %.1f\n", i, soma[i] / provas);

return 0;}

Page 59: Curso de Linguagem C

59

ExercíciosExercícios

1) Crie um programa que calcula a média das notas de 10 alunos digitadas

no teclado, utilizando um vetor que armazena, em cada uma de suas

posições, as notas individuais.

2) Crie um programa que coloque números digitados no teclado em uma

matriz de 4 linhas e 4 colunas, e apresente a somatória dos valores

armazenados em cada linha e em cada coluna.

3) Crie um programa que calcule o determinante de uma matriz 3x3, cujos

elementos são inseridos via teclado.

Page 60: Curso de Linguagem C

60

Linguagem e Técnicas de Programação

Capítulo 6

Strings Strings

Page 61: Curso de Linguagem C

61

String – vetor de caracteresString – vetor de caracteres

Strings são vetores constituídos por caracteres:

char nomeEscola[18];

strcpy(nomeEscola, "FATEC SANTO ANDRE");

- A função strcpy atribui um conteúdo a string nomeEscola, que pode armazenar até 17 caracteres.

- Strings são SEMPRE terminadas com o caracter nulo: \0. Portanto, devem ter uma posição a mais que a quantidade de caracteres armazenados:

- Uma string pode ser inicializada em sua declaração:

char produto[15] = "Computador";

Page 62: Curso de Linguagem C

62

Funções de manipulação de stringsFunções de manipulação de strings

gets(str): lê uma sequência de caracteres do teclado e grava na string str.

puts(str): escreve na tela a sequência de caracteres armazenados em str.

scanf(“%s”, &str): lê uma sequência de caracteres do teclado e grava na string str.

printf(“%s”, str): escreve na tela a sequência de caracteres armazenados em str.

strcpy(strDest,strOrig): copia a string strOrig para a string strDest.

strcat(str1, str2): anexa a string str2 no final da string str1.

int atoi(str): converte uma string em um número inteiro.

float atof(str): converte uma string em um número real.

int strlen(str): retorna o tamanho (núm. de caracteres) da string str.

int strcmp(str1, str2): compara a string str1 com a string str2. Se forem iguais, retorna 0, se str1 for “posterior” que str2, retorna um número positivo;

caso contrário, retorna um número negativo.

Page 63: Curso de Linguagem C

63

Lendo uma string de um tecladoLendo uma string de um teclado

A melhor maneira de ler uma string de um teclado é com a função gets. Outra maneira é com a função scanf, se não houver espaços em branco:

#include <stdio.h>#include <stdlib.h>#include <string.h>

int main(){ char s1[80], s2[80]; printf("Informe duas strings:\n");

// Pode-se obter uma String com gets ou com scanf (sem utilizar &) gets( s1 );

scanf("%s", s2);

printf("\nStrings digitadas: %s, %s\n", s1, s2); printf("Quantidade de caracteres: %d, %d\n", strlen(s1), strlen(s2));

return 0;}

Page 64: Curso de Linguagem C

64

Exemplos de manipulação de stringsExemplos de manipulação de strings

char teste1[100], teste2[40];

strcpy(teste1, "Informatica"); // copia/atribuicao de valor

strcpy(teste2, teste1); // copia/atribuicao de valor

// tamanho de string

printf("Tamanho da string: %d", strlen(teste1));

int numInteiro;

char numString[4] = "1580";

numInteiro = atoi(numString); // conversao de string em inteiro

strcpy(senha1, "fatec");

strcpy(senha2, "etec");

if( strcmp(senha1, senha2) == 0 ) // 2 strings iguais

printf("Senha valida");

Page 65: Curso de Linguagem C

65

Vetor de StringsVetor de Strings

- Vetores de strings são comuns em C. Eles são declarados e inicializados

como qualquer vetor bidimensional, mas a maneira de utilizá-los difere um

pouco. Por exemplo, o que faz a declaração abaixo?

char lista_nomes[10][40];

Este comando especifica um vetor chamado lista_nomes, que contém até 10

strings, com até 39 caracteres cada (descartando o \0 final). Para acessar uma

das strings deste vetor, especifique apenas o primeiro índice. Por exemplo,

para escrever na tela o quinto nome armazenado, utilize o seguinte comando:

printf (“%s”, lista_nomes[4]);

Page 66: Curso de Linguagem C

66

Programa-exemploPrograma-exemplo#include <stdio.h>#include <stdlib.h>#include <string.h>

int main() // Substitui espaços por mudança de linha{ int pos = 0; char caracter; char texto[500];

puts("Digite um texto grande\n"); gets(texto);

do { caracter = texto[pos]; if (caracter == ' ') texto[pos] = '\n';

pos++; } while(caracter != '\0');

puts(texto); return 0;}

Page 67: Curso de Linguagem C

67

Programa-exemploPrograma-exemplo#include <stdio.h>#include <stdlib.h>#include <string.h>

/*Este programa inverte a ordem de todos os caracteres de um texto

*/

int main(){ int i, tamanho; char texto[500];

puts("Digite um texto grande\n"); gets(texto);

tamanho = strlen(texto);

for(i = tamanho - 1; i >= 0; i--) putchar(texto[i]); // Escreve o caracter de índice i da string texto

return 0;}

Page 68: Curso de Linguagem C

68

Programa-exemploPrograma-exemplo#include <stdio.h>#include <stdlib.h>#include <string.h>

/*Este programa inverte a ordem de todas as palavras de um texto

*/

int main(){ int i, j, word = 0, pos = 0, ini = 0; char caracter; char texto[500]; char palavras[100][20];

puts("Digite um texto grande\n"); gets(texto);

// Continua na página seguinte

Page 69: Curso de Linguagem C

69

Programa-exemploPrograma-exemplo// Continuação da página anterior

do { caracter = texto[pos]; if (caracter == ' ' || caracter == '\0') { j = 0; for(i = ini; i < pos; i++) { palavras[word][j] = texto[i]; j++; }

palavras[word][j] = '\0'; ini = pos + 1; word++; } pos++; } while(caracter != '\0');

for(i = word - 1; i >= 0; i--) printf("%s ", palavras[i]);

return 0;}

Page 70: Curso de Linguagem C

70

ExercíciosExercícios

1) Faça um programa que lê do teclado duas strings, concatena essas strings

e informa o tamanho da string final.

2) Faça um programa que lê do teclado duas strings, compara essas strings e

informa qual a ordem alfabética entre elas.

3) Faça um programa que lê três nomes digitados do teclado, ordena

alfabeticamente esses nomes e apresenta a lista de nomes ordenada.

4) Qual o valor da variável x abaixo?

strcpy(s1, “1000”); strcpy(s2, “99”); x = strcmp(s1, s2);

5) Implementar o algoritmo de cadastro/acesso a um site, descrito na página 4.

Page 71: Curso de Linguagem C

71

Linguagem e Técnicas de Programação

Capítulo 7

Estrutura em C: structEstrutura em C: struct

Conversão de variáveis: castConversão de variáveis: cast

Funções matemáticasFunções matemáticas

Comando de decião múltipla: switch-caseComando de decião múltipla: switch-case

Page 72: Curso de Linguagem C

72

Struct – agrupamento de variáveisStruct – agrupamento de variáveis

Uma struct é um agrupamento de variáveis relacionadas, formando um novo tipo de dado.

#include <stdio.h>

struct dadosEscola{ int num; char nom[20]; char rua[50]; char cid[80]; char uf[3];};

int main(){ struct dadosEscola esc; esc.num = 152; strcpy(esc.nom, "Colegio Brasilia"); strcpy(esc.rua, "Rua Atibaia"); strcpy(esc.cid, "Recife"); strcpy(esc.uf, "PE"); printf("%s: %s n. %d, %s - %s \n", esc.nom, esc.rua, esc.num, esc.cid, esc.uf); return 0;}

Page 73: Curso de Linguagem C

73

Conversão de variáveis: castConversão de variáveis: cast

A linguagem C permite converter um tipo de variável em outro (cast), utilizando

parênteses a frente da variável a ter seu valor convertido. Exemplo: int main(){ int a;

float b;double c;

b = 25.76;

// Conversão de float para inta = (int)b; // Neste cast, a variavel a recebe o valor 25

printf("a: %d, b: %f \n", a, b);

a = 40;

// Conversão de int para doublec = (double)a; // Neste cast, a variavel c recebe o valor 40.000000

printf("a: %d, c: %f \n", a, c);

return 0;}

Page 74: Curso de Linguagem C

74

Conversão de variáveis com stringsConversão de variáveis com strings

Cabe observar que o cast não é possível com variáveis string. Neste caso, é

necessário utilizar as funções sprintf, atoi e atof. Exemplo: int main(){ int a;

float b;char d[20] = "30.2";

// Conversão de string para float b = atof(d); // Neste caso, a variavel b recebe o valor 30.200000 printf("b: %f, d: %s \n", b, d);

a = 49;

// Conversão de int para string sprintf(d, "%d.55", a); // Neste caso, d recebe o valor "49.55" printf("a: %d, d: %s \n", a, d);

return 0;}

Page 75: Curso de Linguagem C

75

Funções matemáticasFunções matemáticas

A Linguagem C oferece várias funções matemáticas. Para utilizá-las, deve-se

declarar a biblioteca math.h.

- Exemplos de funções:

#include <math.h>

x = sin(y); // x recebe o seno de y

x = cos(y); // x recebe o cosseno de y

x = sqrt (y); // x recebe a raiz quadrada de y

w = pow(x, y); // w recebe x elevado a y

y = exp(x); // y recebe e elevado a x

y = log(x); // y recebe o logaritmo de x na base e. Não use com x negativo.

y = log10(x); // y recebe o logaritmo de x na base 10. Não use com x negativo.

Page 76: Curso de Linguagem C

76

Comando switch-caseComando switch-case

O comando de decisão switch-case é utilizado quando há um grande número

de condições a serem testadas, com respectivas decisões a serem tomadas.

int dia;

printf("Digite o numero de um dia da semana"); scanf("%d", &dia);

switch(dia) { case 1: printf("domingo\n"); break; case 2: printf("segunda\n"); break;

// outros cases

case 7: printf("sabado\n"); break;

default: printf("dia invalido\n"); }

Page 77: Curso de Linguagem C

77

Linguagem e Técnicas de Programação

Capítulo 8

Manipulação de arquivosManipulação de arquivos

Page 78: Curso de Linguagem C

78

Manipulação de arquivosManipulação de arquivos

A manipulação de arquivos em C é feita a partir da declaração de um

ponteiro FILE, que aponta para um arquivo. Exemplo:

FILE *arq; arq = fopen("dados.txt", "w");

Caso o arquivo não esteja na mesma pasta que o programa executável, é

preciso informar a pasta que o contém:

arq = fopen("c:\\empresa\\dados.txt", "r");

Se o arquivo não for encontrado, o ponteiro assume o valor NULL: if( arq == NULL ) { printf("Arquivo nao encontrado"); return 1; }

Page 79: Curso de Linguagem C

79

Modos de abertura de arquivosModos de abertura de arquivos

Arquivos podem ser abertos de vários modos, sendo os mais comuns:

"r" – arquivo-texto para leitura de dados;

"w" – arquivo-texto para gravação de dados – se o arquivo já existir,

sobrescreve os dados existentes;

"r+" ou “w+" – arquivo-texto para leitura e escrita de dados;

"a" – arquivo-texto para anexação de dados – se o arquivo já existir,

escreve após os dados existentes;

"rb" – arquivo-binário para leitura de dados;

"wb" – arquivo-binário para gravação de dados – se o arquivo já existir,

sobrescreve os dados existentes;

"ab" – arquivo-binário para anexação de dados – se o arquivo já existir,

escreve após os dados existentes;

Page 80: Curso de Linguagem C

80

Funções utilizadas para manipulação de arquivoFunções utilizadas para manipulação de arquivo

arq = fopen(“arquivo.txt”, “w”);

Abre um arquivo para leitura e/ou escrita, retornando um ponteiro para este arquivo, ou NULL em caso de falha.

fclose(arq);

Fecha um arquivo, retornando 0 (sucesso) ou a constante EOF (erro).

x = fgetc(arq);

Lê um caractere de um arquivo, retornando-o.

c = fputc(‘A’, FILE *arq)

Escreve o caractere ‘A’ no arquivo apontado pelo ponteiro arq. Em caso de sucesso, retorna o caracter; em caso de erro, retorna a constante EOF.

Page 81: Curso de Linguagem C

81

Funções utilizadas para manipulação de arquivoFunções utilizadas para manipulação de arquivo

fgets(s, n, arq)

Lê uma linha, com até n-1 caracteres, de um arquivo, colocando-a em s. A string lida também é retornada pela função.

fputs(s, arq)

Escreve a string s em uma linha de um arquivo. A função retorna um valor não-negativo, em caso de sucesso, ou EOF, em caso de falha.

fscanf(arq, “%d”, &x)

Lê uma linha formatada de um arquivo.

fprintf(arq, “escreve %d”, x)

Escreve uma linha formatada em um arquivo.

Page 82: Curso de Linguagem C

82

Funções utilizadas para manipulação de arquivoFunções utilizadas para manipulação de arquivo

x = feof(arq)

Retorna verdadeiro (1) quando a leitura de um arquivo chegou ao fim, ou falso (0), quando ainda há linhas a serem lidas.

fread(ptr, size, n, arq)

Lê um conjunto de elementos de um arquivo, colocando-os em uma variável apontada por ptr. Cada elemento deve possuir um número de bytes indicados por size, sendo lidos n elementos do arquivo.

fwrite(ptr, size, n, arq)

Escreve um conjunto de elementos (apontados por ptr) em um arquivo. Cada elemento deve possuir um número de bytes indicados por size, sendo escritos n elementos no arquivo.

Page 83: Curso de Linguagem C

83

Exemplo de leitura em arquivoExemplo de leitura em arquivo#include <stdio.h>#include <stdlib.h>

int main(){ float valor, total = 0; int cont = 0; FILE *arq; arq = fopen("precos.txt", "r"); if(arq == NULL) { printf("Arquivo não encontrado\n"); return 1; } while(!feof(arq)) // Le as linhas do arquivo até o final { fscanf(arq, "%f", &valor); total = total + valor; cont++; } printf("O valor medio do produto e': %f \n", total / cont); fclose(arq); return 0;}

Page 84: Curso de Linguagem C

84

Exemplo de escrita em arquivoExemplo de escrita em arquivo

#include <stdio.h>

int main(){ FILE *arquivo; arquivo = fopen("c:\\temp\\arquivo.txt", “w"); if( arquivo == NULL ) { printf("Nao foi possivel escrever no arquivo");

return 1; } fputs("Escrevendo em um arquivo!!!\n", arquivo); fprintf(arquivo, "%f\n", 34.6); printf("Verificar o arquivo c:\\temp\\arquivo.txt \n");

fclose(arquivo); return 0;}

Page 85: Curso de Linguagem C

85

#include <stdio.h>

int main(){ float nota, total = 0; int cont = 0; FILE *arq = fopen("notas.txt", "r");

if(arq == NULL) { printf("Arquivo não encontrado\n"); return 1; }

fscanf(arq, "%f", &nota);

while(nota > 0) {total = total + nota;fscanf(arq, "%f", &nota);cont++;

}

if(cont > 0)printf("Media = %.1f", total/cont);

fclose(arq); return 0;}

Programa-exemploPrograma-exemplo

Cálculo de média de notas

O programa abre (fopen) o arquivo notas.txt para

leitura ("r"). Lê linha a linha (fscanf), salvando o

valor de cada linha na variável nota. Quando o

último valor lido for igual ou menor que 0, a

estrutura de repetição while é interrompida. A

seguir, é impresso na tela, pela função printf, o

valor da média das notas (total/cont). A média

só é impressa na tela caso o arquivo tenha ao

menos uma linha.

Page 86: Curso de Linguagem C

86

Linguagem e Técnicas de Programação

Capítulo 9

Funções e Escopo de VariáveisFunções e Escopo de Variáveis

Page 87: Curso de Linguagem C

87

Funções na linguagem CFunções na linguagem C

• Um programa em C é composto por uma ou mais funções.

• A função main() é obrigatória em todos os programas.

• Funções são utilizadas por dois motivos principais:

➢ reaproveitamento de código, que pode ser utilizado em vários pontos do programa;

➢ divisão em blocos funcionais, facilitando seu entendimento.

Exemplo:

tipoRetorno nomeFunção (tipo arg1, tipo arg2,...,tipo argN){

comandos da função;}

Page 88: Curso de Linguagem C

88

Funções e variáveis só podem ser utilizadas em um programa em C

depois de serem declaradas

void atraso(){ int i, j; for(i = 0; i < 10000; i++) for(j = 0; j < 10000; j++);}

int potencia(int a, int b){ int i, ret = 1; for(i = 0; i < b; i++) ret = ret * a; return ret;}

int main(){ int resultado, x, y;

resultado = potencia(5, 6); printf("5 elevado a 6 vale: %d\n", resultado); atraso(); printf("Digite dois numeros\n"); scanf("%d", &x); scanf("%d", &y); printf("%d elevado a %d vale: %d\n", x, y, potencia(x, y)); atraso(); printf("%d elevado a %d vale: %d\n", y, x, potencia(y, x));

return 0;}

Page 89: Curso de Linguagem C

89

Protótipos de funçõesProtótipos de funções

O código da função deve ser declarado no arquivo onde a função é utilizada,

e posicionada acima do trecho de código que faz referência à função, ou

então, é preciso declarar seu protótipo. Exemplo:

float reajustaPreco(float taxa, float preco); // prototipo

//Esta função não retorna nunhum valor, por isso é declarada com voidvoid calcula(){

float novoPreco;novoPreco = reajustaPreco(1.5, 200.0);

}

float reajustaPreco(float taxa, float preco) // codigo da funcao{

preco = preco * taxa;return preco;

}

Page 90: Curso de Linguagem C

90

Arquivos de cabeçalho - BibliotecasArquivos de cabeçalho - Bibliotecas

Protótipos de funções, variáveis e constantes podem ser declarados em

arquivos de cabeçalho, com extensão .h.

Os arquivos de cabeçalho são declarados no início de um arquivo-fonte,

indicando para o linkeditor procurar, em algum arquivo-objeto, o código das

funções utilizadas.

Exemplo: o protótipo da função reajusta() está declarado no arquivo de

cabeçalho economia.h e seu código está em algum outro arquivo-fonte, por

exemplo, no arquivo economia.c:

#include "economia.h"

void reajusta(){

float novoPreco;novoPreco = reajustaPreco(1.5, 200.0); ...

}

Page 91: Curso de Linguagem C

91

Variáveis locais e globaisVariáveis locais e globais

• Variáveis locais: são definidas dentro de uma função, sendo válidas somente

dentro da função.

• Variáveis globais: definidas fora das funções, com validade para todas as

funções abaixo do local de definição dessa variável.

• O escopo de uma variável refere-se ao local onde esta variável é definida e

tem validade.

int a; // variável global

void funcaoExemplo(char c){

double b; // variável localint a; // variável local

}

Page 92: Curso de Linguagem C

92

Variáveis locais e globaisVariáveis locais e globais

• Alterações em variáveis locais não são visualizadas fora da função onde a

variável está declarada. Exemplo:

int a, b; // variáveis globais

void funcao1(){

int a; // variável locala = 2;b = 4;

}

int main(){

a = 3;b = 3;funcao1();printf("a = %d e b = %d", a, b); // saída: a = 3 e b = 4

return 0;}

Page 93: Curso de Linguagem C

93

ExercíciosExercícios

1) Faça um programa com várias funções, cada uma escrevendo uma palavra da

seguinte frase:

“Fatec Santo André – Eletrônica Automotiva”

1) Faça um programa que leia valores digitados, interrompa quando for digitado a letra

F, e forneça a somatória dos números digitados. Utilize uma função para a leitura do

teclado e outra função para o cálculo da somatória.

2) Crie uma função que calcule o volume de um paralelepípedo, de acordo com suas

dimensões, conforme utilização na função main:

void main(){

doble valor;valor = volume(4.567, 3.5645, 5.666);printf(“Volume: %f\n”, valor);

}

Page 94: Curso de Linguagem C

94

Linguagem e Técnicas de Programação

Capítulo 10

Ponteiros na linguagem C Ponteiros na linguagem C

Page 95: Curso de Linguagem C

95

PonteirosPonteiros

Um ponteiro é uma variável que guarda um endereço de um outro objeto, por

exemplo, o endereço de uma variável ou de um dispositivo físico, como um

display, teclado ou arquivo.

Ponteiro de variáveis: o tipo de um ponteiro deve ser igual ao tipo da variável

que ele armazena o endereço. Exemplos:

char *nome; // ponteiro para variavel do tipo char

int *temp; // ponteiro para variavel do tipo intfloat *ponteiroCalc; // ponteiro para variavel do tipo

floatFILE * arq // ponteiro para um arquivo

Para obter o endereço de uma variável é utilizado o operador &.

Para obter ou atribuir o valor a um endereço é utilizado o operador *.

Page 96: Curso de Linguagem C

96

Exemplos de utilização de ponteirosExemplos de utilização de ponteiros

int cont;int val;int *end1;int *end2;// atribui o valor 100 à variável contcont = 100;// end1 guarda o endereço de cont end1 = &cont;// o valor da variável cont é indiretamente atribuído a valval = *end1;// end2 guarda o endereço de cont end2 = end1;

100

100

0A00

0A00

cont

val

end1

end2

endereços memória variáveis

0A00

0A04

0A08

0A0C

Page 97: Curso de Linguagem C

97

Ponteiro como parâmetro de funçõesPonteiro como parâmetro de funçõesPonteiro de variável passado como argumento de função permite modificar o valor da variável

dentro da função:

#include <stdio.h>

void semPonteiros(int num){ num = num + 5;}

void comPonteiros(int *num){ *num = *num + 5;}

int main(){ int a = 1;

printf("Valor original de a: %d \n", a);

semPonteiros(a); printf("Apos chamar a funcao semPonteiros: a = %d \n", a);

comPonteiros(&a); printf("Apos chamar a funcao comPonteiros: a = %d \n", a); return 0;}

Saída do programa:

Valor original da variável a: 1

Valor de a após chamar a função semPonteiros: 1

Valor de a após chamar a função comPonteiros: 6

Page 98: Curso de Linguagem C

98

Ponteiro como parâmetro de funçõesPonteiro como parâmetro de funções

#include <stdlib.h>#include <stdio.h>#include <math.h>

void raizes(int a1, float *r1, int a2, float *r2){ *r1 = sqrt(a1);

*r2 = sqrt(a2);}

int main(){ float v1, v2;

int b1, b2;

printf("Digite dois numeros inteiros\n");scanf("%d", &b1);scanf("%d", &b2);

raizes(b1, &v1, b2, &v2); printf("Raiz quadrada de: %d = %f\n", b1, v1); printf("Raiz quadrada de: %d = %f\n", b2, v2);

return 0;}

Page 99: Curso de Linguagem C

99

// Programa-exemplo com ponteiros#include <stdio.h>#include <stdlib.h>int main(){ char letra = 'q'; int dia = 12; int *end; float nota = 87.8; end = &dia; char assunto[10] = "medicina"; char *pont1; int *pont2; double *pont3; char *pont4[10];

printf("Valor da variavel letra: %c e seu endereco: %x\n", letra, &letra); printf("Valor da variavel dia: %d e seu endereco: %x\n", dia ,&dia); printf("Valor da variavel nota: %2.1f e seu endereco: %x\n", nota, &nota); printf("Valor apontado por end: %d e o endereco que ele contem: %x\n", *end, end); printf("Valor da variavel assunto: %s e seu endereco: %x\n", assunto, assunto); printf("Endereco que o ponteiro pont1 contém: %x\n", pont1); printf("Endereco que o ponteiro pont2 contém: %x\n", pont2); printf("Endereco que o ponteiro pont3 contém: %x\n", pont3); printf("Endereco que o ponteiro pont4 contém: %x\n", pont4); return 0;}

Page 100: Curso de Linguagem C

100

Exibindo uma string utilizando ponteiroExibindo uma string utilizando ponteiro#include <stdio.h>#include <stdlib.h>#include <unistd.h>

int main(){ char texto[40] = "Exibindo uma string usando um ponteiro."; char *ptr_str;

ptr_str = texto; // Apontando para o inicio da stringprintf("Inicio da string = %c\n\n", *ptr_str);

// Exibindo toda a string usando o ponteiro while(*ptr_str != '\0') { putchar(*ptr_str); usleep(100000); ptr_str++; }

printf("\n");

return 0;}

Page 101: Curso de Linguagem C

101

ExercíciosExercícios1) Faça programa com uma função que recebe 2 números e devolve a soma, multiplicação,

divisão e subtração desses números, e retorna o valor de um número elevado pelo outro.

2) a) Sendo p um ponteiro, explique a diferença entre:

p++; (*p)++; *(p++);

b) O que quer dizer *(p+10) ?

c) Qual o valor de y no final do programa abaixo? A seguir, escreva um /* comentário */

em cada comando de atribuição explicando o que ele faz e o valor da variável à esquerda do

'=' após sua execução.

int main() { int y, *p, x; y = 0; p = &y; x = *p; x = 4; (*p)++; x--; (*p) += x; printf ("y = %d\n", y); return(0);}

(fonte: http://www.mtm.ufsc.br/~azeredo/cursoC/aulas/c620.html)

Page 102: Curso de Linguagem C

102

Linguagem e Técnicas de Programação

Capítulo 11

Parâmetros da função mainParâmetros da função main

Biblioteca padrão da linguagem CBiblioteca padrão da linguagem C

Page 103: Curso de Linguagem C

103

Parâmetros e retorno da função mainParâmetros e retorno da função main

Declaração da função main, de acordo com o padrão ANSI C:

int main(int argc, char *argv[])int main(void)

Formas aceitáveis (diferentes do padrão ANSI C):

void main(int argc, char *argv[])void main(void)void main()int main()main()

Os parâmetros argc e argv dão ao programador acesso à linha de comando

com a qual o programa foi chamado.

Page 104: Curso de Linguagem C

104

Parâmetros da função mainParâmetros da função main

O argc (argument count) é um inteiro e possui o número de argumentos com

os quais a função main() foi chamada na linha de comando. Ele vale no mínimo

1, pois o nome do programa é contado como sendo o primeiro argumento.

O argv (argument values) é um ponteiro para uma matriz de strings. Cada

string desta matriz é um dos parâmetros da linha de comando. O argv[0]

sempre aponta para o nome do programa (que, como já foi dito, é considerado

o primeiro argumento).

Fonte: http://www.inf.lasalle.tche.br/~barreto/cursoC/c790.html

Page 105: Curso de Linguagem C

105

Parâmetros da função mainParâmetros da função main

Exemplo 1: Recebe da linha de comando um conjunto de palavras e as imprime linha a linha.

#include <stdio.h>#include <stdlib.h>

int main(int argc, char *argv[]){

int i;

for(i = 0; i < argc; i++){

printf("%s\n", argv[i]);}

return 0;

}

Exercício: Faça um programa de uma calculadora de quatro operações que, passando argumentos na linha de

comando, executa a operação indicada. Exemplo: calcular soma 15 43

ou

calcular divisao 113 29

Page 106: Curso de Linguagem C

106

Parâmetros da função mainParâmetros da função main

Exemplo 2: Recebe da linha de comando o dia, mês e ano, e imprimir a data em formato apropriado.

Chamada do programa (data.exe): data 19 04 08

O programa deverá imprimir: 19 de abr de 2008

#include <stdio.h> #include <stdlib.h>

void main(int argc, char *argv[]) { int mes; char *nomemes[] = {"jan","fev","mar","abr","mai","jun","jul","ago","set","out","nov","dez"};

// Verifica o numero de parametros fornecidos: parametro 1: nome do programa, // parametro2: dia, parametro 3: mes, parametro 4: dois ultimos digitos do ano if(argc == 4) {     mes = atoi(argv[2]); // argv contem strings de entrada

if (mes < 1 || mes > 12) // Testa se o mes e' valido         printf("Erro!\nUso: data dia mes ano, argumentos com 2 digitos");     else       printf("\n%s de %s de 20%s", argv[1], nomemes[mes-1], argv[3]); } else

printf("Erro!\nUso: data dia mes ano, argumentos com 2 digitos"); }

Fonte: http://www.inf.lasalle.tche.br/~barreto/cursoC/c790.html

Page 107: Curso de Linguagem C

107

Biblioteca padrão da linguagem CBiblioteca padrão da linguagem C

A biblioteca padrão da linguagem C contém um conjunto de funções de uso comum, como

tratamento de entrada/saída, operações matemáticas e manipulação de cadeia de

caracteres. O nome e as características de cada função estão em arquivos “cabeçalho”. Já

a implementação das funções encontra-se em arquivos pré-compilados, que são “linkados”

pelo link-editor.

Principais arquivos de cabeçalho:

• stdio.h – Manipulação de entrada/saída de dados (printf, scanf, fprintf etc).

• stdlib.h – Operações diversas (system, atof, atoi etc).

• string.h – Tratamento de cadeia de caracteres (strcpy, strlen, strcmp etc).

• math.h – Funções matemáticas comuns em computação (sqrt, cos, sin, log etc).

• time.h – Conversão de tipos de dado de data e horário (asctime, clock, localtime etc).

Page 108: Curso de Linguagem C

108

Linguagem e Técnicas de Programação

Capítulo 12

Pré-processador e MacrosPré-processador e Macros

Operadores bináriosOperadores binários

Programação para MicrocontroladoresProgramação para Microcontroladores

Page 109: Curso de Linguagem C

109

Pré-processador e MacrosPré-processador e Macros

O pré-processador é uma aplicação executada antes de se executar o

compilador, para resolver as instuções e diretivas de pré-processamento que o

código-fonte possa ter.

Todas as instuções e diretivas de pré-processamento são precedidas do

caractere #.

Macros são porções de código que são substutuídas, pelo pré-processador,

antes do compilador converter o código.

Um exemplo de macro é a definição de uma constante numérica:

#define MAX 100

Page 110: Curso de Linguagem C

110

Macros de funçõesMacros de funções

É possível transformar funções simples em macros.

Quando se deseja que os parâmetros de uma função simples sejam genéricos

quanto ao tipo, pode-se transformar a função em uma macro.

Exemplo:

#include <stdio.h>

// A macro Mult pode receber parâmetros int, char, float ou double// e devolve como resultado a multiplicação dos parâmetros #define Mult(x,y) x*y

main(){ printf("%d \n", Mult(3,4)); printf("%f \n", Mult(3.5,5.2));}

Page 111: Curso de Linguagem C

111

Outras diretivas de pré-processamentoOutras diretivas de pré-processamento

A diretiva #include é utilizada para indicar ao pré-processador para substituir a

linha em que se encontra pelo conteúdo do arquivo que é colocado logo após.

Exemplo:

#include <stdio.h> // inclui o conteúdo da biblioteca-padrão

stdio#include “c:\users\trabalho\motor.h” // inclui o conteúdo da biblioteca motor

A diretiva #pragma indica ao compilador para tomar determinadas atitudes, de

acordo com o valor passado. Exemplo:

// indica que a compilação deve ser otimizada para o PIC16C54#pragma device PIC16C54

Para o compilador CCS C o pragma é opcional:#device pic16c54

Page 112: Curso de Linguagem C

112

Operadores BináriosOperadores Binários

A linguagem C, considerada de baixo nível, permite a manipulação de bits, utilizando operadores binários, conforme mostrado abaixo: Operador Descrição& AND| OR^ XOR (OR exclusivo)<< Deslocamento para esquerda>> Deslocamento para direita Os operadores binários não devem ser confundidos com os operadores lógicos (&& || !). Os operadores binários operam bit a bit, sendo muito utilizados em circuitos com microcontroladores.

Page 113: Curso de Linguagem C

113

Tipos de Variáveis - MicrocontroladoresTipos de Variáveis - Microcontroladores

• Os compiladores de linguagem para microcontroladores apresentam, geralmente, tamanhos menores para os tipos de variáveis. O exemplo abaixo refere-se a compiladores voltados a microcontroladores PIC:

Page 114: Curso de Linguagem C

114

Exemplos com Operadores BináriosExemplos com Operadores Binários

unsigned char c;

c = 7; // codigo binario 0000 0111

c = c<<1; // codigo binario 0000 1110 = 14

c = c<<2; // codigo binario 0011 1000 = 56

c = c<<3; // codigo binario 1100 0000 = 192

c = c>>1; // codigo binario 0110 0000 = 96

// 12 equivale a 00001100 e 6 equivale a 00000110

c = 12 & 6; // c passa a valer 4 (00000100)

c = 12 | 6; // c passa a valer 14 (000001110)

c = 12 ^ 6; // c passa a valer 10 (000001010)

Page 115: Curso de Linguagem C

115

Exemplo de programa para microcontroladorExemplo de programa para microcontrolador

As definições de PIN_B0 e PIN_B1 estão no arquivo 16c71.h. A função toupper, que transforma letras em maiúsculas, está definida em ctype.h. O uso de #fuses indica “high speed oscillator” e “no watch dog timer”. As funções printf e putc são referenciadas utilizando o #use rs232, que indica parâmetros de comunicação para o microcontrolador.

#include <16c71.h>#include <ctype.h>#fuses hs,nowdt#use rs232(baud=9600,xmit=PIN_B0,rcv=PIN_B1)#define TRUE 1

main(){

printf(“Enter characters:”);while(TRUE)

putc(toupper(getc()));}

Page 116: Curso de Linguagem C

116

Linguagem e Técnicas de Programação

Capítulo 13

Exercícios selecionadosExercícios selecionados

Page 117: Curso de Linguagem C

117

1) Um usuário digita um número no teclado. Imprima a tabuada deste número.

2) Faça um programa que armazena números em uma matriz 2x2 ou 3x3 e mostra o

determinante da matriz armazenada.

3) Monte o fluxograma e crie um programa que aponta se uma pessoa é obrigada ou

não a votar ou se é o voto é opcional, de acordo com a sua idade, digitada no

teclado.

4) Um arquivo contém um número indeterminado de linhas, contendo um número em

cada linha. Crie um segundo arquivo no qual cada linha contém um número

corresponde a duas vezes o valor do número do primeiro arquivo, linha-a-linha.

5) Criar um fluxograma para o cálculo das raízes de uma equação de segundo grau,

dados os coeficientes a, b e c. A seguir, implemente o algoritmo em linguagem C.

Page 118: Curso de Linguagem C

118

6) Criar um fluxograma para dividir em 4 listas cidadãos brasileiros, ingleses,

japoneses e outros. Para cada cidadão, o programa pede a nacionalidade e o

nome. Ao final, imprima as quatro listas.

7) Faça um programa em linguagem C que receba, via teclado, as notas de três

provas de 40 alunos e, no final, exiba na tela a nota média de cada aluno.

Dica: utilize o seguinte vetor bidimensional: float notas[40][3].

8) Faça um programa em linguagem C que lê duas palavras do teclado e, caso elas

sejam iguais, escreve na tela o número de caracteres dessas palavras; caso as

palavras sejam diferentes, escreve na tela a diferença entre os números de

caracteres das duas palavras.

9) Faça um programa que armazene um login e senha de acesso restrito. Passados

como argumentos do programa. A seguir, o programa deve permitir acesso apenas

aos usuários que acertarem o login e senha.

10) Faça um programa que calcula qual o montante acumulado em um ano por uma

aplicação que rende 2% ao mês, com depósitos mensais de R$ 1000,00.

Page 119: Curso de Linguagem C

119

11) Qual o resultado do programa abaixo, para cada sequência de dados de entrada.

#include <stdio.h> main(){ int a, b, c; scanf("%d", &a); scanf("%d", &b); scanf("%d", &c); if((a == 7 || b != 2) && c < 4) printf("X"); else { if (a%b == 0) printf("Y"); else printf("Z"); }}

Sequência digitada Letra escrita na tela

7 3 4  

8 4 1  

2 2 2  

Page 120: Curso de Linguagem C

120

12) O que será impresso na tela após a execução do programa abaixo: #include <stdio.h> int f1(int a, int b, int *c, int *d){

a = 15;b = *c;*c = *d;return b + a;

} int main(void){

int var1 = 1;int var2 = 2;int var3 = 3;int var4 = 4;float var5, var6;

var4 = f1(var1, var2, &var3, &var4);var5 = 2.5;var6 = 5.7;

 printf("%d - %d - %d - %d\n", var1, var2, var3, var4);printf("%.1f\n", var6 - var5);puts("var4 – var2");return 0;

}