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


Programação em C, Notas de estudo de Engenharia Mecânica

Apostila de curso de programação em C++

Tipologia: Notas de estudo

2012

Compartilhado em 03/12/2012

vergilio-torezan-9
vergilio-torezan-9 🇧🇷

4.8

(15)

9 documentos

1 / 62

Toggle sidebar

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

Não perca as partes importantes!

bg1
Programação em C
1 Introdução
A linguagem C é uma linguagem de programação popular e amplamente utilizada
para criar programas de computador. Programadores no mundo todo utilizam a
linguagem C, pois ela oferece o máximo controle e eficácia. Se você é um programador, ou
pretende se tornar um, eis alguns benefícios que você desfrutará ao aprender a linguagem
C:
você poderá ler e escrever código para diversas plataformas. Desde microcontroladores
até sistemas científicos mais avançados podem ser criados em C e diversos sistemas
operacionais modernos são escritos em C;
o avanço para a linguagem C++ orientada para objeto torna-se muito mais fácil. A
linguagem C++ é uma extensão de C e é praticamente impossível aprender C++ sem antes
aprender C.
Esta animação mostra a execução de um programa simples em C. Ao final deste artigo, você entenderá como
ela funciona
2 O que é C?
C é uma linguagem de programação de computadores. Isso significa que você
pode usá-la para criar listas de instruções para um computador seguir. A linguagem C é
uma das milhares de linguagens de programação atualmente em uso. Existe várias
décadas e ganhou ampla aceitação por oferecer aos programadores o máximo em controle
e eficiência. A linguagem C é fácil de aprender: pode ter um estilo um tanto criptográfico
comparada às outras linguagens, mas isso é logo superado.
A linguagem C é o que se chama de linguagem compilada. Isso significa que,
uma vez escrito o programa em C, ele deve ser passado por um compilador para
transformar seu programa em executável para o computador rodar (executar). Um
programa em C possui um formato legível ao homem, enquanto o executável gerado no
compilador possui a forma legível para a máquina e é executada por ela. Isto significa que
para escrever e executar um programa em C, você precisa ter acesso a um compilador de C.
Se estiver usando uma máquina UNIX (por exemplo, escrevendo scripts CGI em C no seu
computador UNIX, ou se você é um estudante que trabalha em uma máquina UNIX de um
laboratório), o compilador de C está disponível gratuitamente. Ele é chamado “cc” ou
“gcc” e está disponível na linha de comando. Se você é um aluno, estão a escola lhe
fornecerá um compilador (descubra qual a escola usa e aprenda mais sobre ele). Se estiver
trabalhando em casa em uma máquina Windows, você precisará fazer o download de um
compilador de C gratuito ou comprar um compilador comercial. Um compilador comercial
amplamente utilizado é o ambiente Visual C++ da Microsoft (ele compila programas em C
e C++). Mas, infelizmente, este programa custa caro. Caso não disponha de algumas
centenas de dólares para gastar em um compilador comercial, você pode usar um dos
compiladores gratuitos disponíveis na internet. Veja delorie.com/djgpp como ponto de
partida em sua pesquisa.
PAGE 9
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
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d
pf3e

Pré-visualização parcial do texto

Baixe Programação em C e outras Notas de estudo em PDF para Engenharia Mecânica, somente na Docsity!

Programação em C

1 Introdução

A linguagem C é uma linguagem de programação popular e amplamente utilizada para criar programas de computador. Programadores no mundo todo utilizam a linguagem C, pois ela oferece o máximo controle e eficácia. Se você é um programador, ou pretende se tornar um, eis alguns benefícios que você desfrutará ao aprender a linguagem C:

  • você poderá ler e escrever código para diversas plataformas. Desde microcontroladores até sistemas científicos mais avançados podem ser criados em C e diversos sistemas operacionais modernos são escritos em C;
  • o avanço para a linguagem C++ orientada para objeto torna-se muito mais fácil. A linguagem C++ é uma extensão de C e é praticamente impossível aprender C++ sem antes aprender C.

Esta animação mostra a execução de um programa simples em C. Ao final deste artigo, você entenderá como ela funciona

2 O que é C?

C é uma linguagem de programação de computadores. Isso significa que você pode usá-la para criar listas de instruções para um computador seguir. A linguagem C é uma das milhares de linguagens de programação atualmente em uso. Existe há várias décadas e ganhou ampla aceitação por oferecer aos programadores o máximo em controle e eficiência. A linguagem C é fácil de aprender: pode ter um estilo um tanto criptográfico comparada às outras linguagens, mas isso é logo superado.

