1 - INTRODUÇÃO: O QUE É C?



Documentos relacionados
Conceitos básicos da linguagem C

INTRODUÇÃO À LINGUAGEM C++

Linguagem C. Programação Estruturada. Fundamentos da Linguagem. Prof. Luis Nícolas de Amorim Trigo

INF 1007 Programação II

Programação: Tipos, Variáveis e Expressões

Algoritmos e Programação

5 - Vetores e Matrizes Linguagem C CAPÍTULO 5 VETORES E MATRIZES

Linguagem de Programação I

Introdução a Computação

Variáveis e Comandos de Atribuição

Programação Engenharia Informática (11543) 1º ano, 1º semestre Tecnologias e Sistemas de Informação (6619) 1º ano, 1º semestre

Linguagem C. TGSI Lógica de Programação / Linguagem C Prof. Marcos Roberto

Convertendo Algoritmos para a Linguagem C

Introdução à Programação

Estrutura de Dados Básica

3. INTRODUÇÃO À LINGUAGEM C 3.1. CONCEITOS BÁSICOS. Lógica de Programação

5 Apresentando a linguagem C

INF 1005 Programação I

Linguagem C: variáveis, operadores, entrada/saída. Prof. Críston Algoritmos e Programação

LINGUAGEM C. Estrutura básica de um programa

String em C++ Verificando o tamanho da string

Algoritmos e Programação Estruturada

MC102 Algoritmos e programação de computadores Aula 3: Variáveis

Algoritmos e Estruturas de Dados I 01/2013. Estruturas Condicionais e de Repetição (parte 2) Pedro O.S. Vaz de Melo

Programação: Estruturas de seleção

INF 1005 Programação I

Java Como Programar, 8/E

AULA 1 AULA 2. Estudo dirigido para as três primeiras AULAS de LPI Professora ANITA MACIEL 1º ESTUDO DIRIGIDO

Linguagem C Tipos de Dados. void; escalares; sizeof Vectores; strings em C Estruturas Introdução ao pré-processador

Capítulo 2: Introdução à Linguagem C

Apostila de Introdução à Linguagem C

Tabela ASCII de caracteres de controle

15 a Aula Subprogramação /Subalgoritmos Função e Procedimento

Introdução a Programação. Ponteiros e Strings, Alocação Dinâmica

Computadores Digitais 2. Prof. Rodrigo de Souza Couto

14.1 Vetor - Problemas

Linguagem de Programação JAVA. Técnico em Informática Professora Michelle Nery

9 Comandos condicionais

Introdução à Programação. Armazenamento de Grande Quantidade de Informação Usando Vetores

compreender a importância de cada estrutura de controle disponível na Linguagem C;

Resumo da Matéria de Linguagem de Programação. Linguagem C

CONCEITOS BÁSICOS PARA A CONSTRUÇÃO DE ALGORITMOS PARA COMPUTADORES. Isac Aguiar isacaguiar.com.br isacaguiar@gmail.com

LP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br

Algoritmos e Programação. Curso de Engenharia de Produção Prof. Ms. Rogério Cardoso rogerio.cardoso@aedu.com professor@rogeriocardoso.com.

IFTO LÓGICA DE PROGRAMAÇÃO AULA 05

Curso de Linguagem C

7. Estrutura de Decisão

1. Fazer um programa em C que pergunta um valor em metros e imprime o correspondente em decímetros, centímetros e milímetros.

20 Caracteres - Tipo char

INF 1005 Programação I lista 12

LÓGICA DE PROGRAMAÇÃO. PROFª. M.Sc. JULIANA H Q BENACCHIO

Algoritmos e Estruturas de Dados I. Universidade Federal de São João del-rei Pedro Mitsuo Shiroma Sala 119 Bloco 3

Linguagem e Técnicas de Programação I Tipos de dados, variáveis e constantes. Prof. MSc. Hugo Souza Material desenvolvido por: Profa.

ALGORITMOS E PROGRAMAÇÃO PARA COMPUTADORES II

Resumo da Introdução de Prática de Programação com C. A Linguagem C

Neste artigo estudaremos os conceitos relacionados às matrizes unidimensionais (vetores) e multidimensionais.

P r o g r a m a ç ã o d e C o m p u t a d o r e s 1 o S e m P r o f. A n d r é A m a r a n t e L u i z L A B 5 tag %2d while printf PE1:

Estrutura Condicional em Java

Linguagem e Técnicas de Programação I Operadores, expressões e funções. Prof. MSc. Hugo Souza Material desenvolvido por: Profa.

2. OPERADORES ALGORITMOS, FLUXOGRAMAS E PROGRAMAS FUNÇÕES... 10

AULA 2: INTRODUÇÃO A LINGUAGEM DE C. Curso: Ciência da Computação Profª.: Luciana Balieiro Cosme

Estruturas de Dados. Alguns dados não costumam ser tão simples assim... Podem ser compostos por vários dados distintos

LTP-IV. Prof. Dr. Silvio do Lago Pereira. Departamento de Tecnologia da Informação Faculdade de Tecnologia de São Paulo

REPRESENTAÇÃO DE DADOS EM SISTEMAS DE COMPUTAÇÃO AULA 03 Arquitetura de Computadores Gil Eduardo de Andrade

9.1.2 Laços Controlados por Entrada: Contador

José Romildo Malaquias

Linguagens de Programação

Regras Métodos Identificadores Variáveis Constantes Tipos de dados Comandos de atribuição Operadores aritméticos, relacionais e lógicos

VIII. VARIÁVEIS. Tabela I ARQUITETURA DA MEMÓRIA. 0x0000 0x34 0x0001 0xB0 0x0002 0x23. 0xFFFF 0x00

Implementando uma Classe e Criando Objetos a partir dela

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

1 Funções básicas de implementação de arquivos

2. Constantes e Variáveis

Capítulo 2. VARIÁVEIS DO TIPO INTEIRO

Algoritmo e Técnica de Programação - Linguagem C

Linguagem de Programação

ITENS FUNDAMENTAIS. Profª Angélica da Silva Nunes

Universidade Federal de Rondônia Técnicas de Desenvolvimento de Programas Lista 4

