141
Introdução a Linguagem de Programação C Daniela G. Trevisan [email protected]

apresentaC.ppt

  • Upload
    breno

  • View
    4

  • Download
    1

Embed Size (px)

Citation preview

  • Introduo a Linguagem de Programao CDaniela G. [email protected]

    Introduo Linguagem C

  • Breve HistricoEm 1973 Dennis Ritchie reescreveu o sistema operacional UNIX em uma linguagem de alto nvel (Ling. C).

    Surgem diversas implementaes utilizando C, porm os cdigos gerados eram incompatveis.

    ANSI (American National Standard Institute), em 1983 padronizou a ling. C.

    Introduo Linguagem C

  • C comparado a outras linguagensDevemos entender Nvel Alto como sendo a capacidade da linguagem em compreender instrues escritas em dialetos prximos do ingls (Ada e Pascal, por exemplo) e Nvel Baixo para aquelas linguagens que se aproximam do assembly, que a linguagem prpria da mquina, compostas por instrues binrias e outras incompreensveis para o ser humano no treinado para este propsito. Infelizmente, quanto mais clara uma linguagem for para o humano (simplicidade >) mais obscura o ser para a mquina (velocidade
  • C comparado a outras linguagensNvel BaixoNvel MdioNvel AltoVelocidadeClarezaAssembler CCOBOLBasicPascalAdaModula -2

    Introduo Linguagem C

  • Aplicaes escritas em CSistema Operacional: UNIX Planilhas: 1,2,3 e ExcelBanco de Dados: dBase III, IV e Access ( gerenciador de base de dados).Aplicaes Grficas: Efeitos Especiais de filmes como Star Trek e Star War.

    Introduo Linguagem C

  • Caractersticas da Linguagem CPortabilidade entre mquinas e sistemas operacionais.Alia caractersticas de linguagens de alto e baixo nvel (liberdade ao programador).Programas Estruturados.Total interao com o Sistema Operacional.Cdigo compacto e rpido, quando comparado ao cdigo de outras linguagem de complexidade anloga.

    Introduo Linguagem C

  • Caractersticas da Linguagem CC uma linguagem compilada: l todo o cdigo fonte e gera o cdigo objeto (ling. de mquina) uma nica vez.

    Linguagens Interpretadas: l o cdigo fonte, traduz e executa cada vez que o programa for executado.

    Introduo Linguagem C

  • Detalhes ImportantesSempre que o cdigo fonte for alterado ele deve ser novamente compilado.

    C case senitive

    Deve-se listar antecipadamente todas a as variveis utilizadas no programa.

    Introduo Linguagem C

  • Palavras reservadasSo palavras que tm um significado especial para a linguagem.

    auto, break, case, if, for, while, begin, end, continue, return, const,....

    C entende tais palavras apenas em letras minsculas

    Introduo Linguagem C

  • BibliotecasConjunto de funes para realizar tarefas especficas.Biblioteca padro C - ANSI - funes bsicas.As primeiras linhas do programa indicam as bibliotecas utilizadas

    #include minha_biblioteca.h ou#include

    Introduo Linguagem C

  • Estrutura de um programa C/* Primeiro Programa em C */#include

    main() {printf(Meu primeiro programa em C\n);}

    Introduo Linguagem C

  • Estrutura de um programa C/* Primeiro Programa em C */ comentrios#include /*biblioteca de E/S */

    main() /*funo principal inicio do programa*/{ /*marca incio da funo*/ printf(Meu primeiro programa em C\n); /*funo para escrever na tela*/} /*marca fim da funo*/

    Introduo Linguagem C

  • Digitando um programa CUtilizar um editor qualquer: vi ou xeditDigite o programa anteriorSalve com o nome p1.c

    Introduo Linguagem C

  • Compilando e ExecutandoPara compilar: (verifica a sintaxe)>> cc fonte.c Para compilar e gerar executvel:>> cc fonte.c o nomeexec Executando: >> ./nomeexec OBS:Se o nome do executvel no for informado o default a.out

    Introduo Linguagem C

  • VarivelVarivel: objeto que pode assumir diversos valores;espao de memria de um certo tipo de dado associado a um nome para referenciar seu contedo Main ( ){ int idade; idade = 30; printf ( A idade : %d, idade);}

    Introduo Linguagem C

  • Nomes de Variveisquantos caracteres quiser (32);comece com letras ou sublinhado:Seguidos de letras, nmeros ou sublinhadosC sensvel ao caso:peso Peso pEso no podemos definir um identificador com o mesmo nome que uma palavra chaveauto static extern int long if while do ......

    Introduo Linguagem C

  • Declarao de VariveisInstruo para reservar uma quantidade de memria para um certo tipo de dado, indicando o nome pelo qual a rea ser referenciada >> tipo nome-da-varivel; ou>> tipo nome1, nome2,...,nomenEX: char nome; int idade, num;

    Introduo Linguagem C

  • Tipos Bsicos de Dadosdeterminar um conjunto de valores e as possveis operaes realizadas sobre os mesmos ;informa a quantidade de memria (bytes);

    tipo bytes escala char 1 -128 a 127 int 2 -32.768 a 32.767 float 4 3.4e-38 a 3.4e+38 double 8 1.7e-308 a 1.7e+308

    Introduo Linguagem C

  • Diferentes tipos de inteirosLong ou Long int (4 bytes)Unsigned Char (0 a 255)Unsigned int (0 a 65.535)obs: int tem sempre o tamanho da palavra da mquina

    Introduo Linguagem C

  • Programa Exemplo Tipos de Dados e Variveis#include main( ){int soma=10;float money=2.21;char letra= A;double pi=2.01E6;

    printf (valor da soma = %d\n, soma);printf (Valor de Money = %f\n, money);printf(Valor de Letra = %c\n, letra);printf(Valor de Pi = %e\n, pi);

    }

    Introduo Linguagem C

  • Comandos bsicosInstrues de E/SEntrada de DadosProcessamento de dadosSada de Dados

    Introduo Linguagem C

  • Intrues de E/S Scanf ( )Leitura de dados tipados via tecladoScanf (string de controle, lista de argumentos);

    Exemplo:scanf(%d,&idade);

    OBS: Para seqncia de caracteres (%s), o caracter & no dever ser usado.

    Introduo Linguagem C

  • Comandos de E/S printf ( )Apresentao de dados no monitorprintf(string de controle, lista de argumentos);

    Exemplo:printf (Digite a sua idade:\n);scanf (%d, &idade);printf(Sua idade : %d, idade);

    Introduo Linguagem C

  • String de controle%c caracter%d inteiro%e nmero ou notao cientfica %f ponto flutuante%o octal%x hexadecimal%s string (cadeia de caracteres)%lf double

    Introduo Linguagem C

  • Exemplo strings de controle#include main ( ){ char a ;printf ( digite um caracter ); scanf ( % c, &a ); printf ( \n %c = %d em decimal, a, a); printf (%o em octal, %x em hexadecimal, a, a);}Digitando m:m = 109 em decimal, 155 em octal, 6d em hexadecimal

    Introduo Linguagem C

  • Operador de Endereo &

    um endereo de memria o nome que o computador usa para identificar uma varivel

    toda varivel ocupa uma rea de memria e seu endereo o primeiro byte por ela ocupado Ex :inteiro 2 bytesfloat 4 byteschar 1 byte

    Introduo Linguagem C

  • Operador de Endereo &Quando usamos & precedendo uma varivel estamos falando do endereo desta varivel na memriaEx:Main ( ){ int num; num = 2; printf (valor = %d, endereo = %Iu, num,&num);} Sada: valor = 2, endereo = 1230Varia conforme memria da mquina

    Introduo Linguagem C

  • Caracteres Especiais\n nova linha \r enter\t tabulao (tab)\b retrocesso\ aspas\\ barra

    Introduo Linguagem C

  • Formatando as sadas - printf possvel estabelecer o tamanho mnimo para a impresso de um campo #include main ( ){ printf (os alunos so %2d \n, 350); printf (os alunos so %4d \n, 350); printf (os alunos so %5d \n, 350);} Sada: os alunos so 350 os alunos so 350 os alunos so 350

    Introduo Linguagem C

  • Formatando as sadas - printf#include main ( ){printf ( %3.1f \n, 3456.78); printf ( %10.3f \n, 3456.78);}Sada: 3456.8 3456.780

    Introduo Linguagem C

  • Programando Exerccio 1Faa um programa para ler e escrever na tela o seu nome e a sua idade.#include main( ){int idade;char nome[30]; printf (Digite o seu nome:\n);scanf(%s, nome);printf (Digite a sua idade:\n);scanf (%d, &idade);printf(A idade do(a) %s %d,nome, idade);}

    Introduo Linguagem C

  • Programando Exerccio 2Faa um programa para ler e escrever na tela os seguintes dados:NomeEndereoTelefoneCidadeCep

    Introduo Linguagem C

  • Operadores Aritmticos

    OperadorAo+Adio*Multiplicao/Diviso%Resto da diviso inteira-Subtrao (unrio)--Decremento++Incremento

    Introduo Linguagem C

  • Operadores Relacionais e Lgicos

    OperadorAo>Maior que>=Maior ou igual que 4 && !(10 < 9) || 3

  • Operador SizeofEste operador retorna o tamanho da varivel ou tipo que est em seu operando.

    Por exemplo sizeof(char) resultaria em 1.

    Introduo Linguagem C

  • Converses de TiposQuando forem misturadas variveis de diferentes tipos, o compilador C converter os operandos para o tipo de operando maior, de acordo com as regras descritas a seguir:

    1-Todo char e short int convertido para int. Todo float convertido para double.2-Para os demais pares de operandos valem as seguintes regras em seqncia:2.1- Se um operando for long double, o outro tambm o ser.2.2- Se um operando for double, o outro tambm o ser.2.3- Se um operando for long, o outro tambm o ser.2.4- Se um operando for unsigned, o outro tambm o ser.

    Introduo Linguagem C

  • Converses de Tipos - NOTANota: Devemos observar que o compilador C bastante flexvel e pouco vigilante, comportando-se de maneira muito diferente de um compilador Clipper ou Pascal, sempre vigilantes com relao aos tipos das variveis. De fato aqueles compiladores podem gerar executveis misturando tipos, porm a ocorrncia de erros de execuo quase inevitvel. Ao contrrio destes compiladores, os compiladores C ajeitam as coisas para o programa funcionar da melhor maneira possvel, o que no significa em hiptese alguma que os resultados sero os esperados por programadores relapsos. Assim esta boa caracterstica dos compiladores C, pode transformar-se numa autntica bomba relgio para programas no muito bem elaborados.

    Introduo Linguagem C

  • Exerccios2)3)

    Introduo Linguagem C

  • Estruturas de DecisoPermitir testes para decidir aes alternativas:ifif - elseswitch(?:) Operador Condicional

    Introduo Linguagem C

  • Comando ifif (condio) instruo;#include main ( ) { char ch; ch = getchar ( ); if (ch == p)printf (voc pressionou a tecla p);} if (condio) { instruo1; intruo2;}#include main ( ) { if (getchar()) == p ) { printf ( voc digitou p); printf ( pressione outra tecla ); getchar( ); }}

    Introduo Linguagem C

  • if aninhados Se um comando if est dentro do outro if, dizemos que o if interno est aninhado. #include main ( ) { char ch; printf ( digite uma letra entre A e Z); ch = getchar ( ); if (ch >= A) if (ch < = Z) printf ( voc acertou);} #include main ( ) { char ch; printf ( digite uma letra entre A e Z); ch = getchar ( ); if ((ch >= A) && (ch < = Z)) printf ( voc acertou);}

    Introduo Linguagem C

  • Comando if-elseO comando if s executa a instruo caso a condio de teste seja verdadeira, nada fazendo se a expresso for falsa.

    O comando else executar uma instruo ou um conjunto de instrues se a expresso for falsa.

    Introduo Linguagem C

  • Comando if-elseif (condio) instruo;else instruo;#include main ( ){ if (getchar ( ) == p) printf ( voc digitou p); else printf ( voc no digitou p);}

    Introduo Linguagem C

  • Exemplo: Evitar-se divises por Zero, usando recursos do comando if-else.include main(){int a,b;printf(Digite 2 nmeros: );scanf(%d %d,&a,&b);if (b)printf(%f,a/b);elseprintf(Nao posso dividir por zero\n);}

    Introduo Linguagem C

  • Comando if-else aninhadosif (condio1) instruoelse if (condio2) instruoelse if (condio3)...#include main ( ){ int nmero; scanf ( % d, &nmero); if (nmero < 0) printf (nmero menor que zero); else if (nmero < 10) printf ( nmero 0 e < 10); else if (nmero < 100) printf (nmero 10 e < 100); else printf (nmero 100); }

    Introduo Linguagem C

  • Como o computador decide de qual if o else pertence? EX1:if (n > 0) if (a > b){ z = a; calculafatorial(z);} else z = b; Ex1: Quando n > 0 e a < bEx2: Quando n < 0 else sempre associado ao if mais interno quando z = b ser executado?Ex2:if (n > 0) { if (a > b) z = a;} else z = b;

    Introduo Linguagem C

  • Exemplo 1: Programa Adulto, Jovem ou Velho.

    #include main(){int i;printf(Digite sua idade: );scanf(%d,&i);if (i > 70)printf(Esta Velho!);elseif (i > 21)printf(Adulto);elseprintf(Jovem);}

    Introduo Linguagem C

  • Exemplo 2: Maior entre trs nmeros

    main(){int a,b,c;printf(Digite o 1 Nmero: );scanf(%d,&a);printf(\nDigite o 2 Nmero: );scanf(%d,&b);printf(\nDigite o 3 Nmero: );scanf(%d,&c);if (a > b)if (a > c)printf(\nO Maior %d,a);else printf(\nO Maior %d,c);else if (b > c)printf(\nO Maior %d,b);else printf(\nO Maior %d,c);} main(){int a,b,c,d;cls();printf(Digite o 1 Nmero: );scanf(%d,&a);printf(\nDigite o 2 Nmero: );scanf(%d,&b);printf(\nDigite o 3 Nmero: );scanf(%d,&c);if (a > b)d = a;elsed = b;if (c > d)printf(\nO Maior %d,c);elseprintf(\nO Maior %d,d);}

    Introduo Linguagem C

  • Exemplo 3: Dados 2 nmeros apresente-os ordenados.main(){int a,b,t;printf(Digite o 1 Nmero: );scanf(%d,&a);printf(\nDigite o 2 Nmero: );scanf(%d,&b);if (a < b) {t = a;a = b;b = t;}printf(\nOrdenados: %d e %d ,b,a);}

    Introduo Linguagem C

  • Comando ?:Forma compacta de expressar uma instruo if else(condio) ? expresso1 : expresso2Max = (num1 > num2) ? num1 : num2Note:if (num1 > num2) max = num1;else max = num2;Exemplo:ABS = (num < 0) ? - num : num;

    Introduo Linguagem C

  • Exerccios4)5)6)

    Introduo Linguagem C

  • Comando SwitchForma de se substituir o comando if else ao se executar vrios testesDiversas vezes precisamos determinar se um valor encontra-se numa lista de valores. Apesar de podermos usar uma seqncia de ifs, este recurso alm de no ser elegante, por vezes confunde o entendimento do programa. Vejamos uma opo melhor: o comando switch.

    Introduo Linguagem C

  • Comando Switchswitch {case :;[break;] case :;[break;] case :;[break;][default :;]} OBS: varivel deve ser uma varivel do tipo inteiro ou caracter;break serve para terminar a seqncia de comandos em execuo, por serem opcionais, se forem suprimidos permitem que o case a seguir seja executado, sem haver qualquer quebra na seqncia do processamento.

    Introduo Linguagem C

  • Comando Switch - Ex: uma calculadora#include main ( ){char op;float num 1, num 2; printf ( digite um n.o, um operador e um n.o); scanf ( %f %c %f, &num1, &op, &num2); switch (op) {case +: printf ( = %f, num 1 + num 2); break:case -: printf ( = %f, num 1 - num 2); break;default: printf ( operador invlido); }}

    Introduo Linguagem C

  • ExerccioSeguindo a idia do exerccio anterior incremente a calculadora com mais funes matemticas.

    Sugesto: use funes da biblioteca matemtica math.h como por exemplo:sin(x) cos(x) log(x) sqrt(x) pow(x1,x2)Para compilar a biblioteca matemtica :cc p1.c -o p1 -lm

    Introduo Linguagem C

  • Estruturas de Repetio#include main ( ){ printf (1); printf (2); : : : printf (10);} sada: 1 2 3 4 ... 10 Como imprimir os 1000 1os nmeros a partir de 1?

    Introduo Linguagem C

  • Estruturas de Repetiofor, while, do-whilerepetir uma seqncia de comandos #include main ( ){ int num; for (num = 1; num
  • Comando forfor (;;) ; Na forma mais simples:Inicializao: expresso de atribuiosempre executada uma nica vezTeste:condio que controla a execuo do lao sempre avaliada a cada execuoverdadeiro continua a execuofalso para a execuo

    Introduo Linguagem C

  • Comando forIncremento: define como a varivel de controle ser alterada sempre executada aps a execuo do corpo do lao

    Exemplo: imprimindo nmeros pares#includemain ( ){ int nmero; for ( nmero = 2; nmero < 10; nmero += 2 ) printf ( %d, nmero);} Sada 2 4 6 8

    Introduo Linguagem C

  • Comando forFlexibilidade: qualquer expresso de um lao for pode conter vrias instrues separadas por vrgula.for (x=0,y=0;x+y
  • Comando for - ExemploExemplo 1: Contagem simples com condio no teste for.main(){int i,j,resposta;char feito = ;for (i=1;i
  • Comando for loop infinitoA ausncia de condies de inicializao, continuidade e terminao, causaro um processo contnuo e teoricamente infinito (veremos posteriormente a intruo break, que tem a capacidade de encerrar um processo assemelhado ao exemplificado). for(;;) printf(Este loop rodar eternamente!\n);

    Introduo Linguagem C

  • Comando for Loop Vazio

    A presena do ponto e vrgula finalizando o comando, fora a execuo do loop sem que seja executado qualquer outro comando. for(i=0;i

  • Comando for Loop FinitoAo contrrio de outras linguagens que no permitem o trmino do loop a no ser quando a condio de finalizao for satisfeita, a linguagem C permite que um loop seja interrompido antes de seu trmino normal (desestruturao) sem que exista qualquer tipo de inconveniente. O comando break causa essa interrupo. for(;;) { scanf(%c,&c); if (c == A) break; /*interrompe o que deveria ser um lao eterno*/}printf(Fim do Loop!);

    Introduo Linguagem C

  • Comando Whilewhile ; Exemplo: Contagem#include main(){int i=0;while (i < 10) {printf(%d,i);i++; }} O loop se repete, enquanto a condio for verdadeira

    Introduo Linguagem C

  • Comando do - whileAo contrrio das estruturas for e while que testam a condio no comeo do loop, do / while sempre a testa no final, garantido a execuo ao menos uma vez da estrutura. do {;} while ; Exemplo: Trmino determinado pelo usurio.#include main(){int num;do { scanf(%d,&num);} while (num < 100);}

    Introduo Linguagem C

  • / * testa a capacidade de adivinhar uma letra * /#include main ( ){ char ch; int tentativas; do { printf (digite uma letra);scanf(%c, ch); getchar ( ); tentativas = 1; while ( ch!= t) { printf (%c incorreto \n, ch); tentativas++; printf (tente novamente \n);}printf (%c correto, ch);printf (acertou em %d vezes, tentativas);printf (continua? (s / n):);scanf(%c,ch); getchar( );} while (ch == s);}

    Introduo Linguagem C

  • Exerccios

    Introduo Linguagem C

  • Funes / ProcedimentosDividir uma tarefa complexa em tarefas menores, permitindo esconder detalhes de implementao

    Evita-se a repetio de um mesmo cdigo

    Tipo Nome (lista de parmetros){ corpo}

    Introduo Linguagem C

  • ProcedimentosFunes que no retornam valores Tipo: void

    #include void desenha();void desenha( ){ int i; for (i = 0; i < = 10; i++)printf (-);} main ( ){ desenha ( ); printf ( usando funes); desenha ( );}___________usando funcoes___________

    Introduo Linguagem C

  • FunesRetornam valores#include int fatorial (int);int fatorial (int n){ int i, resultado = 1; for ( i = 1; i
  • Variveis locaisVariveis declaradas dentro de uma funo so denominadas locais e somente podem ser usadas dentro do prprio bloco

    So criadas apenas na entrada do bloco e destrudas na sada (automticas)

    Introduo Linguagem C

  • Variveis Locaisvoid desenha ( ){ int i, j; . . .}main ( ){int a;desenha();a = i; erro. . .} void desenha ( ){ int i, j; . . . . . .}void calcula ( ){ int i, j; . . . . . .} i, j em desenha so variveis diferentes de i, j em calcula.

    Introduo Linguagem C

  • Variveis GlobaisVarivel que declarada externamente podendo ser acessada por qualquer funo #include main ( ){ int i; ......... .........desenha ( );calcula ( );}

    void desenha ( ){ int j; i = 0; . . .}void calcula ( ){ int m; i = 5; . . .}

    Introduo Linguagem C

  • Comando ReturnCausa a atribuio da expresso a funoforando o retorno imediato ao ponto de chamada da funo. #include main ( ){ char letra; printf ( digite uma letra em minsculo); letra = minsculo ( ); if (letra == a) printf (ok);}char minsculo ( ){ char ch;

    scanf(%c, ch); if ( (ch >= A) && (ch

  • Note pelo exemplo anterior que a funo minsculo l um valor internamente convertendo-o para minsculo. Como usar esta funo se j temos uma letra e desejamos convert-la para minsculo?

    Introduo Linguagem C

  • Passando dados para funoPassagem de parmetro por valor - uma cpia do argumento passada para a funoO parmetro se comporta como uma varivel local

    Introduo Linguagem C

  • Passando dados para funomain ( ) { printf ( %c, minsculo (A) ); parmetro real} char minsculo (char ch) parmetro formal{ if (( ch >= A)&& (ch
  • Passando dados para funo - Exemplo#include main ( ){ int num, b; printf ( entre com um nmero > o); scanf ( %d, &num ); b = abs (num); . . . printf ( Valor absoluto de num = %d, abs(num) ); . . . b = abs(-3);}int abs (int x){ return ( ( x < 0 ) ? -x : x );}

    Introduo Linguagem C

  • Passando vrios argumentosEx 1:float rea_retngulo (float largura, float altura){ return (largura * altura);} Ex 2:float potncia (float base, int expoente){ int i; float resultado = 1; if (expoente == 0) return 1; for (i = 1; i
  • Usando vrias funes: calcular a seguinte seqnciaS(x, n) = x/1! + x2/2! + x3/3! + ... + xn/ n!

    #include float serie (float , int );float potencia (float , int) int fat (int);main( ){float x;int termos;printf(entre com o numero de termos: ); scanf(%d, &termos);printf(entre com o valor de X: ); scanf(%f, &x);printf(O valor de srie = %f , serie(x, termos));}

    Introduo Linguagem C

  • float potencia (float base, int expoente){ int i; float resultado = 1; if (expoente == 0) return 1; for (i = 1; i
  • int fat (int n){ int i, resultado = 1; for ( i = 1; i
  • Vetorestipo de dado usado para representar uma coleo de variveis de um mesmo tipoestrutura de dados homognea unidimensional Ex: Ler a nota de 3 alunos e calcular a mdiaint nota0, nota1, nota2;printf(entre com a 1a. nota);scanf(%d, &nota0);:::printf(mdia = %f, (nota0 + nota1 + nota2) / 3));

    Introduo Linguagem C

  • Ex: Calcular a mdia de 300 alunos#include#define N_ALUNOS 40main( ){int i;floatnotas [ N_ALUNOS ], media = 0;for ( i = 0; i < N_ALUNOS; i++ ) {printf (entre com a nota %d, i+1);scanf (%f, &notas[ i ]); media += notas [ i ];}printf ( Mdia = %f \n, media / N_ALUNOS);for ( i = 0; i < N_ALUNOS; i++ ) {printf (\n Nota do aluno %d = , i+1);printf (%f \n, notas[ i ]);}}

    Introduo Linguagem C

  • Vetores Observaes importantesem C no existe declarao de vetor dinmicoo tamanho de um vetor tem que ser determinado em tempo de compilao Ex: int alunos; int notas [ alunos ];: ::printf (entre com o nmero de alunos);scanf (%d, &alunos); NO ACEITO !!!

    Introduo Linguagem C

  • Vetores Observaes importantesSoluo: declarar um vetor que suporte um nmero mximo de elementos Ex:int alunos;int notas [ 70 ];: ::printf (entre com o nmero de alunos);scanf (%d, &alunos);

    Introduo Linguagem C

  • Vetores Observaes importantesC no realiza verificao de limites em vetores

    nada impede o acesso alm do fim do vetor

    faa sempre que necessrio a verificao dos limites

    Introduo Linguagem C

  • Vetores Obs importantes#include #define TAMANHO 100main( ){ int quantidade, media = 0;float notas [ TAMANHO ];// quantidade deve ser TAMANHOprintf ( quantas notas devo ler ?);scanf(%d, &quantidade);for ( i = 0; i < quantidade; i++) {printf ( entre com a nota %d, i+1);scanf(%d, &notas [ i ]);}:::for ( i = 0; i < quantidade; i++) media += notas [ i ];:::}

    Introduo Linguagem C

  • Passando um vetor para uma funo #include int maximum( int [] ); /* ANSI function prototype */

    main( ) { int values[5], i, max; printf("Entre com 5 numeros:\n"); for( i = 0; i < 5; ++i ) scanf("%d", &values[i] ); max = maximum( values ); printf("\nValor Maximo: %d\n", max ); }

    Introduo Linguagem C

  • int maximum( int values[5] ) { int max_value, i; max_value = values[0]; for( i = 0; i < 5; ++i ) if( values[i] > max_value ) max_value = values[i]; return max_value; }Sada: Entre com 5 numeros: 7 23 45 9 121Valor Maximo: 121

    Introduo Linguagem C

  • Matrizesem C podemos definir um vetor em que cada posio temos um outro vetor (matriz).estrutura de dados homognea multidimensional Note: int matria [ 4 ] [ 40 ];temos 4 matrias, cada uma com 40 alunos

    Introduo Linguagem C

  • Matrizes - Leituraint i, j, matria [ 4 ] [ 40 ]; for ( i = 0 ; i < 4; i++ ) { printf (entre com as notas da matria %d, i+1); for ( j = 0; j < 40; j++) {printf (entre com a nota do aluno %d, j+1);scanf (%d, &materia [ i ] [ j ]); }}

    Introduo Linguagem C

  • Varivel Stringmatriz do tipo char terminada pelo caractere null \0cada caractere de um string pode ser acessado individualmente vetor de tamanho n string de tamanho ( n-1 ) Ex: char string[10] = exemplo ; char string[10] = { exemplo }; char string[10] = { e, x, e, m, p, l, o, \0 }; printf ( %s, string ); printf ( %c, string [ 0 ] );

    Introduo Linguagem C

  • Lendo Stringsscanf : l o string at que um branco seja encontrado Ex:main ( ) {char nome[40];

    printf ( Digite seu nome: );scanf ( %s, &nome[ 0 ] );//scanf ( %s, nome ); printf ( Bom dia %c, nome[0] );}Sada:Digite seu nome: Jose MariaBom dia Jose

    Introduo Linguagem C

  • Lendo StringsGetsl caracteres at encontrar \n substitui \n por \0 Ex:main ( ) {char nome[40];

    printf ( Digite seu nome: );gets ( &nome[ 0 ] ); // ou gets(nome);printf ( Bom dia %s, nome );} Sada:Digite seu nome: Jose MariaBom dia Jose Maria

    Introduo Linguagem C

  • Imprimindo StringsprintfputsEx:main ( ) {char nome[40];

    printf ( Digite seu nome: );gets ( &nome[ 0 ] );puts ( Bom dia ); puts ( nome );}Sada:Digite seu nome: Jose MariaBom dia Jose Maria

    Introduo Linguagem C

  • Funes de manipulao de stringsStrlenretorna o tamanho do string - no conta \0 Ex:main ( ) {char nome[40];

    printf ( Digite seu nome: );gets ( &nome[ 0 ] );printf (Tamanho = %d, strlen(&nome[ 0 ]) );} Sada:Digite seu nome: Jose MariaTamanho = 10

    Introduo Linguagem C

  • Funes de manipulao de stringsstrcat ( str1, str2 )concatena str2 ao final de str1 Ex:main ( ) {char nome[40] = Jose, char sobrenome[30] = Maria;

    strcat(nome, sobrenome);puts (sobrenome);puts (nome);}Sada:MariaJoseMariaCuidado: dado str1 + str2 tem que caber em str1

    Introduo Linguagem C

  • Funes de manipulao de stringsstrcmp ( str1, str2 )compara dois strings retornando: negativo se str1 < str2 0 se str1 = str2 positivo se str1 > str2a comparao feita por ordem alfabtica

    Introduo Linguagem C

  • #include main ( ) {char nome[40] = Jose;charsobrenome[30] = Maria;if ( strcmp ( nome, sobrenome ) !=0) puts ( os strings so diferentes );else puts ( os strings so identicos );}

    Introduo Linguagem C

  • Conversespodemos tambm converter strings e nmeros (inteiros/fracionrios) conforme desejarmos: Exemplo: Converso de String em Nmero Inteiro#include main(){int i;char s[10];printf(Digite uma sequencia de numeros com letras: );gets(s);i = atoi(s);printf(Numero: %d ,i);}

    Introduo Linguagem C

  • PonteirosPonteiros, como o prprio nome diz, um tipo de varivel que aponta para outra (de um tipo qualquer). Na verdade um ponteiro guarda o endereo de memria (local onde se encontra na memria) de uma varivel.

    Introduo Linguagem C

  • Ponteirosint teste=20;int *p;

    p=&teste;

    p ir armazenar o endereo de memria da varivel teste. Ou seja, p no armazena o valor 20, mas sim o endereo de teste que, este sim, armazena o valor 20.como chegar ao valor 20 usando a varivel p?

    int teste=20;int *p;

    p=&teste;printf("%d\n",*p);

    Introduo Linguagem C

  • Ponteiros

    Outro exemplo:

    char algo[5] = { 5, 4, 3, 2, 1 };char *c;

    c=&algo[2];

    Colocamos em c o endereo do terceiro elemento de algo: c[0]=3, c[1]=2 e c[2]=1.

    Se tivssemos feito c=&algo[3], ento: c[0]=2 e c[1]=1.

    Introduo Linguagem C

  • Ponteirosint vet_notas[50];int *pont_notas;

    pont_notas=vet_notas;

    Para imprimir a primeira e a dcima nota de nosso vetor, temos duas opes:

    print ("A primeira nota : %d", vet_notas[0]);print ("A primeira nota : %d", *pont_notas);print ("A dcima nota : %d", vet_notas[9]);print ("A dcima nota : %d", *(pont_notas+9));

    Introduo Linguagem C

  • Equivalncia entre vetores e ponteirosvet_notas[0]==*(pont_notas);vet_notas[1]==*(pont_notas+1);vet_notas[2]==*(pont_notas+2);

    Introduo Linguagem C

  • Malloc e FreeAlocao dinmica

    #include main(){int *notas, numero, i;

    Introduo Linguagem C

  • Printf(Entre com o nmero total de alunos\n);scanf(%d, &numero);notas=(int *)malloc(numero * sizeof(int));

    for (i=0; i,numero; i++) { printf(Digite a nota do aluno %d, i+1);scanf(%d, &notas[i]);printf(\n A nota do aluno %d :%d: , i+1, notas[i]);}free(notas);}

    Introduo Linguagem C

  • EstruturasUma estrutura um conjunto de variveis dentro de um mesmo nome. Em geral, uma varivel de um tipo especfico, por exemplo, temos uma varivel do tipo inteira e estamos fechados a nos referenciar aquele nome que lhe foi dado sempre por um nmero do tipo inteiro, logicamente. J as estruturas, dentro de um mesmo nome podemos nos referenciar a uma gama de variveis pr-definidas.

    Introduo Linguagem C

  • Estruturasstruct molde_conta{char nome[50];int telefone;float saldo ;};Definido o molde, devemos agora declarar a varivel que utilizar desse molde:struct molde_conta conta;

    Introduo Linguagem C

  • Estruturasstruct molde_conta{char nome[50];int telefone;float saldo;} conta1, conta2;

    equivalente a: struct molde_conta conta1, conta2;

    Introduo Linguagem C

  • Estrutras - Utilizao do tipoPodemos fazer atribuio de structs, do tipo conta2 = conta, e os valores sero idnticos. Para contar o nmero de caracteres de nome dentro da estrutura conta, podemos fazer:

    for (i=0,conta.nome[i],++i) ;printf ("o nome tem -> %d letras \n",i);

    Introduo Linguagem C

  • Vetores de Estruturasstruct molde_conta conta[100];

    conta[1].telefone=2212324;conta[1].nome=joao carlos;conta[1].saldo=1245.89;

    conta[5].telefone=2212888;conta[5].nome=Maria dos Santos;conta[5].saldo=6908.79;

    Introduo Linguagem C

  • Arquivos - feopen( )A funo fopen tem duas finalidades:- abrir uma fila de bytes- ligar um arquivo em disco quela fila

    FILE *fopen(char *NomeArquivo, char *modo);

    FILE *arquivo;if ((arquivo = fopen(teste,w)) == NULL) {puts(No posso abrir o Arquivo teste.\n);exit(1); /* fora o trmino da execuo da rotina */ }

    Introduo Linguagem C

  • Modo Significador Abre Arquivo de Texto para Leituraw Cria Arquivo de Texto para Gravaoa Anexa a um Arquivo de Texto rb Abre Arquivo Binrio para Leiturawb Cria Arquivo Binrio para Gravaoab Anexa a um Arquivo Binrio r+ Abre Arquivo de Texto para Leitura/Gravaow+ Cria Arquivo de Texto para Leitura/Gravaoa+ Abre ou Cria Arquivo de Texto para Leitura/Gravaor+b Abre Arquivo Binrio para Leitura/Gravaow+b Cria Arquivo Binrio para Leitura/Gravaoa+b Abre ou Cria Arquivo Binrio para Leitura/Gravao

    Introduo Linguagem C

  • Arquivos - putc ( )

    Grava caracteres em fila previamente abertos

    int putc(int ch, FILE *fp);

    ch o caracter a ser gravadofp o ponteiro devolvido por fopenputc(a, arquivo);

    Introduo Linguagem C

  • Arquivos - getc ( )

    Ler caracteres em uma fila abertaint getc(FILE *arquivo);

    Exemplo:ch = getc(arquivo);while (ch != EOF)ch = getc(arquivo);

    Introduo Linguagem C

  • Arquivos - fclose ( )Fechar as filas abertas. Caso o programa seja encerrado sem que as filas sejam fechadas, dados gravados nos buffers podem ser perdidos.

    int fclose(FILE *fp);

    fclose(arquivo);

    Introduo Linguagem C

  • main(){FILE *arq;char ch;if ((arq=fopen(teste.dat,w)) == NULL) {printf(Arquivo no pode ser criado\n);exit(1); }do{ch=getchar();putc(ch,arq);}while (ch!=0);fclose(arq);}

    Introduo Linguagem C

  • Arquivos - ferror ( )Determina se a operao de arquivo produziu um erro. Sua forma geral ser:

    int ferror(FILE *fp);

    Introduo Linguagem C

  • Arquivos - rewind( )

    Reinicia o arquivo, equivale ao Reset do Pascal, ou seja apenas movimenta o ponteiro do arquivo para seu incio.

    Introduo Linguagem C

  • Arquivos - fwrite ( ) fread ( )Permitem que leiamos/gravemos blocos de dados, sua forma geral a seguinte:

    int fread(void *buffer, int num_bytes, int cont, FILE *fp);int fwrite(void *buffer, int num_bytes, int cont, FILE *fp);

    Introduo Linguagem C

  • Arquivos - fwrite ( ) main(){FILE *fp;float f = 12.23;if ((fp=fopen(teste,wb)) == NULL) {printf(Arquivo no pode ser criado\n);exit(1); }fwrite(&f,sizeof(float(),1,fp);fclose(fp);}

    Introduo Linguagem C

  • Arquivos - fseek ( )Entrada e sada com acesso aleatrioint fseek(FILE *fp, long int num_bytes, int origem);

    fp- o ponteiro de arquivo devolvido por fopen().num_bytes - um inteiro longo que representa o nmero de bytes desde a origem at chegar a posio corrente.

    OBS: Este comando normalmente utilizado em arquivos binrios.

    Introduo Linguagem C

  • Exemplo : Leitura de um caracter em um arquivo binrio.main(){FILE *fp;if ((fp=fopen(teste,rb)) == NULL) {printf(Arquivo no pode ser aberto\n);exit(1);}fseek(fp,234L,0); /* L fora que seja um inteiro longo */return getc(fp); /* l o caracter 234 */}

    Introduo Linguagem C

  • carga(){FILE *fp;int i;if ((fp=fopen(LISTA.DAT,rb)) == NULL) {puts(Falha na Abertura do Arquivo!);return;}inicia_matriz();for (i=0; i < 100; i++)if (fread(&matriz[i], sizeof(struct registro), 1, fp) != 1) {if (feof(fp)) {fclose(fp);return; }else {puts(Erro de Leitura! );fclose(fp);return; } } }Exemplo de montagem de um pequeno cadastro de nomes, endereos e salrios de funcionrios em arquivo.

    Introduo Linguagem C

  • salvar(){FILE *fp;int i;if ((fp=fopen(LISTA.DAT,wb))==NULL) {puts(Falhou Abertura! );return; }for (i=0;i
  • Vamos supor que desejamos criar um programa que escreva num arquivo cujo nome ser fornecido na chamada do programa

    (Exemplificando: KTOD TESTE ).

    Gostaramos que o DOS criasse o arquivo TESTE guardando o contedo digitado durante a execuo do programa.

    Introduo Linguagem C

  • main(argv,argc)

    onde

    argc- tem o nmero de argumentos contidos nas linha de comando (necessariamente maior ou igual a um, pois o prprio programa j considerado um argumento pelo D.O.S.).

    argv um ponteiro que acomodar os caracteres digitados.

    Introduo Linguagem C

  • Exemplo 1: Programa KTOD, que escreve caracteres num arquivo criado/aberto via D.O.S.#include stdio.hmain(argc,argv)int argc;char *argv[];{FILE *fp;char ch;if (arg != 2) {printf(Digite o Nome do Arquivo\n);exit(1);}

    Introduo Linguagem C

  • if ((fp=fopen(argv[1],w)) == NULL) {printf(Arquivo no pode ser aberto\n);exit(1); }do {ch = getchar();putc(ch,fp);} while( ch != $);fclose(fp);}

    Introduo Linguagem C

  • Exemplo 2: Programa DTOV, que apresenta em vdeo os caracteres digitados via KTOD.

    #include stdio.hmain(argc,argv)int argc;char *argv[];{FILE *fp;char ch;if (arg != 2) {printf(Digite o Nome do Arquivo\n);exit(1); }if ((fp=fopen(argv[1],r)) == NULL) {printf(Arquivo no pode ser aberto\n);exit(1);}ch = getc(fp);

    Introduo Linguagem C

  • do {putchar(ch);ch=getc(fp);} while( ch != $);fclose(fp);}

    Introduo Linguagem C

  • Exemplo 3: Programa para copiar Arquivos.

    #include stdio.hmain(argc,argv)int argc;char *argv[];{FILE *in, *out;char ch;if (arg != 3) {printf(Digite o Nome dos Arquivos\n);exit(1);} if ((in=fopen(argv[1],rb)) == NULL) {printf(Arquivo origem no existe\n);exit(1);} if ((out=fopen(argv[2],wb)) == NULL) {printf(Arquivo destino no existe\n);exit(1);}while (! feof(in)) putc(getc(in),out); /* esta a cpia propriamente dita */fclose(in);fclose(out);}

    Introduo Linguagem C