A linguagem C é o que se chama de linguagem compilada. Isso significa que,

uma vez escrito o programa em C, ele deve ser passado por um compilador para transformar seu programa em executável para o computador rodar (executar). Um programa em C possui um formato legível ao homem, enquanto o executável gerado no compilador possui a forma legível para a máquina e é executada por ela. Isto significa que para escrever e executar um programa em C, você precisa ter acesso a um compilador de C. Se estiver usando uma máquina UNIX (por exemplo, escrevendo scripts CGI em C no seu computador UNIX, ou se você é um estudante que trabalha em uma máquina UNIX de um laboratório), o compilador de C está disponível gratuitamente. Ele é chamado “cc” ou “gcc” e está disponível na linha de comando. Se você é um aluno, estão a escola lhe fornecerá um compilador (descubra qual a escola usa e aprenda mais sobre ele). Se estiver trabalhando em casa em uma máquina Windows, você precisará fazer o download de um compilador de C gratuito ou comprar um compilador comercial. Um compilador comercial amplamente utilizado é o ambiente Visual C++ da Microsoft (ele compila programas em C e C++). Mas, infelizmente, este programa custa caro. Caso não disponha de algumas centenas de dólares para gastar em um compilador comercial, você pode usar um dos compiladores gratuitos disponíveis na internet. Veja delorie.com/djgpp como ponto de partida em sua pesquisa.

Vamos começar com um programa em C bastante simples e progredir a partir dele. Vamos supor que você usará a linha de comando UNIX e o gcc como seu ambiente para estes exemplos, mas caso contrário, todos os códigos também funcionarão (basta compreender e usar o compilador que tiver disponível).

3 O mais simples programa em C

Vamos começar com o programa em C mais simples possível e usá-lo tanto para entender os fundamentos da linguagem C como o processo de compilação em C. Digite o programa seguinte em um editor de textos padrão (vi ou emacs no UNIX, Bloco de notas no Windows ou TeachText no Macintosh). Depois salve o programa em um arquivo denominado samp.c. Se deixar de incluir .c , você provavelmente receberá informação de algum tipo de erro ao compilá-lo (portanto, não se esqueça de inserir o .c ). Certifique-se também de que o editor não anexe automaticamente caracteres extras (como .txt) ao nome do arquivo. Eis o primeiro programa: #include <stdio.h>

int main() { printf("Este é o resultado do meu primeiro program!\n"); return 0; } Quando executado, este programa instrui o computador a imprimir a linha: “Este é o resultado do meu primeiro programa!”, e depois encerra o programa. Posição Ao escrever este programa, posicione #include de forma que o sinal # esteja na coluna 1 (mais à esquerda). Isso facilita o seu entendimento, mas na verdade o espaçamento e recuo podem ser do jeito que você preferir. Em alguns sistemas UNIX, você encontrará um programa chamado cb , o C Beautifier (algo como “embelezador de C”), que formata códigos. O espaçamento e recuo mostrados acima são um bom exemplo a seguir.

Para compilar este código, siga estas etapas:

  • em uma máquina UNIX, digite gcc samp.c -o samp (se gcc não funcionar, tente cc). Esta linha executa o compilador em C chamado gcc, pede que compile samp.c e que nomeie o arquivo executável criado como samp. Para executar o programa, digite samp (ou em algumas máquinas UNIX, ./samp );
  • em uma máquina rodando DOS ou Windows e usando DJGPP (em inglês), digite o seguinte no prompt do MS-DOS: gcc samp.c -o samp.exe. Esta linha executa o compilador em C chamado gcc, Pede que compile samp.c e que nomeie o arquivo executável criado como samp.exe. Para executar o programa, digite samp ;
  • se estiver trabalhando com algum outro compilador ou sistema de desenvolvimento, leia e siga as instruções dele para compilar e executar o programa. Você verá “Este é o resultado do meu primeiro programa!” ao executá-lo. Veja o que aconteceu ao compilar o programa:

6 Printf

A instrução printf permite enviar o resultado para a saída padrão. Para nós, o termo “saída padrão” se refere à tela (embora você possa redirecionar a saída padrão para um arquivo de texto ou outro comando). Eis outro programa que o ajudará a aprender mais sobre printf: #include <stdio.h>

