You are on page 1of 7

Resumo principais recursos de C/C++

Sintaxe bsica da linguagem Comentrios: Comentrio antigo (C): abre c /* fecha com */ Pode ser aberto em uma linha e fechado em outra. Ex: /* este um exemplo de comentrio que ocupa duas linhas do programa */ ..... Comentrio novo (C++): abre c //, no fecha Apenas a linha corrente comentada Ex: ..... // este um comentrio de uma linha .....

printf( %s est a %i milhes de milhas \n do sol, Vnus , 67 ); } Obs: %i e %s so cdigos de formatao, para impresso de valores de cada tipo. \n um cdigo de controlo que causa uma mudana de linha. entrada de dados bsica (em teclado): cin ou scanf cin: cin >> <lista de strings e/ou expresses> Exemplo: int val1, val2; float val3; cout << Digite 2 valores inteiros: ; cin >> val1 << val2; cout << Agora 1 valor inteiro e 1 real: ; cin >> val2 >> val3; scanf (cdigos formatao, lista de ponteiros ); Exemplo: printf (Digite 2 valores inteiros: ); scanf (%i%i, &val1, &val2 ); printf (Agora 1 valor inteiro e 1 real: ); scanf (%i%f, &val2, &val3 ); Cdigos de formatao (p/ printf e scanf): %c caracter %i %d inteiro (decimal) %f ponto flutuante (float) %s cadeia de caracteres (string) %e float em notao cientfica %p ponteiro (endereo de mem.) %o octal %x hexadecimal Caracteres de controle (printf, scanf e strings): \n \t \b \a \r \ \\ nova linha avano de tabulao (tab) retrocesso alert (ou beep) som do alto-falante <enter> imprimir aspas imprimir barra

Regras para formao de Identificadores:


Identificador qualquer nome criado pelo programador, para nomear: variveis, funes, estruturas, arquivos, etc. Ex: valor, salrio, CalculaSaldo; (123valor -> invlido!) - Quantos caracteres quiser (mas no use mais de 32). - Comece com letra ou sublinhado (_), seguidos de letras, nmeros ou sublinhados. IMPORTANTE: C (e C++) sensvel caixa (case sensitive): Ex: peso Peso pEso - no podemos definir um identificador com o mesmo nome que uma palavra chave. Palavras reservadas (ou palavras-chave): auto if static do extern default int while long if do . . . . .

Estrutura Bsica de um Programa // primeira funo a ser executada <void ou int> main ( ) { // incio da funo . . . comandos . . . } // fim da funo (e da execuo do programa) Exemplo: void main( ) { printf( Hello, world! ); ou: cin >> Hello, world!; } Obs: Todo comando deve ser encerrado por ; printf uma funo, note um ( ) aps o seu nome. Declarao de variveis: Sintaxe: <tipo> nome1, nome2, ... nomen; ex: int a; int b; ou int a, b; ex: char letra; float salario; int idade; Comandos bsicos de E/S (entrada e sada): sada de dados bsica (em tela): cout ou printf cout: cout << <lista de strings e/ou expresses> Exemplo: cout << Hello, world!; cout << Valor da mdia: << media; printf (string de formatao, lista de argumentos ); Exemplo: - printf(Aula de C.); // imprime Aula de C. - printf (o nmero %d e par!, 2 ); - void main () { 1