cast poderia ser usado também para transformar um real (float) em inteiro. A sintaxe C (float)i pode ser substituída em C++ por float(i).

LÓGICA DE PROGRAMAÇÃO. Professor Celso Masotti

Computação II Orientação a Objetos

Programando em C++ Histórico da Linguagem C

Linguagens de Programação

INTRODUÇÃO AO C++ SISTEMAS DE INFORMAÇÃO DR. EDNALDO B. PIZZOLATO

Introdução à Linguagem C

10/02/2015. Introdução. Podemos classificar os tipos de dados a serem processados em dados e instruções Dados: Algoritmos e Lógica de Programação

Aula de JavaScript 05/03/10

O COMPUTADOR. Introdução à Computação

Componentes da linguagem C++

CADERNOS DE INFORMÁTICA Nº 1. Fundamentos de Informática I - Word Sumário

Linguagem C: Estruturas de Controle. Prof. Leonardo Barreto Campos 1

Programação. MEAer. Bertinho Andrade da Costa. Instituto Superior Técnico. Introdução ao Pré-Processador. 2011/2012 1º Semestre

Curso de Programação Computadores

Curso Prático de C++

LINGUAGEM C UMA INTRODUÇÃO

Transcrição:

1 - INTRODUÇÃO: O QUE É C? C é uma linguagem de programação de computadores; Desenvolvida em 1972 por Dennis Ritchie no Bell Lab para uso no sistema operacional Unix; Foi amplamente aceita por oferecer aos programadores o máximo em controle e eficiência; A linguagem C foi criada com os objetivos principais em mente: o Facilitar a criação de programas extensos com menos erros, recorrendo ao paradigma da programação algorítmica ou procedimental; o Sobrecarregando menos o autor do compilador, cujo trabalho complica-se ao ter de realizar as características complexas da linguagem; COMPILADORES E INTERPRETADORES Os termos compiladores e interpretadores referem-se à maneira como um programa é executado. Em teoria, qualquer linguagem de programação pode ser compilada ou interpretada. Interpretadores e compiladores são simplesmente programas sofisticados que operam sobre o código-fonte do seu programa. Interpretador lê o código-fonte do seu programa uma linha por vez, executando a instrução específica contida nessa linha. Compilador lê o programa inteiro e converte-o em um código-objeto, que é uma tradução do códigofonte do programa em uma forma que o computador possa executar diretamente. Quando um interpretador é usado, deve estar presente toda vez que você executar o seu programa. O processo é lento e ocorre toda vez que o programa for executado. Um compilador, ao contrário, converte seu programa em um código-objeto que pode ser executado diretamente por seu computador. Como o compilador traduz seu programa de uma só vez, tudo o que você precisa fazer é executar seu programa diretamente, geralmente apenas digitando seu nome. Assim, o tempo de compilação só é gasto uma vez, enquanto o código interpretado incorre neste trabalho adicional cada vez que o programa executa. COMPILADORES C Existem diversos compiladores C. A decisão sobre qual compilador utilizar pode ser baseada em vários fatores, como por exemplo: Qualidade do compilador; Rapidez; Padronização da linguagem; A interface com o usuário é agradável - possui ou não um IDE (Integrated Development Enviroment) Possui diversas opções de compilação; Sistema Operacional que o compilador funciona (gera códigos); Custo do compilador; Documentação disponível e Suporte; A LINGUAGEM C É CASE SENSITIVE Um ponto de suma importância: C é "case sensitive", ou seja, maiúsculas e minúsculas fazem diferença. Se declararmos uma variável com o nome soma ela será diferente de Soma, SOMA, SoMa ou soma. Da mesma maneira, os comandos (todas as palavras-chave) da linguagem C if e for, por exemplo, só podem ser escritos em minúsculas, pois senão o compilador não irá interpretá-los como sendo comandos, mas sim como variáveis. ESTRUTURA DE UM PROGRAMA EM LINGUAGEM C: Diretiva de Compilação; Definição de Tipos de Dados; Protótipos de Funções;

Funções Comentários; É uma diretiva de compilação. Toda diretiva de compilação inicia com #include. São comandos que instruem ao compilador a realização de tarefas antes de realizar a compilação. No arquivo stdio.h existem declarações de funções úteis para entrada e saída de dados, onde: std = standard, que significa padrão, em inglês; io = Input/Output, entrada e saída. Então: stdio = entrada e saída padronizada. As declarações expressam as partes do programa, podendo dar significado a um identificador, alocar memória, definir conteúdo inicial, definir funções. As funções especificam as ações que um programa executa quando roda. Uma função importante e obrigatória em todo programa em C é a função main (cuja tradução é principal). Esta será sempre a primeira função do programa a ser executada. main ( ) <comandos> O corpo (conteúdo) da função é delimitado por chaves. O código que estiver dentro das chaves será executado sequencialmente quando a função for chamada. 2 VARIÁVEIS E CONSTANTES: Variáveis e constantes são os elementos básicos que um programa manipula. Variáveis São pequenos pedaços alocados na memória do computador para guardar informações que mudam no decorrer do programa. Constantes São pequenos pedaços alocados na memória do computador para guardar informações que NÃO mudam no decorrer do programa. TIPOS DE DADOS TIPOS BÁSICOS: Os dados podem assumir cinco tipos básicos em C que são: char: Caractere: O valor armazenado é um caractere. Caracteres geralmente são armazenados em códigos (usualmente o código ASCII). int: Número inteiro é o tipo padrão e o tamanho do conjunto que pode ser representado normalmente depende da máquina em que o programa está rodando. float: Número em ponto flutuante de precisão simples. São conhecidos normalmente como números reais. double: Número em ponto flutuante de precisão dupla void: Este tipo serve para indicar que um resultado não tem um tipo definido. Uma das aplicações deste tipo em C é criar um tipo vazio que pode posteriormente ser modificado para um dos tipos anteriores. VARIÁVEIS NOMES DAS VARIÁVEIS Existem algumas regras básicas que regulam a o batismo de variáveis. Estas regras básicas são: Todo nome só pode conter letras e dígitos; O caractere "_" é contado como uma letra; Todo primeiro caractere deve ser sempre uma letra;