int main( ) { int a, b, c; a = 5; b = 7; c = a + b; printf("%d + %d = %d\n", a, b, c); return 0; } Digite este programa em um arquivo e salve-o como add.c. Compile-o com a linha gcc add.c -o add e depois o execute digitando add (ou ./add ). Você verá a linha “5 + 7 = 12” como resultado. Eis uma explicação das diferentes linhas neste programa:

  • a linha int a, b, c; declara três variáveis de número inteiro denominadas a , b e c.
  • a próxima linha inicializa a variável nomeada a para o valor 5.
  • a próxima linha define 7 para b.
  • a próxima linha soma a e b e "atribui" o resultado a c.

O computador adiciona o valor em a (5) ao valor em b (7) para formar o resultado 12 e então coloca o novo valor (12) na variável c. Por este motivo, o sinal = nesta linha é denominado “operador de atribuição”.

  • a instrução printf depois imprime a linha “5 + 7 = 12”. As expressões de controle %d na instrução printf atuam como expressão de controle de valores. Há 3 expressões de controle %d, e no final da linha printf há três nomes de variável: a , b e c. A linguagem C liga o primeiro %d ao a e o substitui por 5. Ele liga o segundo %d com b e o substitui por 7, faz a correspondência do terceiro %d com c e o substitui por 12. Depois, imprime a linha completa na tela: 5 + 7 = 12. O +, o = e o espaçamento são parte da linha de formato e são automaticamente integrados entre os operadores %d conforme especificado pelo programador.

7 Printf: lendo os valores de usuário

O programa anterior é bom, mas seria melhor se ele lesse os valores 5 e 7 inseridos pelo usuário, em vez de usar constantes. Em vez disso, tente este programa: #include <stdio.h>

int main() { int a, b, c; printf("Entre o primeiro valor:");

scanf("%d", &a); printf("Entre o segundo valor:"); scanf("%d", &b); c = a + b; printf("%d + %d = %d\n", a, b, c); return 0; }

Eis como este programa funciona ao ser executado:

Faça as alterações, depois compile e rode o programa para certificar-se de que funciona. Observe que scanf usa as mesmas strings de formato que printf (digite man scanf para mais informação). Observe também o & na frente de a e b. Este é o operador de endereço em C: ele retorna o endereço da variável (isto não fará sentido até aprendermos sobre os ponteiros). Você tem de usar o operador & em scanf em qualquer variável do tipo char, int ou float, bem como tipos de estrutura (que discutiremos em breve). Se excluir o operador &, você receberá um erro ao executar o programa. Tente executá-lo para ver que tipo de erro ocorre. Vamos ver algumas variações para entender printf completamente. Eis uma instrução simples de printf: printf(“Hello”); Esta chamada para printf tem uma string de formatos que diz ao printf para enviar a palavra “Hello” para a saída padrão. Compare-a com: printf(“Hello\n”); A diferença entre as duas é que a segunda versão exibe a palavra “Hello” seguida de uma quebra de linha. As linha seguintes mostram como exibir o valor de uma variável usando printf. printf("%d", b); O %d é uma expressão de controle que será substituída pelo valor da variável b

quando a instrução printf for executada. Freqüentemente, você vai desejar incluir o valor entre outras palavras. Uma forma de fazer isso é: printf("A temperatura é "); printf("%d", b); printf(" degrees"); Um modo mais fácil de dizer isso é: printf("A temperatura é %d graus\n", b); Você também pode usar múltiplas expressões de controle %d em uma instrução printf: printf("%d + %d = %d\n", a, b, c); Na instrução printf, é extremamente importante que o número de operadores na string de formato corresponda exatamente ao número e tipo de variáveis que a seguem. Por

Modifique este programa para que ele aceite 3 valores em vez de 2 e some todos eles juntos: #include <stdio.h>

int main() { int a, b, c; printf("Entre o primeiro valor:"); scanf("%d", &a); printf("Entre o segundo valor:"); scanf("%d", &b); c = a + b; printf("%d + %d = %d\n", a, b, c); return 0; } Tente apagar ou adicionar caracteres ou palavras aleatórias