Tipos de dados (para declarao de variveis, etc): Tipos de dados bsicos, ou primitivos: sinal Tipo bytes faixa de valores possveis ? char 1 S -128 a 127 int 2 ou 4 S -32.768 a 32.767 float 4 S 3.4e-38 a 3.4e+38 double 8 S 1.7e-308 a 1.7e+308 Obs: X X ausncia de tipo ou sem valor void Modificadores (usados p/ construir outros tipos): Como funciona: long e short -> alteram o tamanho (bytes) unsigned e signed -> alteram a sinalizao (se o tipo aceita ou no valors negativos unsigned: no aceita) long ou long int (4 bytes) unsigned char (0 a 255) unsigned int (0 a 65.535) Obs: o tipo int ter sempre o tamanho em bytes da palavra da mquina na qual o programa compilado. Geralmente 16 ou 32 bits. Inicializao de variveis: a combinao de uma declarao de variveis com o operador de atribuio void main int char float () { evento = 5; corrida = c; tempo = 27.25;

printf ( o melhor tempo da eliminatria % c, corrida); printf ( \ n do evento %d foi % f, evento, tempo);

Operadores Aritmticos: Binrios: Unrio: ex: int a, b; = + * / %

Controlando a impresso, com printf Tamanho de campos: possvel estabelecer o tamanho mnimo para a impresso de um campo: 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 (onde o _ um espao!) O comando de entrada scanf: sintaxe: scanf(expresso de controle, lista de argumentos) expresso: % ou %* lista: &varivel ex: void main ( ) { int num; scanf(%d, &num); } O operador de endereo (&) Um endereo de memria a referncia (endereo) que o computador usa para identificar e chegar at uma varivel. Toda varivel ocupa uma rea de memria e seu endereo igual ao endereo do primeiro byte por ela ocupado. Ex: inteiro 2 bytes float 4 bytes char 1 byte Quando usamos & precedendo o nome uma varivel, estamos falando do endereo da mesma na memria. ex: void main ( ) { int num; num = 2; printf (valor = %i, endereo = %p, num, &num); } // Sada: valor = 2, endereo = FC08 // em hexa! ex: void main ( ) { char a ; printf (Digite um caracter: ); scanf ( %c, &a ); // l um caracatere do teclado printf ( \n %c = %d em decimal, a, a); printf (%o em octal, %x em hexadecimal, a, a); } Funes de entrada/sada de caracteres A funo scanf obriga que a tecla <enter> seja pressionada aps a entrada dos dados A biblioteca de C oferece funes que lem dados sem esperar <enter> getche( ): l um caracter do teclado ecoando-o na tela getch( ): l um caracter do teclado sem eco-lo na tela Principais Operadores da Linguagem C Operadores Relacionais: Usados para comparaes > maior >= maior ou igual < menor <= menor ou igual == igualdade != diferena

b = 3; a = b + 2; b = a * b; b = 7 % 2; obs: Atribuio em C uma expresso, logo: a = 5; a = b = 4 * a; Nota: a = 2000; (vlido) 2000 = a; (invlido) Operadores de incremento (++) e decremento (--) : Incrementam / decrementam uma unidade de seu operando modos distintos pr fixado ps fixado ex: n++; (usa a varivel e depois incrementa) ++n; (usa a varivel depois de incrementar) main( ) { int num = 0; printf ( %d, num); printf ( %d, num++); printf ( %d, num); 0 0 1

} Sada:

Operadores aritmticos de atricuio: +=, -=, *=, /=, %= atribuir um novo valor varivel dependendo do operador e da expresso a direita A sintaxe: x op= exp equivalente a x = (x) op (exp) Ex: expresso o mesmo que: i += 2; i = i + 2; h -= 3; h = h - 3; t /= 4; t = t / 4; p %= 6; p = p % 6; x *= y + 1; x = x * (y + 1); Observe que: em C, no existe o tipo de dados booleano! Quando precisamos trabalhar com verdadeiro e falso, geralmente usamos valores inteiros (1 = V; 0 = F). Mas, na verdade, p/ o compilador, 0 = falso, e qualquer valor numrico diferente de 0 considerado verdadeiro. Blocos de comandos Podemos agrupar 2 ou mais comandos em um bloco de comandos, colocando-os entre { e }. Esta construo necessria, por exemplo, para associar mais de um comando a estruturas de deciso (ifs) e laos (for, while, etc.) ex: void main ( ) { int n, soma; for ( n=1, soma=0; num <= 3; num++ ) { soma += num; printf (n = %d soma = %d \n, num, soma); } }

Estruturas de Controle Deciso Permitem que um comando, ou conjutno de comandos, seja executado ou no, dependendo de uma condio a ser testada em tempo de execuo. A linguagem C oferece os seguintes tipos de estruturas de deciso: if, if-else, switch, e o operador condicional (?:) 2

Estrutura de deciso simples: if Sintaxe: if ( <expresso> ) <comando nico>; ou if( <expresso> ) { comando 1; .... comando n; } ex: void main ( ) { char ch; ch = getche( ); if ( ch == p ) printf (Voc pressionou a tecla p); } Obs: 1 - Os parnteses, ( e ), so obrigatrios. 2 - <expresso> pode ser qualquer expresso numrica (C no possui um tipo lgico/booleano). Apenas o valor 0 ser considerado como falso. Qualquer resultado != 0 ser considearado verdadeiro. ex: void main () { if ( getche( ) == p ) { printf (Voc digitou p); printf (Pressione outra tecla!); getche( ); } } Obs: ifs aninhados: Se uma estrutura if est dentro de outro if, dizemos que os dois ifs esto aninhados. Os comandos associados ao if mais interno s sero executados se a condio do if mais externo for verdadeira. ex: main ( ) { char ch; printf (Digite uma letra entre A e Z:); ch = getche ( ); if ( ch >= A ) if (ch < = Z) printf (Voc acertou!); } Comando IF ELSE comando If s executa a instruo caso a condio de teste seja verdadeira, nada fazendo se a expresso for falsa comando else executar um conjunto de instrues se a expresso de teste for falsa Forma Geral: If (condio) instruo else instruo

else If (condio 2) instruo else if (condicao 3) ... ex.: void main ( ) { int nmero; scanf ( % d, &nmero); If (nmero < 0) printf (nmero menor que zero); else If (nmero < 10) printf ( nmero >= e < 10); else If (nmero < 100) printf (nmero >= 10 e < 100) else } printf (nmero >=100);

ex.: void main ( ) { if (getche ( ) == p) printf ( voc digitou p); else printf ( voc no digitou p); } Uso de if e if-else de forma aninhada; Forma Geral: If (condio 1) instruo 3

Estruturas de Controle Repetio ou Iterao A linguagem C fornece 3 tipos de laos de repetio (iterao): for (para . . . faa . . . ), while (enquanto . . . faa . . .), e do-while (faa . . . enquanto . . .). for (para . . . faa . . .) O lao for da linguagem C mais complexo e bem mais flexvel e poderoso que os disponveis em outras linguagens, como Pascal, por exemplo. Sintaxe: for ( <inicializao>; <teste continuidade>; <atualizao> ) < comando (ou bloco de comandos) >; ex: for (num = 1; num <= 1000; num++ ) printf (Numero = %d \n, num ); Obs: O cdigo de inicializao, o de incremento, e a condio de continuidade podem ser expresses bem complexas, contendo inclusive chamadas a funes. Na verdade, podem conter mais de uma expresso, separadas por vrgulas: ex: /* uso de funes nas expresses do lao */ void main ( ) { char ch; for ( ch = getch ( ); ch != x; ch = getch( ) ) printf ( %c, ch + 1); } ex: /* Imprime as letras do alfabeto */ void main ( ) { char ch; int i; for ( i = 1, ch = a; ch <= z; ch++, i++ ) printf (%d.a letra = %c \n, i, ch); } Obs: Caso no esteja presente nenhuma condio de teste, esta ser considerada sempre sempre como se fosse verdadeira (lao infinito). Ex: for ( i=1 ; ; i++ ) // loop infinito (no tem teste!) cout << \nValor: << i ; } LAOS ANINHADOS Quando um lao est dentro de outro, dizemos que o lao interior est aninhado void main ( ) { int i, J; for (i = 1; i <= 3; i++) for (J = 1; J <= 2; J++) printf (%d %d \n, i, J); } while (enquanto . . . faa . . . ) Sintaxe: while ( <condio / expresso> ) comando (ou bloco); ex: while ( x <= 10 ) printf ( %i, x ); ou while ( x <= 10 ) { printf ( %i, x ); } Funcionamento: comando s executado se expresso de teste for verdadeira (!=0). A expresso avaliada antes da primeira iterao, e aps cada aps cada uma delas, at que se torne falsa (= 0). ex: while ( x <= 10 ) ou while ( x <= 10 ) { printf ( %i, x ); printf ( %i, x ); }

do-while (faa . . . enquanto . . .) Sintaxe: do { <comandos> } while ( <expresso de teste> ); ex: erros = 0; do { printf (Digite uma letra:); erros += 1; } while ( (ch = getch ( ) ) != t ); Funcionamento: Executa os comandos internos ao menos a primeira vez e, a partir da, enquanto for verdadeira a condio. Repare que similar aolao while, a diferena est no momento em que a condio avaliada.

Estruturas de Controle Desvios break O comando break causa a sada imediata de um lao. Pode ser usado em qualquer uma das estruturas de lao do C, e na estrutura switch. Caso esteja dentro de um lao interno em 2 ou mais laos aninhados, causar apenas a sada deste lao mais interno (o mais prximo que contm o comando). ex: main ( ) { int num; while (1) { printf ( \n Digite um nmero natural: ); scanf (%d, &num); if ( num < 0 ) break; printf ( 2 * %d = %d, num, 2 * num); } } continue O comando continue pode ser usado dentro de um lao e, quando executado, fora uma nova e imediata avaliao da condio do lao - ignorando todos os demais comandos que estiverem abaixo (at o final do lao). ex: main ( ) { int n; n = 1; while ( n != -100 ) { printf(Digite um num. natural (-100 termina): ); scanf (%d, &n); if ( n < 0 ) continue; printf ( 2 * %d = %d, n, 2 * n ); } } No caso de while e do-while, o comando continue far com que o controle v direto para o teste condicional. No caso de um lao for, primeiramente ser executada a expresso de incremento, depois ser feito o teste de continuidade do lao. Obs: Trata-se de um comando que deve ser usado com cerimnia, pois fere alguns princpios da programao estruturada e pode dificultar a manuteno de programas.

OPERADORES LGICOS && (e), II (ou), ! (not) ex: (1 II 2) (x && y) (a > 10) && (x < 10) ! (x > 0) (10 <= a) && (a <= 100) Cuidado: (10 <= a <= 100) EXEMPLOS: 4 == ( (10 <= a) <= 100 )

If (10 < a) && (a < 100) If (10 < a) II (a == -1)

/ * 10 < a < 100 * /

int i, resultado = 1; for ( i = 1; i <= n; i ++) resultado *= i; return resultado; } Main ( ) { printf ( o fatorial de 4 = %d, fatorial(4) ); printf ( o fatorial de 3 = %d, fatorial(3) ); } VARIVEIS LOCAIS Variveis 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) Ex: void desenha ( ) { int i, j; . . . . . . }

