Mini Curso de C

5,834 views

Published on

Semana Acadêmica - Grupo Unis
Wariston Pereira

Published in: Education
3 Comments
30 Likes
Statistics
Notes
No Downloads
Views
Total views
5,834
On SlideShare
0
From Embeds
0
Number of Embeds
405
Actions
Shares
0
Downloads
0
Comments
3
Likes
30
Embeds 0
No embeds

No notes for slide

Mini Curso de C

  1. 1. Semana da Tecnologia Grupo UnisMini-CursoLinguagem C
  2. 2. • Semana da Tecnologia • Grupo Unis• APRESENTAÇÃO – Professor Wariston Pereira • MBA em Gestão Estratégica e Inteligência em Negócios • Bacharel em Ciência da Computação • Analista de Sistemas: TI – Unis • Professor Atualmente nos Cursos: Ciência da Computação, Engenharia Civil e Automação Industrial. Já atuei também nos cursos de Engenharia de Produção e Administração. • Consultor e Proprietário da W4Solutions – Soluções em Tecnologia da Informação e Comunicação Empresarial. • Atuação nas Áreas de Análise, Desenvolvimento, Consultoria, Redes de Computadores e Simulação Computacional. 2
  3. 3. • Semana da Tecnologia • Grupo Unis• OBJETIVOS– Caracterizar Linguagens de Programação;– Caracterizar a linguagem C;– Dev-Cpp – Compilador C/C++– Estruturas Básicas em C;– Identificadores;– Operadores Relacionais, Lógicos e Aritméticos;– Comandos de Entrada e Saída;– Estruturas Condicionais;– Estruturas de Controle/Repetição;– Funções. 3
  4. 4. • Semana da Tecnologia • Grupo Unis• Algumas Sugestões.... •Apostilas • Curso de Linguagem C – UFMG • Introdução à Linguagem C – UNICAMP 4
  5. 5. • Semana da Tecnologia • Grupo Unis• AGENDA– Laboratório 3 • 26/04 – 21:00 às 22:30 hrs • 27/04 – 19:30 às 21:00 hrs • 29/04 – 19:30 às 21:00 hrs 5
  6. 6. • Semana da Tecnologia • Grupo UnisAgora é com vocês.... • Nome • Expectativa • Atuação 6
  7. 7. Linguagem C Introdução ePrimeiros Passos 7
  8. 8. Introdução Por que programar ?Quando o homem necessita do auxilio do computador paraexecutar algumas tarefas. O Que é um programa ? Conjunto de instruções de uma determinada linguagem através das quais, um computador executa algumas tarefas. 8
  9. 9. IntroduçãoO Que é uma linguagem ?Uma linguagem consiste de um conjunto de palavrasreservadas e regras de sintaxe que possibilita criarprogramas de computadores.Este conjunto de palavras possui regras de estruturaçãológica e sintática própria. 9
  10. 10. Exemplos de Códigos: BASICPseudo-código BASICleia(num) 10 input numpara n de 1 20 for n=1 to 10 até 10 passo 1 step 1 faça 30 let tab=num*n tab←num*n 40 print chr$(tab) imprima(tab) 50 next n fim-para; 10
  11. 11. Exemplos de Códigos:FORTRANPseudo-código FORTRANleia(num) read (num)para n de 1 do 10 n=1:10 até 10 passo 1 tab=num*n faça write(tab) tab←num*n 10 continue imprima(tab) fim-para; 11
  12. 12. Exemplos de Códigos:AssemblyPseudo-código Assembly (Intel 8088)leia(num) MOV CX,0para n de 1 IN AX,PORTA até 10 passo 1 MOV DX,AX faça LABEL: tab←num*n INC CX imprima(tab) MOV AX,DX fim-para; MUL CX OUT AX, PORTA CMP CX,10 12 JNE LABEL
  13. 13. Exemplos de Códigos: CPseudo-código Cleia(num) scanf(&num);para n de 1 for(n=1;n<=10;n++){ até 10 passo 1 tab=num*n; faça printf(”n %d”, tab←num*n tab); imprima(tab) }; fim-para; 13
  14. 14. Tipos de Linguagens: BaixoNível São linguagens com foco na maquina, ou seja, utiliza instruções detalhadas que controla os circuitos internos do computador. Usualmente são genericamente chamadas de linguagens de maquina, Assembly ou de linguagem de montagem. 14
  15. 15. Tipos de Linguagens: BaixoNível  Vantagens: Maior velocidade de processamento e ocupam menor espaço na memória.  Desvantagens: Pouca portabilidade, ou seja, o código é gerado para um tipo de processador não serve para outro. 15
  16. 16. Tipos de Linguagens: AltoNível São linguagens voltadas para que haja uma maior interação entre o homem e a máquina. Necessitam de compiladores ou interpretadores para gerar as instruções do microprocessador. 16
  17. 17. Tipos de Linguagens: AltoNível  Vantagens: São compiladas ou interpretadas, têm maior portabilidade podendo ser executados em várias plataformas com pouquíssimas modificações.  Desvantagens: São mais lentas e ocupam mais memória. 17
  18. 18. Compiladores xInterpretadoresA única linguagem que o computador entende é a linguagemde máquina. Programas escritos em um linguagem de altonível, devem ser traduzidos para a linguagem de máquina.Os Programas que fazem esta tradução, classificam em: - INTERPRETADORES - COMPILADORES 18
  19. 19. Compiladores xInterpretadoresOs INTERPRETADORES, traduzem o código fonte emlinguagem de máquina através da interpretação de cadainstrução feita a medida que o software é executado.Necessitam de um componente interpretador presente namáquina. Os COMPILADORES, por sua vez, traduzem o códigofonte em linguagem de máquina através da geração deum programa .OBJ, que após ser linkeditado, torna-se umarquivo executável. Em C os programas são compilados. 19
  20. 20. Linguagem CSobre a linguagem C 20
  21. 21. HistóricoC foi originalmente desenvolvida por Dennis Ritchie eK. Thompson nos Laboratórios Bell nos anos 70.Derivadas de duas linguagens anteriores chamadas BCPLe B. Inicialmente para máquinas com o sistema operacionalUNIX. Tornou-se uma das mais importantes e populares nosúltimos dias. Foi projetada para o desenvolvimento de programasestruturados e modulares. 21
  22. 22. HistóricoNos anos seguintes, a popularidade da linguagem C aumentou consideravelmente, aumentando também o surgimento de ferramentas de desenvolvimento.  Inicialmente, muitas implementações do C não traduziam fielmente a definição original, o que gerou alguns problemas de incompatibilidade  A portabilidade proposta pela definição original ficou bastante comprometida. 22
  23. 23. ANSIO Padrão ANSIBuscando uma padronização na definição da linguagem C,a American National Standard Institute (ANSI),desenvolveu um padrão hoje bastante utilizado no mundoda linguagem C, chamado de C padrão ANSI ou C ANSI.Quase todas as ferramentas de desenvolvimento dalinguagem C atuais, seguem este padrão. 23
  24. 24. Características Linguagem de propósito genérico;  Usada para escrever processadores de texto, planilhas, sistemas operacionais, programas de comunicação, programas para automação industrial, SGBDs, navegadores e servidores Web, etc. Possui características de alto e de baixo nível; Excelente performance; Muito popular; Sintaxe de C serve de base para muitas outras linguagens. 24
  25. 25. Características Deu origem a outras linguagens de programação, entre elas C++, Java, C#, PHP, Ruby, Python, etc. Muito usada no desenvolvimento de:  Compiladores, interpretadores, editores de texto, banco de dados, computação gráfica, manipulação e processamento de imagens, controle de processos, … 25
  26. 26. Características Portabilidade Geração de códigos executáveis compactos e rápidos Interação com o sistema operacional Facilidade de uso Linguagem estruturada Confiabilidade Simplicidade Case sensitive  Maiúsculas e minúsculas fazem diferença. 26
  27. 27. Estrutura básica de umprograma CUm programa em C consiste de uma ou várias funções,onde uma delas precisa ser denominada “main” e deveexistir em algum lugar de seu programa. Esta funçãomarca o início da execução do programa. Outras funções podem ser definidas pelo programador ou preencher a função main, porém em um programa executável em C, a função main deve sempre existir. 27
  28. 28. Estrutura básica de umprograma main(Argumentos) { /* início do corpo da função */ } /* término do corpo da função */ Uma função deve conter : - Um header que consiste do nome da função - Uma lista de argumentos entre parênteses. - Um bloco de instruções delimitado por chaves. 28
  29. 29. Estrutura básica de umprograma O nome da função, os parênteses e as chaves, são osúnicos elementos obrigatórios de uma função Os comentários podem aparecer em qualquer lugar deum programa, devendo ser colocados entre osdelimitadores /* e */ Letras minúsculas e maiúsculas não são equivalentesem C. Note que cada expressão dentro do bloco deveterminar com um ponto-e-vírgula. 29
  30. 30. Geração de Executável Editor (módulo fonte em C) Pré‐processador (novo fonte expandido) Compilador (arquivo objeto) Lincador (executável) 30
  31. 31. Linguagem C Dev C Ambiente deDesenvolvimento Linguagem C 31
  32. 32. Tela Principal 32
  33. 33. Painel Principal 33
  34. 34. Painel Principal• Clicando em Arquivo - Criar Arquivo Fonte. - Criar Novo Projeto 34
  35. 35. Painel Principal• Clicando em Arquivo - (Re)Abrir Arquivo Fonte. - (Re)Abrir Novo Projeto 35
  36. 36. Painel Principal• Clicando em Arquivo - Salvar o conteúdo da aba aberta. - Salvar o conteúdo da aba aberta em outro arquivo. - Salvar o projeto em outro arquivo. - Salvar todos(as) arquivos(abas) alterados. 36
  37. 37. Painel Principal• Clicando em Arquivo - Fechar o conteúdo da aba aberta. - Fechar todas as abas abertas. - Fechar o projeto. 37
  38. 38. Painel Principal• Clicando em Arquivo - Imprime todas as informações do arquivo atual. 38
  39. 39. Painel Principal• Clicando em Arquivo - Importa um projeto de outro ambiente de programação. - Exporta o projeto para HTML, muito útil para documentação do projeto. 39
  40. 40. Painel Principal• Clicando em Arquivo -Menus de impressão. 40
  41. 41. Painel Principal• Clicando em Arquivo - Sair. 41
  42. 42. Painel Principal 42
  43. 43. Painel Principal• Clicando em Editar - Desfazer e Refazer as últimas ações. 43
  44. 44. Painel Principal• Clicando em Editar - Recortar, copiar e colar. 44
  45. 45. Painel Principal• Clicando em Editar - Inserir cabeçalho e data e hora no código fonte. - Bookmarks é uma marca que você faz no código fonte. Essa marca é um atalho para um determinado trecho do código. 45
  46. 46. Painel Principal• Clicando em Editar - Seleciona todo o conteúdo do código fonte aberto. 46
  47. 47. Painel Principal• Clicando em Editar - Comenta e “descomenta” uma determinada parte do código fonte. 47
  48. 48. Painel Principal• Clicando em Editar - “Indenta” e “unidenta” uma determinada parte do código fonte. 48
  49. 49. Painel Principal 49
  50. 50. Painel Principal - Localizar em um fonte especifico ou no projeto todo uma função ou qualquer palavra qualquer. 50
  51. 51. Painel Principal - Configuração das barras de ferramentas. 51
  52. 52. Painel Principal - Adicionar ou remover arquivo ao projeto, usaremos os ícones abaixo para fazer essas ações. 52
  53. 53. Painel Principal - Executa, compila e recompila o projeto atual. Usaremos os ícones em vermelho. 53
  54. 54. Painel Principal - Execução passo a passo. Nesse primeiro momento não vamos utilizar essa ferramenta. 54
  55. 55. Painel Principal - Algumas configurações de projeto. Nesse primeiro momento usaremos as configurações padrões. 55
  56. 56. Painel Principal - Controle da janela do e das abas Dev C. 56
  57. 57. Painel Principal - Ajuda de utilização e sobre o programa Dev C. 57
  58. 58. Meu primeiro programa em C 58
  59. 59. Meu primeiro programa em C 59
  60. 60. Meu primeiro programa em C - Inclui sa bibliotecas que contêm as funções de entrada, saída e comando “System”. 60
  61. 61. Meu primeiro programa em C -Toda função em C retorna algo e recebe algo como parâmetro. -Void significa vazio. -Por padrão a função “main” é executada no 61 início do programa;
  62. 62. Meu primeiro programa em C -Imprime na tela “Olá Mundo!”. 62
  63. 63. Meu primeiro programa em C -Essa mensagem serve para travar o console do DOS. 63
  64. 64. Meu primeiro programa em C -Retorna 0. 64
  65. 65. Linguagem CIdentificadores 65
  66. 66. Regra de identificaçãoTodas as letras maiúsculas de A a Z e as minúsculas de a a z , os dígitos de 0 a 9 e alguns caracteres especiais, podem ser utilizados na criação de códigos em C.Os nomes de variáveis, funções e matrizes em C, obedecem a regra de que voce pode usar letras e números, porem o primeiro digito deve ser apenas uma LETRA ou o caracter especial undescore (_).Um nome não pode ser uma das palavras reservadas da 66 linguagem C.
  67. 67. Regra de identificaçãoExemplo de nomes válidos : a y12 soma1 _estoqueExemplos de nomes não válidos :2th (o primeiro caracter deve ser letra ou _ )“a” (inicia com um caracter ilegal (“) )numero-ordem (caracter ilegal (-))nome completo (espaço em branco) 67
  68. 68. Regra de identificaçãoUm identificador de nome pode ter mais de 32 caracteres, porem somente os 32 primeiros serão reconhecidos.Algumas implementações do C, reconhece apenas os 8 (oitos) primeiros, assim os nomes : taxa_dia e taxa_diaria, nestes sistemas não tem diferenca, pois o compilador reconhece apenas os oitos primeiros caracteres. 68
  69. 69. Palavras reservadas 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 São apenas 32 palavras reservadas que não podem ser 69 utilizadas para outro propósito
  70. 70. Tipos de DadosEm C existem 5 tipos válidos: tipo Palavra Quant. Bytes Faixa Reservada Bit Caracter Char 8 1 -128 a 127 Inteiro Int 16 2 -32768 a 32768 Ponto flutuante Float 32 4 3.4E-38 a 3.4E+38 Pont. Flutuante Double 64 8 1.7E-308 a duplo 1.7E+308 Sem valor void 0 0 Sem valor 70
  71. 71. Tipos de DadosModificadores de TiposCom exceção do tipo void, os demais tipos podem teralguns modificadores. Um modificador é usado para alteraro significado do tipo para adequá-los melhor àsnecessidades do programador. 71
  72. 72. Tipos de DadosOs modificadores são : signed, unsigned, long e shortExemplo de utilização:Se uma variável é declarada como char ela ocupa 8 bit etem a faixa de valores de -128 a 127, mais se omodificador unsigned é colocado antes da palavra char,ela continua ocupando 8 bits, mais sua faixa de valores vaide 0 a 255. 72
  73. 73. Tipo de Dados InteiroOs dados inteiros são caracterizados pelos números positivos ou negativos que não seja fracionário. Em C referenciamos este tipo de dados com os seguintes identificadores : Tipo do Inteiro Qt.Bit Faixa int 16 -32768 a 32767 long int 32 -2.147.483.648 a 2.147.483.648 unsigned int 16 De 0 até 65535 signed long int 32 De 0 até 4.292.967.295 73
  74. 74. Tipo de Dados ReaisOs dados reais são caracterizados pelos números positivos, negativos, inteiros e os fracionários. Em C referenciamos este tipo de dados com os seguintes identificadores : Tipo do Inteiro Qt.Bit Faixa float 32 de 3.4e-38 até 3.4e+38 double 64 de 1.7e-308 até 1.7e+308 Long double 128 de -3.4e-4932 até 1.1e+4932 74
  75. 75. Tipo de Dados CaracteresOs dados caracteres são caracterizados pelas sequencias de letras, números e simbolos especiais delimitados por ( “ ” ) . Em C referenciamos este tipo de dados pelo identificadores : char podendo armazenar de 0 até 255 caracteres 75
  76. 76. Tipo de Dados LógicosNa linguagem C não existe o tipo de dados booleano , ou seja, não existe o valor lógico “false” ou “true” de forma predefinida.Em C qualquer valor igual a 0 (zero), é considerado como valor lógico falso e qualquer valor diferente de 0 (zero), é considerado como valor lógico verdadeiro. 76
  77. 77. ConstantesConstantes são valores que permanecem fixos e na linguagem C temos 4 tipos básicos de constantes: - Inteiras - ponto-flutuante - caracteres - string (cadeia de caracteres) 77
  78. 78. Constantes numéricasAs constantes do tipo Inteiras e de ponto-flutuante, representam números.As constantes do tipo Inteiras podem ser escritas em três sistemas de numeração, sendo : • decimal (base 10) • octal (base 8) • hexadecimal (base 16)Uma constante inteira decimal pode ser formada por qualquer combinação dos dígitos de 0 a 9. Se tem mais de dois dígitos, o primeiro não pode ser zero. Ex.: 5 13 230 540 78
  79. 79. Constantes numéricasUma constante inteira octal pode ser formada por qualquer combinação dos dígitos de 0 a 7 e o primeiro deve ser zero. Ex.: 0 013 0656 0540Uma constante inteira hexadecimal pode ser formada por qualquer combinação dos dígitos de 0 a 9 e de A a F (maiúsculas ou minúsculas). Deve sempre iniciar com 0x ou 0X. Ex.: 0x 0x1 0xABC 0xabcNormalmente a magnitude de uma constante inteira é: Decimal = 32767 Octal = 07777 Hexa = 0x7FFF 79
  80. 80. Constantes numéricasAs constantes do tipo ponto-flutuante é um número na base 10 que contem casas decimais e/ou um expoente. Ex.: 0. 0.5 1.3 230.323 .540e2Observe que o caracter que separa a casa decimal é um ponto e não uma virgulaPara representar um número com expoente, trocamos a base 10 pela letra ´e´. Assim para representar 2 x 10², teremos: 200. ou 2e2 ou 2e+2 ou 2E2 ou 2.0e+2 80
  81. 81. Constantes caracteresAs constantes do tipo caracter consiste em um simples caracter colocado entre apóstrofos. Ex.: ´A´ ´x´ ´5´ ´$´Uma constante de caracter tem valores inteiros correspondentes a um conjunto de caracteres especificos.Normalmente os computadores utilizam o conjunto de caracteres ASCII, onde cada caracter é representado por uma combinação de 7 bits, Representando assim 2e+7 = 128 diferentes caracteres.Desta forma, cada constante de caracter, tem um valor inteiro correspondente. 81
  82. 82. Constantes caracteresCaracter Valor Caracter Valor Caracter Valor Caracter ValorA 65 M 77 a 97 0 48B 66 N 78 b 98 1 49C 67 O 79 c 99 2 50D 68 P 80 d 100 3 51E 69 Q 81 e 101 4 52F 70 R 82 f 102 5 53G 71 S 83 g 103 6 54H 72 T 84 h 104 7 55I 73 U 85 i 105 8 56J 74 V 86 j 106 9 57K 75 W 87 k 107 DEL 127L 76 X 88 l 108 ESC 27 82
  83. 83. Constantes stringAs constantes do tipo string consiste em um conjunto de caracteres colocado entre aspas. Ex.: “hugo” “vasco” “São Luis” “Boa Noite !!!” “235-2234” “2*(I+3)/J”Algumas seqüências de caracteres podem ser incluídas dentro da string para possibilitar a formatação. Ex.: “Esta é a primeira linhan e esta a segunda linha” 83
  84. 84. Exemplos - Atribuições #include <stdio.h> #include <stdlib.h> int main(void) { int numero; unsigned int numero2; signed long numero3; numero = 10; // Não gera erro numero = 10.555; // Gera Erro, número fracionário numero2 = -10; //Gera erro, numero negativo numero3 = -10; // Não gera erro numero = 999999999999; // Gera erro, inteiro muito grande numero = A; // Retorna o Valor ASCII de A = 65 printf("A = %in",numero); numero = "A"; // Gera erro, atribuição de string para inteiro system("PAUSE"); return 0; } 84
  85. 85. Exemplos - Atribuições #include <stdio.h> #include <stdlib.h> int main(void) { float decimal; decimal = 10.123456; // Numero Fracionário printf("%fn",decimal); decimal = 10e5; // 10 ^ 5 = 1.000.000 printf("%fn",decimal); decimal = 0775; // Octal = 509 printf("%fn",decimal); decimal = 0xFF; // Hexadecimal = 255 printf("%fn",decimal); system("PAUSE"); return 0; } 85
  86. 86. Exemplos - Atribuições #include <stdio.h> #include <stdlib.h> #include <string.h> int main(void) { char letra; char texto[11] = “TESTE”; // 10 Caracteres + 0 letra=A‘; letra="A"; // Gera erro, string letra="ALO MUNDO!";// Gera erro, string texto=ALO;// Gera erro, caracter texto="A";// Gera erro, string menor de 10 caracteres texto="ALO MUNDO!"; // Não se pode atribuir string diretamente printf("%sn",texto); // Mostra o valor de texto strcpy(texto,"ALO MUNDO!"); deve-se usar strcpy da biblioteca string.h printf("%sn",texto); system("PAUSE"); return 0; } 86
  87. 87. Seqüência de escapeAlgums caracteres especiais e os não- imprimíveis, são expressos como uma seqüência de escape.Uma sequencia de escape sempres começa co uma barra invertida (“”) seguida por um caracter. Alguns comandos em C, são representados desta forma. Ex.: 87
  88. 88. Seqüência de escapeCaracter Seqüência de escape Valor ASCIINova linha (line feed) FD n 10Campainha (bell) a 07Tabulação horizontal t 09Aspas (“) ” 34Apóstrofo (´) ´ 39Interrogação (?) ? 63Barra invertida () 92 88
  89. 89. Exemplos - Escape #include <stdio.h> #include <stdlib.h> int main(void) { printf("PulanLinha"); printf("nTabulacaotTabulacaotTabulacao"); printf("ASPAS DUPLAS ""); printf("ASPAS SIMPLES "); printf("INTERROGACAO ?"); printf("BARRA INVERTIDA 0"); printf("a"); // Gera Beep system("PAUSE"); return 0; } 89
  90. 90. VariáveisAs variáveis são o aspecto fundamental em qualquerlinguagem de computador.Uma variável nada mais é que um espaço de memóriareservado para armazenar um certo tipo de dado. Umavariável deve receber um nome para servir de referência e acada instante ela pode conter valores diferente. 90
  91. 91. Declaração de VariáveisDeclarar uma variável significa reservar um espaço emmemória para um determinado tipo de dados e indicar queo conteúdo daquele espaço, será referenciado pelo o nomeda variável.Uma declaração de variável consiste em um tipo seguidodo nome da variável. Exemplo: int num; // uma variável do tipo int char a; // uma variável do tipo char 91
  92. 92. Declaração de variáveis:Para serem usadas, as variáveis precisam ser declaradasde modo que o compilador possa reservar espaço namemória para o valor a ser armazenado.A forma geral de uma declaração é: tipo lista_de_variaveis;Exemplos: int i; unsigned int a, b, c; double salario; 92
  93. 93. Atribuição de valores àsvariáveisApós ser declarada, a variável pode receber valores.O operador de atribuição "=" indica que o valor à direita seráatribuído à variável.O valor inicial pode ser atribuído de duas formas:- Durante a declaração da variável Ex.: int i=0, j=10;- Durante execução de uma a função 93
  94. 94. Tipos de VariáveisO tipo de uma variável informa a quantidade de memória,em bytes, que ela irá ocupar e a forma como o seuconteúdo será armazenado.Os tipos de dados básicos do C visto anteriormentedevem ser utilizados para prototipar uma variávelconforme a necessidade do programa. 94
  95. 95. Atribuição de valores àsvariáveis… possível atribuir a uma variável o valor resultante de umaexpressão. Ex.: int a; a = (8+2)/2;A atribuição de uma variável do tipo char, pode ser feita deduas formas:- Atribuindo uma constante de caracter: char b = ‘A’;- Atribuindo o código ASCII correspondente antecedido pelabarra invertida: 95 char b = ‘65’
  96. 96. Analisando um ProgramaExemplo01 #include <stdio.h>02 #include <stdlib.h>03 int a=5; // declaração de um inteiro04 int b=5; // declaração de um inteiro05 int soma; // declaração de um inteiro06 int main(void)07 {08 soma=a+b;09 printf("%d",soma);10 system(“pause”);11 } 96
  97. 97. Analisando um ProgramaExemplo01 #include <stdio.h>02 #include <stdlib.h>03 int a=5, b=5, soma;04 int main(void)05 {06 soma=a+b;07 printf("%d",soma);08 system(“pause”);09 } 97
  98. 98. Atribuição de valores àsvariáveisNa linguagem C, não temos o tipo ´string´pre-definido, o que nos leva a utilizar osvetores de caracter. Desta forma um stringem C será atribuída a um vetor do tipo charna sua inicialização. char nome[20] = “Hugo Sampaio”; 98
  99. 99. Analisando um ProgramaExemplo#include <stdio.h>#include <conio.h>char nome[20];int main(){ printf("Digite o seu nome : "); scanf("%s", nome); printf("Ola! %s ",nome); getch();} 99
  100. 100. String Uma string em C é um vetor de caracteres terminado com um caractere nulo. O caracter nulo é um caractere com valor inteiro igual a zero O terminador nulo também pode ser representato em C por 0. O comprimento da string deve ser pelo menos 1 caractere maior que o que pretendemos armazenar, pois um caractere é reservado ao terminador nulo. A função gets() lê uma string e insere o terminador nulo na string quando a tecla Enter for pressionada. 100
  101. 101. String Usamos um índice para acessar o caractere desejado dentro da string.  str[1] = a; Em C, o índice inicia em zero. char str[10] = "Joao";  A declaração acima inicializa a string str com os caracteres J o a o e 0. O código de controle %s na função printf() é usado para exibir uma string. 101
  102. 102. String Podemos ler uma string usando scanf().  Não usamos o e comercial (&) para strings, pois o nome de um vetor já é um endereço de memória do começo do vetor.  scanf("%s", texto); Infelizmente scanf() lê somente até o primeiro espaço, ou seja, lê somente uma palavra. Para contornar isso, usamos a função gets que lê até encontrar o caracter de fim de linha (enter).  gets(texto); 102
  103. 103. String #include <stdio.h> #include <stdlib.h> int main(void) { char nome[6]; printf("Digite um nome: "); gets(nome); printf("Ola, %sn", nome); system("pause"); } 103
  104. 104. String O problema de gets é que ele pode provocar sérios problemas de segurança, pois permite o armazenamento de caracteres além da capacidade da string. Uma solução mais segura é usar a função fgets que limita o tamanho máximo a ser lido.  fgets(texto, 50, stdin); 104
  105. 105. String#include <stdio.h>#include <stdlib.h>main() { char nome1[21], nome2[21]; printf("Digite um nome: "); gets(nome1); printf("Digite um nome: "); fgets(nome2,21,stdin); printf("nNomes:n%s - %snn", nome1, nome2); system("pause");} 105
  106. 106. String#include <stdio.h>#include <stdlib.h>main(){ char nome[10] = "Joao"; printf("String: %sn", nome); printf("Terceira letra: %cn", nome[2]); printf("Quarta letra: %cn", nome[3]); nome[2] = h; nome[3] = n; printf("Agora a terceira letra eh: %cn", nome[2]); printf("Agora a quarta letra eh: %cn", nome[3]); printf("String resultante: %sn", nome); system("pause");} 106
  107. 107. String#include <stdio.h>#include <stdlib.h>main(){ char nome[10]; printf("nnDigite um nome: "); gets(nome); printf("nString: %sn", nome); printf("Terceira letra: %cn", nome[2]); printf("Quarta letra: %cn", nome[3]); printf("o tamanho da string eh: %dn", strlen(nome)); printf("o ultimo caractere eh: %cn", nome[strlen(nome)-1]); nome[2] = h; nome[3] = n; printf("Agora a terceira letra eh: %cn", nome[2]); printf("Agora a quarta letra eh: %cn", nome[3]); printf("String resultante: %sn", nome); system("pause");} 107
  108. 108. String – funções strlen(texto) — Retorna o tamanho da string texto em número de caracteres. strcpy(destino, fonte) — Copia a string fonte para a string destino. strcat(destino, fonte) — Concatena a string fonte no fim da string destino. strcmp(str1, str2) — Compara duas cadeias e caracteres e retorna um valor  = 0 - se str1 e str2 forem iguais  < 0 - se str1 for menor que str2  > 0 - se str1 for maior que str2 108
  109. 109. String – funções#include <stdio.h>#include <string.h>main() { char nome1[] = "Regis"; printf("%snn",nome1); char nome2[100]; strcpy(nome2, "Isaac"); printf("%snn",nome2); strcat(nome2," Newton"); printf("%snn",nome2); strcpy(nome2,"Maria"); printf("%snn",nome2); system("pause");} 109
  110. 110. Conversão de tiposAlgumas vezes o compilador faz uma conversão automática quando vai atribuirum valor de uma expressão a uma variável. Ex.: sendo: main() { float f1,f = 21.45; char c1,c = A; int i1,i = 10; i1 = f; // i1 receberá o valor 21 printf("%dn",i1); f1 = i; // f1 receberá o valor 10.00 printf("%fn",f1); c1 = i; // c1 receberá o valor 10 printf("%dn",c1); i1 = c; // i1 receberá o valor 65 printf("%dn",i1); getch(); 110 }
  111. 111. Conversão de tiposO Programador pode “forçar” a conversão. Ex.: sendo:main(){ int a = 65; float x = 2.1, y = 8.95, z; char c; c = (char)a; printf("Valor de c ( %c ) --> %dn", c,c); c = (char)(a + (int)x); printf("Valor de c ( %c ) --> %dn", c,c); z = (float)((int)x * (int)y); printf("Valor de z ( %f ) --> %dn", z,z); z = (float)((x * y)); printf("Valor de z ( %f ) --> %dn", z,z); getch(); 111}
  112. 112. Exemplo 2#include <stdio.h>main() { int Dias; /* * Declaracao de * Variaveis */ float Anos; printf("Entre com o numero de dias: "); /* Entrada de Dados */ scanf("%d", &Dias); Anos=Dias/365.25; // Conversao Dias->Anos printf("nn%d dias equivalem a %f anos.n", Dias, Anos); system("pause");} 112
  113. 113. Exemplo 3#include <stdio.h>main() { int x; printf("Digite um numero"); scanf("%d",&x); printf("%dn",x); system("pause");} 113
  114. 114. Exemplo 4#include <stdio.h>main() { int x; printf("Digite um numero"); scanf("%d",&x); printf("O dobro e %dn", 2 * x); system("pause");} 114
  115. 115. Entrada e SaídaPara que exemplos possam ser construídos, necessitamosconhecer um pouco sobre entrada e saída de dados.Um programa que não fornece resultados nem pede valorespara operar não deve ter grande utilidade.A entrada de dados será feita pelo teclado e a saída poderáser vista na tela do computador.Com isto, é possível resolver problemas bastanteinteressantes. 115
  116. 116. Entradas e Saídas Caracteres  Tipo char.  Ocupa 8 bits. #include <stdio.h> main() { char Ch; Ch=D; printf("%c", Ch); printf("%d", Ch); // Imprime como inteiro system("pause"); } 116
  117. 117. Entradas e Saídas Para obter o caractere pressionado:  getche()  Imprime o caractere na tela antes de retorná-lo.  getch()  Apenas retorna o caratere pressionado sem imprimi-lo na tela. Essas funçoes são encontradas no arquivo conio.h que somente está disponível para Windows. Não é padrão ANSI. 117
  118. 118. ggetch()#include <stdio.h>#include <conio.h>main() { printf("Tecle algo..."); char ch=getch(); printf("Voce pressionou a tecla %cn", ch); system("pause");} 118
  119. 119. Equivalente ANSI Diferenças:  Requer o pressionamento da tecla <ENTER> após a entrada de teclado. #include <stdio.h> main() { char ch; printf("Tecle algo..."); scanf("%c", &ch); printf("Voce pressionou a tecla %cn", ch); system("pause"); } 119
  120. 120. p printf() e scanf() Forma geral da função printf():  printf (string_de_controle,lista_de_argumentos); Forma geral da função scanf():  scanf (string_de_controle,lista-de-argumentos); 120
  121. 121. Biblioteca PadrãoPara termos acesso à biblioteca que contém asfunções, macros e variáveis que facilitam a entradae saída de dados, o programa deve conter adeclaração #include <stdio.h>no início do programa.Normalmente os programadores usam os símbolosmenor (<) e maior (>), mas é possível a alternativa #include "stdio.h" 121
  122. 122. Saída - A Função printfA função printf permite que dados sejam escritos na tela docomputador.O formato é de uso simples e bastante flexível, permitindoque os dados possam ser apresentados de diversasmaneiras.Syntax: printf(controle, arg1, arg2, ...);Onde os argumentos são impressos de acordo com amaneira indicada pelo controle. Um exemplo simples podetornar a explicação mais clara. 122
  123. 123. Saída - A Função printfO programa abaixo imprime o valor da variável ano.#include <stdio.h>#include <conio.h>// Biblioteca de entrada e saída ARGUMENTOmain(){ int ano = 2011; // Declarei ano como inteiro e ja definiseu valor. printf(“ Estamos no ano %d ", ano ); getch();}Na tela do computador será impresso: CONTROLE 123 Estamos no ano 2011;
  124. 124. Saída - A Função printfO controle, que deve aparecer sempre entre " ", define comoserão impressos os argumentos.Neste controle podem existir dois tipos de informações:caracteres comuns e códigos de formatação.Os caracteres comuns, como no exemplo (Estamos noano) são escritos na tela sem nenhuma modificação.Os códigos de formatação, aparecem precedidos por um %e são aplicados aos argumentos na ordem em queaparecem. 124
  125. 125. Códigos de FormataçãoDeve haver um código de formatação para cada argumento. O código%d indica que o valor armazenado em ano deve ser impresso nanotação inteiro decimal. Código Comentário %c Caractere simples %d Inteiro decimal com sinal %i Inteiro decimal com sinal %e Real em notação científica com e %f Real em ponto flutuante %o Inteiro em base octal %s Cadeia Caracteres %u Inteiro decimal sem sinal %x Inteiro em base hexadecimal (letras minúsculas) %% Imprime o caracter % 125
  126. 126. Formatação Numérica %<numero>d Escreve um inteiro na tela, preenchendo com espaços à  esquerda para que ele ocupe pelo menos <numero> casas na tela.printf("%4d", 10);  Exibe:<espaco><espaco>10 126
  127. 127. Formatação Numérica %0<numero>d Escreve um inteiro na tela, preenchendo com zeros à  esquerda para que ele ocupe pelo menos <numero> casas na tela.printf("%04d", 10);  Exibe:0010 127
  128. 128. Formatação Numérica %<numero1>.0<numero2>d Escreve um inteiro na tela, preenchendo com espaços à  esquerda para que ele ocupe pelo menos <numero1> casas na tela e com zeros para que ele possua pelo menos comprimento <numero2>.printf("%6.04d", 10);  Exibe:<espaço><espaço>0010 128
  129. 129. Formatação Numérica %f Escreve um ponto flutuante na tela, sem formatação. printf("%f", 10.0);  Exibe:10.000000 129
  130. 130. Formatação Numérica %e Escreve um ponto flutuante na tela em notação  científica.printf("%e", 10.02545);  Exibe:1.002545e+01 130
  131. 131. Formatação Numérica %<tamanho>.<decimais>f  Escreve um ponto flutuante na tela, com tamanho <tamanho> e <decimais> casas decimais.  O ponto também conta no tamanho.printf("%6.2f", 10.0);  Exibe:<espaço>10.00 131
  132. 132. Saída justificadaUm sinal de menos para especificar que o argumento deve sertabulado a esquerda no seu campo de impressão pode seracrescentado.Exemplo a seguir ilustra os dois tipos de justificação. Observemain(){ int ano = 2007; printf("Justificado a esquerda Ano = %-8dn", ano); printf("Justificado a direita Ano = %8dn", ano); getch();} 132
  133. 133. Especificador de PrecisãoO especificador de precisão consiste de um ponto que separa onúmero que define o tamanho do campo do número que especifica omáximo número de dígitos a serem impressos a direita do ponto em umnúmero do tipo float ou double#include <stdio.h>#include <conio.h> Observemain(){ float r = 1.0/3.0; printf("O resultado e = %9.5fn", r); getch(); 133}
  134. 134. Entrada - A Função scanfA função scanf pode ser utilizada para entrada dedados a partir do teclado. Esta função éequivalente à função printf e seu formato é:Syntax: scanf(controle, arg1,arg2, ...);Uma diferença fundamental existe entre as duasfunções é que os argumentos da função scanf sãoos endereços das variáveis que irão receber osvalores lidos e não, como em printf, as própriasvariáveis. 134
  135. 135. Entrada - A Função scanfA indicação que estamos referenciando umendereço e não a variável se faz pelooperador &. Por exemplo, o comando scanf("%d %d", &a, &b)espera que dois valores inteiros sejamdigitados no teclado. O primeiro éarmazenado na variável a e o segundo emb. 135
  136. 136. Entrada - A Função scanfCada variável a ser lida, deverá ser precedida pelocaracter &Para seqüência de caracteres (%s), o caracter &não deverá ser usado. 136
  137. 137. Entrada - A Função scanfint main(){ int numero; char string[30]; printf("Digite uma string: "); scanf("%s",string); printf("Digite um numero: "); scanf("%d",&numero); printf("A string digitada foi: t%sn“,string); printf("O numero digitado foi: t%dn“, numero); system("system");} 137
  138. 138. Lendo e ImprimindoCaracteresPara ler e escrever caracteres do teclado as funções de entrada e saída mais simplessão getchar e putchar que estão na biblioteca stdio.h#include <stdio.h>#include <conio.h>main(){ char c; int i; printf("Entre com um caracter entre 0 e 9.n"); c = getchar(); printf("O caracter lido foi o "); putchar(c); getch(); 138}
  139. 139. ExercíciosEscreva um programa que declare variáveisdo tipo inteiro, char e float, inicializando-as,e imprima os seus valores. 139
  140. 140. Solução #include <stdio.h> main() { int i; char c; float f; i = 10; c = ‘A’; f = 10.5589; printf(“n Inteiro: %i“, i); printf(“n Char: %c“, c); printf(“n Real: %f“, f); system("pause"); } 140
  141. 141. ExercíciosFaça um programa capaz de ler um valorreal e escreve-lo com apenas uma casadecimal. 141
  142. 142. Solução #include <stdio.h> main() { float f; printf(“nDigite um número: “); scanf(“%f“, &f); printf(“n Real: %.1f“, f); system("pause"); } 142
  143. 143. Lendo e ImprimindoCaracteresNa definição original da função getchar a entradaé armazenada até que a tecla ENTER sejaapertada. Com isto caracteres ficam em um bufferesperando para serem tratados.Em ambientes onde é necessário tratar o caracterimediatamente esta função pode não ser útil.Muitos compiladores incluem funções para permitirentrada interativa de dados. As duas funções maiscomuns são getch e getche e seus protótipospodem ser encontrados na biblioteca <conio.h>. 143
  144. 144. Operadores Atribuição (=) Aritméticos  *e/  %  +e- 144
  145. 145. Operadores Relacionais== igual!= diferente de> maior que< menor que>= maior ou igual<= menor ou igual 145
  146. 146. Operadores Lógicos && (e) || (ou) ! (não) 146
  147. 147. Operador Ternário Operador que usa três argumentos:  expr ? valor1 : valor2  Se expr avaliar for verdadeira, valor1 será o resultado da expressão.  Se expr for falsa, valor2 será o resultado da expressão. int x, y, maior; ... maior = x > y ? x : y; ... 147
  148. 148. Operador Ternário#include <stdio.h>main() { int n1, n2; printf("Digite um numero: "); scanf("%d", &n1); printf("Digite outro numero: "); scanf("%d", &n2); printf("O maior e: %dn", n1 > n2 ? n1 : n2); system("pause");} 148
  149. 149. Expressões O resultado de uma expressão lógica ou relacional é:  0 (falso)  1 ou qualquer outro número diferente de zero (verdadeiro) Para facilitar:  NÃ0  S1M 149
  150. 150. Operadores de incremento edecremento Incremento (++) Decremento (--) a++;  Incrementa o valor da variável a em uma unidade. A posição do operador de incremento e decremento determina a ordem de execução do que está em seu derredor. 150
  151. 151. Operadores de incremento edecremento#include <stdio.h>main() { int a = 10; printf("%d", ++a); system("pause");} #include <stdio.h> main() { int a = 10; printf("%d", a++); system("pause"); } 151
  152. 152. Atribuições SimplificadasComando Exemplo Corresponde a:+= a += 2 a = a + 2;-= a -= 2 a = a - 2;∗= a *= 2; a = a * 2;/= a /= 2; a = a / 2;%= a %= 2; a = a % 2; 152
  153. 153. Linguagem CEstruturas de Controle Desvio / Decisão 153
  154. 154. if ... else ... if (expressão) {if (expressão) { comandos;comandos; } else {} comandos; } #include <stdio.h>#include <stdio.h> main() {main() { int idade = 21; int idade = 15; if (idade < 18) { if (idade < 18) { printf("Invalidan"); printf("Invalidan"); } else { } printf("OKn"); system("pause"); }} system("pause"); } 154
  155. 155. Par ou ímpar #include <stdio.h> main() { int a; printf("Digite um numero inteiro: "); scanf("%d", &a); if (a % 2 == 0) { printf("O valor eh par.n"); } else { printf("O valor eh impar.n"); } system("pause"); } 155
  156. 156. Exercício Escreva um programa em linguagem C para receber um número e dizer se ele é positivo, negativo ou zero. 156
  157. 157. Positivo, Negativo ou Zero #include <stdio.h> main() { int n; printf("Digite um numero: "); scanf("%d", &n); if (n > 0) { printf("positivo"); } else if (n < 0) { printf("negativo"); } else { printf("zero"); } printf("n"); system("pause"); } 157
  158. 158. Decisão Múltipla O comando switch simplifica uma expressão onde uma variável inteira ou caracter deve fazer diferentes operações, dependendo do seu valor. switch (variavel) { case valor: comandos; break; case valor: comandos; break; default: comandos; } 158
  159. 159. Decisão Múltipla#include <stdio.h>main() { int num; printf("Digite um numero inteiro: "); scanf("%d", &num); switch (num) { case 1: printf("um"); break; case 2: printf("dois"); break; case 3: printf("tres"); break; case 4: printf("quatro"); break; case 5: printf("cinco"); break; default: printf("nao conheco"); } printf("n"); system("pause"); 159}
  160. 160. Exercício Dada uma letra, escreva na tela se essa letra é ou não é uma vogal.  Dica: a função toupper(c) converte um char para caixa alta e a função tolower(c) converte um char para caixa baixa. 160
  161. 161. Exercício#include <stdio.h>main() { char letra; printf("Digite uma letra: "); scanf("%c", &letra); switch (tolower(letra)) { case a: case e: case i: case o: case u: printf("A letra %c e uma vogal", letra); break; default: printf("A letra %c nao e uma vogal", letra); } printf("n"); system("pause");} 161
  162. 162. Linguagem CEstruturas de Controle Repetição 162
  163. 163. Laços condicionais Laço condicional com testewhile (expressão) { no início comandos;} Laço condicional com testedo { no final comandos;} while (expressão); 163
  164. 164. Laço condicional ... int i = 0; while (i < 10) { printf("olá!"); i = i + 1; } ... 164
  165. 165. Laços usando for Em C, a declaração da variável deve ser realizada antes do for. for (inicializacao; condicao; incremento) { codigo; } int i; for (i = 0; i < 10; i++) { printf("olá!"); } 165
  166. 166. I’ll not throw paper airplanes in class 166
  167. 167. I’ll not throw paper airplanes in class #include <stdio.h> int main(void) { int count; for(count=1;count<=500; count++) printf("I’ll not throw paper airplanes in class!"); system(”pause”); return(0); } 167
  168. 168. Exemplo – Linha de *#include <stdio.h>int main() { int i, n; printf("Digite um numero: "); scanf("%d", &n); for (i=0; i < n; i++) { printf("*"); } printf("n"); system(”pause”) ; return(0);} 168
  169. 169. Exemplo – Quadrado de *#include <stdio.h>int main() { int coluna, linha, n; printf("Digite um numero: "); scanf("%d", &n); for (linha=1; linha <= n; linha++) { for (coluna=1; coluna <= n; coluna++) { printf("* "); } printf("n"); } system(”pause”) ; return(0); 169}
  170. 170. Controlando loops break e continue main() { int i; for (i = 0; i < 100; i++) { if(i > 50 && i < 60) { continue; } printf("%dn", i); } system(”pause”)~; } 170
  171. 171. Linguagem CFunções 171
  172. 172. Introdução às funções Uma função é um bloco de código de programa que pode ser usado diversas vezes em sua execução. O uso de funções permite que o programa fique mais legível, mais bem estruturado. Um programa em C consiste, no fundo, de várias funções colocadas juntas. 172
  173. 173. Introdução às funções Argumentos  Argumentos são as entradas que a função recebe. … através dos argumentos que passamos parâmetros para a função.  As funções printf() e scanf() são funções que recebem argumentos. 173
  174. 174. Declaraçãotipo_de_retorno nome_da_função (declaração_de_parâmetros) { corpo_da_função } 174
  175. 175. Exemplo – media de 2números#include<stdio.h>float media2(float a, float b) { return ((a + b) / 2.0);}int main() { float num_1, num_2, media; puts("Digite dois numeros:"); scanf("%f %f", &num_1, &num_2); media = media2(num_1, num_2); printf("nA media destes numeros eh %f", media); system(”pause”);} 175
  176. 176. Exemplo - soma #include <stdio.h> float soma(float a, float b) { return a + b; } int main() { float n1, n2; printf("Digite um numero: "); scanf("%f", &n1); printf("Digite outro numero: "); scanf("%f", &n2); printf("Soma: %fn", soma(n1, n2)); system(”pause”); return 0; 176 }
  177. 177. Procedimentos Em C não há procedimentos. O mais próximo de procedimentos em C são as funções que nada retornam, ou seja, cujo retorno é void. 177
  178. 178. Exemplo - repeticao#include <stdio.h>void repete(char texto[], int n) { int i; for (i=0; i < n; i++) { printf("%s", texto); }}int main() { char palavra[20]; printf("Digite uma palavra: "); fgets(palavra, 20, stdin); repete(palavra, 10); system(”pause”); return 0; 178}
  179. 179. Exemplo de Função#include <stdio.h>/* Funcao simples: so imprime Ola! */mensagem() { printf("Ola! ");}main() { mensagem(); printf("Eu estou vivo!n"); system("pause");} 179
  180. 180. Exemplo de função#include <stdio.h>/* Calcula o quadrado de x */int square(int x) { return x * x;}main() { int num; printf("Entre com um numero: "); scanf("%d", &num); printf("nnO quadrado e %dn", square(num)); system("pause");} 180
  181. 181. Exemplo de função #include <stdio.h> int prod(int x, int y) { return (x*y); } main() { int saida; saida=prod(12, 7); printf("A saida e: %dn", saida); system("pause"); } 181
  182. 182. Exemplo de função #include <stdio.h> float prod(float x, float y) { return (x*y); } main() { float saida; saida=prod(45.2, 0.0067); printf("A saida e: %fn", saida); system("pause"); } 182
  183. 183. Exercício Escreva uma função para receber dois números e, depois, exibir a sua soma. 183
  184. 184. Solução#include <stdio.h>main() { float n1, n2; printf("Digite um numero: "); scanf("%f", &n1); printf("Digite outro numero: "); scanf("%f", &n2); printf("A soma e: %fn", (n1 + n2)); system("pause");} 184
  185. 185. ExercíciosSabendo que os argumentos da função"printf" podem ser expressões (a+b, a/b,a*b...), e não somente argumentos, faça umprograma capaz de ler um valor inteiro X eimprimir na tela o cubo, o quadrado e ametade de X.Ex.: para X= 6, imprimirCubo = 18; Quadrado = 36; Metade = 3. 185
  186. 186. Solução#include <stdio.h>main() { float n1; printf("Digite um numero: "); scanf("%f", &n1); printf(“n Cubo: %f“, n1 * n1 * n1); printf(“n Quadrado: %f“, n1 * n1); printf(“n Metade: %f“, n1 / 1); system("pause");} 186

×