em um dos programas anteriores e veja como o compilador reage a tais erros de compilação. Por exemplo, apague a variável b na primeira linha do programa anterior e veja o que o compilador faz quando você se esquece de declarar uma variável. Apague um ponto-e-vírgula e veja o que acontece. Omita uma das chaves. Remova um dos parênteses próximos à função principal. Faça uma alteração por vez e compile o programa para ver o que acontece. Simulando erros como esses você pode aprender sobre diferentes erros de compilação, o que facilitará futuras detecções quando você os cometer.

Erros a serem evitados na linguagem C

  • Usar letras maiúsculas e minúsculas aleatoriamente. Letras maiúsculas e minúsculas são importantes na linguagem C, portanto você não pode digitar Printf ou PRINTF. É obrigatório que seja printf ;
  • Esquecer de usar o & em scanf;
  • Parâmetros em excesso ou a falta deles após a instrução de formato em printf ou scanf;
  • Esquecer de declarar o nome de uma variável antes de utilizá-la.

9 Desvio e looping

Em C, as instruções if e loops while regem-se pelos princípios das expressões Booleanas. Eis um programa simples em C que demonstra uma instrução if:

#include <stdio.h>

int main() {

int b; printf("Digite um valor:"); scanf("%d", &b); if (b < 0) printf("O valor é negativo "); return 0; } Este programa aceita um número do usuário. Ele então testa esse número

utilizando uma instrução if para ver se ele é menor que 0. Se for, o programa imprime uma mensagem. Caso contrário, o programa não faz nada. A parte (b < 0) do programa é a expressão booleana. A linguagem C avalia esta expressão para decidir se imprime ou não a mensagem. Se a expressão booleana se mostra Verdadeira , então a linguagem C executa a linha imediatamente posterior à instrução if (ou um bloco de linhas entre chaves logo após a instrução if). Se a expressão booleana se mostrar Falsa , então a linguagem C pula a linha ou bloco de linhas logo após a instrução if.

Eis um exemplo um pouco mais complexo: #include <stdio.h>

int main() { int b; printf("Digite um valor:"); scanf("%d", &b); if (b < 0) printf("O valor é negativo "); else if (b == 0) printf("O valor é zero "); else printf("O valor é positivo "); return 0; } Neste exemplo, as seções else if e else avaliam tanto para valores positivos como

zero. Eis uma expressão booleana mais complicada: if ((x==y) && (j>k))

z=1; else q=10; Esta instrução diz: “Se o valor da variável x for igual ao valor da variável y, e se o valor da variável j for maior que o valor da variável k, então defina a variável z como 1; de outro modo, defina a variável q como 10”. Você usará instruções if como esta em todos os seus programas C para tomar decisões. De um modo geral, a maioria das decisões será simples como o primeiro exemplo, mas, eventualmente, as coisas podem ser um pouco mais complicadas. Observe que a linguagem C utiliza == para testar a igualdade , enquanto utiliza =

para atribuir um valor a uma variável. O símbolo && em C representa uma operação booleana AND.

a++; printf("%d\n",a); } Você também pode colocá-lo para indicação: for (a=1,b=6; a < b; a++,printf("%dn",a)); É um pouco confuso, mas é possível. O operador vírgula permite separar diversas instruções diferentes nas seções de inicialização e incremento do loop for (porém não na seção de teste). Muitos programadores de linguagem C gostam de concentrar muitas informações em uma única linha de código. Outros acham que isto torna o código mais difícil de entender, e portanto desmembram essas instruções.

= versus == em expressões booleanas O sinal == é um problema na linguagem C pois frequentemente você se esquece e digita apenas =^ em uma expressão booleana. Este é um erro comum de ocorrer, mas para o compilador há uma diferença significativa. A linguagem C aceitará = e == em uma expressão booleana, mas

o comportamento do programa mudará consideravelmente quando usamos um ou outro. As expressões booleanas em C avaliam os inteiros e os inteiros podem ser usados dentro de expressões booleanas. O valor inteiro 0 em C é Falso, enquanto qualquer outro valor inteiro é Verdadeiro. É código seguinte é permitido em C: #include <stdio.h>

int main() { int a; printf("Digite um número:"); scanf("%d", &a); if (a) { printf("O valor é verdadeiro\n"); } return 0; } Se a for qualquer número diferente de 0, a instrução printf é executada. Em C, uma instrução como if (a=b) significa: “Atribuir b para a , e então testar a para seu valor Booleano". Assim, se a

