You are on page 1of 65

LINGUAGEM DE PROGRAMAO

Linguagem C

Prof.: Kleberson Carlos

Objetivo
Aprender os conceitos da linguagem C; Aprender a desenvolver aplicaes em linguagem C; Desenvolver interface de comunicao de dados;

Contedo a ser abordado


Conceitos de programao estruturada; Operadores; Comandos de deciso; Laos; Vetores e Matrizes; Funes; Interfaces de comunicao (Paralela, Serial, USB);

Data prevista das avaliaes


Carga horria: 40h(~13 aulas) Dias de aula:; 1 Prova: Data: Aulas: = 15h 2 Prova: Data: Aula: = 18h Final: Data:

Bibliografia e Recursos: Livros


ARAKAKI, Reginaldo et alii. Fundamentos de programao: C - tcnicas e aplicaes.

Rio de Janeiro: LTC Editora.


KERNIGHAN, Brian e Ritchie, Dennis. C: A linguagem de programao-Padro ANSI.

Ed. Campus: Rio de Janeiro.


GHEZZI, Carlo e Jazayeri, Mehdi. Conceitos de linguagem de programao. Ed.

Campus: Rio de Janeiro.


MARTIN, James & McClure, Clara. Tcnicas estruturadas e CASE. So Paulo: Makron,

McGraw-Hill.
YOURDON, Edward. Administrando tcnicas estruturadas. Rio de Janeiro: Campus.
BURGESS, Mark e Hale-Evans, Ron. The GNU C Programming Tutorial. Free Software

Foundation, Inc

Bibliografia e Recursos: Internet


http://www.deinf.ufma.br/~cav ou ainda (para acesso exterior a UFMA)

http://cavg.vila.bol.com.br. Site do Prof. da disciplina, inclui lista de exerccios, apostilas e tutoriais, links, e outras informaes atualizadas.
http://www.portalc.nip.net: Site repleto de apostilas, textos, tutoriais, programas-

fontes e at compiladores para a linguagem C e C++. Fundamental uma visita com calma a fim de explorar bem o material. Possui links para outros sites.
http://www.deinf.ufma.br/~cav/c-basico.zip:

Link direto para a apostila de Fundamentos de C, citada ao longo desta apresentao, hospedada em servidor do DEINF/UFMA.

Dev C++
um ambiente de desenvolvimento integrado (IDE); Permite escrever aplicativos Windows ou aplicativos de console em

linguagem C ou C++;

Dev C++

Dev C++

Estrutura de um Programa C
Representao resumida de uma funo main

[<Bibliotecas de Apoio>] main() { <Corpo do Programa> }

Importante
Todos comandos devem terminar com o ponto e vrgula ; menos nos casos

onde existe a possibilidade ou se abre chaves {};


A linguagem C case sensitive, assim sendo, deve-se ter muito cuidado ao

se digitar os comandos (diferencia letras maisculas de minsculas). Ex: count, Count, COUNT