Letras maiúsculas e minúsculas são consideradas caracteres diferentes; Palavras reservadas não podem ser usadas como nome de variáveis. o Palavras reservadas: auto / break / case / char / const / continue / default / do / double / else / extern / for / float / short / struct / union / unsigned / void / while É boa política escolher nomes que significam alguma coisa e indiquem a função da variável. valor, soma, total, nome, raio. DECLARAÇÃO DE VARIÁVEIS: Para serem usadas, as variáveis precisam ser declaradas de modo que o compilador possa reservar espaço na memória para o valor a ser armazenado. FORMA DE DECLARAÇÃO DE VARIÁVEIS: <tipo> <nome_var>; ou <tipo> <nome_var1>, <nome_var2>,...,<nome_varn>; É importante não esquecer que quando se declara uma variável, um espaço num determinado endereço na memória é alocado para armazenar um dado que obrigatoriamente tem que ser do mesmo tipo que o da variável. Toda e qualquer variável deve ser declarada e sua declaração deve ser feita antes de sua utilização no programa. Exemplos: int i; int a, b, c; double salario; ATRIBUIÇÃO DE VALORES ÀS VARIÁVEIS Após ser declarada, a variável pode receber valores. O operador de atribuição "=" indica que o valor à direita será atribuído à variável. Durante a declaração da variável int i = 0, j = 10; float raio = 2.54; char c = 'd'; VARIÁVEIS LOCAIS E GLOBAIS Uma variável local é aquela declarada dentro do corpo de uma certa função e somente pode ser utilizada por aquela função e nenhuma outra mais. Já a variável global, que poderá ser utilizada por todas as funções existentes em seu programa, é declarada fora, antes do início do corpo da função principal do programa main(). Exemplos: int a; main () a = 3;

CONSTANTES Constantes são usadas em expressões para representar vários tipos de valores. Em C existem regras rígidas para determinar como devem ser escritos estes valores. A seguir iremos mostrar as regras para escrever constantes. CONSTANTES INTEIRAS São valores numéricos sem ponto decimal, precedidos ou não por um sinal. Não é possível separar o sinal do valor numérico. 1997; -3; +5; 0; -32000; CONSTANTE EM PONTO FLUTUANTE São também conhecidos como constantes reais. Cada constante de ponto flutuante é considerada ser do tipo double. Uma constante em ponto flutuante é normalmente representada com ponto decimal, precedidas ou não de um sinal, podendo ser seguidas por um expoente. Quando a constante é seguida por um expoente a notação é conhecida como "científica". Exemplos: +23.45 123.4567 CONSTANTES EM CARACTERES Uma constante em caractere é um único caractere escrito entre ', como em 'a', podendo participar normalmente de expressões aritméticas. O valor que entra na expressão é o do código usado para representar o caractere. Em adição, uma constante de tamanho igual a um byte pode ser usada para definir um constante deste tipo, escrevendo, por exemplo, '\ddd', onde ddd é uma constante com um até três dígitos octais. Exemplos: 'a' caractere a; 'A' caractere A; '\0141' Constante octal correspondente ao caractere 'a'; CONSTANTES EM CADEIAS DE CARACTERES Em alguns casos, vamos usar a palavra cadeia para significar cadeia de caracteres (string em inglês). Uma constante do tipo cadeia de caracteres é uma sequência de qualquer número de caracteres. "alo mundo!!!"

3 - OPERADORES: Operadores Relacionais = Atribuição!= Diferente <= Menor igual >= Maior igual == Igual % Resto da divisão entre inteiros Operadores Lógicos And (e) && Or (ou)! Not (não) Para as variáveis, devem ser feitas no início do programa (ou de um bloco) as declarações (de tipo) de variáveis. Declarada uma variável, toda vez que ela for referenciada em qualquer comando do programa, o computador vai trabalhar com o conteúdo de seu endereço, que é o valor da variável. Uma variável não pode ter o mesmo nome de uma palavra-chave de C, como por exemplo: main, count, int, float, char, short, return, case, void. As variáveis só podem armazenar informações ou dados sempre de um mesmo tipo (inteiro, real, caractere ou char). OPERADORES ARITMÉTICOS: Aritmético Operação Prioridade + Adição 5 - Subtração 5 % Resto da divisão 4 * Multiplicação 3 / Divisão 3 ++ Incremento 2 -- Decremento 2 + Manutenção do sinal 1 - Inversão do sinal 1 Sendo que varia de 1 para a prioridade máxima a 5. FUNÇÕES MATEMÁTICAS Necessário o uso da biblioteca math.h Trigonométricas sin (): Retorna o valor do seno. Recebe como argumento o valor dos graus em double. cos (): Retorna o valor do cosseno. Recebe como argumento o valor dos graus em double. tan (): Retorna o valor da tangente. Recebe como argumento o valor dos graus em double. Logaritmicas log (): Retorna o valor do logaritmo na base 2. Exige um argumento do tipo double. log10 (): Retorna o valor do logaritmo na base 10. Exige um argumento do tipo double.

Potências pow (): Retorna o valor da base elevada ao expoente. Recebe dois argumentos do tipo double, o primeiro é a base e o segundo o expoente. Por exemplo: se quisermos saber o resultado da operação 2 10, faríamos pow (2, 10). sqrt (): Retorna o valor da raiz quadrada. Recebe como argumento um double do qual ele deve extrair a raiz. a = a + b; a = 4 * 2 + 3; Observação: a++ é similar a a = a + 1; b-- é similar a b = b - 1; 4-FUNÇÕES DE ENTRADA E SAÍDA 4.1-FUNÇÃO PRINTF Através da função pré-definida printf(), cujo protótipo está contido também no arquivo stdio.h, poderemos imprimir na tela informações. Sintaxe: printf( Expressão, lista de argumentos); Expressão Mensagens que serão exibidas Lista de argumentos Pode conter identificadores de variáveis, expressões aritméticas ou lógicas e valores constantes. IMPRESSÃO DE TIPOS DE DADOS main() printf( Alo Galera!! ); Código Tipo Elemento armazenado %c Char Um Único Caractere %d ou %i Int Um Inteiro %f Flout Um Número em Ponto Flutuante %lf Double Ponto Flutuante com Dupla Precisão %e Flout ou Double Um Número na Notação Científica %s... Uma Cadeia de Caracteres main() printf( %s está a %d milhões de milhas do sol, Vênus, 67);