retornar o valor 0, a instrução if é Falsa. Caso contrário, é Verdadeira. O valor de a muda durante o processo. Este não é o comportamento desejado se você pretendeu digitar == (embora esta característica seja útil quando usada corretamente), assim, tenha cuidado com o uso de = e ==.

10 Looping: um exemplo real

Suponhamos que você queira criar um programa que imprima uma tabela de conversão Fahrenheit para Celsius. Isso pode ser facilmente obtido com um loop for ou loop while: #include <stdio.h>

int main() { int a; a = 0; while (a <= 100) { printf("%4d graus F = %4d graus C\n", a, (a - 32) * 5 / 9); a = a + 10; } return 0; } Se executar este programa, ele produzirá uma tabela de valores iniciando em 0 graus F e terminando em 100 graus F. O resultado será este: 0 graus F = -17 graus C 10 graus F = -12 graus C 20 graus F = -6 graus C 30 graus F = -1 graus C 40 graus F = 4 graus C 50 graus F = 10 graus C 60 graus F = 15 graus C 70 graus F = 21 graus C 80 graus F = 26 graus C 90 graus F = 32 graus C 100 graus F = 37 graus C Os valores da tabela estão em incrementos de 10 graus. Observe como é fácil alterar os valores iniciais, finais ou de incremento da tabela que o programa produz. Para valores mais precisos, você pode usar valores de ponto flutuante : #include <stdio.h>

int main() { float a; a = 0; while (a <= 100) { printf("%6.2f graus F = %6.2f graus C\n",

printf("%6.2f graus F = %6.2f graus C\n", 98.6, (98.6 - 32.0) * 5.0 / 9.0); } printf("%6.2f graus F = %6.2f graus C\n", a, (a - 32.0) * 5.0 / 9.0); b = a; a = a + 10; } return 0; } Tente isto

  • Tente alterar o programa conversor Fahrenheit-Celsius de modo que ele utilize scanf para aceitar o valor inicial, final e de incremento daquele usuário;
  • Adicione uma linha de cabeçalho à tabela que é gerada;
  • Tente encontrar uma solução diferente para o bug corrigido pelo exemplo anterior;
  • Crie uma tabela que converta libras em quilogramas ou milhas em quilômetros.

Erros a serem evitados na linguagem C

  • Colocar = quando se deseja == em uma instrução if ou while;
  • Esquecer de aumentar o contador dentro do loop while. Isso causa um loop infinito (o loop nunca acaba).
  • Acidentalmente colocar um ; no final de um loop for ou instrução if, pois isto anula a instrução. Por exemplo:

for (x=1; x<10; x++); printf("%d\n",x); imprime apenas um valor, pois o ponto-e-vírgula após a instrução for atua como uma linha para a execução do loop for.

11 Matrizes

Nesta seção, criaremos um pequeno programa em C que gera 10 números aleatórios e os ordena. Para tal, utilizaremos uma nova disposição de variável denominada matriz.

Uma matriz permite declarar e trabalhar com uma coleção de valores de mesmo tipo. Por exemplo, você pode querer criar uma coleção de 5 inteiros. Uma forma para fazer isso seria declarar 5 inteiros diretamente: int a, b, c, d, e; Isso está certo, mas e se você precisasse de milhares de números inteiros? Uma

forma mais fácil é declarar uma matriz de 5 inteiros. int a[5]; Os cinco inteiros individuais dentro desta matriz são acessados por um índice.

Todas as matrizes iniciam em zero e vão até n-1 no C. Assim, int a[5]; contém 5 elementos. Por exemplo: int a[5];

a[0] = 12; a[1] = 9; a[2] = 14; a[3] = 5; a[4] = 1; Uma das vantagens sobre a indexação de matriz é que você pode usar um loop para manipular o índice. Por exemplo, o código a seguir inicializa todos os valores na matriz em 0: int a[5];

int i; for (i=0; i<5; i++) a[i] = 0; O código seguinte inicializa seqüencialmente os valores na matriz e então os imprime: #include <stdio.h>

int main() { int a[5]; int i; for (i=0; i<5; i++) a[i] = i; for (i=0; i<5; i++) printf("a[%d] = %dn", i, a[i]); } As matrizes são usadas a toda hora em C. Para entender seu uso, inicie um editor e digite o seguinte código: #include <stdio.h>

#define MAX 10

int a[MAX]; int rand_seed=10;

/* from K&R - retorna um número aleatório entre 0 e 32767.*/ int rand()