1 Programa em C
#include <stdio.h> //necessria para utilizar o SCANF e PRINTF #include <stdlib.h>
main() {/* funo obrigatria */ printf("oi mundo!!"); //comando de sada de dados getch(); }

13

Caracteres Vlidos
Um programa-fonte em C um texto no formatado escrito em um editor

de textos usando um o conjunto padro de caracteres ASCII. A seguir esto os caracteres utilizados em C:

a b c d e f g h i j k l m n o p q r s t u v w x y z
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 1 2 3 4 5 6 7 8 9 0 + - * / \ = | & ! ? # % ( ) { } [ ] _ . , : < >

14

Palavras-chave
C tem 28 palavras-chave, que no podem ser utilizadas como nomes de

variveis ou funes.

Operadores Bsicos
Operadores aritmticos:
, +, *, /, %, , ++

Operadores relacionais:
>, <, >=, <=, ==, !=

Operadores lgicos:
&&: AND ||: OU ! : NOT

Atribuio
Atribuio feita via operador =
Equivale ao do pseudo-cdigo

Exemplo, sejam A, B e C variveis inteiras:


A = 5; B = 3;

C = (A + B) * 2 / 4;

Portanto, as expresses acima so atribuies em C, no so expresses

relacionais!
O operador relacional de igualdade em C ==

OBS: Operadores Aritmticos


% o operador de mdulo (resto de diviso inteira) No existe operador especfico para diviso inteira
Operador de diviso (/) realiza diviso inteira quando aplicado sobre inteiros Por exemplo, 5 / 2 retorna 2! O mesmo vale para x / y se x e y forem do tipo inteiro

Operadores Aritmticos
Operadores de incremento / decremento:
Se x uma varivel do tipo inteiro, ento

Os comandos x++ ou ++x so equivalentes a x = x + 1; Os comandos x-- ou --x so equivalentes a x = x 1;

Exemplo:

#include<stdio.h> main(){ int x, y, z; x = 5; y = x++; z = ++x; printf(x=%d y=%d z=%d", x, y, z); getch();

Operadores Aritmticos
Abreviaes: x += 100 equivalente a x = x + 100
x = 50 equivalente a x = x 50 x *= 30 equivalente a x = x * 30 x /= 10 equivalente a x = x / 10

Expresses
Prioridades dos Operadores Bsicos

Comentrios
/* ... */: Comentrio de linha Mltipla //

: Comentrio de 1 linha

Exemplo:
/* Isso um comentrio que comea nessa linha e continua nessa outra linha, terminando aqui */ // Isso um comentrio de 1 linha

No terminam com ponto-e-vrgula


Pois no so comandos (instrues)

Tipos de Dados
Tipos Bsicos Pr-Definidos (tipos primitivos):
Inteiros (int) e Reais (float ou double) Caracteres (char)

Variaes dos anteriores atravs de modificadores:


short, long, signed, unsigned

Tipo especial nulo (void) Variveis compostas homogneas


Vetores, matrizes e arranjos multi-dimensionais

Tipo de Dados
Caractere(char)
Ocupa 1 byte 0 e 255 associado a um dado caractere (tabela ASCII estendida);

Inteiro(int)
Tamanho em bytes depende da arquitetura Faixa mnima (C ANSI): 2 bytes faixa de 32768 a 32767

Reais(float e double)
float: faixa mnima 32 bits (4 bytes) double: faixa mnima 64 bits (8 bytes)

Constantes
Definio:
Identificador associado a um valor inicial que no pode ser modificado pelo programa

Declarao de Constantes:
const tipo identificador = valor;

Exemplo:
const float pi = 3.141592;

Principais Utilidades:
Clareza de cdigo
Preveno de erros

#define
Outra forma de declarar constates utilizando o comando #define; Sintaxe:
#define <nome_da_constante> valor

Exemplo:
#include <stdio.h> #define PI 3,1415926536
main(){ printf("%f", PI); getch(); }

Observe que na definio de uma constante no h o ; no final. Se for colocado, este far parte do valor associado constante.

Entrada e Sada
Existem diversas funes pr-definidas para entrada e sada de dados em linguagem

C
Por ora, precisamos de

apenas duas dessas funes para implementar nossos

programas
printf e scanf

Ao longo do curso poderemos utilizar outras, caso seja necessrio ou mais

apropriado

Sada de Dados com printf


printf uma funo bastante flexvel que permite a escrita de dados

formatados de diferentes modos


Veremos a seguir as formas mais elementares Escrita de Texto (constante string) Texto a ser exibido vai entre aspas
Exemplo: printf("Aqui vai o texto!");

Admite caracteres especiais, como quebra de linha (\n) Exemplo: printf("Primeira linha\n Proxima linha");

Sada de Dados com printf


Sintaxe:
printf (string de controle, lista de argumentos);

Strings de controle:

Entrada de Dados com scanf


scanf uma funo bastante flexvel que permite a entrada de dados

formatados de vrios modos


Sintaxe:
scanf (string de controle, &lista de argumentos);
Strings de controle:

Estrutura de controle
Condicional:
IF-ELSE IF-ELSE-IF SWITHC

Repetio:
WHILE DO-WHILE FOR Laos infinitos

Exerccio
1- Escreva um programa que receba o valor em real e a cotao do dlar e ento calcule e exiba o valor em dlar. Ex.: Dados de entrada:
Valor: R$ 100,00 Cotao do dlar: 2,05

O Valor da converso : valor/cotao.

2 - Escreva um programa que receba 2 nmeros e realiza as seguintes operaes com estes nmeros: -Soma: A+B; -Subtrao: A-B; - Multiplicao: A*B - Diviso: A/B

32

Estruturas de Controle: IF-ELSE


Pseudo-linguagem
se condio ento bloco1 seno bloco2 fim-se;

C
if(condio){ bloco 1; }else{ bloco 2; }

Os comando de linha so sempre finalizados com

Exemplo: IF-ELSE
#include <stdlib.h> #include <stdio.h> main(){ int a,b; printf(----Diviso----\n\n"); printf(1 Numero:); scanf("%d",&a); printf(2 Numero:); scanf("%d",&b);

if (b != 0){ printf("%d\n",a/b); }else { printf("diviso por zero\n"); } getch(); }

