tutorial linguagem c

16
FACULDADE DO ESPÍRITO SANTO UNES PROGRAMAÇÃO DE COMPUTADORES DOUGLAS YEE ELIZEU BAPTISTA MARCOS RIBEIRO THOMAS SOUZA 25 DE JUNHO DE 2012, CACHOEIRO DE ITAPEMIRIM, ES

Upload: marcos-ribeiro

Post on 08-Mar-2016

258 views

Category:

Documents


0 download

DESCRIPTION

Tutorial com as funções básicas de linguagem em C.

TRANSCRIPT

FACULDADE DO ESPÍRITO SANTO

UNES

PROGRAMAÇÃO DE COMPUTADORES

DOUGLAS YEE

ELIZEU BAPTISTA

MARCOS RIBEIRO

THOMAS SOUZA

25 DE JUNHO DE 2012, CACHOEIRO DE ITAPEMIRIM, ES

ALGORÍTMO

Um algoritmo é uma sequência finita de instruções bem definidas e não ambíguas

cada uma das quais pode ser executada mecanicamente num período de tempo finito e com

uma quantidade de esforço finita.

O conceito de algoritmo é frequentemente ilustrado pelo exemplo de uma receita

culinária, embora muitos algoritmos sejam mais complexos. Eles podem repetir passos

(fazer iterações) ou necessitar de decisões (tais como comparações ou lógica) até que a tarefa

seja completada. Um algoritmo corretamente executado não irá resolver um problema se

estiver implementado incorretamente ou se não for apropriado ao problema.

Um algoritmo não representa, necessariamente, um programa de computador, e sim

os passos necessários para realizar uma tarefa. Sua implementação pode ser feita por

um computador, por outro tipo de autômato ou mesmo por um ser humano. Diferentes

algoritmos podem realizar a mesma tarefa usando um conjunto diferenciado de instruções em

mais ou menos tempo, espaço ou esforço do que outros. Tal diferença pode ser reflexo

da complexidade computacional aplicada, que depende de estruturas de dados adequadas ao

algoritmo.

Um programa de computador é essencialmente um algoritmo que diz

ao computador os passos específicos e em que ordem eles devem ser executados, como por

exemplo, os passos a serem tomados para calcular as notas que serão impressas nos boletins

dos alunos de uma escola. Logo, o algoritmo pode ser considerado uma sequência de

operações que podem ser simuladas por uma máquina de Turing completa.

Quando os procedimentos de um algoritmo envolvem o processamento de dados, a

informação é lida de uma fonte de entrada, processada e retornada sob novo valor após

processamento, o que geralmente é realizado com o auxílio de uma ou mais estrutura de

dados.

Para qualquer processo computacional, o algoritmo precisa estar rigorosamente

definido, especificando a maneira que ele se comportará em todas as circunstâncias. A

corretividade do algoritmo pode ser provada matematicamente, bem como a quantidade

assintótica de tempo e espaço (complexidade) necessários para a sua execução. Estes aspectos

dos algoritmos são alvo da análise de algoritmos.

A maneira mais simples de se pensar um algoritmo é por uma lista de procedimentos

bem definida, na qual as instruções são executadas passo a passo a partir do começo da lista,

uma idéia que pode ser facilmente visualizada através de umfluxograma. Tal formalização

adota as premissas da programação imperativa, que é uma forma mecânica para visualizar e

desenvolver um algoritmo. Concepções alternativas para algoritmos variam em programação

funcional e programação lógica.

Fluxograma, um exemplo de

algoritmo imperativo. O estado

em vermelho indica a entrada

do algoritmo enquanto os

estados em verde indicam as

possíveis saídas.

DIRETIVAS

As diretivas são os comandos utilizados pelo pré-processador, na qual o pré-

processador é um programa que examina e modifica o código-fonte antes da compilação.

Estes comando estarão disponíveis no código-fonte, mas não no código compilado.

As diretivas iniciam com # .

-Exemplo:

# include <stdio.h>

Essa diretiva permite inserir um arquivo qualquer no código-fonte.

COMANDOS DE LEITURA E ESCRITA

*ESCRITA

A função printf é uma das funções de entrada e saída que mostra na tela parâmetros que são

