Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas

Introdução à Linguagem C++, Notas de estudo de Análise de Sistemas de Engenharia

Apostila de linguagem C++: sintaxe, operadores, funções básicas e estruturas de controle

Tipologia: Notas de estudo

2010

Compartilhado em 17/03/2010

michelle-murta-4
michelle-murta-4 🇧🇷

1 documento

1 / 36

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
INTRODUÇÃO À LINGUAGEM C
Versão 2.0
Gerência de Atendimento ao Cliente
CENTRO DE COMPUTAÇÃO
UNICAMP
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24

Pré-visualização parcial do texto

Baixe Introdução à Linguagem C++ e outras Notas de estudo em PDF para Análise de Sistemas de Engenharia, somente na Docsity!

INTRODUÇÃO À LINGUAGEM C

Versão 2.

Gerência de Atendimento ao Cliente

CENTRO DE COMPUTAÇÃO

UNICAMP

GACLI - CENTRO DE COMPUTAÇÃO - UNICAMP

GACLI - CENTRO DE COMPUTAÇÃO - UNICAMP

1. Introdução

A linguagem C foi criada por Dennis Ritchie, em 1972, no centro de Pesquisas da Bell Laboratories. Sua primeira utilização importante foi a reescrita do Sistema Operacional UNIX, que até então era escrito em assembly. Em meados de 1970 o UNIX saiu do laboratório para ser liberado para as universidades. Foi o suficiente para que o sucesso da linguagem atingisse proporções tais que, por volta de 1980, já existiam várias versões de compiladores C oferecidas por várias empresas, não sendo mais restritas apenas ao ambiente UNIX, porém compatíveis com vários outros sistemas operacionais. O C é uma linguagem de propósito geral, sendo adequada à programação estruturada. No entanto é mais utilizada escrever compiladores, analisadores léxicos, bancos de dados, editores de texto, etc.. A linguagem C pertence a uma família de linguagens cujas características são: portabilidade, modularidade, compilação separada, recursos de baixo nível, geração de código eficiente, confiabilidade, regularidade, simplicidade e facilidade de uso.

Visão geral de um programa C

A geração do programa executável a partir do programa fonte obedece a uma seqüência de operações antes de tornar-se um executável. Depois de escrever o módulo fonte em um editor de textos, o programador aciona o compilador que no UNIX é chamado pelo comando cc. Essa ação desencadeia uma seqüência de etapas, cada qual traduzindo a codificação do usuário para uma forma de linguagem de nível inferior, que termina com o executável criado pelo lincador.

Editor (módulo fonte em C)

Ð

Pré-processador (novo fonte expandido)

Ð

Compilador (arquivo objeto)

Ð

Lincador (executável)

GACLI - CENTRO DE COMPUTAÇÃO - UNICAMP

2. Sintaxe

A sintaxe são regras detalhadas para cada construção válida na linguagem C. Estas regras estão relacionadas com os tipos , as declarações , as funções e as expressões. Os tipos definem as propriedades dos dados manipulados em um programa. As declarações expressam as partes do programa, podendo dar significado a um identificador , alocar memória, definir conteúdo inicial, definir funções. As funções especificam as ações que um programa executa quando roda. A determinação e alteração de valores, e a chamada de funções de I/O são definidas nas expressões.

As funções são as entidades operacionais básicas dos programas em C, que por sua vez são a união de uma ou mais funções executando cada qual o seu trabalho. Há funções básicas que estão definidas na biblioteca C. As funções printf() e scanf() por exemplo, permitem respectivamente escrever na tela e ler os dados a partir do teclado. O programador também pode definir novas funções em seus programas, como rotinas para cálculos, impressão, etc.

Todo programa C inicia sua execução chamando a função main(), sendo obrigatória a sua declaração no programa principal.

Comentários no programa são colocados entre /* e */ não sendo considerados na compilação.

Cada instrução encerra com ; (ponto e vírgula) que faz parte do comando.

Ex: main() /* função obrigatória */ { printf("oi"); }

2.1. Identificadores