Estruturas De Controle: IF-ELSE-IF


if (condio){ comandos;

}else if (condio){
comandos; }else if (condio){ comandos; }else{ comandos; }

35

Estruturas de Controle: SWITCH


Pseudo-linguagem
escolha condio caso 1: realiza 1; caso 2: realiza 2; . . padro: realiza outros;

Sem

;
:

switch (varivel){ case 1: Utiliza-se o realiza 1; case 2: realiza ; . . default: realiza outros; }

default opcional e ser executado caso no seja encontrada nenhuma coincidncia.

Exemplo: SWITCH
#include <stdlib.h> #include <stdio.h> main(){ char opcao; printf("1. Cadastrar"); printf("2. Alterar\n"); printf(3. Sair\n");

printf(" Digite sua opo:"); scanf(%c, &opcao);


switch(opcao){ case '1': printf(Voce escolheu a opcao Cadastrar!\n"); break; case '2': printf(Voce escolheu a opcao Alterar\n"); break; case '3': exit(0); //comando para finalizar o programa default: printf(\a\aOpcao invalida\n"); } getch();

Exerccio
1 - Utilizando o comando SWITCH desenvolva um programa em linguagem C que recebe um nmero, e imprime o nome correspondente ao dia da semana.
Ex:

Nmero: 2

Sada: Segunda-Feira

2 - Escreva um programa em C que leia as medidas

dos lados de um tringulo e escreva EQUILTERO, ISSCELES ou ESCALENO.

se

ele

Observao: Tringulo equiltero: Possui os 3 lados iguais. Tringulo issceles: Possui 2 lados iguais. Tringulo escaleno: Possui 3 lados diferentes.

38

Estrutura de Controle: Repetio (WHILE)


Pseudo-linguagem
enquanto condio faa bloco fim-enquanto;

C
while(condio){ bloco; }

Notem que enquanto condio for verdadeira (ou 1, ou no zero) o lao ser feito, s finalizando quando condio for falsa(ou zero).

Exemplo: While
#include <stdio.h> #include <stdlib.h> main(){ char ch='x'; //caso seja digitado a ou A o lao finalizado while((ch!='a')&&(ch!='A')){ printf("Informe um caractere: "); fflush(stdin);//limpa o buffer de entrada scanf("%c", &ch);

system("cls"); //comando para limpar a tela


} system("cls"); printf("\n\a\a Fim do while, caractere '%c' digitado!!", ch); getch(); }

Estrutura de Controle: Repetio (DO-WHILE)


Ao contrrio do lao while, que testam a condio do lao no incio, o

lao do-while verifica sua condio no final do lao. Isso significa que um lao do-while ser executado pelo menos uma vez.
do{ comandos;

}while(condio);

Break: utilizado para finalizar um lao, pode ser utilizado nas seguintes estruturas: while, do-while, for, switch;

Exemplo: DO-WHILE
#include <stdio.h> #include <stdlib.h> /* Assegura que o usurio especificou uma opo vlida */ main(){ int opcao; do{ printf ("Converte:\n"); printf (" 1: Decimal para hexadecimal\n"); printf (" 2: Hexadecimal para decimal\n"); printf (Informe sua opo: "); scanf ("%d", &opcao); system("cls"); }while((opcao == 1) || (opcao == 2)); printf ("\n\n\t\a\aOpcao %d e invalida, do-while finalizado!", opcao);

sleep(4000); //funo que aguarda um determinado tempo, nesse caso 4s


system("cls"); printf ("\n\n\t\t\t\t\tFIM"); getch(); }

42

Estrutura de Controle: FOR


Pseudo-linguagem
para var=vi at vf passo p faa bloco fim-para;
Utiliza-se o

como separador

C
for(inicializao;condio;incremento){ bloco; }

43

Estrutura de Controle: FOR


Significado das expresses no lao for:
inicializao: expresso que inicia a var. de controle ou a var. testada em

condio.
Ex.: index=1.

condio: avaliada no comeo de cada ciclo e o lao s executado se

expresso true.

Ex.: index<=20.

incremento: esta expr. usada para alterar o valor da var. de controle. Em C

ela pode ser qualquer coisa.


Exemplos:

index++, index *= 20, ou index /= 2.3.

44

Exemplo: FOR
#include <stdio.h> #include <stdlib.h> main(){ int x; printf("Numeros em ordem crescente: \n\n"); for (x= 0; x<= 10; x++){ printf ("%3d", x); }

