Capacitação em Linguagem C Parte 1

Documentos relacionados
Programação de Computadores I Introdução ao C PROFESSORA CINTIA CAETANO

#include <stdio.h> Void main() { printf( Cheguei!\n"); } INTRODUÇÃO A LINGUAGEM C

Programação Estruturada

ALGORITMOS AULA 01. Baseado nas aulas do Prof. Jorgiano Vidal

Linguagem C Controle do Fluxo de Execução. Lógica de Programação

Revisão C++ - Parte 1

PLANO DE UNIDADE DIDÁTICA- PUD

Estruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões.

PROGRAMAÇÃO ESTRUTURADA E ORIENTADA A OBJETOS

Hello World. Linguagem C. Tipos de Dados. Palavras Reservadas. Operadores Aritméticos. Pré e pós incremento e pré e pós decremento

Introdução à linguagem C++

Tópicos em C. Eliade F. Lima

Ponteiros e Tabelas. K&R: Capítulo 5

Conhecendo a Linguagem de Programação C

Programação de Computadores II

INF1007: Programação 2. 0 Revisão. 06/08/2015 (c) Dept. de Informática - PUC-Rio 1

Introdução à Programação. Expressões Booleanas e Comandos Condicionais

INSTITUTO FEDERAL DE! EDUCAÇÃO, CIÊNCIA E TECNOLOGIA RIO GRANDE DO NORTE

MC-102 Aula 06 Comandos Repetitivos

Programação de Computadores II. Cap. 5 Vetores

Introdução à Ciência da Computação

Linguagem C: Introdução

Capacitação em Linguagem C Parte 2

CIT Aula 02 Variáveis e Estruturas de desvio condicional. Autor: Max Rodrigues Marques Carga Horária: 2 h 22/07/15 1

RESUMO DE CONCEITOS BÁSICOS DE C

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

Variáveis, Tipos de Dados e Operadores

Aula 14: Estruturas de Seleção e Controle em C

Aula 06 Introdução à Programação Matrizes

Introdução à Linguagem C

Suponha um conjunto habitacional, com várias famílias... imagina se todas elas morassem em uma única casa?

Linguagem de Programação C. Prof. Fabrício Olivetti de França

Linguagem C (repetição)

DAS5102 Fundamentos da Estrutura da Informação

Algoritmos e Programação

C Comandos de Controle

Programação II. Aula 3

Programação em C. Variáveis e Expressões. Universidade Federal do Rio Grande do Norte Departamento de Engenharia de Computação e Automação

Métodos Computacionais em Física

Introdução à Linguagem C

Algoritmos: Conceitos Fundamentais

Programação Estruturada

Métodos Computacionais. Operadores, Expressões Aritméticas e Entrada/Saída de Dados

Linguagem C estruturas de repetição

Introdução à Programação. Introdução a Linguagem C. Prof. José Honorato F. Nunes

Modularidade - Funções e Procedimentos

Ponteiros. Baseado nos slides do Prof. Mauro.

Seleção Múltipla Laços (while, do-while, for) AULA 05

Linguagem C. Prof.ª Márcia Jani Cícero

Revisão da Linguagem C Prof. Evandro L. L. Rodrigues

Programação: Vetores

Programação Básica. Estrutura de um algoritmo

Introdução à Programação. Estruturas de Repetição

Sistemas Operacionais e Introdução à Programação. Programação com linguagem C

PCI- Operadores, Expressões e Funções. Profa. Mercedes Gonzales Márquez

Fundamentos de Programação1

Conceitos de Linguagens de Programação - Características. Paavo Soeiro

Algoritmos e Programação

Estrutura do programa

Estruturas de Repetição

Permite modularidade (dividir programa em partes): Facilita a depuração (debug) e portabilidade.

Algoritmos II prof. Daniel Oliveira

ALGORITMOS E ESRUTRA DE DADOS I. Ponteiros Passagem por Valor e Referência Alocação de Memória

Universidade Federal do Espírito Santo. Programação II. CT IX - Sala 201 Departamento de Informática Centro Tecnológico

Entender o problema Encontrar um algoritmo para resolvê-lo. Implementar o algoritmo numa linguagem de programação

Sub Rotinas. Estrutura de Dados. Prof. Kleber Rezende

Introdução a Programação de Jogos

Linguagem C. IF61A/IF71A - Computação 1 Prof. Leonelo Almeida. Universidade Tecnológica Federal do Paraná

Recursividade. Prof. Jesus José de Oliveira Neto

Aula 18: Funções em C

Linguagem de Programação C. Linguagem de Programação C. Linguagem de Programação C. Linguagem de Programação C. Linguagem de Programação C