São nomes usados para se fazer referência a variáveis, funções, rótulos e vários outros objetos definidos pelo usuário. O primeiro caracter deve ser uma letra ou um sublinhado. Os 32 primeiros caracteres de um identificador são significativos. É case sensitive, ou seja, as letras maiúsculas diferem das minúsculas.

int x; /é diferente de int X;/

GACLI - CENTRO DE COMPUTAÇÃO - UNICAMP

Uma implementação do compilador pode mostrar um faixa maior do que a mostrada na tabela, mas não uma faixa menor. As potencias de 2 usadas significam: 2 15

2 16 65536 2 31 2.147.483. 2 32 4.294.967.

2.2.2. Tipos Flutuantes

float [3.

  • , 3. + ] pelo menos 6 dígitos de precisão decimal double (1.

,1.

) pelo menos 10 dígitos decimais e precisão maior que do float long double (1.

,1.

) pelo menos 10 dígitos decimais e precisão maior que do double

Ex:

main() { char c; unsigned char uc; int i; unsigned int ui; float f; double d; printf("char %d",sizeof(c)); printf("unsigned char %d",sizeof(uc)); printf("int %d",sizeof(i)); printf("unsigned int %d",sizeof(ui)); printf("float %d",sizeof(f)); printf("double %d",sizeof(d)); }

2.3. Operadores

2.3.1. Operador de atribuição

O operador de atribuição em C é o sinal de igual "=". Ao contrário de outras linguagens, o operador de atribuição pode ser utilizado em expressões que também envolvem outros operadores.

GACLI - CENTRO DE COMPUTAÇÃO - UNICAMP

2.3.2. Aritméticos

Os operadores *, /, + e - funcionam como na maioria das linguagens, o operador % indica o resto de uma divisão inteira.

i+=2; -> i=i+2; x=y+1; -> x=x(y+1); d-=3; -> d=d-3;

Ex: main() { int x,y; x=10; y=3; printf("%d\n",x/y); printf("%d\n",x%y); }

2.3.3. Operadores de relação e lógicos

Relação refere-se as relações que os valores podem ter um com o outro e lógico se refere às maneiras como essas relações podem ser conectadas. Verdadeiro é qualquer valor que não seja 0, enquanto que 0 é falso. As expressões que usam operadores de relação e lógicos retornarão 0 para falso e 1 para verdadeiro. Tanto os operadores de relação como os lógicos tem a precedência menor que os operadores aritméticos. As operações de avaliação produzem um resultado 0 ou 1.

relacionais lógicos

maior que && and = maior ou igual || ou < menor! not <= menor ou igual == igual != não igual

Ex: main() { int i,j; printf("digite dois números: "); scanf("%d%d",&i,&j); printf("%d == %d é %d\n",i,j,i==j); printf("%d != %d é %d\n",i,j,i!=j); printf("%d <= %d é %d\n",i,j,i<=j); printf("%d >= %d é %d\n",i,j,i>=j); printf("%d < %d é %d\n",i,j,i< j); printf("%d > %d é %d\n",i,j,i> j); }

GACLI - CENTRO DE COMPUTAÇÃO - UNICAMP

2.3.7. Operador sizeof

O operador sizeof retorna o tamanho em bytes da variável, ou seja, do tipo que está em seu operando. É utilizado para assegurar a portabilidade do programa.

3. Funções Básicas da Biblioteca C

3.1. Função printf()

Sintaxe: printf("expressão de controle",argumentos);

É uma função de I/O, que permite escrever no dispositivo padrão (tela). A expressão de controle pode conter caracteres que serão exibidos na tela e os códigos de formatação que indicam o formato em que os argumentos devem ser impressos. Cada argumento deve ser separado por vírgula.

\n nova linha %c caractere simples \t tab %d decimal \b retrocesso %e notação científica " aspas %f ponto flutuante \ barra %o octal \f salta formulário %s cadeia de caracteres \0 nulo %u decimal sem sinal %x hexadecimal

Ex: main() { printf("Este é o numero dois: %d",2); printf("%s está a %d milhões de milhas\ndo sol","Vênus",67); }

