Linguagem C
dados
char caracteres (-128 a 127) ‘a’, ‘b’, ‘\xDB’ 1 byte
int números inteiros 10, 3, 56, 0 32 bits
float números reais 32 bits
long aumentar tamanho
long int= 32 bits (plataforma de 16 bits)
long int = 64 bits (plataforma de 32 bits)
short diminui o tamanho
short int = 16 bits
unsigned suprime o sinal
char = -128 a 127
unsigned char = 0 a 255
double long float 1.80, 0.2 64 bits
variáveis
● declaração ( int idade; float peso; double peso;)
● valor (idade = 18; peso = 80; altura = 1.80;)
entrada e saída padrão
● printf() = print
○ printf(“Bom dia”);
● scanf() = input
○ & extrai o endereço da variável
○ scanf(“%d %f %lf”, &idade, &peso, &altura);
caracteres especiais
\n avanço de linha
\t tabulação
\b retrocesso
\f avanço de página
\a alarme
especificações de formato
%c exibe caracter ASCII
%d exibe número inteiro
%s exibe uma string
%f exibe um float
%lf exibe um double
%u exibe um unsigned
%o exibe um número octal
%x exibe um número em hexadecimal em minúsculo
%X exibe um número em hexadecimal em maiúsculo
especificadores de tamanho de campo
%2d
%5.2f
%.3lf
operadores
aritméticos
+ adição a+=1 a++ ou ++a
- subtração a-=1 a - - ou - - a
* multiplicação a*=1
/ divisão a/=1
% resto da divisão
em uma expressão a++ != ++a
Incremento pós-fixo: a++;
Incremento pré-fixo: ++a;
relacionais
== igual
> maior
< menor
>= maior ou igual
<= menor ou igual
!= diferente
lógicos
&& and
|| or
! not
decisão
if (condição)
(ação para verdadeira)
else
(ação para falsa)
laços de repetição
● while (condição)
○ (repetição com teste no início)
● for (inicialização; teste; incremento)
○ (repetição com contador)
● do {---} while (condição)
○ (repetição com teste no fim)
diretivas pré-processador
#define : define constantes simbólicas e macros
#define : realiza substituição de textos
#include : inclui arquivos de cabeçalho na compilação
ex:
#include <stdio.h> standard input output.header
#define soma(a,b) ((a)+(b))
#define prod(a,b) ((a)*(b))
int main()
{
int i = 2, j = 3;
printf("%d", 2*soma(i,j));
printf("%d", prod(i+j,j-i));
return 0;
}
função
● declaração: nome, tipo, lista de parâmetros
double fmax(int pi, double pd);
● definição: implementação
double fmax(int pi, double pd)
{
double ret;
ret = 43.67 * pd + 3 * pi;
return ret;
}
● chamada: uso dela em um programa
#include <stdio.h>
int main()
{
int codigo;
double medida, produto;
printf("\nEntre com o código e a medida:");
scanf("%d %lf", &codigo, &medida);
produto = fmax(codigo, medida);
printf("\nProduto: %lf", produto);
return 0;
}
variaveis
#include <stdio.h>
int glb = 10; /* variável global */
int main()
{
int i = 5, j = 6, res; /* variáveis locais*/
res = func1(i, j);
printf("%d %d %d %d", i, j, res, glb);
return 0;
}
int func1(int a, int b) /* parâmetros */
{
int c; /* variável local */
c = 3 * a + b;
a++;
b++;
glb++;
return c;
}
exercícios
O seguinte programa mostra todos os caracteres da tabela ASCII:
#include <stdio.h>
int main()
{
int c;
for(i=0; i<256; i++)
printf("%3d %02X %c", i, i, i);
return 0;
}
1.
a) ( F ) MAIN é uma palavra chave da Linguagem C.
MAIN em maiúsculo não é palavra chave
b) ( F ) Podemos guardar em um long int valores até 2 vezes
maior que num int, não mais do que isso.
Podemos guardar em um long int muito mais que o dobro do que
se guarda num int.
c) ( F ) ’\t’ representa uma tabulação, ‘\2t’ representa duas
tabulações.
Não existe o caracter ‘\2t’.
d) ( V ) x+=2*t+y; é equivalente a x=x+2*t+y;
e) ( V ) O formato %c imprime caracteres ASCII.
f) ( F ) O formato %C imprime caracteres ASCII em maiúsculo.
Não existe o formato %C.
g) ( F ) O formato %b imprime números em binário.
Não existe o formato %b.
h) ( V ) O formato %x imprime números em hexadecimal.
i) ( V ) O formato %X imprime números em hexadecimal, dígitos
alfabéticos em maiúsculo.
j) ( F ) Seja a declaração: int i=0x0F0F; assim, a expressão
(!i==~i) é verdadeira.
A negação lógica não é igual ao complemento de um.
k) ( V ) A diretiva #define prod(a,b) a*b garante a
precedência do operador * sobre o operador +.
l) ( F ) A chamada de uma função sem o protótipo presente
causa erro de compilação em qualquer compilador.
Não causa erro de compilação nos compiladores antigos.
II - Qual a saída dos programas a seguir?
a) #include <stdio.h>
void main(void)
int al=25;
if(50>=al>=10)
printf(“\nEstá dentro do intervalo”);
A expressão 50 >= al >= 10 resulta falso, pois calcula
primeiro 50 >= al que é verdadeiro, resultando 1. Depois testa
1 >= 10, resultando falso. O certo é: al>=10 && al<=50.
b)#include <stdio.h>
#define soma(a,b) a+b
#define prod(a,b) a*b
void main(void)
int i=3, j=5;
printf(“%d”, 2*soma(i,j));
printf(“%d”, prod(i+j,j-i));
Não produz os valores esperados, pois as macros foram
definidas sem os parentheses.
O certo é:
#define soma(a,b) ((a)+(b))
#define prod(a,b) ((a)*(b))
c)#include <stdio.h>
void main(void)
double x = sqrt(2.0); /* raiz de 2 */printf(“%lf”, x);
O protótipo da função sqrt() não está presente. Falta por no
inicio do programa:
#include <math.h>
d)#include <stdio.h>
void main(void)
unsigned char ch;
for(ch=0; ch<256; ch++)
printf(“\n%3d\t%02X\t%c”, ch,ch,ch);
Se declararmos ch como unsigned char, vai variar de 0 a 255,
não podendo assumir o valor 256, para parar o laço de
repetição. O certo é declarar ch como int.
e) #include <stdio.h>
void main(void)
unsigned int mascara = 0x8000;
int valor;
printf("\nDigite um valor:");
scanf("%d", &valor);
while(mascara) {
printf("%d", (valor & mascara) ? 1 : 0);
mascara >>= 1;
Escreve valor em binário de 16 bits.
1) Lê caracteres do teclado enquanto não se digitar ESC(ASCII
27). Para cada caracter lido, classificá-lo como:
- Caracter de controle: 0 a 31 e 127
- Caracter alfabético maiúsculo: 65 a 90
- Caracter alfabético minúsculo: 97 a 122
- Caracter numérico: 48 a 57
- Caracter de pontuação: imprimível, não alfabético e não
numérico.
Obs.: Caracter imprimível: 32 a 126. Caracter alfabético:
maiúsculos + minúsculos
#include <stdio.h>
#include <conio.h>
#define controle(c) ((c)>=0 && (c)<=31 || (c)==127)
#define maiusculo(c) ((c)>=65 && (c)<=90)
#define minusculo(c) ((c)>=97 && (c)<=122)
#define numérico(c) ((c)>=48 && (c)<=57)
#define letra(c) (maiusculo(c) || minusculo(c))
#define imprimivel(c) ((c)>=32 && (c)<=126)
#define pontuacao(c) (imprimivel(c) && !letra(c) &&
!numerico(c))
int main()
int ch;
printf(“\nDigite um caracter”);
ch = getch();
while(ch != 27) {
if(controle(ch))
printf(“\nCaracter de controle”);
else if(maiusculo(ch))
printf(“\nCaracter alfabético maiúsculo”);
else if(minusculo(ch))
printf((“Caracter alfabetico minuscule”);
else if(numerico(ch))
printf(“\nCaracter numerico”);
else if(pontuacao(ch))
printf(“\nCaracter de pontuação”);
printf(“\nDigite um character”);
ch = getch();
return 0;
2) Lê do teclado 5 números inteiros, e fornece:
- A média aritmética
- O produto dos 3 primeiros.
- Quantidade de dígitos (casas) do primeiro valor, através de
sucessivas divisões por 10.
#include <stdio.h>
int main()
int i1, i2, i3, i4, i5, cont=0, media, produto;
int dig;
printf(“\nDigite 5 numeros”);
scanf(“%d %d %d %d %d”, &i1, &i2, &i3, &i4, &i5);
media = (i1+i2+i3+i4+i5)/5;
printf(“\nA media é: “, media);
produto = i1*i2*i3;
printf(“\nProduto dos 3 primeiros: %d”, produto);
while(i1 != 0){
dig = i1 % 10;
cont++;
i1 /= 10;
printf(“\nO numero %d tem %d digitos”, i1, cont);
return 0;
3) Lê 3 números double em 3 variáveis: a, b e c. Em seguida,
faz troca de valores entre as variáveis de modo que: a <= b &&
b <= c.
Este exercício vai ser desconsiderado.
IV – Escrever macros:
1) bissexto(ano);
Esta macro deverá retornar 1 se ano for um ano bissexto, i.e,
divisível por 4 e não por 100, ou divisível por 400; e 0 se
não for.
#define bissexto(a) (((a)%4)==0 && ((a)%100)!=0 ||
((a)%400)==0)
2) para_maiusculo(ch)
Se ch é letra minúscula, retornar a letra maiúscula
correspondente, senão, retornar o próprio ch.
#define para_maiusculo(c) ((minúsculo(c))? (c)-32 : (c)))
V - Explique com suas próprias palavras:
1) O que é e qual a principal importância de um protótipo de
função
Informar ao compilador o nome da função, tipo e lista de
parâmetros.
2) Qual a principal diferença entre um função e uma macro
parametrizada?
Enquanto que uma função é um segmento de programa à parte, a
macro é estendida em linha no programa.
3) O que caracteriza um deslocamento de bits à direita do tipo
aritmético?
Deslocamento à direita que mantém o sinal do número.
4) Por que quando se escreve uma macro parametrizada, o
parâmetro e a expressão completa devem ser escritos entre
parênteses?
A macro é simplesmente uma substituição de textos. Não faz
avaliação da expressão.