O comando de seleo (switch): Forma de substituir o comando If - else ao se executar vrios testes Similar ao If - else com maior flexibilidade e formato limpo Sintaxe: switch ( <expresso> ) { case constante 1: <comandos . . . > // opcional break; // opcional case constante 2: <comandos . . . > break; [ default: <comandos> ] } ==> Funes em C Em linguagens de programao, de modo geral, h 2 tipos de subrotinas: procedimentos e funes. Funes so subrotinas que, ao final de sua execuo, retornam algum valor (simples ou composto) para a rotina que chamou-a (que, por sua vez, pode ser o programa principal ou alguma outra subrotina). Procedimentos so subrotinas que simplesmente executam uma srie de comandos e no retornam nenhum valor. Obs: Em C no h o conceito de procedimento, apenas de funes (ou seja, toda subrotina, a princpio, retorna algum valor). Declarao de funes - sintaxe: <tipo retorno> <nome funo> ( [<lista de parmetros>] ) { [ declarao de variveis locais ] < comandos . . . > [ return < expresso de tipo retorno > ; ] } Obs: <lista de parmetros> = <declarao de var1.>, <declarao de var2.>, etc. ex: float media ( int a, int b ) { float tmp; tmp = ( a + b ) / 2.0 ; return ( tmp ); // ou return tmp ; } // Exemplos de chamadas e uso da funo: void main ( ) { int v1, v2; float m; v1 = 10; v2 = 7; m = media( v1, v2 ); // chamada funo printf (Media de %i e %i = %f , v1, v2, m ); // ou printf (Media de %i e %i = %f , media(v1,v2) ); // outras chamadas possveis: m = media( val1 3 , 5 ); m = media( 5+4 , 7 ); }

VARIVEL GLOBAL Varivel que declarada externamente podendo ser acessada por qualquer funo Ex: int i; void desenha ( ) { int j; i = 0; . . .} void calcula ( ) { int m; i = 5; . . .} O COMANDO RETURN Causa a atribuio da expresso a funo, Forando o retorno imediato ao ponto de chamada da funo Ex.: char minsculo ( ) { char ch; ch = getche( ); If ( (ch >= A) && (ch <= Z)) return (ch + a - A); else return (ch); } Passando dados para funes Passagem de parmetro por valor - uma cpia do argumento passada para a funo parmetro se comporta como uma varivel local Ex: void minsculo (char ch) { if ( ( ch >= A) (ch <= Z) ) return (ch + a-, A); else return (ch); } 5

desenha ( ); printf ( usando funes); desenha ( ); } void desenha( ) { int i; for (i = 0; i < = 10; i++) printf (-); } ex: int { fatorial (int n)

} void main ( ) { printf ( %c, minsculo (A) ); } Verificando limites C no realiza verificao de limites em arranjos nada impede o acesso alm do fim do arranjo RESULTADOS IMPREVISVEIS faa sempre que necessrio a verificao dos limites Ex: #define TAM 100 int notas [ TAM ], quantidade; : : : do { printf ( quantas notas devo ler ?); scanf(%d, &quantidade); } while ( quantidade > TAM ); Dimensionando um arranjo possvel inicializar um arranjo sem que se defina a sua dimenso indica-se os inicializadores, o compilador fixar a dimenso do arranjo Ex: int notas[ ] = { 0, 0, 1, 3 } = int notas[ 4 ] = { 0, 0, 1, 3 } Obs: Voc no pode inicializar o i-simo elemento sem inicializar todos os anteriores Arranjo Multidimensional em C podemos definir um vetor em que cada posio temos um outro vetor (matriz). Note: int matria [ 4 ] [ 40 ]; interpretao: temos 4 matrias, cada uma com 40 alunos Agora temos: int 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 ]); } } Inicializando Matrizes dado: #define linhas 3 #define colunas 4 int nota [ linhas ] [ colunas ];