passados como argumento. Seu protótipo stá na biblioteca <stdio.h>.

-Exemplo:

Pintf ( “<expressão de controle>”, lista de argumento)

*LEITURA

A função scanf realiza a leitura de um texto a partir do teclado. Os paramentros são, uma

string, indicando os tipos das variáveis que serão lidos e o formato da leitura, e uma lista de

variáveis.

Ela aguarda que o usuário digite um valor e atribui o valor digitado a variável.

COMANDOS LÓGICOS

Uma ação muito importante que o processador de qualquer computador executa, e

que o torna diferente de qualquer outra máquina, é a tomada de decisão definindo o que é

verdadeiro e o que é falso.

Se quisermos fazer um bom programa, esse programa deve ser capaz de definir

caminhos diferentes de acordo com decisões que o próprio programa toma. Para isso,

precisamos de uma estrutura seletiva da qual o único valor possível é o bit 1 ou 0, resumindo:

retornar o valor VERDADEIRO ou FALSO.

Em C / C++, como em muitas linguagens de programação, quem faz isso é o IF (SE traduzindo).

Ou seja, se for tal coisa, faça isso! Simples desse jeito.

O ELSE é o que chamamos de caso contrário, ou seja, se for falso execute o que está no ELSE.

Exemplificando: Se (IF) for tal coisa, faça isso! Caso contrário (ELSE), faça aquilo!

Usando IF

Para usar o IF basta digitar entre parênteses o que deve ser comparado.

IMPORTANTE: IF é uma palavra reservada que não aceita ponto-e-vírgula (;) no final.

Se for verdadeiro, o programa executará a primeira linha logo abaixo do if.

Mas, e se quisermos executar várias linhas se if for verdadeiro?

Se o if tiver que executar várias linhas, todas as linhas que devem ser enquadradas dentro do

bloco de dados - as chaves ({}).

Usando ELSE

O ELSE só existe se tiver um IF. O else só será executado se o IF for falso.

Else executará só a primeira linha abaixo dele. Se o else tiver que executar várias linhas, vale a

mesma regra de if. Todas as linhas a ser executadas deverão estar contidas dentro do bloco de

dados ({}).

No exemplo abaixo está um exemplo de uso do if e else com apenas uma linha a ser

executada.

01.#include <cstdio>

02.#include <cstdlib>

03.

04.int main (void){

05.int nr;

06.printf ("Digite um numero:\n");

07.scanf ("%d", &nr);

08.getchar ();

09.if (nr>=0)

10.printf ("O numero digitado e positivo\n\n");

11.//se nr for maior ou igual a 0 o numero sera positivo

12.else

13.printf ("O numero digitado e negativo\n\n");

14.//caso contrario, ele sera negativo!

15.system ("pause");

16.}

COMANDOS DE REPTIÇÃO (LOOP)

*FOR

As estruturas de repetições são muito importantes para programas, pois muitas vezes

o mesmo procedimentos têm que ser executados mais de uma vez.

Em C/C++, basicamente existem três tipos de estrutura de repetição: FOR, WHILE e DO

WHILE. Nessa seção estudaremos o FOR.

O FOR como qualquer iteração* precisa de uma variável para controlar os loops

(voltas). Em for, essa variável deverá ser inicializada, indicada seu critério de execução, e forma

de incremento ou decremento. Ou seja, for precisa de três condições. Vale salientar que essas

condições são separadas por ponto-e-vírgula (;).

*ITERAÇÃO é sinônimo de repetição.

Como procedemos:

FOR (inicialização ; até quando irá ser executado ; incremento ou decremento).

No exemplo, faremos um programa que contará de 1 a 100. Você verá que é um

programa que faz algo muito simples, ele soma um a uma variável várias vezes. O x começa em

1, o loop só será executado enquanto x for menor ou igual a 100 e a cada loop será somado 1

a x. Veja:

//loop com FOR

02.#include <iostream>

03.#include <cstdlib>

04.using namespace std;

05.