Introdução a Linguagem C. Prof. Me. Hélio Esperidião

3. Linguagem de Programação C

Linguagem de Programação C

Introdução à Linguagem C++

Aula 02 -Introdução àlinguagc Programação: Estrutura-Seleção. OPL e IC1 Prof: Anilton Joaquim da Silva

Estruturas de Dados. Introdução Definição de Ponteiros Declaração de Ponteiros em C Manipulação de Ponteiros em C

Suponha um conjunto habitacional, com várias famílias... imagina se todas elas morassem em uma única casa?

Métodos Computacionais. Comandos Condicionais e de Repetição em C

Parte 1. Programação (linguagem C) Introdução Geral

Sintaxe Básica de Java Parte 2

MC102 Algoritmos e Programação de Computadores

Tipos Básicos. Operadores de Incremento e Decremento. Operador Sizeof. Estruturas de Dados Aula 2: Estruturas Estáticas

Programação científica C++

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: funções

Alocação Dinâmica em C

Programação de Computadores I Funções de Repetição da Linguagem C PROFESSORA CINTIA CAETANO

Programação Orientada a Objetos

Linguagem C Princípios Básicos (parte 1)

Algoritmos e Estruturas de Dados I (DCC/003) Estruturas Condicionais e de Repetição

Linguagem de Programação. Thiago Leite Francisco Barretto

Estruturas de Dados Aula 2: Estruturas Estáticas. Tipos Básicos. Quantos valores distintos podemos representar com o tipo char?

Essencialmente, um ponteiro nada mais é do que uma variável que ao invés de conter um valor, contém um endereço de memória.

Estruturas de Dados Aula 2: Estruturas Estáticas 02/03/2011

Aula 8 Comandos de Seleção

UNIVERSIDADE LUSÓFONA DE HUMANIDADES E TECNOLOGIAS 2º Semestre 2013/2014

C Comandos de Controle

Linguagem C: Elementos fundamentais

Introdução a Programação de Jogos

Transcrição:

Capacitação em Linguagem C Parte 1 Andrey Souto Maior Giuseppe Portolese Universidade Estadual de Maringá - Centro de Tecnologia Departamento de Informática 21 de outubro de 2015

Sumário I Definição e representação de algoritmos Um simples programa em C Tipos de dados básicos Entrada e saída Tipos de dados estruturados Vetores sequenciais Vetores esparsos Sequência de caracteres Estruturas algoritmicas de abstração em nível de comando Sequencialidade e atribuição Seleção Repetição Estruturas algoritmicas de abstração em nível de módulo Blocos Funções Procedimentos

Sumário II Execução de processos algoritmicos Escopo de variáveis Formas de alocação de variáveis Passagem de parâmetros Arquivos Técnicas de construção de algoritmos e programação Refinamento sucessivo Recursividade

Algoritmo Definição Informal Procedimento computacional bem definido que toma algum valor ou conjunto de valores como entrada e produz algum valor como ou conjunto de valores como saída. Portanto, um algoritmo é uma sequência de passos computacionais que transformam a entrada na saída (CLRS, 2002).

Linguagem de programação Uma forma padronizada de comunicar instruções para um computador. Linguagem utilizada para escrever algoritmos que podem ser entendidos pelo computador. Categorias: Aplicações científicas - Fortran Aplicações comerciais - Cobol Inteligência artificial - LISP Software web - PHP Propósito geral - C, Java

Linguagem C Propósito geral Compilada (GNU Compiler Collection - GCC) Estruturada Imperativa Procedural Padronizada

Um simples programa em C #include <stdio.h> main(){ printf("hello World");

Tipos de dados básicos Tipo Descrição Tamanho char contém um único caractere 1 byte int um número inteiro 4 bytes float ponto flutuante de precisão 4 bytes simples double ponto flutuante de precisão dupla 8 bytes Variações short - 2 bytes long - 8 bytes

Constantes Variáveis de valor fixo #define TRUE 1 #define FALSE 0 main(){...

stdio.h printf(formato, Argumentos...): Função usada para imprimir na tela scanf(formato, EndereçoArgumentos): Função usada para ler a entrada do usuário e passar seu valor para o endereço dado.