main( ) printf( Valor inteiro atribuído foi %d para o caractere %c e um float foi de %f, 99, a, 1.45); main() printf( Se quisesse imprimir uma string : %s, Minha Vida em Jogo ); IMPRESSÃO DE CÓDIGOS ESPECIAIS Código Ação \n Leva o cursor para a próxima linha \t Executa uma tabulação \b Executa um retrocesso \f Leva o cursor para a próxima página \a Emite um sinal sonoro (beep) \ Exibe o caractere " \\ Exibe o caractere \ %% Exibe o caractere % main() printf( Default: %f \n, 3.1415169265); printf( Uma casa: %.1f \n, 3.1415169265); printf( Duas casas: %.2f \n, 3.14); printf( Três casas: %3.f \n, 3.141); Embora o número digitado possua 10 casas decimais imprimirá respectivamente, 6, 1, 2 e 3 casas decimais. 4.2 - FUNÇÃO SCANF() Ela é o complemento de printf() e nos permite ler dados formatados da entrada padrão (teclado). A lista de argumentos deve consistir nos endereços das variáveis. A linguagem C oferece um operador de endereço e referenciado pelo símbolo "&". Operador de endereço &: Antes de cada variável para indicar o endereço de memória no qual o conteúdo da variável estará armazenado. Este é uso obrigatório quando tratamos variáveis do tipo numérica (inteira ou real). Sintaxe: scanf( expressão, argumentos); int m; scanf ( %d, &m); /* %d indicativo do tipo, neste caso do tipo inteiro. */ /* &m operador utilizado para obter o endereço de memória da variável. */

int main () int idade; Printf( Digite a sua idade: ); Scanf( %d, &idade); Printf( A sua idade é %d, idade); Return 0; 4.3 Função Gets() A função gets() lê uma string do teclado. Sua forma geral é: gets (nome_da_string); main () char nome[30]; printf ("Digite o seu nome: "); gets (nome); printf ("\n\n Ola %s", nome); CONVERSÃO DE TIPOS DE DADOS Muitas vezes nós queremos carregar o valor de uma variável de um determinado tipo para uma variável de outro tipo. Para isso é preciso converter o valor que está na variável. A conversão é feita colocando o tipo desejado antes do valor queremos converter. main() char inteiro; float real = 10.5; inteiro = (char)real; printf("%d", inteiro); 5 - COMANDO CONDICIONAL IF/ELSE 5.1 - COMANDO CONDICIONAL IF O comando if é uma estrutura de decisão que permite ou não que uma sequência de comandos seja executada (ou não executada), dependendo do resultado de uma condição pré-estabelecida. Sintaxe: if (<expressão>) <sequência de comandos> Ou if (<expressão>) <único comando>; A expressão sempre será avaliada logicamente (verdadeiro ou falso), correspondendo ao FALSO o valor zero (==0) e os demais ao VERDADEIRO (!=0).

Definir qual é o menor número digitado pelo usuário: int main() int a, b, menor; printf( Digite dois números inteiros ); scanf( %d %d, &a, &b); menor = a; if a > b menor = b; printf( O menor número digitado foi %d, menor); return 0; 5.2 - COMANDO CONDICIONAL IF ELSE O comando if pode decidir entre duas sequências de comandos qual vai ser a executada. Sintaxe: if (<expressão>) /* caso a expressão verificada retorne verdadeiro*/ <sequência de comandos> Else /* caso a expressão verificada retorne falso*/ <sequência de comandos> Verificar a paridade de um número. int main() int x; printf("digite um número inteiro: "); scanf("%d", &x); if (x % 2 == 0) printf("%d e' par \n", x); else printf("%d e' impar \n", x); int main() if <condição 1> <sequencia de comandos 1> if <condição 2> < sequencia de comandos 2> else < sequencia de comandos 2>

else < sequencia de comandos 1> if <condição 3> < sequencia de comandos 3> int main() /* a função irá retornar um valor inteiro ao final da execução*/ int idade; printf("informe sua idade: "); scanf("%d", &idade); if (idade < 20) if (idade < 13) printf("infantil."); else printf("adolescente"); else if (idade < 50) printf("adulto"); else printf("idoso"); return 0; Observe que as chaves não foram utilizadas nesse exemplo do segundo e do terceiro else uma vez que dentro do else há apenas uma condição quando há mais que uma torna-se necessária a utilização de chaves. Função strcmp A função utilizada para comparar o conteúdo de uma string é a strcmp() que está definida na biblioteca string.h. Obs: strcmp() compara o conteúdo, ou seja, se as palavras são iguais, e não se tem o mesmo tamanho. Sintaxe: strcmp(palavra1,palavra2); Onde palavra1 e palavra2 são variáveis do tipo string que devem ser comparadas. A função strcmp() pode retornar um valor nulo (zero), positivo ou negativo. Quando as palavras comparadas são iguais, a função retorna 0. Quando as palavras comparadas são diferentes e a primeira é maior, a função retorna um valor positivo, caso contrário, a função retorna negativo, sendo que no alfabeto a menor letra é a, e a maior, z. strcmp(maior,menor) == 1 strcmp( bb, aa ) == 1 strcmp(menor,maior) == -1 strcmp( aa, bb ) == -1 strcmp(grande,grande) == 0 strcmp( bb, bb ) == 0 strcmp(pequeno,pequeno) == 0 strcmp( aa, aa ) == 0

main() char tamanho[7]; printf( Digite o tamanho : ); scanf( %s, &tamanho); if (strcmp(tamanho, pequeno ) == 0) printf( informação correto! ); else printf( tamanho incompatível! ); Função strlen A função strlen() retorna o comprimento da string fornecida. O terminador nulo não é contado. Isto quer dizer que, de fato, o comprimento do vetor da string deve ser um a mais que o inteiro retornado por strlen(). Sintaxe: strlen (string); #include <string.h> main () int size; char str[100]; printf ("Entre com uma string: "); gets (str); size=strlen (str); printf ("\n\na string que voce digitou tem tamanho %d", size); Função strcat Esta função é utilizada para concatenar (unir / juntar) duas strings. A segunda string será adicionada no final da primeira string indicada. Lembre-se que a soma dos valores de caracteres da str1 + str2 não podem exceder o tamanho da str1. Podemos também substituir str2 por um conjunto de caracteres manualmente. Sintxe: strcat (str1,str2); #include<stdio.h> #include<string.h> main() char str1[40],str2[10]; strcpy(str1,"teste"); strcpy(str2," INICIAL"); strcat(str1,str2); printf("%s",str1);