Tamanho de campos na impressão:

Ex: main() { printf("\n%2d",350); printf("\n%4d",350); printf("\n%6d",350) }

GACLI - CENTRO DE COMPUTAÇÃO - UNICAMP

Para arredondamento:

Ex: main() { printf("\n%4.2f",3456.78); printf("\n%3.2f",3456.78); printf("\n%3.1f",3456.78); printf("\n%10.3f",3456.78); }

Para alinhamento:

Ex: main(){ printf("\n%10.2f %10.2f %10.2f",8.0,15.3,584.13); printf("\n%10.2f %10.2f %10.2f",834.0,1500.55,4890.21); }

Complementando com zeros à esquerda:

Ex: main() { printf("\n%04d",21); printf("\n%06d",21); printf("\n%6.4d",21); printf("\n%6.0d",21); }

Imprimindo caracteres:

Ex: main(){ printf("%d %c %x %o\n",'A','A','A','A'); printf("%c %c %c %c\n",'A',65,0x41,0101); }

A tabela ASCII possui 256 códigos de 0 a 255, se imprimirmos em formato caractere um número maior que 255, será impresso o resto da divisão do número por 256; se o número for 3393 será impresso A pois o resto de 3393 por 256 é 65.

3.2. Função scanf()

Também é uma função de I/O implementada em todos compiladores C. Ela é o complemento de printf() e nos permite ler dados formatados da entrada padrão (teclado). Sua sintaxe é similar a printf(). scanf("expressão de controle", argumentos);

GACLI - CENTRO DE COMPUTAÇÃO - UNICAMP

4. Estruturas de Controle de Fluxo

Os comandos de controle de fluxo são a essência de qualquer linguagem, porque governam o fluxo da execução do programa. São poderosos e ajudam a explicar a popularidade da linguagem. Podemos dividir em três categorias. A primeira consiste em instruções condicionais if e switch. A segunda são os comandos de controle de loop o while, for e o do-while. A terceira contém instruções de desvio incondicional goto.

4.1. If

sintaxe: if (condição)comando; else comando;

Se a condição avaliar em verdadeiro (qualquer coisa menos 0), o computador executará o comando ou o bloco, de outro modo, se a cláusula else existir, o computador executará o comando ou o bloco que é seu objetivo.

Ex: main() { int a,b; printf("digite dois números:"); scanf("%d%d",&a,&b); if (b) printf("%d\n",a/b); else printf("divisão por zero\n"); }

Ex:

#include <stdlib.h>

#include <time.h>

main(){

int num,segredo;

srand(time(NULL));

segredo=rand()/100;

printf("Qual e o numero: ");

scanf("%d",&num);

if (segredo==num)

{printf("Acertou!"); printf("\nO numero e %d\n",segredo);}

else if (segredo<num)

printf("Errado, muito alto!\n"); else printf("Errado, muito baixo!\n");}

GACLI - CENTRO DE COMPUTAÇÃO - UNICAMP

4.2. If-else-if

Uma variável é testada sucessivamente contra uma lista de variáveis inteiras ou de caracteres. Depois de encontrar uma coincidência, o comando ou o bloco de comandos é executado.

Ex

#include <stdlib.h> #include <time.h> main() { int num,segredo; srand(time(NULL)); segredo=rand()/100; printf("Qual e o numero: "); scanf("%d",&num); if (segredo==num) {printf("Acertou!"); printf("\nO numero e %d\n",segredo);} else if (segredo<num) printf("Errado, muito alto!\n"); else printf("Errado, muito baixo!\n"); }

4.3. Operador ternário

Sintaxe: condição?expressão1:expressão

É uma maneira compacta de expressar if-else.

Ex: main() { int x,y,max; printf("Entre com dois números: "); scanf(%d,%d,&x,&y); max=(x>y)?1:0; printf("max= %d\n",max); }

4.4. Switch

