Академический Документы
Профессиональный Документы
Культура Документы
Professor Responsvel: Prof. Fernando Santos Osrio E-Mail: osorio@exatas.unisinos.br Web: http://www.inf.unisinos.br/~osorio/
E/S Perifricos: Vdeo => StdOut Teclado => StdIn Impressora Disco CD-ROM ...
Memria
Endereo e Contedo
E/S Perifricos: Vdeo => StdOut Teclado => StdIn Impressora Disco CD-ROM ...
Cdigos de Mquina (Assembly - Mnemnicos) Homem: Linguagens de Alto Nvel (Prximas da Linguagem Natural Humana) CPU:
Memria
Endereo e Contedo
E/S Perifricos: Vdeo => StdOut Teclado => StdIn Impressora Disco CD-ROM ...
Cdigos de Mquina (Assembly - Mnemnicos) Homem: Linguagens de Alto Nvel (Prximas da Linguagem Natural Humana) CPU:
Memria
Endereo e Contedo
Ferramentas de Software: Sistema Operacional Compiladores - GCC Interpretadores - PERL Compilador/Interpretador: Java (JVM) Aplicativos: Word, Excel, Browsers, ...
Programao: Imperativa Determinstica Estruturada OOP (Objetos) Alto Nvel Pascal C / C++ Java Cobol ...
E/S Perifricos: Vdeo => StdOut Teclado => StdIn Impressora Disco CD-ROM ...
Cdigos de Mquina (Assembly - Mnemnicos) Homem: Linguagens de Alto Nvel (Prximas da Linguagem Natural Humana) CPU:
Linguagem C : - Criada por Kernighan e Ritchie - Linguagem mais utilizada em ambientes acadmicos, de pesquisa e de desenvolvimento de ferramentas bsicas PIP/CA - Adotaremos a linguagem C inicialmente como ferramenta para desenvolvimento de programas Motivos da escolha desta linguagem: - Portabilidade (GCC for Windows / GCC for Linux) - Bem estruturada, gera cdigo otimizado - Flexibilidade, potencialidade (ling. aberta), C++ - Uso de Software Livre e das bibliotecas disponveis - Ambiente de desenvolvimento: IDE Integrated Development Environment: * Rhide for Windows - Editor, Compilador,Depurador (debug) * Linux: gcc, vi/xedit/emacs/pico, xxgdb
DOS> type hello.c #include <stdio.h> main ( ) { printf (\n); printf (Hello World! \n); printf (\n); } DOS> gcc hello.c -o hello.exe -lm
LINUX> cat hello1.c #include <stdio.h> char nome [30]; main ( ) { printf (Nome? ); scanf (%s,nome); printf (\n); printf (Hello %s!\n,nome); printf (\n); } LINUX> gcc hello1.c -o hello1 -lm
Descrio
Caracter ASCII (valores de 0 a 255 / -128 a + 127 = 1 byte) Byte com valores positivos, sem sinal (0 a 255) Byte com valores negativos, com sinal (-128 a +127)
UNSIGNED SIGNED
CHAR[x] String de no mximo x-1 componentes (caracteres) INT INT INT INT INT INT[x] FLOAT FLOAT DOUBLE DOUBLE ENUM VOID Valor Valor Valor Valor Valor Vetor inteiro (usualmente de 2 ou de 4 bytes) inteiro positivo inteiro positivo ou negativo, com sinal inteiro com preciso inferior inteiro com preciso superior de inteiros com x componentes (valores inteiros)
UNSIGNED
Valor de ponto flutuante (c/casas decimais) Valor de ponto flutuante positivo Valor de ponto flutuante com dupla preciso Valor de ponto flutuante com dupla preciso estendida Enumerao de elementos. Exemplo: Seg, Ter, Qua, Qui, Sex Tipo de dados indefinido. Indica apenas o endereo da memria, sem no entanto especificar o tipo exato.
LONG
- Declarando variveis... int idade; double salario; char sexo; main( ) { int dia; int ms; int ano; ... } /* Variveis podem ser declaradas antes de comear */ /* a parte que descreve as rotinas do programa */ /* Estas variveis so chamadas de GLOBAIS */ /* Sempre aps um abre chaves posso declarar vars. */ /* Estas variveis pertencem ao bloco definido entre o */ /* abre chaves { e o fecha chaves } */ /* Estas variveis so chamadas de LOCAIS do bloco */
Observaes importantes: - Nomes de variveis devem comear por uma letra, seguidos de letras, dgitos ou _; - Maisculas e minsculas so diferenciadas no nome das variveis; - Ateno para no declarar variveis com nomes de palavras reservadas: for, while, int, ...
- Operador de converso explcita de tipos de dados: int valint; double valreal; valdoub = (double)valint; valint = (int)valdoub; /* Converso explcita */ valint = valdoub; /* Converso implcita */ valdoub = valint/(double)outro_valint; /* Forada */
- Comando STRUCT: Criando tipos compostos (registros) struct data { int dia; int mes; int ano; }; struct data data_nasc; typedef struct { long int nro_funcionario; double salario; data data_contratacao; } reg_funcionario; reg_funcionario diretor_dept_pessoal; diretor_dept_pessoal.nro_funcionario = 1234567; diretor_dept_pessoal.salario = 9999.99; diretor_dept_pessoal.data_contratacao.ano = 1999;
- Comando STRUCT: Criando tipos compostos (registros) struct { int dia; int mes; int ano; } data; data data_nasc; typedef struct { long int nro_funcionario; double salario; data data_contratacao; } reg_funcionario; reg_funcionario diretor_dept_pessoal; diretor_dept_pessoal.nro_funcionario = 1234567; diretor_dept_pessoal.salario = 9999.99; diretor_dept_pessoal.data_contratacao.ano = 1999;
N[2]
N[3]
N[4]
N[5]
N[6]
N[7]
N[8]
N[9]
- Vetores de caracteres: char Letras[26]; => Letras[0] . . Letras[25] com valores do tip char Letras[0] = a; Letras[25] = z; char Nome[10]; => Nome[0] . . Nome[9] onde uma posio reservada para a marca de fim da string de nome! (Marca = \0) => O Nome no deve ter mais de 9 caracteres, pois o dcimo o \0 Strings so manipuladas atravs de rotinas especiais: strcpy, strlen, strcmp, sprintf, sscanf, ... #include <string.h> N[3] A N[4] N N[5] O N[6] \0 N[7] ? N[8] ? N[9] ?
strcpy(Nome,123456789);
N[0] F
N[1] U
N[2] L
- Inicializao de vetores: int num [5] = { 1, 2, 3, 4, 5 }; char vogais[5] = { a, e, i, o, u }; double matriz [3][2] = { { 0,0 }, { 0,1 }, { 1,0 }, { 1,1 }, { 2,0 }, { 2,1 } };
Comando:
- Comando simples ou bloco de comandos - Bloco de comandos: { ... } { comando;comando; ... } ~ comando;
if ( salario > 100.00) printf (Salrio maior que R$100,00\n); if ( salario == 0.00) printf (Este j foi demitido faz tempo...\n); else printf (Este ainda est sendo pago...\n); CUIDADO: if (a == b) NO O MESMO QUE if (a = b) !!
Comandos da Linguagem C : SWITCH-CASE switch ( <expresso> ) /* Com resultado do tipo int ou char */ { case <valor1> : <comando> ; break; case <valor2> : <comando> ; break; ... default : <comando>; } >> O comando switch um comando que permite estruturar melhor um conjunto de IFs aninhados.
for ( contador=0; contador < nro_vezes; contador++ ) printf(Contando... %d\n, contador); for (contador=10; contador != 0; contador-- ) { printf(Contagem regressiva...\n); printf(Falta: %d \n, contador); } CUIDADO: for ( a=1; a <= 10; a++) ; for ( ; ; ) /* Loop infinito */
for ( ; ; ) { printf (Resposta: ); scanf (%d,&valor); if (valor == VALOR_CORRETO) break; } contador = 0; while ( 0 == 0 ) { printf (Contando... %d \n, contador++) if ( contador > MAXIMO) break; }
for ( ; ; ) { printf (Resposta: ); scanf (%d,&valor); if (valor != VALOR_CORRETO) continue; printf (Bravo !\n); break; }
printf (Resposta: ); scanf (%d,&valor); if (valor > LIMITE_MAXIMO) { printf (Erro: valor invlido. Valor superior ao limite mximo!\n); exit(0); } >> O valor entre parnteses retornado ao sistema operacional.
#include <stdio.h> int verifica_idade ( idade ) int idade; { if (idade >= 18) return (TRUE); else return (FALSE); }
printf(Entre com %d valores:\n,MAXIMO); for ( aux = 0; aux < MAXIMO; aux++) scanf (%d, &(Matriz[aux]) ); printf(Valores fornecidos:\n); for ( aux = 0; aux < MAXIMO; aux++) printf(Matriz[%d] = %d \n, aux, Matriz[aux]); }