introdução ao c (partes 1 e 2)

61
Introdução ao C Parte 1

Upload: anderson-alves

Post on 18-Dec-2015

8 views

Category:

Documents


4 download

DESCRIPTION

PROGRAMAÇÃO EM C

TRANSCRIPT

  • Introduo ao C

    Parte 1

  • Porque aprender C?

    C rpido.

    C a base de vrias outras linguagens

    (Java, C++, awk, Perl).

    Pode no parecer , mas C uma das

    linguagens de mais fcil aprendizado.

  • Conceitos bsicos

    Cdigo-fonte: O programa que voc est

    escrevendo.

    Compilar: A partir o cdigo fonte, gerar

    um programa que o computador possa

    entender.

    Executvel: O programa compilado, que

    o computador pode executar.

  • Linguagem: (sentido especial) A parte

    principal do C.

    Biblioteca: Funes adicionais para

    programao C, que so ligadas para

    fazer determinadas tarefas.

    Arquivo de cabealho: os arquivos que

    terminam em h, que so includos no

    incio do cdigo-fonte.

  • Hello World

  • Espaos no C #include /* My first C program which prints Hello World */ int main(){printf("Hello World!\n");return 0;}

    #include /* My first C program which prints Hello World */ int main ( ) { printf ( "Hello World!\n" ) ; return 0 ; }

    Todos estes programas so iguais,do ponto de vista do compilador.Palavras e sentenas entre aspasso mantidas juntas.Qual o mais fcil de ler?

  • Exemplo de programa C

    #include int main (){

    long int i,j,k,lim=10000;float x=0.0,y;

    for (i=0; i

  • Compilao de um programa em C

  • Exerccio - Compilao do programa C

    1. Para compilar, digite:

    gcc loop.c o loop

    2. Para executar o programa:

    ./loop

  • Palavras-chave de C

    Controle de fluxo if, else, return,

    switch, case, default

    Laos for, do, while, break,

    continue

    Tipos comuns int, float, double,

    char, void

    estruturas struct, typedef, union

  • Palavras-chave de C

    Contagem e tamanho enum, sizeof

    Tipos menos comuns extern, signed, unsigned, long, short, static, const

    Palavra-chave a ser evitada goto

    Outras palavras-chave auto,

    register, volatile

  • Variveis em C

    Uma varivel um nome que damos auma posio de memria que armazenaum valor de tipo determinado Devemos declarar o tipo de todas asvariveis que usamos em C. Todas as variveis tem um tipo (e.g. int)e um nome. Exemplos de tipos: int, double efloat.

  • Exemplo de programa C

    #include int main (){

    long int i,j,k,lim=10000;float x=0.0,y;for (i=0; i

  • Nomes de Variveis

    Variveis em C podem ter qualquer nome

    composto por letras, nmeros e subscritos

    (underlines) que no sejam uma palavra

    reservada e que no comecem com nmeros.

    Escolher bem os nomes importante

    int a,b;double d;/* no claro o quecada varivelrepresenta*/

    int start_time;int no_students;double course_mark;/* Assim melhor */

  • Tipo char char armazena um caractere (normalmente 8 bits) Podemos imprimir char com %c Um char definido por aspas simples Exemplo:

    int main(){

    char a, b;a= 'x'; /* associa a letra x */printf ("a is %c\n",a);b= '\n'; /* Isto apenas um caracter! */printf ("b is %c\n",b);return 0;

    }

  • tipos: Signed/unsigned, long,short, const

    unsigned significa que um valor int ou chardeve ser maior que zero. signed permite valores positivos e negativos.

    const indica uma varivel que no varia til para constantes fsicas e matemticas, como ou e.

  • tipos: Signed/unsigned, long,short, const

    long significa que int ou double tem um limite maior (e so mais precisos).

    short significa menor faixa e preciso

    short int small_no; /* 16 bits */

    unsigned char uchar; /* 8 bits */

    long double precise_number; /* 80 bits

    */

    float not_so_precise; /* 32 bits */

    const float pi= 3.14; /* 32 bits*/

    const double e= 2.718281828; /* 64 bits

    */

  • Incrementadores ++ e --

    ++i significa incremente i e depois use

    i++ significa use i e depois incremente

    int i= 6;

    printf ("%d\n",i++); /* Imprime 6 e faz i = 7 */ int i= 6;

    printf ("%d\n",++i); /* imprime 7 e faz i = 7 */

    O que foi definido acima tambm se aplica a --.

    Note a diferena!

  • Operaes simples em variveis -- (subtrair um)

    e.g. regressiva--;

    += (somar a uma varivel) e.g.a += 5;

    -= (subtrair de uma varivel)e.g. num_vivos -= num_mortos;

    *= (multiplicar uma varivel)e.g. n_b*=2 /* n_b = n_b*2 */;

    /= (dividir uma varivel)fracao/=divisor /* fracao = fracao/divisor */;

    (x % y) resto quando x dividido por yresto = x%y; (apenas inteiros)

  • Converso de tipos (cast)

    Um cast (converso) uma maneira de converter uma varivel de um tipo em outro tipo

    int a= 3;

    int b= 4;

    double c;

    c= (double)a/(double)b;

    Converte ints a e b em doubles

  • escopo de uma varivel

    O escopo uma varivel onde ela pode ser

    usada em um programa

    Normalmente variveis tem escopo local

    isto significa que elas podem apenas ser

    usadas nas funes em que so declaradas

    (lembre-se que main() uma funo)

  • escopo de uma varivel

    Podemos tambm declarar variveis globais.

    Se declaramos uma varivel fora de uma funo ela pode ser usada em qualquer funo abaixo de onde ela declarada

    Variveis globais devem ser evitadas

  • Variveis locais - exemplo

    #include void print_stars(int);

    int main(){

    int i;for (i= 0; i < 5; i++)

    print_stars(5);return 0;

    }

    void print_stars (int n){

    int i;for (i= 0; i < n; i++)

    printf ("*");printf ("\n");

    }

    Este programa imprime 5 linhasDe 5 estrelas

    Chama print_stars 5 vezes

    Imprime 'n' estrelas eum caractere new line

    *************************

    Variveis LOCAIS

  • Varivel Global - exemplo

    #include void print_stars(int);int i; /* Varivel global i */

    int main(){for (i= 0; i < 5; i++)

    print_stars(5);return 0;}

    void print_stars (int n){for (i= 0; i < n; i++)

    printf ("*");printf ("\n");}

    Este programa imprimeapenas 1 linha de 5 estrelas

  • Funes em C

    funo um conceito fundamental da programao em C.

    Uma funo uma sub-unidade de um programa que executa uma tarefa especfica.

    Exemplo de funo de biblioteca printf.

    Funes recebem parmetros (variveis) e

    podem retornar um parmetro

  • Exemplo#include int maximum (int, int); /* Prototipo */int main(int argc, char*argv[]){

    int i= 4;int j= 5;int k;k= maximum (i,j); /* Chama funcao maximum */printf ("%d is the largest from %d and %d\n",k,i,j);printf ("%d is the largest from %d and %d\n",maximum(3,5), 3, 5);return 0;

    }

    int maximum (int a, int b)/* Return the largest integer */{

    if (a > b)return a; /* Return significa "Eu sou o resultado da funcao"*/

    return b; /* Retorna o valor de b */}

    Prottipo de funo

    Prottipo de funo

    Cabealho da funo

    Cdigo da funo

  • funo printf

    A funo printf apresenta na tela uma

    sequncia de caracteres (string)

    Pode-se imprimir variveis atravs de formatao adequada

    uma funo de biblioteca

    Para se usar printf o programa deve conter (no incio):

    #include

  • funo printf

    O primeiro argumento de printf um string

    de controle, uma seqncia de caracteres

    entre aspas

    Para exibir o valor da varivel inteira x

    printf("Valor de x = %d", x);

    Inteiro (int) x e caractere (char) y

    printf("x = %d e y = %c\n", x, y);

  • Prottipo

    Um prottipo informa ao seu programa C o que esperar de uma funo quais parmetros recebe e quais retorna

    Prottipos devem vir antes de main()

    #include define os prottipos de funes de biblioteca (e.g. printf)

    Uma funo DEVE retornar o tipo de varivel definido no prottipo.

  • Funo que chama outra funo Uma vez escrita, uma funo pode ser chamada por outras

    funes. Isto permite a criao de funes complexas atravs da composio de funes simples.

    int max_of_three (int, int, int); /* Prototipo*/.. /* Main e o resto do codigo vao aqui */.int max_of_three (int i1, int i2, int i3)/* retorna o maximo de tres inteiros */{

    return (maximum (maximum(i1, i2), i3));}

  • void

    Uma funo no tem obrigatoriamente que receber ou retornar parmetros. Uma funo que no devolve parmetros prototipadausando void.

  • voidvoid print_hello (void); /* prototipo */void print_hello (void)/* esta funcao imprime hello */{

    printf ("Hello\n");}

    void odd_or_even (int); /* prototipo */

    void odd_or_even (int num)/* esta funcao verifica se um numero e par ou impar */{

    if ((num % 2) == 0) {printf ("Par\n");return;

    }printf ("Impar\n");

    }

    Funo recebe e retornavoid (sem argumentos)

    Funo que recebeum parmetro inte retorna nenhum parmetro

  • Observaes sobre funes

    Uma funo pode receber qualquer nmero de parmetros, declarados em qualquer ordem.

    A funo pode retornar apenas um parmetro. Quando retornamos de uma funo, os valores

    do parmetros de entrada no mudaram. Passagem de parmetros por valor

    Podemos declarar variveis dentro de uma funo como podemos faz-lo dentro de main () -estas variveis sero apagadas quando retornar da funo

  • Posicionamento das funes no cdigo

    Em termos gerais, o posicionamento relativo de funes no importa.

    main() uma funo como qualquer outra (que pode inclusive ser chamada por outras funes).

    Normalmente main() a primeira funo do cdigo.

  • Posicionamento das funes no cdigo

    As funes devem estar inteiramente separadas uma das outras.

    Os prottipos devem vir antes das respectivas funes.

    A ordem mais comum : Prottipos => main=> outras funes.

  • Exerccio

    Escreva um programa em C que imprime o fatorial de um nmero maior do que zero

    Este programa deve conter pelo menos duas funes: main() e a funo do clculo fatorial

    Compile o programa usando gcc e execute o programa

  • Introduo ao C

    Parte 2

    Testes e Condies

  • Valores lgicos Verdadeiro e falso

    C define verdadeiro e falso da seguinte forma:

    Falso - 0 (zero)

    Verdadeiro nmero diferente de zero

  • Operadores relacionais Igualdade: ==

    Exemplo: (2==3) (V ou F?) No confunda = com ==

    Maior: > Exemplo: (2>3) (V ou F?)

    Maior ou igual: >= Exemplo: (2>=3) (V ou F?)

    Menor: < Exemplo: (2

  • Operadores lgicos

    && - operao AND

    (a == b) && (b == c) /* Se a != b no

    avalia o resto da expresso */

    || - Operao OR

    (a == b) || (b == c) /* Se a == b no

    avalia o resto da expresso */

    ! - Operao NOT

  • if-else

    void main()

    {int i;

    printf (Informe um nmero: );

    scanf (%d, &i);

    if (i < 0) printf (O nmero negativo);

    else printf (O nmero positivo ou nulo);

    }

  • If-else encadeado

    #include void main(){

    int opcao;int valor;printf (Converter: \n);printf (1: decimal para hexadecimal\n);printf (2: hexadecimal para decimal\n);printf (\nInforme sua opo: );scanf (%d, &opcao);if (opcao == 1){

    printf (\nInforme o valor em decimal: );scanf (%d, &valor);printf (%d em hexadecimal e: %x, valor, valor);

    }else if (opcao == 2){

    printf (\nInforme o valor em hexadecimal: );scanf (%x, &valor);printf (%x em decimal e: %d, valor, valor);

    }else{

    printf (\nA opo escolhida invlida.)

    }

    }

  • Operador Condicional - ?

    condio ? expresso1 : expresso2;

    Equivalente a:

    if (condio) { expresso1 } else { expresso2 }

    O operador ? restrito, mas pode simplificar

    expresses grandes

  • Exemplos Operador ?

    /*Qual e o valor de b,c? */

    int a = 9, b = -4, c;

    b = (a > b) ? a : b;

    c = (a > b) ? b : a;

  • Switch - exemplo/* Programa de converso de base numrica switchdecimal ---> hexadecimalhexadecimal ---> decimal*/#include void main(){

    int opcao;int valor;printf (Converter: \n);printf (1: decimal para hexadecimal\n);printf (2: hexadecimal para decimal\n);printf (\nInforme sua opo: );scanf (%d, &opcao);switch(opcao){

    case 1:printf (\nInforme o valor em decimal: );scanf (%d, &valor);printf (%d em hexadecimal e: %x, valor, valor);

    break;case 2:

    printf (\nInforme o valor em hexadecimal: );scanf (%x, &valor);printf (%x em decimal e: %d, valor, valor);

    break;default:

    printf (\nOpo invlida. Tente outra vez.)}

    }

  • Laos - for

    for(valor_inicial; condio_final; valor_incremento)

    Comando;

    #include

    void main(void)

    {int contador;

    for (contador = 1; contador

  • whilewhile (condio){

    /*comandos*/}#include void main(void)

    {int contador = 1; /* Inicializa a varivel de controle */while (contador

  • Break#include void main(void){

    int contador;for (contador = 1; contador = 1; contador--){

    if (contador == 50)break;printf("%d ", contador);

    }

    }

  • Continue#include void main(void){

    int contador;printf("\nValores pares\n");for (contador = 1; contador

  • goto

    #include

    void main(void)

    {int conta = 1;

    rotulo:

    printf("%d ", conta++);

    if (conta

  • Laos encadeados/* Exibe uma tabela das 4 primeiras potencias de 1 a 9 */#include void main(){

    int i, j, k, temp;printf( i i^2 i^3 i^4\n);for (i = 1; i < 10; i++)

    { /* lao externo */for (j = 1; j < 5; j++)

    { /* primeiro aninhamento */temp = 1;for (k = 0; k < j; k++) /* segundo aninhamento */temp = temp * i;printf (%9d, temp);

    }printf (\n);

    }

    }

  • Exerccio

    Escreva um programa em C que exiba na tela os 20 primeiros nmeros da sequncia de fibonacci

  • Vetores - definio

    Um vetor em C um agrupamento de variveis do mesmo tipo

    Vetores usam colchetes

    Temos sempre que declarar o tamanho dos vetores

    Apesar de C no verificar limites em tempo de execuo

    O primeiro ndice do vetor sempre zero

  • Exemplo

    #include int main(){

    int some_nums[200];char bunch_o_chars[45];char titulo[] = "IME - PGED";

    some_nums[3]= 5;printf ("Elemento 3 %d\n",some_nums[3]);bunch_o_chars[0]= 'a';

    }

  • Passagem de vetores para funes

    #include void exibe_matriz(int valores[], int num_de_elementos){

    int i;for (i = 0; i < num_de_elementos; i++)

    printf("%d\n", valores[i]);

    }void main(void){

    int notas[5] = {70, 80, 90, 100, 90};exibe_matriz(notas, 5);

    }

  • #define

    Este comando do preprocessador substitui uma coisa por outra antes da compilao

    #define PI 3.14#define GRAV_CONST 9.807#define HELLO_WORLD "Hello World!\n

    Em qualquer lugar do programa onde PI ou GRAV_CONSTaparecem, sero substitudos pela cadeia de caracteresantes da compilao real (pr-processamento)

    c= 2.0 * PI * r;a= GRAV_CONST * (m1*m2)/ (r * r);printf (HELLO_WORLD);

    Sem ponto evrgula!!!

  • Matrizes e vetores multidimensionais

    #include main(){

    int array[3][6]; /* vetor de 2 dimenses */int i,j;array[0][0]= 7; /* definio de elemento */printf ("elemento 1,1 %d\n",array[1][1]);for (i= 0; i < 3; i++) {

    for (j= 0; j < 6; j++) {array[i][j]= 0; /* zera o vetor*/}

    }}

  • Passagem para funes

    Na passagem, pelo menos o nmero de colunas tem ser definido:

    void process_array (int [3][6]);main(){

    int thearray[3][6];process_array(thearray);

    }void process_array (int array[3][6]){/* processamento do vetor */}

  • Passagem para funes

    #include void exibe_2d_matriz(int matriz[][10], int linhas){

    int i, j;for (i = 0; i < linhas; i++)

    for (j = 0; j < 10; j++)printf("matriz[%d][%d] = %d\n", i, j, matriz[i][j]);

    }void main(void){

    int b[2][10] = {{1, 2, 3, 4, 5, 6, 7, 8, 9, 10},{11, 12, 13, 14, 15, 16, 17, 18, 19,20}};

    exibe_2d_matriz(b, 2);

    }

  • Passagem para funes

    #include long soma_matriz(int matriz[], int elementos){

    long soma = 0;int i;for (i = 0; i < elementos; i++)

    soma += matriz[i];return(soma);

    }void main(void){

    int b[2][10]={{1, 2, 3, 4, 5, 6, 7, 8, 9, 10},{11, 12, 13, 14, 15, 16, 17, 18, 19,20}};

    printf("Soma dos elementos da matriz %d\n",soma_matriz(b, 20));

    }

  • Exerccio

    Escreva um programa em C calcule a soma de duas matrizes quadradas de tamanho varivel