Resultado na tela: TESTE INICIAL TRABALHANDO COM CARACTERES, A BIBLIOTECA CTYPE Um dos fatores importantes de uma boa programação é saber lidar com os caracteres, principalmente, tratando-se da linguagem C que é case sensitive (diferencia maiúsculas de minúsculas). Veremos uma biblioteca que lida exatamente com caracteres individuais, a biblioteca ctype.h. Dentre as funções encontradas nesta biblioteca há aquelas que modificam o estado da letra (maiúsculas e minúsculas) e até mesmo funções que servem para descobrir se o que foi digitado é um ponto, vírgula, número, espaço, ctrl, etc. Primeiramente, vamos as mais comuns que são para converte um caractere em letra maiúscula ou minúscula. toupper esta função recebe um argumento que deve ser um caractere e retorna o caractere correspondente em formato maiúsculo, se o caractere já for maiúsculo, a função não o modifica. tolower esta função recebe um argumento que deve ser um caractere e retorna o caractere correspondente em formato minúsculo, se o caractere já for minúsculo, a função não o modifica. isalnum verifica se o caractere ou inteiro passado como parâmetro é alfanumérico. Isso inclui todos os números e as letras do alfabeto, tanto maiúsculas quanto minúsculas. isalpha verifica se o caracter ou inteiro passado como parâmetro é alfabético. Isso inclui todas as letras do alfabeto, tanto maiúsculas quanto minúsculas. isdigit verifica se o caracter ou inteiro passado como parâmetro é um digito. Isso inclui todos os números. ispunct verifica se o caracter ou inteiro passado como parâmetro é uma pontuação. Isso inclui qualquer tipo de pontuação como.,?! ^ ' ~ : ;. Porém, não é capaz de verificar se uma letra é acentuada. isspace verifica se o caracter ou inteiro passado como parâmetro é um espaço em branco. islower verifica se o caracter ou inteiro passado como parâmetro é uma letra minúscula isupper verifica se o caracter ou inteiro passado como parâmetro é uma letra maiúscula iscntrl verifica se o caracter ou inteiro passado como parâmetro é um caracter de comando. Isso inclui CTRL, ALT, ENTER, BACKSPACE, etc. isxdigit verifica se o caracter ou inteiro passado como parâmetro é compatível com um número hexadecimal. Isso inclui todos os número (0-9) e qualquer letra entre A e F (não importa se minúsculo ou maiúsculo). EXEMPLO: #include <stdlib.h> #include <ctype.h> main() int letra; printf(" Digite uma letra: "); letra = getchar(); printf("\n\na letra que voce digitou e:\n"); if (isalnum (letra)) printf("\nalfanumerico"); if (isalpha (letra)) printf("\nletra"); if (isdigit (letra)) printf("\nnumero"); if (ispunct (letra)) printf("\npontuacao"); if (isspace (letra)) printf("\num espaco em branco");

if (islower(letra)) printf("\nminusculo"); if (isupper(letra)) printf("\nmaiusculo"); if (iscntrl(letra)) printf("\nbotao de controle"); if (isxdigit(letra)) printf("\ncapaz para escrita em hexadecimal"); DESVIOS Desvios são instruções que desviam a sequência de execução dos comandos para outro ponto especificado do programa. Desvio goto Esta instrução é chamada de desvio de fluxo. A instrução desvia o programa para um rótulo (posição identificada) no programa. Sintaxe: A sintaxe da instrução goto é a seguinte: goto rotulo;... rotulo: < comando>; #include <stdlib.h> main() int num; inicio: printf("digite valores:"); scanf("%d", &num); if (num <= 0) goto inicio; num = num + 1; fim: printf("valor com Incremento: %d", num); system ("pause"); FUNÇÕES - DEFINIÇÃO Conjunto de comandos agrupados em um bloco que recebe um nome e através deste pode ser ativado. Por que usar Funções? Para permitir o reaproveitamento de código já construído; Para evitar que um trecho de código que seja repetido várias vezes dentro de um mesmo programa; Para permitir a alteração de um trecho de código de uma forma mais rápida. Com o uso de uma função é preciso alterar apenas dentro da função que se deseja; Para que os blocos do programa não fiquem grandes demais e, por consequência, mais difíceis de entender;

Para facilitar a leitura do programa-fonte de uma forma mais fácil; Para separar o programa em partes (blocos) que possam ser logicamente compreendidos de forma isolada. Parâmetros Estes parâmetros possibilitam que se definida sobre quais dados a função deve operar. Para definir os parâmetros de uma função o programador deve explicitá-los como se estive declarando uma variável, entre os parênteses do cabeçalho da função. Caso precise declarar mais de um parâmetro, basta separá-los por vírgulas. A seguir temos a função SOMA que possui dois parâmetros, sendo o primeiro um float e o segundo um int. void SOMA(float a, int b) // basta separar por vírgulas float result; // a declaração de variáveis é igual ao que se faz na função main result = a+b; printf("a soma de %2.2f com %d é %2.3f\n, a, b, result); Os parâmetros da função na sua declaração são chamados parâmetros formais. Na chamada da função os parâmetros são chamados parâmetros atuais. Os parâmetros são passados para uma função de acordo com a sua posição. Ou seja, o primeiro parâmetro atual (da chamada) define o valor o primeiro parâmetro formal e assim por diante. Os nomes dos parâmetros na chamada não tem relação com os nomes dos parâmetros na definição da função. int soma(int a, int b) // Função soma. Basta separar os parâmetros por vírgulas int result; // a declaração de variáveis é igual ao que // se faz na função main result = a+b; printf("a soma de %d com %d é %d\n", a, b, result); main() int a; int b; a = 10; b = 12; soma(a, b); int soma(int a, int b) // Função soma. Basta separar os parâmetros por vírgulas int valor; valor = a+b; return valor;

