• Nenhum resultado encontrado

Curso de C: uma breve introdução

N/A
N/A
Protected

Academic year: 2021

Share "Curso de C: uma breve introdução"

Copied!
59
0
0

Texto

(1)

Curso de C: uma breve introdução

(2)

Todo o material aqui disponível pode, posteriormente, ser utilizado sobre os termos da:

Creative Commons License:

Atribuição - Uso não comercial - Permanência da Licença

http://creativecommons.org/licenses/by-nc-sa/3.0/ Licença de uso e distribuição

(3)

Quem sou eu?

Graduando do DCC (Ciência da Computação) Administrador de Redes e Sistemas GNU/Linux (POP-BA/RNP e Graco)

Contribuidor de Software Livre (Debian, Foswiki, HnTool)

(4)

Sobre o curso

Pré-requisito

Lógica de programação

Uma rápida introdução sobre C

Estrutura básica de um programa Declaração de variáveis e tipos Estruturas de controle de fluxo Funções

(5)

O que é C?

É uma linguagem de programação de propósito geral

Criada por Dennis Ritchie Derivada da linguagem B

Rápida e “portável” (ANSI C) Várias aplicações...

Kernel do Linux GNOME

(6)
(7)

Primeiros passos

O que você precisa?

Compilador (DJGPP, etc.)

Editor de texto (gedit/notepad, IDE) C é Case-Sensitive:

soma != Soma != SOMA != SoMa

Originalmente Programação Modular, mas... suporta:

(8)

Primeiros passos

Exercício: fazer um super-programa que exiba a seguinte mensagem na tela: “Ola Mundo!!!”

(9)

Primeiros passos

Exercício: fazer um super-programa que exiba a seguinte mensagem na tela: “Ola Mundo!!!”

Primeiro programa em C /* Primeiro programa em C: ola­mundo.c */ #include <stdio.h> int main() {    printf(“Ola Mundo!!!\n”); }

(10)

Primeiros passos

Compilar e executar:

gcc -o ola-mundo ola-mundo.c ./ola-mundo

(11)

Primeiros passos

Função saída: printf

printf – print + formato

Exemplo de utilização:

printf(string-de-controle, lista-de-argumentos) printf ("%f",40.345) -> "40.345"

printf("Ola mundo!\n");

(12)

Primeiros passos

Função entrada: scanf scanf – scan + formato Exemplo de utilização:

scanf(string-de-controle, lista-de-argumentos) scanf ("%d",&x);

scanf("%f %f", &num1, &num2);

Cuidado com o buffer na leitura de string...

(13)

Primeiros passos

Caracteres de controle: printf ou scanf

Funções básicas de I/O

Código Significado

%d Inteiro

%f Float (real) %c Caractere %s String

(14)
(15)

Variáveis e tipos de dados

Uma variável é uma porção de memória, utilizada para armazenar um determinado valor: a = 5 b = 2 a = a + 1 result = a – b Variáveis

(16)

Variáveis e tipos de dados

Identificadores

Cada variável necessita de um Identificador que a distingue das outras:

Lestras (a-z, A-Z) + dígitos (0-9) + underscore (_) Não podem iniciar com dígitos

Cuidado com as palavras reservadas:

for, while, and, do, int, float, break, case, etc.

Dica de boa prática:

(17)

Variáveis e tipos de dados

Tipos de dados fundamentais

Ok, iremos armazenar os dados na memória, mas o computador precisa saber que tipo de dado está armazenando...

Tipos fundamentais:

char – Armazenamento de caracteres int – Armazenamento de inteiros

float – Ponto flutuante em precisão simples double – Ponto flutuante em dupla precisão

(18)

Variáveis e tipos de dados

Declaração de variáveis

Para declarar variáveis em C, digite o tipo da variável seguido por um identificador válido:

int a; int b;

float mynumber;

É possível declarar variáveis de mesmo tipo na mesma linha:

int a, b;

É possível inicializar variáveis já na declaração:

int a = 10, b = 5;

(19)

Variáveis e tipos de dados

Vetores

Conjunto de elementos consecutivos, do mesmo tipo, que podem ser acessados individualmente a partir de um único nome.

Declaração:

tipo nome_variavel [quantidade]

4.8 5.0 4.5 5.6 6.7 3.2 2.9

(0) (1) (2) (3) (4) (5) (6)

(20)

Variáveis e tipos de dados

Vetores

Exemplo de declaração:

int numero_matricula[20]; float notas[20];

Os índices do vetor de tamanho n variam de 0 à n-1. Ex:

float notas[4];

notas[0] = 6.4; // primeiro elemento notas[3] = 5.3; // ultimo elemento

(21)

Variáveis e tipos de dados

Vetores

Dicas de inicialização de vetores:

int v[3] = {1,2,3};

int v[5] = {5,4}; // igual a {5,4,0,0,0} int v[] = {6,7,8,9};

Incorreto:

(22)
(23)

Operadores

Operadores Aritméticos

Operadores aritméticos

+, -, *, / e %

A divisão inteira trunca qualquer parte fracionária

A seguinte expressão produz o resto da divisão de x por y (somente aplicado à int):

x % y

(24)

Operadores

Operadores Relacionais e lógicos

Operadores relacionais Maior: > Maior ou igual: >= Menor: < Menor ou igual: <= Igual: == Diferente: != Operadores lógicos: AND: && OR: ||

(25)

Exercício

Fazer um programa que leia um número natural, representando a quantidade de dias, e exiba o equivalente a quantidade de anos.

Exemplo:

365 dias => ~1 ano 1461 dias => 4 anos

Dica: para ler um inteiro na variável x, fazemos:

scanf(“%d”, &x);

(26)

Exercício

Fazer um programa que leia um número

natural, representando a quantidade de dias, e exiba o equivalente a quantidade de anos.

Programa um pouco mais trabalhado

/* Conversao dias para anos: dias2anos.c */ #include <stdio.h> int main() { int dias; float anos; printf(“Digite o numero de dias: ”); scanf(“%d”,&dias); anos = dias / 365.25; printf(“\n%d dias equivale a %f anos.\n”,dias, anos); }

(27)
(28)

Controle de fluxo

É possível controla o fluxo de execução de um programa em C, baseado no valor de uma

expressão lógica/relacional. Exemplo: imposto de renda