PASSANDO VRIOS ARGUMENTOS Frequentemente uma funo necessita de mais de uma informao para produzir um resultado Podemos passar para a funo mais de um argumento Ex 1: float rea_retngulo (float largura, float altura) { return (largura * altura); }

==> Arranjos (arrays): vetores e matrizes: Estrutura de dados usado para representar uma coleo (agregado) de valores de um mesmo tipo de dados (estrutura homognea). - Caso unidimensional: chamado de VETOR - Casos 2, 3 e N-dimensional: chamados de MATRIZES Informalmente: arranjo uma srie de variveis do mesmo tipo referenciadas por um nico nome cada varivel diferenciada por um ndice Ex: int nota [ 4 ]; Vetor de inteiros (nota [ 0 ], nota [ 1 ], nota [ 2 ], nota[ 3 ]) Obs: tamanho n ndice 0 a (n - 1)

Inicializando Arranjos Dado um arranjo podemos inicializ-lo: int notas [ 5 ] = { 0, 0, 0, 0, 0 } notas [0] = 0; notas [1] = 0 ... notas [4] = 0; for ( i = 0 ; i < 5; i++) scanf (%d, &notas [ i ] ); Trabalhando com um nmero desconhecido de elementos em C no existe declarao de arranjo dinmico tamanho de um arranjo tem que ser determinado em tempo de compilao Soluo: declarar um arranjo que suporte um nmero mximo de elementos #define TAM 50 // diretiva de compilao define