main() int a; int b; int result; a = 10; b = 12; result = soma(a, b); // Chamada da função SOMA(12.3,10) printf("a soma de %d com %d é %d\n", a, b, result); 6 - COMANDO SWITCH: Utilizado quando uma determinada variável pode ser igual a diferentes valores que se deseja avaliar a variável é testada sucessivamente contra uma lista de variáveis inteiras ou de caracteres. Depois de encontrar uma coincidência, o comando ou o bloco de comandos é executado. Se nenhuma coincidência for encontrada o comando default será executado. O default é opcional. A sequência de comandos é executada até que o comando break seja encontrado. (tradução de switchescolha, de case-caso, de break-senão, de default-fim escolha). Sintaxe: switch (variável) case constante1: <comandos> case constante2: <comandos> default: <comandos> Exemplos: main() int epoca; printf("digite o trimestre do ano em que estamos: "); scanf("%d", &epoca); switch (epoca) case 1: printf("verão"); case 2: printf("outono"); case 3: printf("inverno"); case 4: printf("primavera"); default: printf("período inválido"); Enum

É um tipo de dado definido pelo usuário que define uma variável que vai receber apenas um conjunto restrito de valores. Na realidade, um enum é um conjunto de valores inteiros representados por identificadores. Sintaxe: enum < nome > < constante1 >, < constante2 >,, < constanten >, Um exemplo clássico é usar uma enum para armazenar os meses do ano. Vejamos como funciona: enum meses_do_ano Janeiro, Fevereiro, Março, Abril, Maio, Junho, Julho, Agosto, Setembro, Outubro, Novembro, Dezembro Por padrão o primeiro valor de uma enum é inicializado com zero. Mas é possível determinar o valor inicial, basta declarar o primeiro valor para o identificador, e os valores seguintes serão automaticamente calculados com um incremento de uma unidade. Então podemos atribuir o valor 1 para janeiro como abaixo: enum meses_do_ano Janeiro=1, Fevereiro, Março, Abril, Maio, Junho, Julho, Agosto, Setembro, Outubro, Novembro, Dezembro Alguns compiladores são capazes de verificar quando um valor que não está na lista da enum está sendo atribuído, porém outros não são, logo isto fica a cargo do programador. #include <conio.h> enum meses_do_ano Janeiro = 1, Fevereiro, Marco, Abril, Maio, Junho, Julho, Agosto, Setembro, Outubro, Novembro, Dezembromeses; main printf("digite o numero do mes: "); scanf("%d",&meses); switch(meses) case Janeiro: printf("%d - Janeiro", meses); case Fevereiro: printf("%d - Fevereiro", meses); case Marco: printf("%d - Marco", meses); case Abril: printf("%d - Abril", meses); case Maio: printf("%d - Maio", meses); case Junho: printf("%d - Junho", meses); case Julho: printf("%d - Julho", meses);

case Agosto: printf("%d - Agosto", meses); case Setembro: printf("%d - Setembro", meses); case Outubro: printf("%d - Outubro", meses); case Novembro: printf("%d - Novembro", meses); case Dezembro: printf("%d - Dezembro", meses); else printf("valor INVALIDO!!!\n"); 7 - COMANDO WHILE: Uma maneira possível de executar um laço é utilizando o comando while. Ele permite que o código fique sendo executado numa mesma parte do programa de acordo com uma determinada condição. O comando pode ser vazio, simples ou bloco. Ele é executado desde que a condição seja verdadeira. Testa a condição antes de executar o laço. Sintaxe: while(condição) <comandos>; int main() int i; i=0; while (i<=10) printf("número %d\n", i); i++; return 0;

Exercícios: 1-Passar para linguagem C: a) Inicio inteiro: num, quadrado; imprima ( Digite um número inteiro: ); leia (num); enquanto num 0 faça quadrado num * 2; imprima ( O quadrado de, num, eh, quadrado); imprima ( Digite um número inteiro: ); leia (num); fim enquanto; fim. b) inicio inteiro: soma, cont, num; /*cont representa o contador*/ real: media; /* soma o acumulador*/ /* imprime uma msg e lê o 1o. numero inteiro*/ imprima ( Digite um número inteiro: ); leia (num); cont = 0; soma = 0; enquanto num 0 faça cont = cont + 1 /*contador*/ soma = soma + num; /*acumulador*/ imprima ( Digite um número inteiro: ); leia (num); fim enquanto; media = soma/cont; imprima ( A media eh,media); fim. 3-Faça um programa que imprime os multiplos de 4 entre 100 e 400 #include <stdlib.h> main () int i; i=100; while ((i>=100)&&(i<=400)) if (i%4==0) printf ("O numero %d e multiplo de 4.\n",i); i++; system ("pause");

4- Elaborar um programa que efetue a leitura sucessiva de valores numéricos e apresente no final o total do somatório, a média e o total de valores lidos. O programa deve fazer as leituras dos valores enquanto o usuário estiver fornecendo valores positivos. Ou seja, o programa deve parar quando o usuário fornecer um valor negativo. #include <stdlib.h> #include <conio.h> #include <math.h> main() int x, media=0, numero=0, conta=0; float soma = 0; // a variavel soma tem que ser float porque se não for a media // só da como resultado um número inteiro. while (numero >= 0) printf("informe um valor positivo: "); scanf("%d", &numero); if (numero > 0) soma=soma+numero; conta = conta + 1; printf("a soma eh %3.0f e a media eh %5.2f\n",soma, (soma/conta)); // %3.0f formata o numero float com 3 inteiros e zero decimal system("pause"); 5- Fazer um programa que receba um valor n no teclado e determine o maior. A condição de término do programa é quando o usuário digitar zero. #include<stdio.h> #include<stdlib.h> #include<string.h> main() int NUM; int maior; printf("\n DIGITE UM NUMERO INTEIRO: "); scanf("%d",&num); maior = NUM; while(num!=0) if(num>maior) maior=num; printf("\n DIGITE OUTRO NUMERO(PARA ENCERRAR DIGITE 0) : "); scanf("%d",&num); printf("\n O MAIOR NUMERO E: %d",maior); printf("\n\n"); system("pause");