printf("\n\n\n"); printf("Numeros em ordem decrescente: \n\n"); for (x= 10; x>= 0; x--){ printf ("%3d ", x); } getch(); }

Exerccio
1 - Utilizando as estruturas de repetio, construa um programa em linguagem C que imprima todos os nmeros pares compreendidos entre 1 e 100; 2 - Desenvolva um programa que receba um numero do usurio e imprima a soma de todos os seus anteriores at 1; Ex: Valor 5; Resposta: 5+4+3+2+1 = 15;
Obs. 1: O programa deve permanecer em lao at que o usurio digite o valor 0, assim o programa finalizado. Obs. 2: Utilize os comandos -system(cls) //limpa tela -sleep(tempo) //Temporizador

46

Vetores
Vetores so coleo de objetos que tm mesma natureza, i.e., todos seus

elementos possuem um mesmo tipo bsico. De fato, um vetor pode ser visto conceitualmente como sendo equivalente a uma matriz de dimenso 1 x m, onde m. So chamados ainda de array, em ingls.
Os elementos de um vetor so identificados pelo nome seguido de ndice

entre colchetes.

47

Vetores
Tem-se, ento na memria o seguinte arranjo:

li

li+1

li+2

...

ls-1

ls

li = limite inferior = 0, ls= limite superior, O nmero de elementos num vetor em C dado por ls+1, pois o primeiro ndice sempre 0!

48

Vetores
Exemplo: Vetor de notas de uma turma:

notas
7 0 5,5 1 4 2 ... 8 25 10 26

A sintaxe para a declarao de um vetor a seguinte: tipo nome[tam];

Exemplo:
float notas[22];

49

Vetores: Iniciao
Veja exemplos de declaraes e inicializaes de vetores a seguir.

int dia[7] = {12,30,14,7,13,15,6}; float notas[5] = {8.4,6.9,4.5,4.6,7.2}; char vogal[5] = {'a, e, i, o, u'};

50

Vetores: Observaes
Na linguagem C, devemos ter cuidado com os limites de um vetor/matriz.

Embora na sua declarao, tenhamos definido o tamanho de um vetor/matriz, o C no faz nenhum teste de verificao de acesso a um elemento dentro do vetor/matriz.
Por exemplo se declaramos um vetor/matriz como int valor[5],

teoricamente s tem sentido usarmos os elementos valor[0], ..., valor[4]. Porm, o C no acusa erro se usarmos valor[12] em algum lugar do programa. Estes testes de limites devem ser feitos logicamente dentro do programa, pelo programador.

Exemplo: Vetor
#include <stdio.h> #include <stdlib.h>
main(){ float soma,notas[5]; int i ; printf("\n\n\t\t\t--------Calculo da media--------\n\n\n"); for(i=0;i<5;i++){ printf("\tDigite a nota do aluno %d: ",i); scanf("%f",&notas[i]); } soma=0; for(i=0;i<5;i++) { soma=soma+notas[i]; }

printf("\n\n\n\tMedia das notas: %.3f.",soma/5); getch();


}

52

Matrizes: Conceito e Definio


Matrizes so coleo de objetos que tm mesma natureza, de forma similar

aos vetores. De fato, uma matriz pode ser vista conceitualmente como sendo equivalente a uma matriz multidimensional, semelhante ao que ocorre na matemtica. Mais ainda, pode-se ver uma matriz como uma coleo de vetores, i.e. um vetor de vetores.

53