stdio.h main(){ printf("hello World");

stdio.h int esperatecla(){ char in; scanf("%c",&in); return in;

Vetores sequenciais Variável composta dada por uma coleção de elementos individuais com as seguintes características: É ordenado: os elementos de um vetor são indexados de forma ordenada É homogêneo: todo valor armazenado em um mesmo vetor deve ser do mesmo tipo Figura 1: Vetor vet

Vetores sequenciais #include <stdio.h> main(){ int vet[6]; int outrovet[] = {0, 1, 2, 3, 4, 5;

Vetores esparsos Nem todas as posições de um vetor são ocupadas todo o tempo. Em muitos casos declaramos um vetor muito grande e vários de seus espaços continuam com o valor nulo de seu tipo. Veremos como resolver esse problema em breve.

Sequência de caracteres - String #include <stdio.h> main(){ char string[20]; char outrastring[] = "Esta eh uma string";

Sequencialidade e atribuição É uma estrutura de desvio do fluxo de controle presente em linguagens de programação que realiza um conjunto predeterminado de comandos de forma sequencial, de cima para baixo, na ordem em que foram declarados. Exemplo: declaração1; comando1; comando2; comando3; Obs: na estrutura sequencial, as declarações sempre ocorrem antes dos comandos.

Desafio Faça um código que: 1. Receba o primeiro nome, id e se é aluno (Ou não) de três participantes 2. Imprima as informações das três pessoas na tela

Exemplo #include <stdio.h> int main(){ char nome0[30], nome1[30], nome2[30]; int id[3]; printf("nome0: "); scanf("%s",nome0); printf("id: "); scanf("%d",&id[0]); printf("nome=[%s] ID=[%d]\n",nome0,id[0]); return 0;

Operadores aritméticos Operação Operador soma + subtração multiplicação divisão / módulo/resto % incremento ++ decremento

Operadores relacionais e lógicos Operação Operador atribuição = maior > maior igual >= menor < menor igual <= igualdade == desigualdade! = negação!

Comando if if (expressão) { comando1; else { comando2; if (expressão1) { comando1; else if (expressão2) { comando2; else if (expressão3) comando3; else { comando4;

Exemplo Faça um programa que leia uma entrada (Inteira) e tenha como saída: Zero! se a entrada for 0 Maior que zero! se a entrada for maior que 0 Menor que zero! você já entendeu

Exemplo #include <stdio.h> int main(){ int entrada; scanf("%d",&entrada); if(0 == entrada){ printf("zero!\n"); else if(0 < entrada){ printf("maior que zero!\n"); else{ printf("menor que zero!\n");

Comando switch switch (variável) { case constante1 : comando1; break; case constante2 : comando2; break; default : comando3; break;

Exemplo Faça um programa de menu que leia uma entrada (Inteira) e tenha como saída: Opcao 0 se a entrada for 0 Opcao 1 se a entrada for 1 Opcao Invalida para qualquer outra entrada

Exemplo #include <stdio.h> int main(){ int entrada; scanf("%d",&entrada); switch(entrada){ case 0: printf("opcao 0\n"); break; case 1: printf("opcao 1\n"); break; default: printf("opcao Invalida\n"); break;

Comando for for (expressão1, expressão2, expressão3) { comando; expressão1 - inicialização do laço expressão2 - condição que finaliza o laço expressão3 - incremento do laço

Exemplo Faça um programa que leia um número (Inteiro) N e escreva na tela: Eu sei fazer for! N vezes

Exemplo #include <stdio.h> int main(){ int i, N; scanf("%d",&n); for(i = 0; i < N; i++){ printf("eu sei fazer for!\n");

Comandos while e do-while while (expressão) { comando; do { comando; while (expressão);

Comandos while e do-while while (expressão) { comando; do { comando; while (expressão); Pergunta: Existe diferença semântica entre while e do-while? Qual?

Exemplo Faça um programa que leia um número (Inteiro) N e escreva na tela: Eu sei fazer while! N vezes

Exemplo #include <stdio.h> int main(){ int i, N; scanf("%d",&n); i = 0; while(i < N){ printf("eu sei fazer while!\n"); i++;

Comandos break e continue break: Serve para interromper o laço atual, fazendo com que o programa continue a executar após o laço. continue: Serve para interromper somente a iteração atual do laço, fazendo com que o programa continue a executar na próxima iteração do laço atual.

Exemplo Faça um programa que leia um número (Inteiro) N e escreva na tela a contagem de todos os números em sequencia, parando a execução se o número chegar em 5.

Exemplo #include <stdio.h> int main(){ int i,n; scanf("%d",&n); for(i=0; i<n; i++){ if(5 == i){ break; printf("%d\n",i);

Exemplo Faça um programa que leia um número (Inteiro) N e escreva na tela a contagem de todos os números em sequencia, exceto se o número for 5.

Exemplo #include <stdio.h> int main(){ int i,n; scanf("%d",&n); for(i=0; i<n; i++){ if(5 == i){ continue; printf("%d\n",i);

Blocos Sessão do código que possui suas próprias variáveis locais, cujo escopo é minimizado. As variáveis são alocadas quando entra na sessão e desalocada quando sai da sessão.

Exemplo #include <stdio.h> int main(){ int i,n; scanf("%d",&n); for(i=0; i<n; i++){ int j = 5; printf("%d\n",i + j); j não pode ser acessada fora do for

Funções Podemos dizer que funções são sub-rotinas que executam uma tarefa particular. tipo do retorno nome da funcao (arg1, agr2,...);

Procedimentos A principal diferença entre uma função e um procedimento está no fato de que uma função obrigatoriamente retorna um valor, enquanto que um procedimento não retorna valor algum, ou seja o procedimento apenas executa uma ação.

Exemplo #include <stdio.h> int incrementa(int n){ return n + 1; void sorria(){ printf(":)\n"); int main(){ printf("%d\n",incrementa(0)); sorria();

Escopo de variáveis O escopo é a parte do programa dentro da qual o nome pode ser usado. Para uma variável declarada no início de uma função, por exemplo, o escopo é a função em que o nome é declarado. O escopo de uma variável dura desde o ponto em que é declarada até o final da função ou da execução do programa. Pergunta: Existe diferença entre bloco e escopo? Qual?

Exemplo void foo(){ int count = 2; while (count < 10){ int count = 0; count++; int main(){ int count = 1; foo(); return 0;

Alocação de variáveis Estática Os dados tem um tamanho fixo e estão organizados sequencialmente na memória do computador. Dinâmica Os dados não precisam ter um tamanho fixo, pois podemos definir para cada dado quanto de memória que desejamos usar. A distribuição na memória não é necessariamente sequencial. ponteiros malloc realloc

Ponteiros Um ponteiro (ou apontador ou pointer) é um tipo especial de variável que armazena endereços. Um ponteiro pode ter o valor especial NULL que não é endereço de lugar algum. Operadores: & - retorna o endereço da variável * - declaração de ponteiro ou derreferenciação -> - seleção de elemento por ponteiro

Ponteiros #include <stdio.h> main(){ int *p; int num = 5; p = &num; printf("o numero eh: %d", *p);

Passagem de parâmetros A linguagem de programação C permite que os parâmetros sejam passados para as funções de duas maneiras: Por valor Como o próprio nome diz, uma expressão pode ser utilizada na chamada. O valor da expressão é calculada, e o valor resultante é passado para a execução da função. Por referência O endereço de uma variável deve ser passado na chamada da função. Dessa forma, a função pode modificar a variável diretamente, o que em geral não é recomendável, mas há situações onde esse recurso é necessário, por exemplo, para a criação de funções que devolvem mais de um valor.

Arquivos Abertura de um arquivo (fopen) Leitura de um arquivo (fgets) Escrita em um arquivo (fwrite) Fechar um arquivo (fclose)

Exemplo #include <stdio.h> int main(){ FILE *fp; char in[10]; fp = fopen("./teste.c","r"); fgets(in, 10, fp); printf("%s\n",in); fclose(fp); return 0;

Refinamento sucessivo Dividir e conquistar! Partindo do problema geral, o dividimos em problemas menores (os subproblemas). Após resolver cada subproblema separado, juntamos todas as soluções e temos a solução do problema geral. Etapas: Dividir o problema em subproblemas. Conquistar os subproblemas, resolvendo-os. Combinar as soluções dadas aos subproblemas, a fim de formar a solução para o problema original. Exemplo: Merge-sort

Recursividade A recursividade é a definição de uma subrotina (função ou procedimento) que pode invocar a si mesma. Recursão direta É quando uma função chama a si mesma fazendo com isso um loop. Recursão indireta É quando uma função faz a chamada a outra função e esta por sua vez faz uma chamada a primeira. Caso base É uma situação em que a função recursiva pára de chamá-la novamente. O caso base é de extrema importância na implementação da recursividade, pois ele evita o loop infinito.

Recursividade Direta foo() { if (expressao) { return 1; else { foo(); Indireta foo1() { if (expressao1) { return 1; else { foo(); foo() { if (expressao2) { return 1; else { foo1();

Exemplo #include <stdio.h> void decrementa(int n){ if(0 >= n){ printf("fim c:\n"); else{ printf("n == %d\n",n); decrementa(n-1); int main(){ decrementa(5);

Desafio Faça um programa que calcule o fatorial de uma entrada.

Desafio #include <stdio.h> int fatorial(int n, int fat){ if(1 >= n){ return fat; else{ return fatorial(n-1, fat*n); int main(){ int entrada; scanf("%d",&entrada); printf("%d\n", fatorial(entrada,1));