8 - COMANDO FOR: O comando for é de alguma maneira encontrado em todas linguagens procedurais de programação. Em sua forma mais simples, a inicialização é um comando de atribuição que o compilador usa para estabelecer a variável de controle do loop. A condição é uma expressão de relação que testa a variável de controle do loop contra algum valor para determinar quando o loop terminará. O incremento define a maneira como a variável de controle do loop será alterada cada vez que o computador repetir o loop. Primeira vez que executa o for: Inicialização; Condição; VERDADEIRO: Bloco de comandos; FALSO: sai do for; Demais vezes: Incremento; Condição; VERDADEIRO: Bloco de comandos; FALSO: sai do for; Sintaxe: For (inicialização; condição; incremento) <comandos>; int main () int i, idade; for (i=0; i<=5; i++) printf ( Digite uma idade ); scanf ( %d, &idade); printf ( A idade digitada foi %d \n ); return 0; Exercício: 1-Fazer um programa que imprima 10 números de matricula fornecidos um a um pelo usuário. 9 - VETORES (ARRAYS): Em diversas situações os tipos básicos de dados (int, float, char,...) não são suficientes para representar a informação que se deseja armazenar. Exemplo, uma palavra: AULA. Existe a possibilidade de construção de novos tipos de dados a partir da composição (ou abstração) de tipos de dados primitivos. Esses novos tipos têm um formato denominado ESTRUTURA DE DADOS, que define como os tipos primitivos estão organizados.

Mas se além da média quisesse fazer um programa em C para imprimir as notas lidas juntamente com a média da turma. Quando uma determinada Estrutura de Dados for composta de variáveis com o mesmo tipo primitivo, temos um conjunto homogêneo de dados. Essas variáveis são chamadas de variáveis compostas homogêneas. As variáveis compostas homogêneas unidimensionais são utilizadas para representar arranjos unidimensionais de elementos de um mesmo tipo, em outras palavras, são utilizadas para representar vetores. Sintaxe: tipo_primitivo identificador[qtde_elementos]; int dados[5]; // vetor com 5 (0 a 4) elementos do tipo int Sempre começará a contar a primeira posição do zero. Para fornecer os elementos de cada posição do vetor é declarado da seguinte forma: float valores[4]=1.2, 3.6, 4.5, 2.8; valores: 1.2 3.6 4.5 2.8 0 1 2 3 Se fosse float dados[3]=1.2; Ou seja há menos valores do que o número de elementos do array, os elementos restantes são inicializados automaticamente com o valor zero. dados: 1.2 0 0 0 0 1 2 3

Importante: Os vetores não são inicializados automaticamente. Declarar mais elementos do que defino causa erro de sintaxe. Omitindo o tamanho do vetor ele terá o mesmo número de elementos digitados. int n[ ] = 1, 2, 3, 4, 5; Ou seja, 5 elementos, 5 posições, índices do vetor variam de 0 a 4. Cada um dos elementos de um vetor é referenciado individualmente por meio de um número inteiro entre colchetes após o nome do vetor. X = valores[1]; (8.9) Y = valores[3]; (4.5) 2.3 8.9 3.6 4.5 0 1 2 3 Ambas as formas atribuem um valor ao elemento 0 (zero) do vetor valores: i=0; valores[0] = 6.7; ou valores[i] = 6.7; O programa a seguir inicializa os dez elementos de um array s com os valores: 2, 4, 6,..., 20 e o imprime. #define TAMANHO 10 int main() int s[tamanho], j; for (j=0; j<= TAMANHO - 1; j++) s[j] = 2 + 2 * j; printf("elemento %d tem valor de %d \n, j, s[j]); return 0; Exercícios: 1-Informar quais são os elementos referenciados pelas expressões a seguir. mat 3.5 2.1 7.9 9.1 3.0 6.2 8.4 3.9 2.7 4.3 a) mat[2] b) mat[0] c) mat[10] d)mat[6] 2- Qual é a diferença entre os números 4 das duas instruções abaixo? int mat[4]; mat[4] = 5; 3- Quais serão os valores dos elementos do vetor x que serão impressos no final da execução do trecho de programa seguinte: int main()

int i, x[5]; for (i=0; i<=5; i++) x[i] = 2; for (i = 0; i<=5; i++) x[i] = x[i] * i; for (i=0;i<=5;i++) printf("%d\n", x[i]); return 0; 10 - MATRIZES(VETORES MULTIDIMENSIONAIS): Como os vetores, as matrizes são estruturas de dados homogêneas. Podem ser construídas dos diversos tipos básicos primitivos (float, int, char). A Principal diferença em relação aos vetores (unidimensionais): possui uma ou mais dimensões adicionais, mas na maioria dos casos: utiliza-se matrizes bidimensionais. São utilizadas quando os dados homogêneos necessitam de uma estruturação com mais de uma dimensão. Exemplos: Programar um jogo de xadrez (o tabuleiro é naturalmente bidimensional),estrutura para guardar caracteres de um livro (três dimensões: 2 para representar os caracteres de uma página e uma terceira para indicar as páginas),problemas matemáticos matriciais. A sintaxe para declaração de uma variável deste tipo é semelhante à declaração dos vetores. Considerase, porém a quantidade de elementos da outra dimensão: tipo_primitivo identificador[qde_el_linha] [qde_el_col]; int mat[2][3]; uma matriz de números inteiros com 3 linhas e 2 colunas, essa matriz possui 6 elementos Neste caso os índices variam de 0 a 2 para linhas e de 0 a 1 para colunas. 0 1 2 1.7 4.9 2.8 5.3 9.1 7.4 Pode-se fornecer valores de cada elemento de uma matriz na declaração, da mesma forma que nos vetores. float num[4][2] = 3.6, 2.7,5.0, 4.1,7.9, 9.85.3, 2.4,7.4, 2.1; Ou seja, fornecem-se os valores linha a linha. Observações: As matrizes não são inicializadas automaticamente. Se houver menos valores do que o número de elementos da matriz, os elementos restantes são inicializados automaticamente com o valor zero. 5.6 7.8 8.9 7.9 1.2 4.9 5.9 9.7 4.7 2.4 3.1 6.8 int num[5][3] = 32, 64, 27; int n[4][4] = 0; //todos elementos são nulos.