Matrizes: Declarao
A sintaxe para declarao de vetores multidimensionais : tipo nome[tam_1][tam_2]...[tam_N;

onde: tipo o tipo dos elementos do vetor. nome o nome (identificador) do vetor. [tam_1][tam_2]...[tam_N] o tamanho de cada dimenso do vetor.
Os ndices dos vetores multidimensionais, tambm comeam em 0. Por

exemplo: vet[0][0], o primeiro elemento do vetor.

54

Matrizes: Exemplo de Declarao


Seja:

float notas[3][3];
Isto resultar na seguinte estrutura bidimensional na RAM (teoricamente

falando):

0,0 1,0 2,0

0,1 1,1 2,1

0,2 1,2 2,2

55

Matrizes: Iniciao imediata


Seja: float

notas[3][5]= {{8.4,7.4,5.7,5.6,7.7}, {6.9,2.7,4.9,4.5,8.7}, {4.5,6.4,8.6,6.9,9.1}};

Isto resultar na seguinte estrutura bidimensional:

8.4
6.9 4.5

7.4
2.7 6.4

5.7
4.9 8.6

5.6
4.5 6.9

7.7
8.7 9.1

Exemplo: Matriz
main(){ int a[2][2],b[2][2]; int t,p;
//l uma matriz printf("\n\n\t\t\t--------Soma de 2 matrizes--------\n\n"); printf("\n\n\t\tMatriz A:\n\n"); for(p=0;p<2;p++){ for(t=0;t<2;t++){ printf("\t\t[%d][%d]: ", p,t); scanf("%d", &a[p][t]); } } printf("\n\n\t\tMatriz B:\n\n"); for(p=0;p<2;p++){ for(t=0;t<2;t++){ printf("\t\t[%d][%d]: ", p,t); scanf("%d", &b[p][t]); } }

Exemplo: Matriz-cont.
printf("\n\n\n\n"); printf("\t\tA + B = \n\n"); //imprime a matriz for(p=0;p<2;p++){ for(t=0;t<2;t++){ printf("\t\t%3d ", a[p][t]+b[p][t]); } printf("\n"); } getch(); }

Strings
Strings (Ingls) so cadeias ou sequncias ordenadas de caracteres. A linguagem C, ao contrrio de outras linguagens de programao, no

possui um tipo de dados correspondente s strings;


Declarao de uma String:

char nome_da_variavel[numero_de_caracteres];
Para a utilizao de Strings necessrio inserir a biblioteca:
#include <string.h>.

Funes string.h
Funo
strcat(destino, origem) strcmp(destino, origem) strcmpi(destino, origem)

Descrio
Concatena duas string e transfere resultado para a cadeia de destino. Compara as 2 string Compara as 2 string levando em contas letras maisculas e minsculas Informa a quantidade de caracteres contidos na string, considerando os espaos em branco. Converte os caracteres da string para minsculo Converte os caracteres da string para maisculo. Copia a string de origem para a de destino, substituindo seu contedo. Comando utilizado para ler uma matriz o

Strlen(string)

Strlwr(string) Strupr(string) Strcpy(destino, origem) Get(sting)

Funes
Definio: Conjunto de comandos agrupados em um bloco que recebe um nome e atravs deste pode ser ativado. Utilidade: Permitir a modularizao e reaproveitamento de cdigo. Exemplo de funes existentes: main printf scanf system getch getchar Etc.

Funes
Sintaxe:
Tipo_da_funo nome(parmetros){ <corpo_da_funo> retorno_da funo }
Tipo_da_funo: Assim como as variveis as funes possuem um tipo, sendo estes:

CHAR, INT, FLOAT e VOID(nulo);


Nome: Nome pelo qual a funo ser chamada Parmetros: Variveis necessria para a execuo da funo, porem nem todas as funo

possuem parmetros;
Retorno_da_funo: Valores que devem ser retornados a quem realizou a chamada da

funo, sendo este valores referentes ao tipo da funo

Funes
Comando RETURN: O comando return responsvel por finalizar a

funo e retornar o controle para a instruo seguinte ao cdigo de chamada.


Sintaxe:
Return;

Return (valor);
Return valor;

FUNES DO TIPO void


Funes que no retornam valor podem sem declaradas como void.
#include <stdio.h> #include <stdlib.h> void linha(int tamanho){ int j; for(j=0;j<tamanho;j++){ printf("\xDB"); } } main(){ linha(20); printf("\n\xDB Um programa em C \xDB\n"); linha(20); getch(); }

FUNES DO TIPO void


void tabuada_soma(int valor){ int i; printf("\n\n\t\tTabuada de %d\n\n\n",valor); for(i =1;i<=10;i++){ printf("\t\t%3d + %3d = %d\n", i,valor, i*valor); } getch(); } main(){ int num; do{ printf("\n\tInforme o valor: "); scanf("%d",&num); system("cls"); //chamada da funo que imprime a tabuada referente ao valor digitado tabuada_soma(num); system("cls"); }while(num != 0); system("cls"); printf("\t\t\t\t\a\aFIM!"); sleep(4000); }

Funes do tipo: INT


#include <stdio.h> #include <stdlib.h> int soma(int a, int b){ return a+b; } main(){ int num1, num2; int resultado; for(;;){ printf("Informe o primeiro numero: "); scanf("%d",&num1); printf("Informe o segundo numero: "); scanf("%d",&num2); resultado = soma(num1,num2); // recebe o retorno da funo printf("Resultado: %d + %d = %d", num1, num2, resultado); } getch(); }

You might also like