




























































































Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Apostila de Linguagem C# usada na Fatec
Tipologia: Notas de estudo
1 / 137
Esta página não é visível na pré-visualização
Não perca as partes importantes!





























































































C é geralmente citada como uma linguagem que reúne características tais como expressividade, portabilidade e eficiência. Embora seja uma lingua- gem de uso geral, C é especialmente indicada para o desenvolvimento de software básico. Nesse capítulo apresentamos a estrutura básica dos programas em C, funções de E/S, tipos de dados e operadores.
A linguagem C foi desenvolvida em 1972 , nos Laboratórios Bell, por Dennis Ritchie e implementada pela primeira vez num computador DEC PDP- 11 que usava o sistema operacional UNIX. Ela é o resultado da evolução de uma lin- guagem de programação mais antiga, denominada BCPL, desenvolvida por Martin Richards. Tendo sido desenvolvida por programadores, e para pro- gramadores, C tornou-se rapidamente uma ferramenta de programação bastante difundida entre os profissionais da área.
A popularidade da linguagem C deve-se, principalmente, ao fato dela ser uma linguagem flexível, portátil e eficiente. Sua flexibilidade lhe permite ser utilizada no desenvolvimento de diversos tipos de aplicação, desde simples jogos eletrônicos até poderosos controladores de satélites. Graças à sua por- tabilidade, os programas codificados em C podem ser executados em diver- sas plataformas, praticamente, sem nenhuma alteração. E, finalmente, sua eficiência proporciona alta velocidade de execução e economia de memória.
O Borland Turbo C^ é o ambiente no qual desenvolveremos nossos progra- mas. Ele é composto por um editor de textos, um compilador e um linkeditor que, juntos, nos permitem criar programas executáveis a partir de textos escritos em C. Os recursos oferecidos nesse ambiente poderão ser explorados à medida que estivermos mais familiarizados com a linguagem C. Para começar, é suficiente saber que:
Figura 1.1 − A tela do ambiente integrado Turbo C
Um programa C consiste de funções sendo que, necessariamente, uma delas deve ser denominada main. Essa é a função principal, por onde inicia-se a execução do programa, e sem ela o programa não pode ser executado.
Exemplo 1.1. Uma pessoa é obesa se seu índice de massa corpórea é supe- rior a 30 , tal índice é a razão entre seu peso e o quadrado da sua altura.
/* OBESO.C – informa se uma pessoa está ou não obesa */
#include <stdio.h> #include <conio.h> #include <math.h>
#define LIMITE 30 main() { float peso, altura, imc; clrscr(); printf(“\n Qual o seu peso e altura? ”); scanf(“%f %f”, &peso, &altura); imc = peso/pow(altura,2); printf(“\n Seu i.m.c. é %.1f”, imc); if( imc <= LIMITE ) printf(“\n Você não está obeso!”); else printf(“\n Você está obeso!”); getch(); }
Como esse programa é muito simples, ele consiste de uma única função: main. Essa função solicita os dados da pessoa, calcula o seu índice de massa corpórea e informa se ela está obesa ou não.
Programas servem essencialmente para manipular dados: ao executarmos um programa, fornecemo-lhes dados e esperamos que ele faça alguma coisa com eles. Os dados podem se apresentar em duas formas distintas: como constantes ou variáveis. No programa do exemplo 1. 1 , o número 30 é um dado constante, enquanto o peso e a altura da pessoa são dados variáveis, isto é, são dados cujos valores variam de uma execução para outra. Além da distinção entre as formas em que os dados podem se apresentar, existe também uma distinção entre os tipos de dados que o computador é capaz de manipular; como, por exemplo, números, letras, palavras, etc. A linguagem C oferece cinco tipos de dados básicos:
Tipo Espaço Escala char 1 byte − 128 a + 127 int 2 bytes − 32768 a + 32767 float 4 bytes 3.4e− 38 a 3.4e+ 38 double 8 bytes 1.7e− 308 a 1.7e+ 308 void nenhum nenhuma
Em C não existe muita distinção entre a representação gráfica de um carac- ter e o seu código ASCII. Como sabemos, o computador somente é capaz de manipular números. Então, quando atribuímos um caracter a uma variável, estamos na verdade armazenando o seu código ASCII (que na tabela padrão varia de 0 a 127 ). É por este motivo que a escala de valores do tipo char varia no intervalo de – 128 a + 127. Para representar um caracter constante, basta escrevê-lo entre apóstrofos como, por exemplo, ‘A’. As variáveis do tipo int podem armazenar números maiores que as variáveis do tipo char, mas também gastam mais espaço de memória. Valores fracio- nários podem ser armazenados em variáveis do tipo float ou double, confor- me a necessidade. Já o tipo void é um tipo especial, que tem aplicação mais avançada, e seu uso será visto mais adiante. A declaração de uma variável consiste em um tipo e um identificador. O tipo determina o espaço de memória que deverá ser alocado para ela e o identifi- cador permitirá que ela seja referenciada no restante do programa.
Exemplo 1.2. Declaração de variáveis. char tecla, opcao; int x, y, z; float comissao, desconto, salario;
1.4.1. TIPOS DE DADOS MODIFICADOS Além dos tipos básicos, C oferece também alguns tipos de dados modificados:
Tipo Espaço Escala unsigned char 1 byte 0 a 255 unsigned int 2 bytes 0 a 65535 long int 4 bytes −2 147 483 648 a +2 147 483 647
O bit mais à esquerda em uma variável do tipo char ou int, denominado bit de sinal, é normalmente utilizado pelo computador para distinguir entre va- lores positivos e negativos: se esse bit é zero, então o valor é positivo; caso contrário, ele é negativo. Usando o modificador unsigned, estamos informan- do ao compilador que somente valores sem sinal serão usados e que, portan- to, não é necessário ter um bit de sinal. Com isso, podemos usar esse bit para representar valores e, conseqüentemente, a escala de valores dobra. Há também o modificador signed, que indica que os valores devem ser sinaliza- dos; mas, como este é o caso normal, raramente ele é utilizado. Se a palavra unsigned (ou signed) é usada isoladamente, o compilador assume o tipo int.
Figura 1.2 − O bit de sinal numa variável do tipo char
O modificador long faz com que o espaço de memória reservado para uma variável do tipo int seja duplicado e, conseqüentemente, aumenta a capaci- dade de armazenamento da variável. Já o modificador short, em algumas máquinas, faz com que esse espaço caia para a metade.
Exemplo 1.3. Algumas variáveis de tipos modificados. unsigned char contador; unsigned int a, b, c; long int tam_arquivo;
Os principais caracteres de controle utilizados com a função printf( ) são:
Caracter de controle Efeito \a soa o alarme do microcomputador \b (^) o cursor retrocede uma coluna \f (^) alimenta página na impressora \n o cursor avança para uma nova linha \r (^) o cursor retrocede para a primeira coluna da linha \t (^) o cursor avança para próxima marca de tabulação \” exibe uma única aspa \’ (^) exibe um único apóstrofo \ (^) exibe uma única barra invertida
Desses caracteres, o mais usado é ‘\n’. Através dele podemos indicar quando uma nova linha deve ser utilizada ao se exibir alguma informação na tela.
Exemplo 1.5. Exibindo dados com a função printf().
#include <stdio.h> #define PI 3.
main() { double raio, perim; getch(); printf("\n Qual a medida do raio?"); scanf("%lf", &raio); perim = 2PIraio; printf("\n O perímetro da circunferência é %lf", perim); getch(); }
1.5.1. FORMATAÇÃO DE CAMPOS PARA EXIBIÇÃO
A função printf() permite que os campos de exibição sejam formatados. As formatações mais usadas são o preenchimento com zeros à esquerda, para inteiros, e a especificação do número de casas decimais, para reais.
Exemplo 1.6. Formatação de campos com printf().
int a = 678; float b = 12.3456; ... printf("\n|%5d|",a); printf("\n|%06d|",a); printf("\n|%7.3d|",b); printf("\n|%7.2d|",b); ...
A saída produzida pela execução desse trecho de programa é:
| 678| |000678| | 12.346| | 12.34|
Note que valores reais são arredondados apenas quando a primeira casa decimal desprezada é igual ou superior a 5.
C oferece operadores para as quatro operações aritméticas e também um operador para calcular o resto da divisão entre dois números inteiros.
Operador Resultado
Destes operadores, apenas dois merecem atenção especial. Os demais funcio- nam conforme as regras usuais estabelecidas na matemática básica.
Exercício 1.3. Dadas as duas notas de um aluno, informe a sua média final.
Exercício 1.4. Dados uma distância e o total de litros de combustível gasto por um automóvel para percorrê-la, informe o consumo médio.
Exercício 1.5. Dado um caracter, informe o seu código ASCII em octal, deci- mal e hexadecimal
Exercício 1.6. Dada um temperatura em graus Fahrenheit, informe o valor correspondente em graus Celsius. [Dica: C = (F – 32) ∗ (5 / 9)].
Exercício 1.7. Dadas as medidas dos catetos de um triângulo retângulo, informe a medida da hipotenusa. [Dica: para calcular a raiz quadrada use a função sqrt(), definida no arquivo math.h].
Operador lógico Resultado ! x verdade se e só se x for falso x && y verdade se e só se x e y forem verdade x || y verdade se e só se x ou y for verdade
Numa expressão contendo operadores aritméticos, relacionais e lógicos, a avaliação é efetuada na seguinte ordem:
¬ primeiro avaliam-se todos os operadores aritméticos; em seguida, avaliam-se os operadores relacionais; ® só então, avaliam-se os operadores lógicos.
Exercício 2.1. Qual a saída produzida pela instrução a seguir?
printf("%d %d %d %d", !3, !0, 3+'a'>'b'+2 && !'b', 1 || !2 && 3);
A estrutura condicional ou de decisão simples serve para escolher um entre dois comandos alternativos, conforme ilustrado na figura 1.3. Em C, a estru- tura condicional é codificada da seguinte forma:
if( condição ) comando 1 ; else comando 2 ;
e funciona, conforme ilustrado na figura 1.3, da seguinte maneira:
¬ avalia a condição, que deve ser uma expressão lógica; se a condição for verdadeira, executa apenas o comando 1 ; ® senão, executa apenas o comando 2.
Figura 1.3 − A estrutura de decisão simples
F condição
comando 1
V
...
comando 2
...
Exemplo 2.2. O uso de decisão simples.
#include <stdio.h>
main() { float a, b, m; printf(“\n Informe as duas notas obtidas: ”); scanf(“%f %f”, &a, &b); m = (a+b)/2; if( m >= 7.0 ) printf(“\n Aprovado”); else printf(“\n Reprovado”); }
O programa solicita as duas notas obtidas pelo aluno, calcula sua média e, em função desse valor, decide se o aluno está ou não aprovado.
Pode ser que um dos comandos alternativos, ou ambos, seja composto por mais de uma instrução. Por exemplo, se o programa anterior tivesse que exibir Aprovado em azul e Reprovado em vermelho, então cada alternativa seria composta por duas instruções: uma para selecionar a cor e a outra para exibir a situação do aluno. Nesse caso, teríamos que usar blocos, agrupando as instruções em cada alternativa dentro de um par de chaves.
Exemplo 2.3. O uso de blocos de instruções.
#include <stdio.h> #include <conio.h>
main() { float a, b, m; clrscr(); printf(“\n Informe as duas notas obtidas: ”); scanf(“%f %f”, &a, &b); m = (a+b)/2; if( m >= 7.0 ) { textcolor(BLUE); cprintf(“\n Aprovado”); } else { textcolor(RED); cprintf(“\n Reprovado”); } getch(); }
A função textcolor() seleciona a cor do texto e a função cprintf(), cuja sintaxe é idêntica à da printf( ), exibe o texto na cor selecionada. Essas funções, as- sim como as constantes BLUE e RED, estão declaradas no arquivo conio.h.
C oferece também um operador que proporciona uma forma mais compacta de se representar decisões simples. O operador condicional, cuja sintaxe é condição? expressão 1 : expressão 2 , funciona da seguinte maneira: ¬ avalia a condição; se ela for verdadeira, o resultado final é o valor da expressão 1 ; ® senão, o resultado final é o valor da expressão 2.
Exemplo 2.5. O uso do operador condicional. ... abs = n>0? n : -n; ... A instrução acima atribui à variável abs o valor absoluto da variável n. A expressão n> 0 é avaliada: se for verdadeira, abs recebe o próprio valor de n; caso contrário, abs recebe o valor de n com o sinal invertido.
Exemplo 2.6. O uso do operador condicional como argumento de função. #include <stdio.h> main() { int x, y; printf("\nInforme dois valores: "); scanf("%d %d", &x, &y); printf("\n Máximo = %d", x>y? x : y); } A instrução acima seleciona e exibe o máximo entre dois valores x e y. Note que não seria possível usar um if-else como argumento na função printf().
Exercício 2.5. Seja e uma variável contendo o número de erros detectados num certo processo. Codifique uma instrução capaz de exibir saídas como: 1 erro detectado. 5 erros detectados. Exercício 2.6. Codifique uma instrução para exibir valores lógicos como true e false. Para o valor 0 deve aparecer false e para qualquer outro, true.
Uma vantagem no uso do operador condicional é que, sendo um operador, podemos utilizá-lo em qualquer contexto em que uma expressão é permitida.
Como vimos, a estrutura condicional serve para selecionar e executar um entre dois comandos alternativos. É possível que, algumas vezes, um destes comandos alternativos (ou ambos) sejam também condicionais. Nesse caso, dizemos que o primeiro condicional é o principal e o outro está aninhado ou encadeado, conforme indicado a seguir:
if( condição ) /* principal / if ... / aninhado / else if ... / encadeado */
Para exemplificar o uso desses condicionais, vamos considerar o seguinte problema: “Dados três números verificar se eles podem representar as medidas dos lados de um triângulo e, se puderem, classificar o triângulo em equilátero, isósceles ou escaleno”.
Para codificar o programa, devemos lembrar das seguintes definições:
Exemplo 2.7. O uso de condicionais aninhados e encadeados.
#include <stdio.h> #include <conio.h>
main() { float a, b, c; clrscr(); printf(“\nInforme três números: “); scanf(“%f %f %f”, &a, &b, &c); if( a<b+c && b<a+c && c<a+b ) { printf(“\nÉ um triângulo: ”); if( a==b && b==c ) printf(“equilátero”); else if( a==b || a==c || b==c ) printf(“isósceles”); else printf(“escaleno”); } else printf(“\nNão é um triângulo”); getch(); }