printf("%dn",a[i]); Esta codificação classifica os valores aleatórios e os imprime ordenadamente. Sempre que o executar, você obterá os mesmos valores. Para alterar os valores classificados, altere o valor de rand_seed sempre que executar o programa.

O único modo fácil para realmente entender o que o código está fazendo é executá-lo “à mão”. Isto é, assuma que MAX é 4 para facilitar, pegue uma folha de papel e finja que é o computador. Desenhe a matriz no papel e coloque 4 valores aleatórios e não- classificados na matriz. Execute cada linha da seção de classificação do código e desenhe exatamente o que acontece. Você verá que, sempre que submetidos ao loop interno, os valores maiores na matriz são empurrados para baixo e os valores menores vão para o topo da matriz. Tente isto

  • No primeiro trecho do código, tente alterar o loop for que preenche a matriz para uma única linha de código. Certifique- se de que o resultado seja igual ao do código original;
  • Pegue o código de ordenação por bolha e coloque-o em sua própria função. O cabeçalho de função será void bubble_sort(). Depois transfira as variáveis utilizadas pela ordenação por bolha para a função e torne-as locais. Por ser uma matriz local, você não precisa passar parâmetros.
  • Inicialize a semente do número aleatório para diferentes valores. Erros que devem ser evitados na linguagem C
  • A linguagem C não tem nenhuma verificação de dimensão, portanto, se você indexar além do fim da matriz, ele não o informará a respeito. Ele provavelmente travará ou apresentará dados incorretos;
  • A chamada de função deve incluir () mesmo se nenhum parâmetro for informado. Por exemplo, C aceitará x=rand; mas a chamada não funcionará. O endereço de memória da função rand será colocado em x. Você deve dizer x=rand();.

12 Mais sobre matrizes

Tipos de variáveis

Há 3 tipos padrão de variáveis em linguagem C:

  • inteiro: int;
  • ponto flutuante: float;
  • caractere: char. Um int é um valor inteiro de 4 bytes. Um float é um valor de ponto flutuante de 4 bytes. Um char é um caractere único de 1 byte (como “a” ou “3”). Uma string de caracteres é declarada como uma matriz de caracteres. Há vários tipos derivados:
  • duplo (valor de ponto flutuante de 8 bytes);
  • curto (inteiro de 2 bytes);
  • curto sem sinal ou int sem sinal (números inteiros positivos, sem bit de sinal).

Operadores e precedência de operadores

Os operadores em C são semelhantes aos operadores na maioria das linguagens: + : adição;

- : subtração; / : divisão; ***** : multiplicação; % : mod. O operador / realiza a divisão de inteiros se ambos os operandos forem números

inteiros; caso contrário, realiza a divisão por ponto flutuante. Por exemplo: void main() { float a; a=10/3; printf("%f\n",a); } Este código imprime um valor de ponto flutuante desde que a seja declarado como tipo float , mas a será 3.0 porque o código executou uma divisão de inteiros. A precedência de operador em C também é similar para a maioria das linguagens. A divisão e multiplicação ocorrem primeiro, depois a adição e a subtração. O resultado do cálculo 5+34 é 17, e não 32. Em C, o operador * tem precedência sobre o +. Você pode usar parênteses para alterar a ordem de precedência normal: (5+3)4 é 32. O 5+3 é executado primeiro porque está entre parênteses. Abordaremos a parte da precedência mais tarde, já que ela se torna um pouco complicada em C quando os ponteiros são introduzidos.

Conversão de tipo

A linguagem C permite executar conversões de tipo na sua execução. Você utiliza este recurso com freqüência ao usar ponteiros. A conversão de tipo também ocorre durante a operação de atribuição para determinados tipos. Por exemplo, no código acima, o valor inteiro foi automaticamente convertido para um flutuante. Você faz a conversão de tipo em C colocando o nome de tipo entre parênteses e colocando-o na frente do valor que deseja alterar. Assim, no código acima, ao substituir a linha a=10/3; por a=(float)10/3; produz 3.33333 como resultado, pois 10 é convertido em um valor de ponto flutuante antes da divisão.

Typedef

Você declara tipos nomeados e definidos pelo usuário em C com a instrução

typedef. O exemplo a seguir mostra um tipo que aparece freqüentemente no código C: #define TRUE 1 #define FALSE 0 typedef int boolean;

