Curso de Linguagem C

4,876 views

Published on

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

Published in: Education
0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,876
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
171
Comments
0
Likes
5
Embeds 0
No embeds

No notes for slide

Curso de Linguagem C

  1. 1. 1FATEC de Santo AndréTecnologia em Eletrônica AutomotivaLinguagens e Técnicas de ProgramaçãoNotas de AulaProf.: RogérioEmail: fatec.sa.informatica@gmail.comPágina da disciplina: http://sites.google.com/site/fatecprogramacao
  2. 2. 2Objetivo da disciplinaFornecer noções básicas de lógica, algoritmos e técnicas de programação, utilizando a linguagem deprogramação C.Conteúdo Programático1. 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, 10aedição, 2007.- C Completo e Total. Herbert Schildt. Makron Books, 3aedição, 1996.- Primeiro Curso de Programação em C. Edson L. F. Senne; Visual Books. 2aedição, 2006.
  3. 3. 3Linguagem e Técnicas de ProgramaçãoCapítulo 1Noções básicas deNoções básicas dealgoritmos e programaçãoalgoritmos e programação
  4. 4. 4AlgoritmoAlgoritmo• Algoritmo é a descrição de um padrão de comportamento, expresso pelaexecuçã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. Aseguir, crie outro algoritmo que libera o acesso ao site, ao ser fornecido o logine a senha corretos – o acesso é bloqueado após três tentativas com erro.
  5. 5. 5VariVariááveisveis• Variável: nome de um local de memória onde se pode colocarqualquer 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;
  6. 6. 6Comandos bComandos báásicossicos3) 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;
  7. 7. 7Linguagem e Técnicas de ProgramaçãoCapítulo 2Lógica de ProgramaçãoLógica de Programação
  8. 8. 8Lógica de programação:Lógica de programação:Bloco de comandos – execução sequencialBloco de comandos – execução sequencialPseudocógido Fluxograma
  9. 9. 9Estrutura de decisãoEstrutura de decisãoAlternativa simples Alternativa composta
  10. 10. 10Estruturas de decisãoEstruturas de decisão aninhadasaninhadasSe a estrutura de decisão tem apenas umcomando, o uso de chaves é dispensável; paradois ou mais comandos associados, o uso dechaves é obrigatóriose (a > b)a = a + 5;senão apenas um comando{se (a > c){b = b + 5;a = a + 10;} dois comandos}
  11. 11. 11Estrutura de repetição com teste no começoEstrutura de repetição com teste no começo
  12. 12. 12Estrutura de repetição com teste no finalEstrutura de repetição com teste no final
  13. 13. 13Comando break (abandone)Comando break (abandone)
  14. 14. 14Comando continueComando continue
  15. 15. 15Estrutura de repetição com variável de controleEstrutura de repetição com variável de controle
  16. 16. 16Pseudocódigo / FluxogramaPseudocódigo / FluxogramaAlgoritmo que encontra o maior e o menor número digitado noteclado. 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);}
  17. 17. 17ExercíciosExercícios1) Descrever em pseudocódigo e em fluxograma um algoritmoque imprime na tela a tabuada de um número digitado noteclado.2) Descrever em pseudocódigo e em fluxograma um algoritmoque imprime o fatorial de um número digitado no teclado.3) Descrever em pseudocódigo e em fluxograma um algoritmoque lê um número inteiro de um teclado, calcula asomatória de todos os números entre 1 e o número digitadoe escreve na tela o valor obtido.
  18. 18. 18Linguagem e Técnicas de ProgramaçãoCapítulo 3Introdução à LinguagemIntrodução à Linguagemde Programação Cde Programação C
  19. 19. 19Linguagens de programaçãoLinguagens de programação• Linguagem de programação: conjunto finito de símbolos com osquais 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 podemser 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 razoavelmentelegível por humanos, correspondente ao código de máquina.
  20. 20. 20Linguagem 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 1scompreendida por uma CPU - Unidade Central de Processamento.• Compilador: conversor de programas escritos em linguagem deprogramação para códigos de máquina de uma CPU.while(i < 10){printf("%d", i);i++;}compilador1001110100110001011001111111010111110001
  21. 21. 21Comparação entre linguagens de programaçãoComparação entre linguagens de programaçãocódigo nível vantagens desvantagenscódigo demáquinabaixoacesso atodos osrecursos dohardwaredificuldade deprogramaçãoC médioacesso atodos osrecursos dohardwareerros deprogramação podemcomprometer ofuncionamento dohardwareJava altofacilidade deprogramaçãobaixo aceso aosrecursos dohardware
  22. 22. 22Có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 ocódigo de máquina de uma CPU.• O compilador gera o código-executável, caso não encontre erros nocódigo-fonte.• No sistema operacional Windows, arquivos com código-executávelpossuem geralmente (mas não necessariamente), as extensões .exee .dll.• No sistema operacional Linux (ou Unix), arquivos com código-executável possuem geralmente (mas não necessariamente), aextensão .sh, entre outras.
  23. 23. 23Linguagem de programação CLinguagem de programação C• O C é uma linguagem de propósito geral, pertencendo a umafamí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.
  24. 24. 24Regras geraisRegras gerais• Os programas, em linguagem C, são compostos por uma ou maisfunçõ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;• ...}
  25. 25. 25Regras geraisRegras gerais• A linguagem C faz distinção entre maiúsculas e minúsculas. Exemplo: avariá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ãofinalizados 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!
  26. 26. 26Tipos de VariáveisTipos de Variáveis• A linguagem C dispõe de quatro tipos básicos de dados. As declaraçõesde 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)8doubleNúmero real (ponto flutuante com precisão simples:7 dígitos, limitados a: +/-3.4*10+/-38)4floatNúmero inteiro (ANSI: de -32768 a 32767(atualmente: de -2147483648 a 2147483647)2 (padrão ANSI)4 (atualmente)intUm caractere (ou, reciprocamente, um inteiro de-128 a 127)1charValorTamanho (bytes)Tipo
  27. 27. 27Especificadores 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.
  28. 28. 28Palavras reservadas da linguagem CPalavras reservadas da linguagem CPalavras reservadas pelo padrão ANSI Algumas outras palavras reservadasasmcdeclinterruptnearfarhugeObservação importante: palavras reservadas não podem serusadas como nomes de variáveis.auto double int structbreak else long switchcase enum register typedefchar extern return unionconst float short unsignedcontinue for signed voiddefault goto sizeof volatiledo if static while
  29. 29. 29Bloco de comandosBloco de comandos
  30. 30. 30Estrutura de decisãoEstrutura de decisão
  31. 31. 31Estrutura de repetição com teste no começoEstrutura de repetição com teste no começo
  32. 32. 32Estrutura de repetição com teste no finalEstrutura de repetição com teste no final
  33. 33. 33Estrutura de repetição com variável de controleEstrutura de repetição com variável de controle
  34. 34. 34Comando break (abandone)Comando break (abandone)
  35. 35. 35Comando continueComando continue
  36. 36. 36Linguagem e Técnicas de ProgramaçãoCapítulo 4Primeiros programasPrimeiros programasem Linguagem Cem Linguagem C
  37. 37. 37Função printfFunção printfSintaxe: printf ( "expressão de controle", argumentos )• A função printf permite escrever mensagens no dispositivo padrão desaída (tela).• A expressão de controle contém caracteres que serão exibidos na tela epode conter códigos de formatação que indicam o formato em que osargumentos devem ser impressos.• Cada argumento deve ser separado por vírgula.• Exemplos:printf(“nnEste eh o numero dois: %d", 2);printf("Aluno: %s t Nota: %f", "Pedro", 7.5);Expressão de controle argumento
  38. 38. 38Funçã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 caracteresn 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)
  39. 39. 39Função scanfFunção scanfSintaxe: 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 &, queretorna 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 davariável numA variável num recebe o número digitado,utilizando o operador &
  40. 40. 40Comentários no CódigoComentários no Código• É sempre aconselhável inserir comentários no código para explicar ofuncionamento 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 oscomentários de uma linha, utilizando o marcador // .Exemplos:int a;// Esta linha é um comentário e não tem influência no códigoa = 0;/* Estas duas linhas também são comentáriose serão descartadas no momento da compilação */
  41. 41. 41Ambientes de desenvolvimento paraAmbientes de desenvolvimento paraprogramação em Linguagem Cprogramação em Linguagem C●Ambiente de desenvolvimento ou IDE (Integrated DevelopmentEnvironment):- 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.
  42. 42. 42Ambiente de desenvolvimentoAmbiente de desenvolvimentoProcedimentos 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.
  43. 43. 43Programa-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: %dt", i);printf ("elevado ao quadrado: %dn", i*i);}return 0;}
  44. 44. 44Programa-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: %dnnn", x, fat);return 0;}
  45. 45. 45Programa-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 telascanf ("%d", &dias); // entrada de dados/* Conversao de dias em anos */anos = dias/365.0;/* Imprime mensagemna tela*/printf ("nn%d dias equivalem a %f anos.n", dias, anos);return 0;}
  46. 46. 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. numeron", i);scanf("%f", &valor);soma = soma + valor;}printf("nSomatoria dos %d valores lidos: %fn", n, soma);system("pause");media = soma / n;printf("nValor medio dos %d valores lidos: %fn", n, media);return 0;}Somatória e média
  47. 47. 47#include <stdio.h>#include <stdlib.h>#include <math.h>int main(){char finaliza = n;float num;while(finaliza != s){printf("Digite um numeron");scanf("%f", &num);printf("Raiz de %f = %.3fn", num, sqrt(num));printf("nPara encerrar digite sn");fflush(stdin); // Limpa buffer do tecladofinaliza = getchar(); // Obtém um caracter}printf("Fimn");return 0;}Estrutura de repetição com finalização
  48. 48. 48ExercíciosExercícios1) Crie um fluxograma e um programa em linguagem C, que pergunta aousuá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 osvalores desta tabela.
  49. 49. 49Linguagem e Técnicas de ProgramaçãoCapítulo 5VetoresVetores
  50. 50. 50VetoresVetoresVetor é um conjunto de elementos consecutivos, todos do mesmo tipo, quepodem 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 duasdimensões e temperaturaPosicao tem três dimensões.Vetores de duas dimensões são também conhecidos como matrizes.
  51. 51. 51Indexação de vetoresIndexação de vetoresO índice de um vetor começa sempre em 0 e termina em n-1, sendo n otamanho do vetor:float notasAlunos[50];notasAlunos[0] = 7.8;notasAlunos[1] = 2.5;notasAlunos[0] = 10.0;...notasAlunos[49] = 7.0;
  52. 52. 52Indexação de vetores multidimensionaisIndexação de vetores multidimensionaisOs índices das dimensões de um vetor começam sempre em 0 e terminam emn-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 34 5 67 8 9
  53. 53. 53Verificação de limites de tamanhoVerificação de limites de tamanhoA linguagem C não faz verificação de limites de vetores: nada impede que sejaultrapassado o fim de uma dimensão de um vetor. Porém, escrever em área dememória não reservada pode “travar” o computador.Uma atribuição de valores além do limite de um vetor pode “sujar” uma área dememória reservada para outro programa. Deve-se verificar a atribuição de valorespara 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órianão reservada. A posição máxima permitida seria precos[4].float precos[5];precos[8] = 15.50;
  54. 54. 54Escrever 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 alunoint i, j;float soma1 = 0, soma2 = 0;// Zerar a matriz antes de utilizá-lafor(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;}
  55. 55. 55Programa-exemploPrograma-exemplo#include <stdio.h>#include <stdlib.h>/* Programa que declara um vetor com n=10 números e colocana 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: %dn", i, v[i]);}return 0;}
  56. 56. 56Programa-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: %.2fn", i+1, deposito[i]);total = total + deposito[i] + (total * juros/100.0);printf("Total acumulado: %.2fn", total);}return 0;}
  57. 57. 57Programa-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 2x2n");for(i = 0; i < 2; i++){for(j = 0; j < 2; j++){printf("Digite um numeron");scanf("%f", &m[i][j]);}}det = m[0][0]*m[1][1] - m[0][1]*m[1][0];printf("nDeterminante dessa matriz: %fn", det);return 0;}
  58. 58. 58Programa-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 %dn", 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: %.1fn", i, soma[i] / provas);return 0;}
  59. 59. 59ExercíciosExercícios1) Crie um programa que calcula a média das notas de 10 alunos digitadasno teclado, utilizando um vetor que armazena, em cada uma de suasposições, as notas individuais.2) Crie um programa que coloque números digitados no teclado em umamatriz de 4 linhas e 4 colunas, e apresente a somatória dos valoresarmazenados em cada linha e em cada coluna.3) Crie um programa que calcule o determinante de uma matriz 3x3, cujoselementos são inseridos via teclado.
  60. 60. 60Linguagem e Técnicas de ProgramaçãoCapítulo 6StringsStrings
  61. 61. 61String – vetor de caracteresString – vetor de caracteresStrings 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 podearmazenar até 17 caracteres.- Strings são SEMPRE terminadas com o caracter nulo: 0. Portanto, devem teruma posição a mais que a quantidade de caracteres armazenados:- Uma string pode ser inicializada em sua declaração:char produto[15] = "Computador";
  62. 62. 62Funções de manipulação de stringsFunções de manipulação de stringsgets(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, retorna0, se str1 for “posterior” que str2, retorna um número positivo;caso contrário, retorna um número negativo.
  63. 63. 63Lendo uma string de um tecladoLendo uma string de um tecladoA melhor maneira de ler uma string de um teclado é com a função gets. Outramaneira é 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, %sn", s1, s2);printf("Quantidade de caracteres: %d, %dn", strlen(s1), strlen(s2));return 0;}
  64. 64. 64Exemplos de manipulação de stringsExemplos de manipulação de stringschar teste1[100], teste2[40];strcpy(teste1, "Informatica"); // copia/atribuicao de valorstrcpy(teste2, teste1); // copia/atribuicao de valor// tamanho de stringprintf("Tamanho da string: %d", strlen(teste1));int numInteiro;char numString[4] = "1580";numInteiro = atoi(numString); // conversao de string em inteirostrcpy(senha1, "fatec");strcpy(senha2, "etec");if( strcmp(senha1, senha2) == 0 ) // 2 strings iguaisprintf("Senha valida");
  65. 65. 65Vetor de StringsVetor de Strings- Vetores de strings são comuns em C. Eles são declarados e inicializadoscomo qualquer vetor bidimensional, mas a maneira de utilizá-los difere umpouco. 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é 10strings, com até 39 caracteres cada (descartando o 0 final). Para acessar umadas 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]);
  66. 66. 66Programa-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 granden");gets(texto);do{caracter = texto[pos];if (caracter == )texto[pos] = n;pos++;} while(caracter != 0);puts(texto);return 0;}
  67. 67. 67Programa-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 granden");gets(texto);tamanho = strlen(texto);for(i = tamanho - 1; i >= 0; i--)putchar(texto[i]); // Escreve o caracter de índice i da string textoreturn 0;}
  68. 68. 68Programa-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 granden");gets(texto);// Continua na página seguinte
  69. 69. 69Programa-exemploPrograma-exemplo// Continuação da página anteriordo{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;}
  70. 70. 70ExercíciosExercícios1) Faça um programa que lê do teclado duas strings, concatena essas stringse informa o tamanho da string final.2) Faça um programa que lê do teclado duas strings, compara essas strings einforma qual a ordem alfabética entre elas.3) Faça um programa que lê três nomes digitados do teclado, ordenaalfabeticamente 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.
  71. 71. 71Linguagem e Técnicas de ProgramaçãoCapítulo 7Estrutura em C: structEstrutura em C: structConversão de variáveis: castConversão de variáveis: castFunções matemáticasFunções matemáticasComando de decião múltipla: switch-caseComando de decião múltipla: switch-case
  72. 72. 72Struct – agrupamento de variáveisStruct – agrupamento de variáveisUma 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;}
  73. 73. 73Conversão de variáveis: castConversão de variáveis: castA linguagem C permite converter um tipo de variável em outro (cast), utilizandoparê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 25printf("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.000000printf("a: %d, c: %f n", a, c);return 0;}
  74. 74. 74Conversão de variáveis com stringsConversão de variáveis com stringsCabe 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 floatb = atof(d); // Neste caso, a variavel b recebe o valor 30.200000printf("b: %f, d: %s n", b, d);a = 49;// Conversão de int para stringsprintf(d, "%d.55", a); // Neste caso, d recebe o valor "49.55"printf("a: %d, d: %s n", a, d);return 0;}
  75. 75. 75Funções matemáticasFunções matemáticasA Linguagem C oferece várias funções matemáticas. Para utilizá-las, deve-sedeclarar a biblioteca math.h.- Exemplos de funções:#include <math.h>x = sin(y); // x recebe o seno de yx = cos(y); // x recebe o cosseno de yx = sqrt (y); // x recebe a raiz quadrada de yw = pow(x, y); // w recebe x elevado a yy = exp(x); // y recebe e elevado a xy = 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.
  76. 76. 76Comando switch-caseComando switch-caseO comando de decisão switch-case é utilizado quando há um grande númerode 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("domingon");break;case 2:printf("segundan");break;// outros casescase 7:printf("sabadon");break;default:printf("dia invalidon");}
  77. 77. 77Linguagem e Técnicas de ProgramaçãoCapítulo 8Manipulação de arquivosManipulação de arquivos
  78. 78. 78Manipulação de arquivosManipulação de arquivosA manipulação de arquivos em C é feita a partir da declaração de umponteiro 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:empresadados.txt", "r");Se o arquivo não for encontrado, o ponteiro assume o valor NULL:if( arq == NULL ){printf("Arquivo nao encontrado");return 1;}
  79. 79. 79Modos de abertura de arquivosModos de abertura de arquivosArquivos 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;
  80. 80. 80Funções utilizadas para manipulação de arquivoFunções utilizadas para manipulação de arquivoarq = fopen(“arquivo.txt”, “w”);Abre um arquivo para leitura e/ou escrita, retornando um ponteiro para estearquivo, 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 desucesso, retorna o caracter; em caso de erro, retorna a constante EOF.
  81. 81. 81Funções utilizadas para manipulação de arquivoFunções utilizadas para manipulação de arquivofgets(s, n, arq)Lê uma linha, com até n-1 caracteres, de um arquivo, colocando-a em s. Astring 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 valornã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.
  82. 82. 82Funções utilizadas para manipulação de arquivoFunções utilizadas para manipulação de arquivox = feof(arq)Retorna verdadeiro (1) quando a leitura de um arquivo chegou ao fim, oufalso (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ávelapontada por ptr. Cada elemento deve possuir um número de bytesindicados por size, sendo lidos n elementos do arquivo.fwrite(ptr, size, n, arq)Escreve um conjunto de elementos (apontados por ptr) em um arquivo. Cadaelemento deve possuir um número de bytes indicados por size, sendoescritos n elementos no arquivo.
  83. 83. 83Exemplo 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 encontradon");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;}
  84. 84. 84Exemplo de escrita em arquivoExemplo de escrita em arquivo#include <stdio.h>int main(){FILE *arquivo;arquivo = fopen("c:temparquivo.txt", “w");if( arquivo == NULL ){printf("Nao foi possivel escrever no arquivo");return 1;}fputs("Escrevendo em um arquivo!!!n", arquivo);fprintf(arquivo, "%fn", 34.6);printf("Verificar o arquivo c:temparquivo.txt n");fclose(arquivo);return 0;}
  85. 85. 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 encontradon");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-exemploCálculo de média de notasO programa abre (fopen) o arquivo notas.txt paraleitura ("r"). Lê linha a linha (fscanf), salvando ovalor de cada linha na variável nota. Quando oúltimo valor lido for igual ou menor que 0, aestrutura de repetição while é interrompida. Aseguir, é impresso na tela, pela função printf, ovalor da média das notas (total/cont). A médiasó é impressa na tela caso o arquivo tenha aomenos uma linha.
  86. 86. 86Linguagem e Técnicas de ProgramaçãoCapítulo 9Funções e Escopo de VariáveisFunções e Escopo de Variáveis
  87. 87. 87Funçõ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 doprograma;➢divisão em blocos funcionais, facilitando seu entendimento.Exemplo:tipoRetorno nomeFunção (tipo arg1, tipo arg2,...,tipo argN){comandos da função;}
  88. 88. 88Funções e variáveis só podem ser utilizadas em um programa em C depois deserem declaradasvoid 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: %dn", resultado);atraso();printf("Digite dois numerosn");scanf("%d", &x);scanf("%d", &y);printf("%d elevado a %d vale: %dn", x, y, potencia(x, y));atraso();printf("%d elevado a %d vale: %dn", y, x, potencia(y, x));
  89. 89. 89Protótipos de funçõesProtótipos de funçõesO 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, ouentã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;}
  90. 90. 90Arquivos de cabeçalho - BibliotecasArquivos de cabeçalho - BibliotecasProtótipos de funções, variáveis e constantes podem ser declarados emarquivos 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 dasfunções utilizadas.Exemplo: o protótipo da função reajusta() está declarado no arquivo decabeçalho economia.h e seu código está em algum outro arquivo-fonte, porexemplo, no arquivo economia.c:#include "economia.h"void reajusta(){float novoPreco;novoPreco = reajustaPreco(1.5, 200.0);...}
  91. 91. 91Variáveis locais e globaisVariáveis locais e globais• Variáveis locais: são definidas dentro de uma função, sendo válidas somentedentro da função.• Variáveis globais: definidas fora das funções, com validade para todas asfunçõ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 etem validade.int a; // variável globalvoid funcaoExemplo(char c){double b; // variável localint a; // variável local}
  92. 92. 92Variáveis locais e globaisVariáveis locais e globais• Alterações em variáveis locais não são visualizadas fora da função onde avariável está declarada. Exemplo:int a, b; // variáveis globaisvoid 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 = 4return 0;}
  93. 93. 93ExercíciosExercícios1) Faça um programa com várias funções, cada uma escrevendo uma palavra daseguinte frase:“Fatec Santo André – Eletrônica Automotiva”1) Faça um programa que leia valores digitados, interrompa quando for digitado a letraF, e forneça a somatória dos números digitados. Utilize uma função para a leitura doteclado 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 suasdimensões, conforme utilização na função main:void main(){doble valor;valor = volume(4.567, 3.5645, 5.666);printf(“Volume: %fn”, valor);}
  94. 94. 94Linguagem e Técnicas de ProgramaçãoCapítulo 10Ponteiros na linguagem CPonteiros na linguagem C
  95. 95. 95PonteirosPonteirosUm ponteiro é uma variável que guarda um endereço de um outro objeto, porexemplo, o endereço de uma variável ou de um dispositivo físico, como umdisplay, teclado ou arquivo.Ponteiro de variáveis: o tipo de um ponteiro deve ser igual ao tipo da variávelque ele armazena o endereço. Exemplos:char *nome; // ponteiro para variavel do tipocharint *temp; // ponteiro para variavel do tipo intfloat *ponteiroCalc; // ponteiro para variavel do tipofloatFILE * arq // ponteiro para um arquivoPara obter o endereço de uma variável é utilizado o operador &.
  96. 96. 96Exemplos de utilização de ponteirosExemplos de utilização de ponteirosint cont;int val;int *end1;int *end2;// atribui o valor 100 à variávelcontcont = 100;// end1 guarda o endereço decontend1 = &cont;// o valor da variável cont éindiretamente atribuído a valval = *end1;// end2 guarda o endereço de1001000A000A00contvalend1end2endereços memória variáveis0A000A040A080A0C
  97. 97. 97Ponteiro 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áveldentro 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: 1Valor de a após chamar a função semPonteiros: 1Valor de a após chamar a função comPonteiros: 6
  98. 98. 98Ponteiro 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 inteirosn");scanf("%d", &b1);scanf("%d", &b2);raizes(b1, &v1, b2, &v2);printf("Raiz quadrada de: %d = %fn", b1, v1);printf("Raiz quadrada de: %d = %fn", b2, v2);return 0;}
  99. 99. 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: %xn", letra, &letra);printf("Valor da variavel dia: %d e seu endereco: %xn", dia ,&dia);printf("Valor da variavel nota: %2.1f e seu endereco: %xn", nota, &nota);printf("Valor apontado por end: %d e o endereco que ele contem: %xn", *end,end);printf("Valor da variavel assunto: %s e seu endereco: %xn", assunto, assunto);printf("Endereco que o ponteiro pont1 contém: %xn", pont1);printf("Endereco que o ponteiro pont2 contém: %xn", pont2);printf("Endereco que o ponteiro pont3 contém: %xn", pont3);printf("Endereco que o ponteiro pont4 contém: %xn", pont4);return 0;
  100. 100. 100Exibindo 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 = %cnn", *ptr_str);// Exibindo toda a string usando o ponteirowhile(*ptr_str != 0){putchar(*ptr_str);usleep(100000);ptr_str++;}printf("n");return 0;}
  101. 101. 101Exercí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 = %dn", y);return(0);}(fonte: http://www.mtm.ufsc.br/~azeredo/cursoC/aulas/c620.html)
  102. 102. 102Linguagem e Técnicas de ProgramaçãoCapítulo 11Parâmetros da função mainParâmetros da função mainBiblioteca padrão da linguagem CBiblioteca padrão da linguagem C
  103. 103. 103Parâmetros e retorno da função mainParâmetros e retorno da função mainDeclaraçã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 comandocom a qual o programa foi chamado.
  104. 104. 104Parâmetros da função mainParâmetros da função mainO argc (argument count) é um inteiro e possui o número de argumentos comos quais a função main() foi chamada na linha de comando. Ele vale no mínimo1, pois o nome do programa é contado como sendo o primeiro argumento.O argv (argument values) é um ponteiro para uma matriz de strings. Cadastring 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, é consideradoo primeiro argumento).Fonte: http://www.inf.lasalle.tche.br/~barreto/cursoC/c790.html
  105. 105. 105Parâmetros da função mainParâmetros da função mainExemplo 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("%sn", argv[i]);}return 0;}Exercício: Faça um programa de uma calculadora de quatro operações que, passando argumentos na linha decomando, executa a operação indicada. Exemplo: calcular soma 15 43oucalcular divisao 113 29
  106. 106. 106Parâmetros da função mainParâmetros da função mainExemplo 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 08O 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 anoif(argc == 4){mes = atoi(argv[2]); // argv contem strings de entradaif (mes < 1 || mes > 12) // Testa se o mes e validoprintf("Erro!nUso: data dia mes ano, argumentos com 2 digitos");elseprintf("n%s de %s de 20%s", argv[1], nomemes[mes-1], argv[3]);}elseprintf("Erro!nUso: data dia mes ano, argumentos com 2 digitos");}Fonte: http://www.inf.lasalle.tche.br/~barreto/cursoC/c790.html
  107. 107. 107Biblioteca padrão da linguagem CBiblioteca padrão da linguagem CA biblioteca padrão da linguagem C contém um conjunto de funções de uso comum, comotratamento de entrada/saída, operações matemáticas e manipulação de cadeia decaracteres. 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).
  108. 108. 108Linguagem e Técnicas de ProgramaçãoCapítulo 12Pré-processador e MacrosPré-processador e MacrosOperadores bináriosOperadores bináriosProgramação para MicrocontroladoresProgramação para Microcontroladores
  109. 109. 109Pré-processador e MacrosPré-processador e MacrosO pré-processador é uma aplicação executada antes de se executar ocompilador, para resolver as instuções e diretivas de pré-processamento que ocódigo-fonte possa ter.Todas as instuções e diretivas de pré-processamento são precedidas docaractere #.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
  110. 110. 110Macros 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éricosquanto 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*ymain(){printf("%d n", Mult(3,4));printf("%f n", Mult(3.5,5.2));}
  111. 111. 111Outras diretivas de pré-processamentoOutras diretivas de pré-processamentoA diretiva #include é utilizada para indicar ao pré-processador para substituir alinha 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ãostdio#include “c:userstrabalhomotor.h” // inclui o conteúdo da biblioteca motorA diretiva #pragma indica ao compilador para tomar determinadas atitudes, deacordo com o valor passado. Exemplo:// indica que a compilação deve ser otimizada para o PIC16C54#pragma device PIC16C54Para o compilador CCS C o pragma é opcional:#device pic16c54
  112. 112. 112Operadores BináriosOperadores BináriosA 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 direitaOs operadores binários não devem ser confundidos com os operadores lógicos(&& || !). Os operadores binários operam bit a bit, sendo muito utilizados emcircuitos com microcontroladores.
  113. 113. 113Tipos 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 exemploabaixo refere-se a compiladores voltados a microcontroladores PIC:
  114. 114. 114Exemplos com Operadores BináriosExemplos com Operadores Bináriosunsigned char c;c = 7; // codigo binario 0000 0111c = c<<1; // codigo binario 0000 1110 = 14c = c<<2; // codigo binario 0011 1000 = 56c = c<<3; // codigo binario 1100 0000 = 192c = c>>1; // codigo binario 0110 0000 = 96// 12 equivale a 00001100 e 6 equivale a 00000110c = 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)
  115. 115. 115Exemplo de programa para microcontroladorExemplo de programa para microcontroladorAs 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 #fusesindica “high speed oscillator” e “no watch dog timer”. As funções printf e putc sãoreferenciadas utilizando o #use rs232, que indica parâmetros de comunicaçãopara o microcontrolador.#include <16c71.h>#include <ctype.h>#fuses hs,nowdt#use rs232(baud=9600,xmit=PIN_B0,rcv=PIN_B1)#define TRUE 1main(){printf(“Enter characters:”);while(TRUE)putc(toupper(getc()));}
  116. 116. 116Linguagem e Técnicas de ProgramaçãoCapítulo 13Exercícios selecionadosExercícios selecionados
  117. 117. 1171) 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 odeterminante da matriz armazenada.3) Monte o fluxograma e crie um programa que aponta se uma pessoa é obrigada ounão a votar ou se é o voto é opcional, de acordo com a sua idade, digitada noteclado.4) Um arquivo contém um número indeterminado de linhas, contendo um número emcada linha. Crie um segundo arquivo no qual cada linha contém um númerocorresponde 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.
  118. 118. 1186) 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 onome. Ao final, imprima as quatro listas.7) Faça um programa em linguagem C que receba, via teclado, as notas de trêsprovas 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 elassejam iguais, escreve na tela o número de caracteres dessas palavras; caso aspalavras sejam diferentes, escreve na tela a diferença entre os números decaracteres das duas palavras.9) Faça um programa que armazene um login e senha de acesso restrito. Passadoscomo argumentos do programa. A seguir, o programa deve permitir acesso apenasaos usuários que acertarem o login e senha.10) Faça um programa que calcula qual o montante acumulado em um ano por umaaplicação que rende 2% ao mês, com depósitos mensais de R$ 1000,00.
  119. 119. 11911) 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");elseprintf("Z");}}Sequência digitada Letra escrita natela7 3 48 4 12 2 2
  120. 120. 12012) 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 - %dn", var1, var2, var3, var4);printf("%.1fn", var6 - var5);puts("var4 – var2");return 0;}

×