Condicionais if (salario_mensal <= 1499.15) { isento(); } else { calcula_ir(salario_mensal);

(29)

Controle de fluxo

Forma geral:

<condicao> pode ser expressão complexa:

a > b+3 && (c % 5 != 0 || c == 25) Condicionais if (<condicao>) { // Fluxo a executar caso <condicao> seja verdadeira } else { // Fluxo a executar caso <condicao> seja falsa

(30)

Exercício

Um ano é bissexto se for divisível por 4 mas não por 100, exceto quando for divisível por 400. Faça um programa que leia o ano e diga se ele é bissexto ou não.

Exemplo:

2000 => Ano bissexto

2200 => Ano nao e bissexto

(31)

Exercício

Um ano é bissexto se for divisível por 4 mas não por 100, exceto quando for divisível por 400. Faça um programa que leia o ano e diga se ele é bissexto ou não.

Programa clássico do ano bissexto

/* Verifica ano bissexto: bissexto.c */ #include <stdio.h> int main() { int ano; printf(“Digite o ano: ”); scanf(“%d”,&ano); if (ano % 4 == 0 && ano % 100 != 0 || ano % 400 == 0) {

(32)

Controle de fluxo

O laço while é usado quando queremos que um bloco de instruções seja executado ENQUANTO uma condição for verdadeira (true).

Ex.: imprimir números naturais pares menores que 10:

Laço de repetição while

#include <stdio.h> int main() { int x = 0; printf(“%d\n”,x); x = x + 2; printf(“%d\n”,x); x = x + 2; printf(“%d\n”,x); x = x + 2; printf(“%d\n”,x); x = x + 2;

(33)

Controle de fluxo

Laço de repetição while

E se fosse até 1000?

E se o cálculo intermediário fosse mais complexo?

Forma mais elegante: #include <stdio.h>

int main() { int x = 0;

(34)

Controle de fluxo

Laço de repetição while

Forma geral:

Parecido com o comando if:

Dica de boa prática: Nunca use goto...

while (<condicao>) { // declaracoes... } if (<condicao>) { // declaracoes... // volte para o comando if (goto) }

(35)

Controle de fluxo

Exemplo: fatorial #include <stdio.h> int main() {    int n, contador, fat = 1;    printf("Digite um numero: ");    scanf("%d", &n);        contador = n;    while (contador > 0) {       fat = fat * contador;       contador = contador ­ 1;    }

(36)

Controle de fluxo

Exercício: Fazer um programa para imprimir uma tabela com os primeiros 300 graus Fahrenheit e seus correspondentes graus Celsius (de 20 em 20), usando a fórmula:

C=(5/9)(F-32) Saída: 0 F => -17.8 C 20 F => -6.7 C 40 F => 4.4 C 60 F => 15.6 C … … 260 F => 126.7 C 280 F => 137.8 C 300 F => 148.9 C

(37)

Controle de fluxo

/* Programa para conversao de Fahrenheit   * para Celsius: fahr2celsius.c  */ #include <stdio.h> int main() { int inicio, fim, incr; float fahr, celsius; inicio = 0; fim = 300; incr = 20; fahr = inicio; while (fahr <= fim) { celsius = (5.0/9.0) * (fahr – 32.0); printf(“%4.0f => %6.1f\n”, fahr, celsius);

(38)

Controle de fluxo

Laço de repetição for

Forma geral:

<inicializacao>: responsável pela seção de

inicialização das variáveis de iteração do laço

<condicao>: deve conter a condição de parada,

que deve ser verdadeira em algum momento.

<incremento>: comandos para incremento das

variáveis de iteração do laço

for (<inicializacao>; <condicao>; <incremento>) { // comandos...

(39)

Controle de fluxo

Laço de repetição for

(40)

Controle de fluxo

Laço de repetição for

Exemplo: fahr2celsius-v2.c /* Programa para conversao de Fahrenheit   * para Celsius: fahr2celsius­v2.c  */ #include <stdio.h> int main() { float fahr, celsius; for (fahr=0.0; fahr <= 300.0; fahr=fahr+20.0) { celsius = (5.0/9.0) * (fahr – 32.0); printf(“%4.0f => %6.1f\n”, fahr, celsius); } }

(41)
(42)

Funções

Funções são blocos de código que agrupam sequências de operações que, atrelados a um “nome”, podem ser invocados em todo o programa, de forma que tal sequência possa ser executada

(43)

Funções

A ideia de funções está em encapsular uma ideia ou operação Benefícios: Modularização Clareza do código Reutilização Funções em C

(44)

Funções

Funções da biblioteca padrão do C:

printf() scanf() getchar() gets() putchar() ... Funções em C

(45)

Funções

Forma geral:

Funções que não retornam nenhum valor, devem ser do tipo void.

Não é possível definir uma função dentro de outra

tipo_de_retorno nome_da_funcao(tipo_param nome_param,...) { // comandos

}

(46)

Funções

Exemplo de função para calcular o quadrado de um inteiro: #include <stdio.h> int quadrado(int x) { return x*x; } int main() { int numero; printf(“Digite um numero: ”); scanf(“%d”, &numero); printf(“O quadrado de %d e' %d”, numero, quadrado(numero)); } Funções em C

(47)

Funções

Em C, todas as funções devem ser definidas antes da função main().

O nome da função DEVE ser ÚNICO (dentre as outras funções e variáveis)

A mesma regra de nomenclatura de variáveis é aplicada à nomenclatura de funções.

(48)

Funções

Na chamada de uma função, o tipo e quantidade de parâmetros devem acordar com sua definição

A comunicação com a função é feita através dos argumentos e parâmetros

Na função, os parâmetros são como variáveis locais

(49)

Funções

Parâmetros de funções:

(50)

Funções

Após fazer seu processamento, as funções podem necessitar retornar um valor ou resultado.

Exemplo:

quadrado(4) => 16

Tipos de retorno:

int, float, double, char, void

O tipo void é usado quando a função não deve retornar nada. Ex: printf()

(51)

Funções

O retorno de uma função é definido pelo comando return. Ex.:

Provoca uma saída imediata da função chamador

Valor de retorno: comando return

...

int quadrado(int x) { return x*x;

} ...

(52)

Funções

Exercício 1: converter o programa de fatorial anterior para usar uma função no calculo do fatorial propriamente dito

Exercício 2: fazer uma função, pot(x,y), para calculo da potência de um número x por y (xy )

Exercício 3: fazer uma função println() que recebe uma string s (vetor de char) e imprime s seguida pelo caractere de nova linha (\n).

(53)

Funções

Todo programa em C, deve SEMPRE possuir a função main() em seu código, independente das outras funções.

A função main #include <stdio.h> int main(int argc, char **argv) { // comandos... return 0; }

(54)

Funções

argc é um inteiro que indica a quantidade de

argumentos passados na linha de comando

argv é um vetor de strings que contém os

argumentos da linha de comando (o primeiro é o nome do programa). A função main #include <stdio.h> int main(int argc, char **argv){    if (argc < 2) {       printf("Usage: %s <NOME>\n", argv[0]);       return 1;    }    printf("Ola, %s\n", argv[1]);    return 0;

(55)
(56)

Tópicos avançados

Matrizes e strings

Outras funções de controle de fluxo

Alocação dinâmica de memória (ponteiros) Estruturas, Uniões, Enumerações

E/S com Arquivos, Console, pré-processador ...

(57)

Tópicos avançados

Bibliotecas para programação gráfica

gtk, opengl, etc.

Biblioteca para programação em rede

sockets

Bibliotecas para programação paralela

OpenMP, MPI, etc.

(58)

Referências

KERNIGHAN, B.W. C and RITCHIE, D.M.: A linguagem de programação. Tradução de: The C Programming Language. Edisa, 1986.

Curso de C, UFMG. Disponível em:

http://www.mtm.ufsc.br/~azeredo/cursoC/

C Library Reference. Disponível em:

(59)

Referências

Documentos relacionados

Local de realização da avaliação: Centro de Aperfeiçoamento dos Profissionais da Educação - EAPE , endereço : SGAS 907 - Brasília/DF. Estamos à disposição

Diversidade sexual na escola: currículo e prática pedagógica / Alexandre Bortolini ; orientadora: Vera Maria Candau.. Candau,

De seguida, vamos adaptar a nossa demonstrac¸ ˜ao da f ´ormula de M ¨untz, partindo de outras transformadas aritm ´eticas diferentes da transformada de M ¨obius, para dedu-

[r]

Promovido pelo Sindifisco Nacio- nal em parceria com o Mosap (Mo- vimento Nacional de Aposentados e Pensionistas), o Encontro ocorreu no dia 20 de março, data em que também

Fixação Tijoleira 66,9 75 0,7 0,02 Fosfatado Tectos contínuos TC-47 (plenum › 7cm) Unidades Caixa Produto 100 Dimensões (mm) Aplicação Altura Espessura FIXAÇÃO EM TIJOLEIRA..

• Os municípios provavelmente não utilizam a análise dos dados para orientar o planejamento de suas ações;. • Há grande potencialidade na análise dos micro dados do Sisvan

As relações hídricas das cultivares de amendoim foram significativamente influenciadas pela a deficiência hídrica, reduzindo o potencial hídrico foliar e o conteúdo relativo de