void main( ) { int quantidade, media = 0; float notas[TAM]; // define o tamanho indiretament // quantidade deve ser <= TAM printf ( quantas notas devo ler ?); scanf(%d, &quantidade); for ( i = 0; i < quantidade; i++) { printf (Informe a nota %i:, i+1); scanf(%f, &notas[ i ] ); } : : : for ( i = 0; i < quantidade; i++) media += notas [ i ] ; : : : 6

podemos: int nota [ 3 ] [ 4 ] = { {0, 0, 0, 0}, ..., {0, 0, 0, 0 } } notas [ 0 ][ 0 ] = 0; ... nota [ 0 ] [ 3 ] = 0; : : : nota [ 2 ] [ 0 ] = 0; ... nota [ 2 ] [ 3 ] = 0; //usar laos for for ( i = 0; i < linhas; i++ ) for ( j = 0; j < colunas; j++ ) nota [ i ] [ j ] = 0; Constantes de Cadeia de Caracteres Uma constante string uma sequncia delimitada por aspas duplas. Ex: printf ( Isto e um teste ); printf ( %s, Isto e um teste ); Cadeias de caracteres (STRINGs): de caracter

A linguagem C no possui um tipo, ou mecanismo de dados especfico para armazenar cadeias de caracteres! Para isso, utiliza-se vetores de char. Ex: char nome[30]; // vetor de 30 char Logo, uma string em C simplesmente um vetor do tipo char, terminada pelo caractere null (cdigo 0, da tablea ASCII, representado em programas C pela sequencia \0). Cada caractere de um string pode ser acessado individualmente: Ex: char string[10] = exemplo ; char string[10] = {exemplo} ; char string[10] = { e, x, e, m, p, l, o, \0 }; Obs: vetor de tamanho n = string de tamanho ( n 1) Lendo Strings - scanf l o string at que um branco seja encontrado - gets l caracteres at encontrar \n substitui \n por \0 Imprimindo Strings: printf ou puts complemento de gets: Ex: { printf ( Digite seu nome: ); gets ( &nome[ 0 ] ); puts ( Bom dia ); puts ( nome ); } Lembre-se: Obs: Sempre que uma funo espera receber um apontador, podemos passar: o endereo da primeira posio do vetor / matriz. o prprio nome do vetor / matriz. (desde que o tipo seja o mesmo) ex: char nome[40]; gets( &nome[0] ); equivale a gets( nome ); puts( &nome[0] ); equivale a puts( nome ); Principais funes de manipulao de cadeias: strlen string length: retorna o comprimento efetivo da string (no conta o \0). ex: tam = strlen( string1 ); strcpy (string copy) copia o contedo de uma string (varivel ou constante) em outra (que deve ser uma var.) ex: strcpy( str1, str2 ); ou strcpy( str1, Hello"); strcmp string compare: compara 2 strings (variveis ou constantes). ex: strcmp( str1, Fim ); ex: strcmp( str1, str2 ); // compara str1 e str1 e retorna um valor: < 0 , se str1 < str2 = 0 , se str1 = str2 > 0 , se str1 > str2 Obs: a comparao por ordem alfabtica (lexicogrfica). strcat string concat: concatena str2 ao final de str1 ex: strcat( str1, str2 ); ou strcat( str1, fim ); Obs: A soma dos tam. de str1 e str2 deve caber em str1.

Structs (estruturas, ou registros em C): Struct o nome dado aos registros em C. Registro (record, em Pascal), um mecanismo de estruturao de dados de agregao e heterogneo (campos de diferentes tipos). Declarao: struct <nome struct> - este nome opcional! { <tipo1> <nome campo 1>; . . . . . . . .. <tipo n> <nome campo n>; }; Exemplo: struct ponto { float x; float y; // poderia ser: float x, y; } p1, p2, origem; // declara 2 variveis no formato struct ponto --> Usando as variveis struct declaradas: p1.x = 2.0; p1.y = 1.5; p2.x = 3.0; p2.y = -1.0; origem = 0.0; origem = 0.0; Obs: pode-se copiar uma struct em outra: Ex: p2 = p1; // copia cada campo de p1 em p2 (desde que possuam o mesmo formato de campos). Outros exemplos: struct func { int matric; char nome[30]; } f1, f2; // f1 e f2 so 2 var. com o formato func. ou struct func f3, f4; Criando vetores de structs: Exemplo: struct ponto3D { float x, y, z; // ponto no espao 3D }; // declara um vetor de at 50 pontos 3D struct ponto3D Poliedro[50]; Usando: Poliedro[0].x = 0.0; Poliedro[0].x = 0.0; Poliedro[0].x = 0.0; Poliedro[1].x = 1.0; Poliedro[1].x = 2.0; Poliedro[1].x = 0.0; ........

You might also like