A seguinte declaração causa um erro de sintaxe: int n[2][6] = 32, 64, 27, 18, 95, 14,12,15,43,17,67,31; Uma vez que há mais elementos do que espaços de memória alocados. Os elementos das matrizes são referenciados individualmente por meio de índices (iniciando de zero) entre colchetes Exemplos: mat Dada a matriz acima tem-se: A = mat[1][2]; B = mat[0][0]; A instrução abaixo atribui um valor ao elemento linha zero e coluna um da matriz mat: i=0; j=1 mat[0][1] = 15; ou valores[i][j]=15; Exercícios: 1- Quais são os elementos do vetor referenciados pelas expressões abaixo? mat a) mat[2][0] b) mat[1][1] c) mat[3][1] 2- Qual é a diferença entre os números 3 das duas instruções abaixo? int mat[6][3]; mat[6][3] = 5; 3- A instrução seguinte é correta para inicializar uma matriz? int mat[2][2] = 1, 2,3,4; 4- Quais serão os valores dos elementos da matriz x no final da execução do trecho de programa seguinte: for (i=0; i<=3; i++) for (j = 0; j<=3; j++) x[i][j]=i*(j+1); for (i = 0; i<=3; i++) x[i][2] = x[2][i]; 5- Desenvolva um programa para ler e somar duas matrizes quadradas de dimensão 2. Imprima o resultado da soma. 3 8 5 9 2 1 3.2 4.1 2.7 5.9 0.6 9.0 11-Vetores de Caracteres (Cadeias de caracteres ou string): 11.1-Caracteres em C: Uma cadeia de caracteres é uma sequência de caracteres (char) justapostos e são fundamentais no desenvolvimento de programas computacionais. Exemplos de cadeias de caracteres (representadas internamente num programa): Mensagem de e-mail; Texto de um programa; Nome e endereço em cadastro de clientes, alunos, etc... Sequência genética. Um gene (ou o DNA de algum organismo) é composto de sequências dos caracteres A, T, G e C (nucleotídeos). Entrada/Saída de caracteres em C:

ch = getchar(); armazena um caractere digitado em ch até que ENTER seja pressionado; putchar(ch); Imprime o caractere armazenado na variável ch na tela do computador int main() char ch; ch = getchar(); putchar(ch); return 0; Observação: Por mais que se escreva uma frase extensa só será imprimido a primeira letra digitada. Um programa que peça para que você digite uma letra ou um número e informa se o que fora digitado fora ou não um número. int main( ) char c; printf("digite uma letra ou numero: "); c = getchar(); if((c >= '0') && (c<='9')) printf("eh um numero"); else printf("nao eh um numero"); return 0; 11.2-Cadeias de caracteres (strings): Cadeias de caracteres, em C, são representadas por vetores do tipo char terminadas, obrigatoriamente, pelo caractere nulo: \0 (\zero). Portanto, deve-se reservar uma posição para este caractere de fim de cadeia. Exemplos: char cidade[4] = 'R', 'i', 'o', \0'; char disc[40] = 'A','l','g', 'o', 'r', 'i', 't', 'm', 'o', '\0'; Equivale: char cidade[4] = "Rio"; char disc[40] = "Algoritmo"; Para ilustrar a declaração e a inicialização de strings, consideremos as seguintes declarações: char s1[] = "" ; //2 aspas sem espaços entre elas char s2[] = "Rio de Janeiro"; char s3[81]; char s4[81] = "Rio"; s1 armazena uma string vazia. Tem um único elemento: \0 ; s2 representa um vetor com 15 elementos (caracteres);(rio de janeiro contando os espaços 14 mais um para o \0 ; s3 representa uma cadeia de caracteres com até 80 caracteres e não é inicializada;(lembrando que a última posição é sempre do \0 ; s4 também é dimensionada para conter até 80 caracteres e é inicializada com a cadeia

Rio. Leitura de cadeias de caracteres (scanf). int main() char s[20]; printf("digite uma string: "); scanf("%s",s); //sem & antes de s printf("string digitada: %s",s); return 0; Lembrando que // insere um comentário sem ser impresso na tela ou alterar de alguma forma o algoritmo. Neste caso, a leitura será feita até encontrar um caractere branco: espaço (' '), tabulação ( \t') ou nova linha ( \n'). Assim, se digitarmos Rio de Janeiro, s conterá apenas Rio ; Não é necessário o & antes da variável s em scanf. 11.3-Leitura/Impressão de cadeias de caracteres (gets/puts). int main() char s[20]; printf("digite uma string: "); gets(s); printf("string digitada: "); puts(s); return 0; Neste caso, se digitarmos Rio de Janeiro, s conterá Rio de Janeiro ; gets(s): lê a string s a partir do teclado; puts(s): imprime uma string na tela seguida de nova linha. Uma outra forma de imprimir uma cadeia de caracteres, caractere por caractere: int main() char s[30]; //o tamanho poderia ser outro int i; printf("digite uma string: "); gets(s); //imprime cada caractere da cadeia lida for(i=0; s[i]!='\0'; i++) printf("%c",s[i]); return 0; * O for acima equivale a printf("%s",s); o programa a seguir calcula e imprime o comprimento (numero de caracteres) de uma cadeia: int main() char s[30]; int i, n = 0; printf("digite uma string: "); gets(s);

for(i=0; s[i]!='\0'; i++) n++; printf("\n O tamanho de \"%s\" eh: %d",s,n); return 0; O programa a seguir faz uma cópia de uma cadeia, fornecida pelo usuário para outra: int main() char dest[50], //string destino orig[50]; //string origem int i; printf("digite uma string: "); gets(orig); //copia cada caractere de orig para dest for(i=0; orig[i]!='\0'; i++) dest[i] = orig[i]; //coloca o caractere nulo para marcar o fim da string dest[i] = '\0'; puts(dest); return 0; Exercícios: 1-Fazer um programa que leia o nome do usuário e o número de matricula e imprima.