06.int main (void){

07.int x;

08.for (x=1; x<=100; x++)

09./* inicialização: x começa em 1

10.critério: executar enquanto x for menor ou igual a 100

11.incremento (++) será somado 1 a x */

12.cout << x <<"\t"; system ("pause");

O FOR também segue a mesma regra de IF. Caso haja mais de uma linha a ser

executada pelo comando FOR, essas deverão estar agrupadas num bloco de dados ( { } ).

Este comando não se limita a operações com constantes, por exemplo: x=1, executar

enquanto x for menor ou igual a 100... Às vezes, o usuário pode entrar com dados para

controlar o loop. Veja:

No exemplo 1, a contagem começará a partir do número que o usuário digitar.

01.//exemplo 1

02.#include <iostream>

03.#include <cstdlib>

04.using namespace std;

05.

06.int main (void){

07.int x, user;

08.cout <<"Digite um numero menor que 100 para iniciar a contagem\n";

09.cin >> user;

10.cin.ignore ();

11.system ("cls"); // limpa a tela

12.for (x=user; x<=100; x++)

13.cout << x <<"\t";

14.system ("pause");

15.}

No exemplo 2, a contagem começará no 1 e terminará no número digitado pelo usuário.

01.//exemplo 2

02.#include <iostream>

03.#include <cstdlib>

04.using namespace std;

05.

06.int main (void){

07.int x, user;

08.cout <<"Digite um numero menor que 100 para iniciar a contagem\n";

09.cin >> user;

10.cin.ignore ();

11.system ("cls"); // limpa a tela

12.for (x=1; x<=user; x++)

13.cout << x <<"\t";

14.system ("pause");

15.}

*WHILE

Uma outra forma de iteração (repetição) em C/C++ é o WHILE. While executa uma comparação

com a variável. Se a comparação for verdadeira, ele executa o bloco de instruções ( { } ) ou

apenas a próxima linha de código logo abaixo.

Procedemos da seguinte maneira:

WHILE (comparação)

Veja o exemplo abaixo.

01.#include <iostream>

02.#include <cstdlib>

03.using namespace std;

04.

05.int main (void){

06.int par=0;

07.cout <<"Os numeros pares de 0 a 100 sao:\n\n";

08.while (par<=100)

09.{

10.cout <<par<<"\t";

11.par+=2; //o mesmo que par=par+2

12.}

13.system ("pause");

14.return 0;

15.}

Neste exemplo serão mostrados os números pares entre 0 e 100.

Algumas precauções

O WHILE muitas vezes pode nos pregar peças. Se prestarmos atenção, no exemplo

acima inicializamos a variávelpar em 0, pois quando usamos no while uma variável sem

inicializa-la pode causar comportamentos estranhos. E por que isso acontece? É simples. C/C++

não inicializa variáveis automaticamente em 0, ou seja, se você comparar uma variável não

inicializada, essa variável pode ser qualquer coisa, ex.: 1557745, -9524778, 1 ou até mesmo 0.

Outro problema comum com o while é o loop infinito. O WHILE, diferentemente de

FOR, não incrementa ou decrementa automaticamente uma variável, isso deve estar

expressado dentro do bloco de instruções, como podemos ver na linha par+=2. Caso

contrário, par sempre seria zero e nunca chegaria a 100 para o loop parar, causando o loop

infinito.

O ideal é utilizar o WHILE em um loop definido pelo usuário, que a partir de uma

entrada ele termine. Ou seja, enquanto o usuário não fizer determinada ação, o loop

continuará a dar voltas. Como no exemplo abaixo.

01.#include <iostream>

02.#include <cstdlib>

03.using namespace std;

04.

05.int main (void){

06.int nr=1;

07.while (nr!=0) //enquanto nr for diferente de 0

08.{

09.cout <<"Digite um numero (0 para finalizar): ";

10.cin >> nr;

11.cin.ignore ();

12.if (nr>0)

13.cout <<"Este numero e positivo\n";

14.else

15.cout <<"Este numero e negativo\n";

16.}

17.return 0;

18.}

No exemplo, o programa só irá parar quando o usuário digitar 0, qualquer outro

número fará com que o programa continue dando loop. Perceba que a variável ainda está

sendo inicializada.

MATRIZ – VETORES

As matrizes em geral são caracterizadas por se tratarem de uma única variável de um

determinado tamanho que guarda varias informações do mesmo tipo. Essas informações são

gravadas na memória seqüencialmente e são referenciadas através de índices. As matrizes

podem ser tanto unidimensionais (vetores) como multidimensionais.

*MATRIZES UNIDIMENSIONAIS

São matrizes de uma única dimensão. Essas matrizes também são chamadas de

vetores. A declaração de vetores em C deve obedecer a seguinte sintaxe:

Tipo nome_vetor[tamanho];

O tipo deve ser especificado conforme a tabela 2 do primeiro artigo. E o tamanho

representa a quantidade de elementos que esta matriz irá conter. É importante dizer que na

linguagem c as matrizes começam pelo índice 0 que guarda o primeiro elemento da matriz.

Para entender melhor, considere que seja necessário declarar um vetor do tipo inteiro que

contenha 10 elementos. Isto é feito da seguinte forma:

int vetor_exemplo[9];

Isso por que a matriz “vetor_exemplo” vai de 0 a 9, ou seja, contém 10 elementos.

Também é possível inicializar o vetor no momento de sua declaração. Para isso veja a sintaxe

abaixo:

Tipo nome_vetor[tamanho]={lista_de_valores};

Sendo que todos os elementos da lista de valores devem ser separados por virgula e serem

todas do mesmo tipo de dados especificado. A seguir temos a declaração do “vetor_exemplo”

com os valores atribuídos.

int vetor_exemplo[9]={0,1,2,3,4,5,6,7,8,9};

Exemplo de um programa completo utilizando vetores e outros conceitos estudados até o

momento.

#include<stdio.h>

void main()

{

int vet1[5]={1,2,3,4,5}; /*declaração e inicialização do vetor vet1*/

int vet2[5]={6,1,2,2,5}; /*declaração e inicialização do vetor vet2*/

int vetSoma[5]; /*declaração do vetor vetSoma que vai guardar o resutado da soma dos dois

vetores(vet1 e vet2).*/

int x;

printf("Este programa soma os dois vetores abaixo:\n");

printf("vet1={1,2,3,4,5}\n");

printf("vet2={6,1,2,2,5}\n");

printf("\n");

printf("vetor resultante da soma:\n");

for(x=0; x<5; x++)

{

vetSoma[x]=vet1[x]+vet2[x]; /*soma os valores*/

printf("vetSoma[%d]:%d\n",x,vetSoma[x]); /*exibe na tela*/

} /*fim do for*/

} /*fim do programa*/

O programa acima soma dois vetores (vet1 e vet2) e exibe sua resposta na tela. O objetivo

deste exemplo é mostrar como declarar e inicializar um vetor. Veja a seguir a saída do

programa:

Este programa soma os dois vetores abaixo:

vet1={1,2,3,4,5}

vet2={6,1,2,2,5}

vetor resultante da soma:

vetSoma[0]:7

vetSoma[1]:3

vetSoma[2]:5

vetSoma[3]:6

vetSoma[4]:10

Os vetores são muito usados para criar uma string de caracteres, pois em C não existe nenhum

tipo de dados para definir uma string.A declaração de um vetor contendo uma string sempre

deve ser maior que o número de caracteres, pois o compilador acrescenta automaticamente

no final da string um espaço nulo que indica o seu término. Este segundo exemplo é muito

simples, mostra apenas como podem ser feitas a declaração e inicialização de um vetor de

string.

#include<stdio.h>

void main()

{

char c1 = 'a';

char vet1[30]="Aprendendo a mexer com string\n";

/*Imprimindo os dados na tela*/

printf("O tipo de dado char guarda apenas um caractere\n");

printf("A variavel c1 do tipo char contem o caractere: %c\n",c1);

printf("\n");

printf("Para trabalhar com uma string deve ser declarado um vetor do tipo char");

printf("\nO vetor do tipo char contem a string: %s",vet1);

} /*fim do programa*

COMANDOS LÓGICOS IF/ELSE

COMANDOS LÓGICOS IF/ELSE

COMANDOS LÓGICOS IF/ELSE

COMANDOS DE REPETIÇÃO FOR

COMANDOS DE REPETIÇÃO WHILE

COMANDOS DE REPETIÇÃO FOR

COMANDOS DE REPETIÇÃO WHILE