


















































Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
apostila de programação em c para inciantes
Tipologia: Notas de estudo
1 / 58
Esta página não é visível na pré-visualização
Não perca as partes importantes!



















































Campus Alegrete Curso Superior de Tecnologia em Análise e Desenvolvimento de Sistemas
Curso Superior de Tecnologia em Análise e Desenvolvimento de Sistemas
Campus Alegrete Curso Superior de Tecnologia em Análise e Desenvolvimento de Sistemas Algoritmos e Introdução à Programação
1. Algoritmos Um algoritmo é uma seqüência finita de instruções bem definidas e não ambíguas, cada uma das quais pode ser executada mecanicamente em um período de tempo finito e com uma quantidade de esforço finita. 1.1. Introdução O conceito de algoritmo é freqüentemente ilustrado pelo exemplo de uma receita, 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. Por exemplo, um algoritmo para se vestir pode especificar que você vista primeiro as meias e os sapatos antes de vestir a calça enquanto outro algoritmo especifica que você deve primeiro vestir a calça e depois as meias e os sapatos. Fica claro que o primeiro algoritmo é mais difícil de executar que o segundo apesar de ambos levarem ao mesmo resultado. O conceito de um algoritmo foi formalizado em 1936 pela Máquina de Turing de Alan Turing e pelo cálculo lambda de Alonzo Church, que formaram as primeiras fundações da Ciência da computação. Não se aprende algoritmos: Copiando algoritmos Estudando algoritmos Só se aprende algoritmos: Construindo algoritmos Testando algoritmos Todo algoritmo deve ter as seguintes propriedades: Possui estado inicial Possui dados de entrada Possui uma seqüência lógica e finita de ações claras e precisas Produz dados de saída e estado final previsível Deve ser eficaz
Campus Alegrete Curso Superior de Tecnologia em Análise e Desenvolvimento de Sistemas 1.2. Representação de algoritmos Existem diversas formas de representação de algoritmos, mas não há um consenso com relação à melhor delas. O critério usado para classificar hierarquicamente estas formas está diretamente ligado ao nível de detalhe ou, inversamente, ao grau de abstração oferecido. Algumas formas de representação de algoritmos tratam os problemas apenas em nível lógico, abstraindo-se de detalhes de implementação muitas vezes relacionados com alguma linguagem de programação específica. Por outro lado existem formas de representação de algoritmos que possuem uma maior riqueza de detalhes e muitas vezes acabam por obscurecer as idéias principais do algoritmo, dificultando seu entendimento. Dentre as formas de representação de algoritmos mais conhecidas podemos citar: pseudocódigo, diagrama de fluxo de dados e diagrama de chapin. 1.2.1. Pseudocódigo Pseudocódigo (ou português estruturado ou portugol) é uma forma genérica de escrever um algoritmo, utilizando uma linguagem simples (nativa a quem o escreve, de forma a ser entendida por qualquer pessoa) sem necessidade de conhecer a sintaxe de nenhuma linguagem de programação. É, como o nome indica, um pseudocódigo e, portanto, não pode ser executado num sistema real (computador) — de outra forma deixaria de ser pseudo. Os livros sobre a ciência de computação utilizam freqüentemente o pseudocódigo para ilustrar os seus exemplos, de forma que todos os programadores possam entendê-los (independentemente da linguagem que utilizem). SÍNTESE Objetivo: analisar a idade de uma pessoa Entrada: uma idade Saída: situação da maturidade da pessoa DECLARAÇÕES inteiro IDADE; INÍCIO escreva (“Informe sua idade: “); leia (IDADE); se (IDADE < 21) então escreva (“você é jovem”); senão escreva (“você é adulto”); fim_se; FIM
Campus Alegrete Curso Superior de Tecnologia em Análise e Desenvolvimento de Sistemas 1.2.3. Diagrama de Chapin Elaborado por Nassi e Shneiderman e ampliada por Ned Chapin. Almejada a substituição da representação tradicional (diagrama de blocos) por uma diagramação com quadros que oferecessem a visão hierárquica e estruturada da lógica proposta para um programa. Entre os diversos métodos existentes para este tipo de representação, o Diagrama de Chapin é um dos menos utilizados atualmente, principalmente, porque exige bastante atenção do programador na representação do seu raciocínio, ao invés de se concentrar mais sobre o próprio problema a ser analisado e posteriormente solucionado. 1.3. Linguagens de Programação Interpretadas e Compiladas Uma linguagem de programação pode ser convertida, ou traduzida, em código de máquina por compilação ou interpretação, que juntas podem ser chamadas de tradução. Se o método utilizado traduz todo o texto do programa (também chamado de código), para só depois executar (ou rodar, como se diz no jargão da computação) o programa, então se diz que o programa foi compilado e que o mecanismo utilizado para a tradução é um compilador (que por sua vez nada
Campus Alegrete Curso Superior de Tecnologia em Análise e Desenvolvimento de Sistemas mais é do que um programa). A versão compilada do programa tipicamente é armazenada, de forma que o programa pode ser executado um número indefinido de vezes sem que seja necessária nova compilação, o que compensa o tempo gasto na compilação. Isso acontece com linguagens como Pascal e C (linguagem de programação). Se o texto do programa é traduzido na medida em que vai sendo executado, como em Javascript, Python, Perl ou PHP, num processo de tradução de trechos seguidos de sua execução imediata, então diz-se que o programa foi interpretado e que o mecanismo utilizado para a tradução é um interpretador. Programas interpretados são geralmente mais lentos do que os compilados, mas são também geralmente mais flexíveis, já que podem interagir com o ambiente mais facilmente (freqüentemente linguagens interpretadas são chamadas também de script). Embora haja essa distinção entre linguagens interpretadas e compiladas, as coisas nem sempre são tão simples. Há linguagens compiladas para um código de máquina de uma máquina virtual (sendo esta máquina virtual apenas mais um software, que emula a máquina virtual sendo executado em uma máquina real), como o Java e C#. E também há outras formas de interpretar em que os códigos-fontes, ao invés de serem interpretados linha-a-linha, têm blocos “compilados” para a memória, de acordo com as necessidades, o que aumenta a performance dos programas quando os mesmos módulos são chamados várias vezes, técnica esta conhecida como Just-in-Time.
Campus Alegrete Curso Superior de Tecnologia em Análise e Desenvolvimento de Sistemas C Programming Language”, de Brian Kernighan e Dennis Ritchie (K&R), a “bíblia da linguagem C”. O mais interessante desta versão de C era que os programas-fonte criados para rodar em um tipo de computador podiam ser transportados e recompilados em outros sem grandes problemas. A esta característica dá-se o nome de portabilidade. Com ela, uma empresa que desenvolve um programa pode fazê-lo rodar em diferentes computadores sem ter um elevado custo a cada vez que isto for feito. Em 1985, ANSI ( American National Standards Institute ) estabeleceu um padrão oficial de C o chamado “C ANSI”. 2.2. Bibliotecas e Cabeçalhos Na linguagem C, arquivos de cabeçalho (header files) é uma característica de certas linguagens que permite aos programadores separar certos elementos de códigos-fonte de programas em arquivos reusáveis. As bibliotecas e cabeçalhos são incluídos no código-fonte através de diretiva de pré-processamento #include. Abaixo, listamos os cabeçalhos mais utilizados na linguagem C: stdio.h Manipulação de entrada/saída conio.h Manipulação de caracteres na tela string.h Tratamento de cadeia de caracteres math.h Funções matemáticas comuns em computação stdlib.h Funções de alocação de memória, conversões, etc 2.3. Comentários Comentário é uma maneira simples e bastante útil em programação que serve para explicar um trecho de código-fonte para uma futura referência ou mesmo para que outro membro da equipe de programação entenda o que foi desenvolvido. Na linguagem C, comentários têm o seguinte formato: /* explicação ... / Tudo que se encontrar entre / e */ não será lido pelo compilador. Em C++, que é uma linguagem posterior ao C que inclui orientação a objetos, comentários também podem ser representados por // antes da explicação, como: // explicação ... Se estivermos utilizando para desenvolver em C um compilador de C++, ambos os tipos de comentários irão funcionar.
Campus Alegrete Curso Superior de Tecnologia em Análise e Desenvolvimento de Sistemas 2.4. Bloco de Instruções Os programas em C sempre seguirão o modelo descrito abaixo, incluindo comentários, bibliotecas, função principal. A função getch não é padrão. /* Programa 1 */ comentário #include <stdio.h> biblioteca #include <conio.h> biblioteca main( ) função principal { inicio . .
3. Manipulação de Dados Qualquer programa tem que fazer alguma coisa (nem que seja enviar um sinal bip) senão não é um programa, ou seja, ele tem que apresentar conteúdo. Assim, como apresenta conteúdo, vai “alterar” estados dentro do computador, sendo que, o estado de uma das peças que vai inevitavelmente se alterar é a memória interna. É inevitável um programa utilizar a memória do computador, assim, o programa precisa de um espaço físico na memória e para isso terá que o requisitar. Já realizamos abstrações desse tipo na matemática, pois uma variável é uma expressão que varia e normalmente é representado por uma incógnita X, e uma constante é uma expressão que não se altera (o número de Avogrado, o Pi, o número de Neper) que pode ser representado por uma letra. Veremos a seguir, que constantes e variáveis se comportam igualmente na computação. 3.1. Constantes São valores que não se alteram ao longo do programa. Uma constante pode aparecer sob forma de um valor explícito (constante literal) ou um nome simbólico que representa um determinado valor ao longo do programa (constante simbólica). Exemplo: PI = 3.1416;
Campus Alegrete Curso Superior de Tecnologia em Análise e Desenvolvimento de Sistemas
4. Operadores Operadores são símbolos matemáticos e lógicos que servem para a realização de operações aritméticas, lógicas e relacionais. 4.1. Operadores Aritméticos Os operadores aritméticos são usados para calcular expressões matemáticas. Os operadores aritméticos seguem abaixo: Significado Símbolo Atribuição = Soma + Subtração - Multiplicação * Divisão / Resto % 4.2. Operadores Aritméticos de Atribuição São combinações de operadores que simplificam as instruções e que geralmente são usados por programadores experientes. Dessa forma uma instrução escrita da forma: Normal Reduzida var = var + expr; var += expr; var = var – expr; var - = expr; var = var * expr; var *= expr; var = var / expr; var /= expr; 4. 3. Operadores Relacionais Esses operadores são responsáveis pelas comparações de expressões nos programas. Os operadores relacionais seguem abaixo: Significado Símbolo Maior > Maior ou igual >= Menor < Menor ou igual <= Igualdade == Diferença !=
Campus Alegrete Curso Superior de Tecnologia em Análise e Desenvolvimento de Sistemas
4. 4. Operadores Lógicos Os operados lógicos servem para interligar mais de uma operação relacional. Os operadores lógicos seguem abaixo: Significado Símbolo E && OU || Não! 4. 5. Operadores de Incremento/Decremento O operador de incremento (++) soma 1 ao seu operando enquanto que o de decremento (--) subtrai um. Eles podem ser pré-fixados ou pós-fixados conforme mostra a tabela abaixo: Operador Instrução Pós-fixado Pré-fixado ++ var = var + 1; var = var++; ou var++; var = ++var; ou ++var; -- var = var – 1; var = var--; ou var--; var = --var; ou --var; 4. 6. Precedência de Operadores Para evitar ordem errada em um cálculo, utilizamos a precedência de operadores, com a seguinte ordem: 1º parênteses e funções 2º potência e resto 3º multiplicação e divisão 4º adição e subtração 5º operadores relacionais 6º operadores lógicos 4. 7. Exercícios de Fixação Diga o resultado das expressões abaixo: a) x = 5 * 4 / 6 + 7 b) x = 5 * 4 % 6 + 7 c) x = ((4 / 2) + (3 * 5)) d) x = (3 + 2 * (4 + (2+4))) % 2
Campus Alegrete Curso Superior de Tecnologia em Análise e Desenvolvimento de Sistemas %d Exibe um inteiro em formato decimal %i Exibe um inteiro %e Exibe um número em notação científica (com e minúsculo) %E Exibe um número em notação científica (com E maiúsculo) %f Exibe um ponto flutuante em formato decimal %g Usa %e ou %f, o que for menor %G O mesmo que %g, só que um E maiúsculo é usado se o formato %e for escolhido %o Exibe um número em notação octal %s Exibe uma string %u Exibe um decimal sem sinal %x Exibe um número em hexadecimal com letras minúsculas %X Exibe um número em hexadecimal com letras maiúsculas %% Exibe um sinal de % %p Exibe um ponteiro 5.3. Códigos de Formatação Os códigos de formatação servem para exibir formatos na exibição dos caracteres na tela. São eles: Código Significado \n Nova linha \t Tabulação \b Retrocesso \” Aspas \ Barra \f Salta formulário \ 0 Nulo 5.4. printf A função printf é parte de um conjunto de funções pré-definidas armazenadas em uma biblioteca padrão de rotinas da linguagem C stdio.h. Ela permite apresentar na tela os valores de qualquer tipo de dado. Para tanto, printf utiliza o mecanismo de formatação, que permite traduzir a representação interna de variáveis para a representação ASCII que pode ser apresentada na tela. O primeiro argumento de printf é um string de controle, uma seqüência de caracteres entre aspas. Esta string, que sempre deve estar presente, pode especificar através de caracteres especiais (as seqüências de conversão) quantos outros argumentos estarão presentes nesta invocação da função. Estes outros argumentos serão variáveis cujos valores serão formatados e apresentados na tela. Por exemplo, se o valor de uma variável inteira x é 12, então a execução da função: printf("Valor de x = %d", x);
Campus Alegrete Curso Superior de Tecnologia em Análise e Desenvolvimento de Sistemas Imprime na tela a frase Valor de x = 12. Se y é uma variável do tipo caráter com valor 'A', então a execução de: printf("x = %d e y = %c\n", x, y); Imprime na tela a frase x = 12 e y = A seguida pelo caráter de nova linha (\n), ou seja, a próxima saída para a tela aconteceria na linha seguinte. Observe que a seqüência de conversão pode ocorrer dentro de qualquer posição dentro da string de controle. A função printf não tem um número fixo de argumentos. Em sua forma mais simples, pelo menos um argumento deve estar presente, a string de controle. Uma string de controle sem nenhuma seqüência de conversão será literalmente impressa na tela. Com variáveis adicionais, a única forma de saber qual o número de variáveis que será apresentado é por inspeção da string de controle. Desta forma, cuidado deve ser tomado para que o número de variáveis após a string de controle esteja de acordo com o número de seqüências de conversão presente na string de controle. Além de ter o número correto de argumentos e seqüências de conversão, o tipo de cada variável deve estar de acordo com a seqüência de conversão especificada na string de controle. A seqüência de conversão pode ser reconhecida dentro da string de controle por iniciar sempre com o caráter %. O primeiro programa que geralmente é desenvolvido por alunos de programação é o chamado “Olá Mundo!” ou “Hello World!”. Segue abaixo: /* Programa Ola_Mundo / #include <stdio.h> #include <conio.h> main( ) { printf(“\n Ola Mundo!”); getch(); } Podemos ver nesse exemplo que, utilizamos apenas uma função de escrita para exibir uma frase na tela. Outro exemplo mais completo que trata da soma entre duas constantes pode ser visto abaixo: / Programa Soma_A_B */ #include <stdio.h> #include <conio.h> main( ) { int a; int b; int c; a = 2; b = 3; c = a + b; printf(“\n A soma e: %d”, c); getch(); }
Campus Alegrete Curso Superior de Tecnologia em Análise e Desenvolvimento de Sistemas getch(); } Em outro exemplo, scanf("%c%d", &l, &i) lê um caractere (%c) seguido de um número (%d) e guarda nas variáveis l e i, que devem ser dos tipos char e int, respectivamente. As expressões dos dados são sempre um % seguido de uma letra que indica o tipo a ser lido. Entre esses dois pode haver um número que indica o máximo de caracteres a serem usados para montar o valor a ser lido. Dessa forma scanf("%3s%4d", s, &i) lê uma string (%s) de no máximo 3 caracteres e um número com no máximo 4 dígitos (incluindo o sinal) e guarda em s e i, respectivamente. 5.5.1. Exercícios de Fixação
Campus Alegrete Curso Superior de Tecnologia em Análise e Desenvolvimento de Sistemas