void main() { boolean b; b=FALSE;

i=i+3; i += 3; i=i*j; i *= j;

Tente isto

  • Tente diferentes trechos da codificação para investigar a conversão de tipo e precedência. Tente int , char , float e assim por diante;
  • Crie uma matriz de registros e digite um código para classificar a matriz em um campo de número inteiro.

Erros que devem ser evitados na linguagem C Como descrito acima, o uso do operador / com 2 inteiros quase sempre produzirá um resultado inesperado, portanto pense bem ao utilizá-lo.

13 Funções

A maioria das linguagens permite criar funções de algum tipo. Funções permitem dividir um longo programa em seções nomeadas, de forma que as seções possam ser reutilizadas ao longo do programa. As funções aceitam parâmetros e retornam um resultado. Funções de C podem aceitar um número ilimitado de parâmetros. Em geral, a linguagem C não se preocupa em qual ordem você coloca suas funções no programa, contanto que o nome da função seja conhecido pelo compilador antes de ser invocado. Já falamos um pouco sobre funções. A função rand previamente descrita é bastante simples. Ela não aceita parâmetros e retorna um resultado inteiro: int rand() /* de K&R - produz um número aleatório entre 0 e 32767.*/ { rand_seed = rand_seed * 1103515245 +12345; return (unsigned int)(rand_seed / 65536) % 32768; } A linha int rand() declara a função rand para o resto do programa e especifica que aquele rand não aceitará nenhum parâmetro e retornará um resultado inteiro. Esta função não tem nenhuma variável local, mas se elas fossem necessárias, iriam logo abaixo da abertura {. A linguagem C permite declarar variáveis após qualquer { : elas existem até o programa atingir o } correspondente e então desaparecem. Desta forma, as variáveis locais de uma função desaparecem assim que o } correspondente é atingido na função. Enquanto existirem, as variáveis locais residem na pilha do sistema. Observe que não há nenhum ; depois de () na primeira linha. Caso tenha colocado um, acidentalmente, você receberá uma enorme cascata de mensagens de erro do compilador, que não farão sentido algum. Observe também que, mesmo sem parâmetros, você precisa usar o (). Eles indicam ao compilador que você está declarando uma função em vez de simplesmente declarar um int. A instrução return é importante para qualquer função que retorna um resultado. Ela especifica o valor que a função retornará e a encerra imediatamente. Isto significa que você pode colocar diversas instruções de retorno na função para proporcionar vários pontos de saída. Se você não colocar uma instrução de retorno em uma função, a função retorna quando atinge } e retorna um valor aleatório (muitos compiladores o advertirão se você não retornar um valor específico). Em C, uma função pode retornar valores de qualquer tipo: int, float, char, struct, etc.

Há vários modos corretos para executar a função rand. Por exemplo: x=rand();. A variável x recebe o valor retornado por rand nesta instrução. Observe que você deve usar () na chamada da função, mesmo que nenhum parâmetro seja passado. Caso contrário, x recebe o endereço de memória da função rand, que geralmente não é desejável. Você também pode invocar rand desta forma: if (rand() > 100) Ou deste modo: rand(); No último caso, a função é chamada, mas o valor retornado por rand é descartado. Talvez você nunca faça isso com rand, mas muitas funções retornam algum tipo de código de erro por meio da função, e se você não está muito preocupado com o código de erro (por exemplo, por saber que um erro é impossível), você poderá descartá-lo. Funções podem usar um retorno tipo void caso se deseje que não se retorne nada. Por exemplo: void print_header()

{ printf("Programa Número 1n"); printf("Programa Número 1n"); printf("Versão 1.0, lançada em 26/12/91\n"); } Esta função não retorna valor algum. Você pode invocá-la com a seguinte instrução: print_header(); Você deve incluir () na chamada. Se não o fizer, a função não é invocada, embora possa ser compilada corretamente em outros sistemas. As funções em C podem aceitar qualquer tipo de parâmetro. Por exemplo: int fact(int i) { int j,k; j=1; for (k=2; k<=i; k++) j=j*k; return j; } retorna o fatorial de i , que é passado como um parâmetro inteiro. Separe vários parâmetros

com vírgulas: int add(int i, int j) { return i+j; } A linguagem C evoluiu ao longo dos anos. Às vezes, você verá funções como add escritas do “modo antigo”, como mostrado abaixo: int add(i,j) int i; int j; { return i+j; }