sintaxe: switch(variável) { case constante1: seqüência de comandos break;

GACLI - CENTRO DE COMPUTAÇÃO - UNICAMP

Ex: main() { int x;for(x=1;x<100;x++)printf("%d\n",x);}

Ex: main() { int x,y; for (x=0,y=0;x+y<100;++x,++y) printf("%d ",x+y); }

Um uso interessante para o for é o loop infinito, como nenhuma das três definições são obrigatórias, podemos deixar a condição em aberto.

Ex: main() { for(;;) printf("loop infinito\n"); }

Outra forma usual do for é o for aninhado, ou seja, um for dentro de outro.

Ex: main() { int linha,coluna; for(linha=1;linha<=24;linha++) { for(coluna=1;coluna<40;coluna++) printf("-"); putchar('\n'); } }

4.6. While

Sintaxe: while(condição) comando;

Uma maneira possível de executar um laço é utilizando o comando while. Ele permite que o código fique sendo executado numa mesma parte do programa de acordo com uma determinada condição.

  • o comando pode ser vazio, simples ou bloco
  • ele é executado desde que a condição seja verdadeira
  • testa a condição antes de executar o laço

GACLI - CENTRO DE COMPUTAÇÃO - UNICAMP

Ex: main() { char ch; while(ch!='a') ch=getchar(); }

4.7. Do while

Sintaxe: do { comando; } while(condição);

Também executa comandos repetitivos.

Ex: main() { char ch; printf("1. inclusão\n"); printf("2. alteração\n"); printf("3. exclusão\n"); printf(" Digite sua opção:"); do { ch=getchar(); switch(ch) { case '1': printf("escolheu inclusao\n"); break; case '2': printf("escolheu alteracao\n"); break; case '3': printf("escolheu exclusao\n"); break; case '4': printf("sair\n"); } } while(ch!='1' && ch!='2' && ch!='3' && ch!='4'); }

GACLI - CENTRO DE COMPUTAÇÃO - UNICAMP

As matrizes tem 0 como índice do primeiro elemento, portanto sendo declarada uma matriz de inteiros de 10 elementos, o índice varia de 0 a 9.

Ex: main(){ int x[10]; int t; for(t=0;t<10;t++) { x[t]=t*2; printf("%d\n",x[t]; } }

Ex: main() { int notas[5],i,soma; for(i=0;i<5;i++) { printf("Digite a nota do aluno %d: ",i); scanf("%d",&notas[i]); } soma=0; for(i=0;i<5;i++) soma=soma+notas[i]; printf("Media das notas: %d.",soma/5); }

5.2. Matriz Multidimencional

Sintaxe: tipo nome[tamanho][tamanho] ...;

Funciona como na matriz de uma dimensão (vetor), mas tem mais de um índice.

Ex:

main(){

int x[10][10]; int t,p=0; for(t=0;t<10;t++,p++) { x[t][p]=t*p; printf("%d\n",x[t][p]); } }

GACLI - CENTRO DE COMPUTAÇÃO - UNICAMP

5.3. Matrizes estáticas

Os vetores de dados podem ser inicializados como os dados de tipos simples, mas somente como variáveis globais. Quando for inicializar uma matriz local sua classe deve serstatic.

Ex: main() { int i; static int x[10]={0,1,2,3,4,5,6,7,8,9}; for(i=0;i<10;i++) printf("%d\n",x[i]); }

5.4. Limites das Matrizes

A verificação de limites não é feita pela linguagem, nem mensagem de erros são enviadas, o programa tem que testar os limites das matrizes.

Ex: main() { int erro[10],i; for(i=0;i<100;i++) { erro[i]=1; printf("%d\n",erro[i]; } }

6. Manipulação de Strings

Em C não existe um tipo de dado string, no seu lugar é utilizado uma matriz de caracteres. Uma string é uma matriz tipo char que termina com '\0'. Por essa razão uma string deve conter uma posição a mais do que o número de caracteres que sedeseja. Constantes strings são uma lista de caracteres que aparecem entre aspas, não sendo necessário colocar o '\0', que é colocado pelo compilador.

Ex:

main() { static re[]=“lagarto”; puts(re); puts(&re[0]); putchar('\n'); }