Você está na página 1de 48

Programação em C

____________________________________________________________

Centro de Formação Profissional Anielo Greco

PROGRAMAÇÃO EM
C

DIVINÓPOLIS

2007
____________________________________________________________ 1
Curso Técnico de Eletroeletrônica
Programação em C
____________________________________________________________

Presidente da FIEMG
Robson Braga de Andrade

Gestor do SENAI
Petrônio Machado Zica

Diretor Regional do SENAI e


Superintendente de Conhecimento e Tecnologia
Alexandre Magno Leão dos Santos

Gerente de Educação e Tecnologia


Edmar Fernando de Alcântara

Elaboração
Marlon Henrique Teixeira

Unidade Operacional

CFP-AnG

____________________________________________________________ 2
Curso Técnico de Eletroeletrônica
Programação em C
____________________________________________________________

Sumário

1 - CONCEITOS BÁSICOS .................................................................................... 6

1.1 - O QUE SÃO MICROCONTROLADORES E MICROPROCESSADORES ......................... 6


1.2 - INSTRUÇÕES E LINGUAGEM DE PROGRAMAÇÃO ................................................. 6
1.3 - COMPILADORES VERSUS INTERPRETADORES .................................................... 7
1.4 - BIBLIOTECA ................................................................................................... 7
1.5 - CÓDIGO-FONTE .............................................................................................. 7
1.6 - CÓDIGO-OBJETO ............................................................................................ 7
1.7 - LINKEDITOR ................................................................................................... 7
1.8 - TEMPO DE COMPILAÇÃO.................................................................................. 7
1.9 - TEMPO DE EXECUÇÃO .................................................................................... 7

2 - PALAVRAS RESERVADAS DA LINGUAGEM C ............................................. 8

3 - OS TIPOS DO C ................................................................................................ 9

4 - IDENTIFICADORES ........................................................................................ 11

5 - FUNÇÕES ....................................................................................................... 12

6 - VARIÁVEIS ..................................................................................................... 13

6.1 - DECLARAÇÃO DE VARIÁVEIS .......................................................................... 13


6.2 - ONDE AS VARIÁVEIS SÃO DECLARADAS ........................................................... 13
6.3 - INICIALIZAÇÃO DE VARIÁVEIS ......................................................................... 14

7 - OPERADORES ............................................................................................... 16

7.1 - OPERADORES DE ATRIBUIÇÃO ....................................................................... 16


7.2 - CONVERSÃO DE TIPOS EM ATRIBUIÇÕES ........................................................ 16
7.3 - ATRIBUIÇÕES MÚLTIPLAS .............................................................................. 17
7.4 - OPERADORES ARITMÉTICOS ......................................................................... 17
7.5 - INCREMENTO E DECREMENTO ....................................................................... 18
7.6 - OPERADORES RELACIONAIS E LÓGICOS ......................................................... 19
7.7 - OPERADORES BIT A BIT ................................................................................ 19
7.8 - OPERADOR VÍRGULA .................................................................................... 20
7.9 - PARÊNTESES E COLCHETES COMO OPERADORES ........................................... 20

____________________________________________________________ 3
Curso Técnico de Eletroeletrônica
Programação em C
____________________________________________________________

8 - TABELA DE PRECEDÊNCIAS DO C ............................................................. 21

9 - EXPRESSÕES ................................................................................................ 22

9.1 - CONVERSÃO DE TIPOS EM EXPRESSÕES ........................................................ 22


9.2 - ESPAÇAMENTO E PARÊNTESES ..................................................................... 22
9.3 - EXPRESSÕES QUE PODEM SER ABREVIADAS ................................................... 22

10 - CONSTANTES .............................................................................................. 24

10.1 - CONSTANTES HEXADECIMAIS E OCTAIS ....................................................... 24


10.2 - CONSTANTES STRING ................................................................................. 24
10.3 - CONSTANTES CARACTERE DE BARRA INVERTIDA .......................................... 24

11 - COMANDOS DE CONTROLE DO PROGRAMA .......................................... 26

11.1 - COMANDOS DE SELEÇÃO ............................................................................ 26


11.1.1 - if ........................................................................................................ 26
11.1.2 - switch................................................................................................ 27
11.2 - COMANDOS DE ITERAÇÃO ........................................................................... 30
11.2.1 - O laço for .......................................................................................... 30
11.2.2 - O laço while ...................................................................................... 31
11.2.3 - O laço do-while ................................................................................. 31
11.3 - COMANDOS DE SELEÇÃO ............................................................................ 32
11.3.1 - O comando return ............................................................................. 32
11.3.2 - O comando goto ............................................................................... 32
11.3.3 - O comando break ............................................................................. 32
11.3.4 - A função exit() .................................................................................. 32
11.3.5 - O comando continue......................................................................... 33
12 - MATRIZES E STRINGS .............................................................................. 34

13 - LENDO E ESCREVENDO, CARACTERES E STRINGS .............................. 35

13.1 - getchar( ) ............................................................................................. 35


13.2 - putchar( ) ............................................................................................. 35
13.3 - getch( ) ................................................................................................ 35
13.4 - getche( ) .............................................................................................. 35
13.5 - gets( ) .................................................................................................. 36
13.6 - puts( ) .................................................................................................. 36
13.7 - printf( ) ................................................................................................. 36
13.8 - scanf( )................................................................................................. 36
14 - DIRETIVAS DE C .......................................................................................... 38

14.1 - #define ................................................................................................. 38


14.2 - #include ............................................................................................... 38
15 - FUNÇÕES MATEMÁTICAS .......................................................................... 39
____________________________________________________________ 4
Curso Técnico de Eletroeletrônica
Programação em C
____________________________________________________________

16 - EXERCÍCIOS................................................................................................. 40

____________________________________________________________ 5
Curso Técnico de Eletroeletrônica
Programação em C
____________________________________________________________

1 - CONCEITOS BÁSICOS
1.1 - O que são microcontroladores e
microprocessadores
O que são microcontroladores e microprocessadores
Ambos são computadores digitais que realizam operações em seqüência
sem intervenção humana. As operações são programadas por um programador,
que segue uma lista de instruções que compõe a linguagem de programação
(Assembly, C, Java).
Os microcontroladores ou µC são conhecidos como computadores
embutidos em circuito integrado.
Em um microcontrolador podemos encontrar memória, CPU, entradas e
saídas.
Alguns ainda possuem periféricos como conversores A/D e D/A,
comparadores. Os microcontroladores chegam a custar muitas vezes mais barato
do que um transistor. Existe uma quantidade grande de µC no mercado, veja
alguns nomes a baixo:

• Família 8051 – fabricante Intel


• PIC – fabricante Microchip
• AVR – fabricante Atmel
• BASIC Stamp – fabricante Parallax
• BASIC Step – fabricante Tato Equipamentos

Os µC estão presentes em agendas eletrônicas, telefones celulares,


alarmes, CLP’s, veículos, caixas eletrônicos, impressoras...

O microprocessador é um circuito integrado que possui uma poderosa


CPU (Unidade Central de Processamento). É o microprocessador que processa
as informações de uma memória ou de um periférico. Não é possível obter um
computador somente com um microprocessador. Um exemplo clássico é o
computador pessoal que agrega no interior do gabinete diversos componentes,
dentre eles o microprocessador. Os microprocessadores são requisitados sempre
que houver a necessidade de se processar inúmeros cálculos em um curtíssimo
espaço de tempo. Exemplo de processadores: Z80, 8080, 80386, 80486...
Instruções e linguagem de programação
1.2 - Instruções e linguagem de programação
Programação é a seqüência de operações que o sistema deve executar
para que a tarefa determinada seja realizada. Cada operação corresponde a uma
instrução que pode ser interpretada e executada pelo computador. As instruções
são constituídas por uma série de bits. Esses bits são decodificados e acionam as
variáveis de controle internas ao sistema para que a operação correspondente à
instrução seja realizada.
Cada microcontrolador adota uma linguagem de programação. As
linguagens mais difundidas para microcontroladores são: Assembly e C. Todo
programador deve conhecer o Set de Instruções de seu microcontrolador para
poder realizar a programação do chip.
____________________________________________________________ 6
Curso Técnico de Eletroeletrônica
Programação em C
____________________________________________________________

O código fonte do programa, ou seja, a escrita do programa precisa passar


por um compilador, o compilador irá traduzir cada linha digitada em linguagem de
máquina, para que o microcontrolador possa ser gravado. A gravação requer
muitas vezes um equipamento de gravação. No mercado existem gravadores
dedicados e universais que permitem a gravação de inúmeros chips’s.

1.3 - Compiladores versus Interpretadores


Os termos compiladores e interpretadores referem-se à maneira como um
programa é executado.
Um interpretador lê o código-fonte do seu programa uma linha por vez,
executando a instrução específica contida nessa linha.
Um compilador lê o programa inteiro e converte-o em um código-objeto,
que é uma tradução do código-fonte do programa em uma forma que o
computador possa executar diretamente.

1.4 - Biblioteca
É o arquivo contendo as funções padrão que seu programa pode usar.
Essas funções incluem todas as operações de I/O como também outras rotinas
úteis.

1.5 - Código-fonte
O texto de um programa que um usuário pode ler, normalmente
interpretado como o programa. O código-fonte é a entrada para o compilador C.

1.6 - Código-objeto
Tradução do código-fonte de um programa em código de máquina que o
computador pode ler e executar. O código objeto é a entrada para o linkeditor.

1.7 - Linkeditor
Um programa que une funções compiladas separadamente em um
programa. Ele combina as funções padrões da biblioteca C com o código que
você escreveu. A saída do linkeditor é um programa executável.

1.8 - Tempo de compilação


Os eventos que ocorrem enquanto seu programa esta sendo compilado.
Uma ocorrência comum em tempo de compilação é o erro de sintaxe.

1.9 - Tempo de Execução


Os eventos que ocorrem enquanto seu programa é executado.

____________________________________________________________ 7
Curso Técnico de Eletroeletrônica
Programação em C
____________________________________________________________

2 - PALAVRAS RESERVADAS DA LINGUAGEM C

Todas as linguagens de programação têm palavras reservadas. As


palavras reservadas não podem ser usadas a não ser nos seus propósitos
originais, isto é, não podemos declarar funções ou variáveis com os mesmos
nomes. Como a linguagem C é "case sensitive" (diferenciação entre letras
maiúsculas e minúsculas) podemos declarar uma variável For, apesar de haver
uma palavra reservada for, mas isto não é uma coisa recomendável de se fazer,
pois pode gerar confusão.
Apresentamos a seguir as palavras reservadas do C. Veremos o
significado destas palavras chave à medida que o curso for progredindo:

auto double int struct


break else long switch
case enum register typedef
char extern return union
const float short unsigned
continue for signed void
default goto sizeof volatile
do if static while

Todas as palavras chaves ou reservadas de C são minúsculas.

____________________________________________________________ 8
Curso Técnico de Eletroeletrônica
Programação em C
____________________________________________________________

3 - OS TIPOS DO C

A linguagem C tem 5 tipos básicos de variáveis: char, int, float, void,


double.
- char é o tipo para caracteres.
- int ó tipo para inteiros.
- float é o tipo para ponto flutuante. (fracionário)
- double é o ponto flutuante duplo e pode ser visto como um ponto
flutuante com muito mais precisão.
- void é o tipo vazio, ou um "tipo sem tipo". A aplicação deste "tipo"
será vista posteriormente.
Para cada um dos tipos de variáveis existem os modificadores de tipo. Os
modificadores de tipo da linguagem C são quatro: signed, unsigned, long e
short. Ao float não se pode aplicar nenhum e ao double pode-se aplicar apenas
o long. Os quatro modificadores podem ser aplicados a inteiros. A intenção é que
short e long devam prover tamanhos diferentes de inteiros onde isto for prático.
Inteiros menores (short) ou maiores (long). int normalmente terá o tamanho
natural para uma determinada máquina. Assim, numa máquina de 16 bits, int
provavelmente terá 16 bits. Numa máquina de 32, int deverá ter 32 bits. Na
verdade, cada compilador é livre para escolher tamanhos adequados para o seu
próprio hardware, com a única restrição de que shorts ints e ints devem ocupar
pelo menos 16 bits, longs ints pelo menos 32 bits, e short int não pode ser
maior que int, que não pode ser maior que long int. O modificador unsigned
serve para especificar variáveis sem sinal. Um unsigned int será um inteiro que
assumirá apenas valores positivos. A seguir estão listados os tipos de dados
permitidos e seu valores máximos e mínimos em um compilador típico para um
hardware de 16 bits. Também nesta tabela está especificado o formato que deve
ser utilizado para ler os tipos de dados com a função scanf():

Formato Intervalo
Tipo Num de bits para leitura
com scanf Inicio Fim

char 8 %c -128 127

unsigned char 8 %c 0 255

signed char 8 %c -128 127

int 16 %i -32.768 32.767

unsigned int 16 %u 0 65.535

signed int 16 %i -32.768 32.767

____________________________________________________________ 9
Curso Técnico de Eletroeletrônica
Programação em C
____________________________________________________________

short int 16 %hi -32.768 32.767

unsigned short int 16 %hu 0 65.535

signed short int 16 %hi -32.768 32.767

long int 32 %li -2.147.483.648 2.147.483.647

signed long int 32 %li -2.147.483.648 2.147.483.647

unsigned long int 32 %lu 0 4.294.967.295

float 32 %f 3,4E-38 3.4E+38

double 64 %lf 1,7E-308 1,7E+308

long double 80 %Lf 3,4E-4932 3,4E+4932

O tipo long double é o tipo de ponto flutuante com maior precisão. É


importante observar que os intervalos de ponto flutuante, na tabela acima, estão
indicados em faixa de expoente, mas os números podem assumir valores tanto
positivos quanto negativos.

____________________________________________________________ 10
Curso Técnico de Eletroeletrônica
Programação em C
____________________________________________________________

4 - 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. Exemplos:

Var =======Î válido _teste_2 ======Î válido


Var1 =======Î válido return =======Î inválido
1abc =======Î inválido _123_abc =====Î válido
vaiável =======Î inválido erro\2 =======Î inválido

O primeiro caractere deve ser uma letra ou um sublinhado e os caracteres


subsequentes devem ser letras, sublinhados ou números.

____________________________________________________________ 11
Curso Técnico de Eletroeletrônica
Programação em C
____________________________________________________________

5 - FUNÇÕES
Todo programa em C consiste em uma ou mais funções. A única função
que necessariamente precisa estar presente é denominada main(), que é a
primeira função a ser chamada quando a execução do programa começa.
Funções são todos os blocos de construção de C e o local onde toda a
atividade do programa ocorre. Elas são uma das características mais importantes
em C. A forma geral de uma função é:

tipo nome ( lista de parâmetros)


{
corpo da função
}

O tipo define o tipo de valor que o comando return da função devolve. A


lista de parâmetros é uma lista de nomes de variáveis separados por vírgulas e
seus tipos associados que recebem os valores dos argumentos quando a função
é chamada. Uma função pode não ter parâmetros, entretanto os parênteses ainda
são necessários.

____________________________________________________________ 12
Curso Técnico de Eletroeletrônica
Programação em C
____________________________________________________________

6 - VARIÁVEIS
Uma variável é uma posição nomeada de memória, que é usada para
guardar um valor que pode ser modificado pelo programa.

6.1 - Declaração de variáveis


As variáveis na linguagem C devem ser declaradas antes de serem
usadas. A forma geral da declaração de variáveis é:

tipo_da_variável lista_de_variáveis;

As variáveis da lista de variáveis terão todas o mesmo tipo e deverão ser


separadas por vírgula. Como o tipo default do C é o int, quando vamos declarar
variáveis int com algum dos modificadores de tipo, basta colocar o nome do
modificador de tipo. Assim um long basta para declarar um long int.
Por exemplo, as declarações:

char ch, letra;


long count;
float pi;

declaram duas variáveis do tipo char (ch e letra), uma variavel long int (count) e
um float pi.

6.2 - Onde as variáveis são declaradas


Há três lugares nos quais podemos declarar variáveis. O primeiro é fora de
todas as funções do programa. Estas variáveis são chamadas variáveis globais
e podem ser usadas a partir de qualquer lugar no programa. Pode-se dizer que,
como elas estão fora de todas as funções, todas as funções as vêem. O segundo
lugar no qual se pode declarar variáveis é no início de um bloco de código. Estas
variáveis são chamadas locais e só têm validade dentro do bloco no qual são
declaradas, isto é, só a função à qual ela pertence sabe da existência desta
variável, dentro do bloco no qual foram declaradas. O terceiro lugar onde se pode
declarar variáveis é na lista de parâmetros de uma função. Mais uma vez,
apesar de estas variáveis receberem valores externos, estas variáveis são
conhecidas apenas pela função onde são declaradas.

____________________________________________________________ 13
Curso Técnico de Eletroeletrônica
Programação em C
____________________________________________________________

Veja o programa abaixo:

#include <stdio.h>
int contador;
int func1(int j)
{
/* aqui viria o código da funcao
...............
*/
}
int main()
{
char condicao;
int i;
for (i=0; i<100; i=i+1)
{
/* Bloco do for */
float f2;
/* etc ...
...
*/
func1(i);
}
/* etc ... */
return(0);
}

A variável contador é uma variável global, e é acessível de qualquer parte


do programa. As variáveis condição e i, só existem dentro da função principal
main(), isto é, são variáveis locais de main. A variável float f2 é um exemplo de
uma variável de bloco, isto é, ela somente é conhecida dentro do bloco do for,
pertencente à função main. A variável inteira j é um exemplo de declaração na
lista de parâmetros de uma função (a função func1).
As regras que regem onde uma variável é válida chamam-se regras de
escopo da variável. Há mais dois detalhes que devem ser ressaltados. Duas
variáveis globais não podem ter o mesmo nome. O mesmo vale para duas
variáveis locais de uma mesma função. Já duas variáveis locais, de funções
diferentes, podem ter o mesmo nome sem perigo algum de conflito.

6.3 - Inicialização de variáveis


Podemos inicializar variáveis no momento de sua declaração. Para fazer
isto podemos usar a forma geral:

tipo_da_variável nome_da_variável = constante;

Isto é importante, pois quando o C cria uma variável ele não a inicializa.
Isto significa que até que um primeiro valor seja atribuído à nova variável ela tem
um valor indefinido e que não pode ser utilizado para nada. Nunca presuma que
____________________________________________________________ 14
Curso Técnico de Eletroeletrônica
Programação em C
____________________________________________________________

uma variável declarada vale zero ou qualquer outro valor. Exemplos de


inicialização são dados abaixo:

char ch='D';
int count=0;
float pi=3.141;

Ressalte-se novamente que, em linguagem C, uma variável tem que ser


declarada no início de um bloco de código. Assim, o programa a seguir não é
válido em C (embora seja válido em C++).

int main()
{
int i;
int j;
j = 10;
int k = 20; /* Esta declaracao de variável não é válida, pois não está sendo
feita no início do bloco */
return(0);
}

____________________________________________________________ 15
Curso Técnico de Eletroeletrônica
Programação em C
____________________________________________________________

7 - OPERADORES
C é muito rica em operadores internos, definidos em quatro classes:
aritméticos, relacionais, lógicos e bit a bit. Além disso em operadores especiais
para tarefas particulares.

7.1 - Operadores de Atribuição


Em C você pode usar o operador de atribuição dentro de qualquer
expressão. A forma geral do operador de atribuição é

Nome_da_variável = expressão;

Onde a expressão pode ser tão complexa quanto você necessite.


O sinal de igual é o usado para indicar atribuição. O destino, ou a parte da
esquerda, da atribuição deve ser uma variável, não uma função ou ocnstante.

7.2 - Conversão de Tipos em Atribuições


Conversão de tipos refere-se à situação em que variáveis de um tipo são
misturadas com variáveis de outro tipo. Em um comando de atribuição, a regra de
conversão é simples: o valor do lado direito (o lado da expressão) de uma
atribuição é convertido no tipo do lado esquerdo (a variável destino), exemplo:

int x;
char ch;
float f;

void func (void)


{
ch = x; /* linha 1 */
x = f; /* linha 2 */
f = ch; /* linha 3 */
f = x; /* linha 4 */
}

Na linha 1, os bits mais significativos da variável inteira x são ignorados,


deixando ch com os 8 bits menos significativos. Se x está entre 256 e 0, então ch
e x tem o mesmo valor. De outra forma ch reflete apenas os 8 bits menos
significativos de x.
Na linha 2, x recebe a parte inteira de f.
Na linha 3, f converte o valor inteiro de 8 bits armazenado em ch no mesmo
valor em formato de ponto flutuante, o que acontece também na linha 4.

____________________________________________________________ 16
Curso Técnico de Eletroeletrônica
Programação em C
____________________________________________________________

7.3 - Atribuições Múltiplas


O C permite que você atribua o mesmo valor a muitas variáveis usando
atribuições múltiplas em um único comando. Exemplo:

X = y = z = 0;

7.4 - Operadores Aritméticos

Os operadores aritméticos são usados para desenvolver operações


matemáticas. A seguir apresentamos a lista dos operadores aritméticos do C:

Operador Ação

+ Soma (inteira e ponto flutuante)

- Subtração ou Troca de sinal (inteira e ponto flutuante)

* Multiplicação (inteira e ponto flutuante)

/ Divisão (inteira e ponto flutuante)

% Resto de divisão (de inteiros)

++ Incremento (inteiro e ponto flutuante)

-- Decremento (inteiro e ponto flutuante)

O operador / (divisão) quando aplicado a variáveis inteiras, nos fornece o


resultado da divisão inteira; quando aplicado a variáveis em ponto flutuante nos
fornece o resultado da divisão "real". O operador % fornece o resto da divisão de
dois inteiros.

Assim seja o seguinte trecho de código:

____________________________________________________________ 17
Curso Técnico de Eletroeletrônica
Programação em C
____________________________________________________________

int a = 17, b = 3;
int x, y;
float z = 17. , z1, z2;
x = a / b;
y = a % b;
z1 = z / b;
z2 = a/b;

ao final da execução destas linhas, os valores calculados seriam x = 5, y = 2, z1


= 5.666666 e z2 = 5.0 . Note que, na linha correspondente a z2, primeiramente é
feita uma divisão inteira (pois os dois operandos são inteiros). Somente após
efetuada a divisão é que o resultado é atribuído a uma variável float.

7.5 - Incremento e Decremento


O que eles fazem é incrementar ou decrementar, a variável sobre a qual
estão aplicados, de 1. Então:

x ++; x --;
são equivalentes a
x=x+1; x=x-1;

Estes operadores podem ser pré-fixados ou pós- fixados. A diferença é que


quando são pré-fixados eles incrementam e retornam o valor da variável já
incrementada. Quando são pós-fixados eles retornam o valor da variável sem o
incremento e depois incrementam a variável. Então, em

x=23; y=x++;

teremos, no final, y=23 e x=24. Em

x=23; y=++x;

teremos, no final, y=24 e x=24.


Uma curiosidade: a linguagem de programação C++ tem este nome pois
ela seria um "incremento" da linguagem C padrão. A linguagem C++ é igual à
linguagem C só que com extensões que permitem a programação orientada a
objeto, o que é um recurso extra.

O operador de atribuição do C é o =. O que ele faz é pegar o valor à direita


e atribuir à variável da esquerda. Além disto ele retorna o valor que ele atribuiu.
Isto faz com que as seguintes expressões sejam válidas:

x=y=z=1.5; /* Expressao 1 */
if (k=w) ... /* Expressão 2 */

A expressão 1 é válida, pois quando fazemos z=1.5 ela retorna 1.5, que é
passado adiante, fazendo y = 1.5 e posteriormente x = 1.5. A expressão 2 será
verdadeira se w for diferente de zero, pois este será o valor retornado por k=w.
Pense bem antes de usar a expressão dois, pois ela pode gerar erros de
____________________________________________________________ 18
Curso Técnico de Eletroeletrônica
Programação em C
____________________________________________________________

interpretação. Você não está comparando k e w. Você está atribuindo o valor de


w a k e usando este valor para tomar a decisão.

7.6 - Operadores Relacionais e Lógicos

7.7 - Operadores Bit a Bit


Refere-se a testar, atribuir ou deslocar os bits efetivos em um byte ou em
uma palavra, que correspondem aos tipos char e int. Operações bit não podem
ser usadas em float, doublé, void ou outros tipos mais complexos.

Os operadores de deslocamento, << e >>, movem todos os bits de uma


variável para direita ou para esquerda. A forma geral do comando é

variável << número de posições de bits


variável >> número de posições de bits

Conforme os bits são deslocadas para uma extremidade, zeros são


colocados na outra. Os bits deslocados são perdidos e zeros são colocados.
Também podem multiplicar e dividir inteiros rapidamente. Um
deslocamento a direita efetivamente multiplica o número por 2 e a esquerda
divide-o por 2. Exemplo:

____________________________________________________________ 19
Curso Técnico de Eletroeletrônica
Programação em C
____________________________________________________________

Existe ainda o operador de complemento a 1, ~, que inverte o estado de


cada bit da variável especificada. Ou seja, todos os 1s são colocados em 0 e
todos os 0s são colocados em 1.

7.8 - Operador Vírgula


É usado para encadear diversas expressões. O lado esquerdo de um
operador vírgula é sempre avaliado como void. Isso significa que a expressão do
lado direito torna-se o valor de toda a expressão separada por vírgula. Exemplo:

x = (y = 3, y + 1);

primeiro atribui o valor 3 a y, em seguida, atribui o valor 4 a x.

7.9 - Parênteses e Colchetes como operadores


Em C, parênteses são operadores que aumentam a precedência das
operações dentro deles.
Colchetes realizam indexação de matrizes, que será discutido mais
adiante.

____________________________________________________________ 20
Curso Técnico de Eletroeletrônica
Programação em C
____________________________________________________________

8 - TABELA DE PRECEDÊNCIAS DO C
Esta é a tabela de precedência dos operadores em C. Alguns (poucos)
operadores ainda não foram estudados, e serão apresentados em aulas
posteriores.

Maior () []
! ~ ++ - - - * &
* / %
+ -
<< >>
< <= > >=
== !=
&
^
|
&&
!!
?
= += -= *= /=
Menor ,

____________________________________________________________ 21
Curso Técnico de Eletroeletrônica
Programação em C
____________________________________________________________

9 - EXPRESSÕES
Operadores, constantes e variáveis são os elementos que constituem a
expressão. Uma expressão em C é qualquer combinação válida desses
elementos.

9.1 - Conversão de Tipos em Expressões


Quando constantes e variáveis de tipos diferentes são misturadas em uma
expressão, elas são convertidas a um mesmo tipo. O compilador C converte todos
os operandos no tipo do maior operando, o que é denominado promoção de tipo.
Isso é feito operação por operação, como descritos nas seguintes regras:

9.2 - Espaçamento e Parênteses


Você pode acrescentar tabulações e espaços a expressões em C para
torna-las mais legíveis. Por exemplo, as duas próximas expressões são a mesma:

x=10/y ~(127/x); x = 10 / y ~ ( 127 / x) ;

Parênteses redundantes ou adicionais não causam erros ou diminuem a


velocidade de execução da expressão. Você deve usar parênteses para
esclarecer a ordem de avaliação. Por exemplo, qual das duas expressões é mais
fácil de ler?

x=y/2-34*temp&127; x = (y/3) – ((34*temp) & 127);

9.3 - Expressões que podem ser abreviadas


O C admite as seguintes equivalências, que podem ser usadas para
simplificar expressões ou para facilitar o entendimento de um programa:

____________________________________________________________ 22
Curso Técnico de Eletroeletrônica
Programação em C
____________________________________________________________

Expressão Original Expressão Equivalente

x=x+k; x+=k;

x=x-k; x-=k;

x=x*k; x*=k;

x=x/k; x/=k;

x=x>>k; x>>=k;

x=x<<k; x<<=k;

x=x&k; x&=k;

____________________________________________________________ 23
Curso Técnico de Eletroeletrônica
Programação em C
____________________________________________________________

10 - CONSTANTES
Em C, constantes são valores fixos que o programa não pode alterar e
podem ser de qualquer um dos cinco tipos de dados básicos.
Constantes caractere são envolvidas por aspas simples (‘). Por exemplo, ‘a’
e ‘%’ são constantes tipos caracteres.
Constantes inteiras são especificadas como números sem componentes
fracionários. Por exemplo, 10 e –100 são constantes inteiras. Constantes em
ponto flutuante requerem o ponto decimal seguido pela parte fracionária do
número. Por exemplo, 11.123 é uma constante em ponto flutuante. C também
permite que você use notação científica para números ponto flutuante.
Na maioria dos programas que você escreverá, os padrões do compilador
são adequados. Porém, você pode especificar precisamente o tipo da constante
númeria que você deseja por meio da utilização de um sufixo.

Tipo de dado Exemplos de constantes

int 1 123 21000 -234


long int 35000L -34L
short int 10 -10 90
unsigned int 10000U 987U 40000
float 123.23F 4.34e-3F
double 123.23 12312333 -0.9876324
long double 1001.2L

10.1 - Constantes Hexadecimais e Octais


Uma constante hexadecimal deve consistir em um 0x seguido por uma
constante na forma hexadecimal. Uma constante octal começa com 0. exemplos:

int hex = 0x80; /* 128 em decimal */


int oct = 012; /* 10 em decimal */

10.2 - Constantes String


Uma string é um conjunto de caracteres colocado entre aspas duplas.
Exemplo, “isso é um teste” é uma string.
Você não deve confundir string com caractere. Uma constante de um único
caractere é colocada entre aspas simples, como em ‘a’. Contudo, “a” é uma string
contendo apenas uma letra.

10.3 - Constantes Caractere de Barra Invertida


Colocar entre aspas simples todas as constantes tipo caractere funciona
para o maioria dos caracteres imprimíveis. Uns poucos, porém, como o retorno de
carro (CR), são impossíveis de inserir pelo teclado. Por essa razão, C criou as
constantes de caractere de barra invertida.
____________________________________________________________ 24
Curso Técnico de Eletroeletrônica
Programação em C
____________________________________________________________

____________________________________________________________ 25
Curso Técnico de Eletroeletrônica
Programação em C
____________________________________________________________

11 - COMANDOS DE CONTROLE DO PROGRAMA


Os comandos de C são divididos nos grupos:

- Seleção ou Condicional
- Iteração ()
- Desvio
- Rótulo
- Expressão
- Bloco

11.1 - Comandos de Seleção


1 1 .1 .1 - if
A forma feral da sentença if é:

if (expressão) comando;
else comando;

onde comando pode ser um único comando ou um bloco de comandos. A


cláusula else é opcional.
Se a expressão for verdadeira (algo diferente de zero), o comando ou bolco
que forma o corpo if é executado; caso contrário, o comando ou bloco que é o
corpo else (se existir) é executado. Lembre-se que apenas o código assciado ao if
ou o associado ao else é executado, nunca ambos.
O comando condicional controlando o if deve produzir um escalar. Um
escalar é um inteiro, um caractere ou tipo de ponto flutuante. No entanto, é raro
usar ponto flutuante para controlar um comando condicional, porque isso diminui
consideravelmente a velocidade de execução. Exemplos:

// Programa de números mágicos


#include <stdio.h>
#include <stdlib.h>

void main(void)
{
int magic; // número mágico
int guess; // palpite do usuário

magic = rand(); // gera o número mágico

printf(“Adivinhe o número mágico: ”);


scanf(“%d”, &guess);

if (guess == magic) printf (“*** CERTO!!! ***”);


else printf (“### ERRADO ###”);
}

____________________________________________________________ 26
Curso Técnico de Eletroeletrônica
Programação em C
____________________________________________________________

ifs aninhados
Um if aninhado é um comando if que é objeto de outro if ou else. Em C um
comando else sempre se refere ao if mais próximo, que está dentro do mesmo
bloco do else e não está associado a outro if. Exemplo:

11.1.2 - switch

É um comando interno de seleção múltipla que testa sucessivamente o


valor de uma expressão contra uma lista de constantes inteiras ou de caractere.
Quando o valor coincide, os comandos associados aquela constante são
executados. A forma geral do comando é:

switch (expressão)
{
case constante1: comando;
break;
case constante2: comando;
break;
.....
default:
{ seqüência de comandos... }
}

____________________________________________________________ 27
Curso Técnico de Eletroeletrônica
Programação em C
____________________________________________________________

O valor da expressão é comparado com as constantes especificadas nos


comandos case, se forem iguais o comando ou seqüência de comandos
associados aquele case, será executada até o comando break. O comando
default é opcional e executado se nenhuma coincidência for detectada.
Se constantes caracteres são usadas em um comando switch, elas são
automaticamente convertidas para seus valores inteiros.

Tecnicamente os comandos break dentro do switch são opcionais. Eles


terminam a seqüência de comandos associados com cada constante. Se um
comando break é omitido, a execução continua pelos próximos comandos case
até que um break seja encontrado. No exemplo, a seguinte função usa a naureza
“passar caindo” pelos cases para simplificar o código:

____________________________________________________________ 28
Curso Técnico de Eletroeletrônica
Programação em C
____________________________________________________________

Temos dois aspectos importantes do comando switch nesse exemplo.


Primeiro: você pode ter comandos case sem comandos associados.
Quando isto ocorre, a execução simplesmente cai no case seguinte. Nesse caso
todos os três primeiros cases executam os mesmos comandos.
Segundo: a execução continua no próximo case se nenhum comando
break for encontrado. Se i for igual a 4, flag receberá o valor 1 e, como não há
nenhum comando break no fim desse case, a execução continuará e a função
error(flag) será chamada. Se i for igual 5, error(flag) teria sido chamada com o
valor –1 em flag.

Comandos switch Aninhados

____________________________________________________________ 29
Curso Técnico de Eletroeletrônica
Programação em C
____________________________________________________________

11.2 - Comandos de Iteração


Também chamados de laços, permitem que um conjunto de instruções seja
executado até que ocorra uma certa condição.

11.2.1 - O laço for


A forma geral do laço for é

for (inicialização; condição; incremento) comando;

A inicialização geralmente é um comando de atribuição, que é usado para


colocar um valor na variável de controle do laço. A condição é uma expressão
relacional que determina quando o laço acaba. O incremento define como a
variável de controle do laço varia cada vez que o laço é repetido.
Você deve separar essas três opções com ponto-e-vírgula. Se a condição é
falsa, a execução do programa continua no comando seguinte ao for.
Por exemplo, o programa a seguir imprime na tela os números de 1 a 100:

Por exemplo, você poderia usar a seguinte função para conectar um


usuário a um sistema. O usuário tem três tentativas para entrar com a senha. O
laço termina quando as três tentativas forem utilizadas ou o usuário entrar com a
senha correta.

____________________________________________________________ 30
Curso Técnico de Eletroeletrônica
Programação em C
____________________________________________________________

O laço infinito

O controle do laço é feito no código seguinte ao laço:

ch = ‘ \0 ’;
for ( ; ; )
{
ch = getchar( ); // obtém um caracter
if ( ch == ‘A’) break; // sai do laço.
}
printf (“ voce digitou um A”);

11.2.2 - O laço while

A sua forma geral é:

while ( condição ) comando;

Exemplo:

wait_for_char ( void )
{
char ch;
ch = ‘ \0 ‘ ; // inicializa ch
while ( ch != ‘A’ ) ch = getchar();
return ch;
}

Como o laço for o while verifica a condição de teste no início do laço, o que
significa que o código do laço pode não ser executado.

11.2.3 - O laço do-while

Ao contrário dos demais, este executa o teste da condição ao final do laço.


Portanto ele executa o código do laço pelo menos uma vez. A sua forma geral é:

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

____________________________________________________________ 31
Curso Técnico de Eletroeletrônica
Programação em C
____________________________________________________________

11.3 - Comandos de Seleção


C tem quatro comandos que realizam desvio incondicional: return, goto,
break e continue. Destes você pode usar return e goto em qualquer lugar no seu
programa. Você pode usar break e continue em conjunto com qualquer dos
comandos de laço.

11.3.1 - O comando return

O comando return é usado para retornar de uma função. Ele é um


comando de desvio porque faz com que a execução retorne (salte de volta) ao
ponto em que a chamada à função foi feita.
A sua forma geral:
return expressão;

Uma função declarada como void não pode ter um return que especifique
um valor.

11.3.2 - O comando goto

O comando goto requer um rótulo para sua operação. (um rótulo é um


identificador válido em C seguido por dois-pontos). Além disso o rótulo tem que
estar na mesma função do goto que o usa. A forma geral é:

goto rótulo;
.
.
.
rótulo:

A preocupação da maioria dos programadores sobre o goto é a sua


tendência de tornar os programas ilegíveis.

11.3.3 - O comando break

Ele tem dois usos: você pode usa-lo para terminar um case em um
comando switch ou para forçar uma terminação de um laço, o laço é
imediatamente terminado e o controle do programa retorna no comando seguinte
ao laço.

11.3.4 - A função exit()

Essa função provoca uma terminação imediata do programa inteiro,


forçando um retorno ao sistema operacional.
A sua forma geral é:

void exit ( int código_de_retorno);


____________________________________________________________ 32
Curso Técnico de Eletroeletrônica
Programação em C
____________________________________________________________

O valor de código_de_retorno é retornado ao processo chamador, que é


normalmente o sistema operacional. O zero é normalmente usado como um
código de retorno que indica uma terminação normal do programa. Outros
argumentos são usados para indicar algum tipo de erro.

11.3.5 - O comando continue

Trabalha de forma parecida ao comando break. Em vez de forçar a


terminação, porém, continue força que ocorra a próxima iteração do laço, pulando
qualquer código intermediário. Para o laço for, continue faz com que o teste
condicional e a porção do incremento do laço sejam executados. Para os laços
while e do-while, o controle do programa passa para o teste condicional.

____________________________________________________________ 33
Curso Técnico de Eletroeletrônica
Programação em C
____________________________________________________________

12 - MATRIZES E STRINGS

Uma matriz é uma coleção de variáveis do mesmo tipo que é referenciada


por um nome comum. Um elemento específico em uma matriz é acessado por
meio de um índice. Em C, todas as matrizes consistem em posições contíguas na
memória. A matriz mais comum em C é a de string, que é simplesmente uma
matriz de caracteres terminada em um nulo. Um nulo é especificado como ‘ \0 ‘ e
geralmente é zero.
A forma geral para declarar uma matriz unidimensional é:

tipo nome_var [ tamanho ] ;

Como as outras variáveis as matrizes devem ser explicitamente declaradas


para que o compilador possa alocar espaço para elas na memória.

O C suporta uma ampla gama de funções de manipulação de strings. As


mais comuns são:

Essas funções usam o cabeçalho padrão STRING.H. Exemplo:

# include <std.io.h>
# include < string.h>
void main (void)
{
char s1[80] , s2[80];

gets (s1);
gets (s2);

printf (“comprimentos: %d %d \n ”, strlen (s1) , strlen (s2) );


if ( !strcmp ( s1,s2)) printf (“ as string são iguais \n”);
strcat (s1, s2);
printf (“ %s \n “, s1);

strcpy ( s1, “isso é um teste. \n”);


printf (s1);
if ( strchr (“alo”, ‘o’) ) printf (“ o está em alo \n”);
if ( strstr (“ola aqui”, “ola") ) printf (“ola encontrado”);
}
____________________________________________________________ 34
Curso Técnico de Eletroeletrônica
Programação em C
____________________________________________________________

13 - LENDO E ESCREVENDO, CARACTERES E


STRINGS

13.1 - getchar( )
Lê um caracter do teclado, espera até que uma tecla seja presionada e
devolve seu valor. A tecla pressionada é automaticamente mostrada na tela.

13.2 - putchar( )
Escreve um caracter na tela.

A biblioteca dessas funções é STDIO.H.

Exemplo:

O programa acima lê caracteres do teclado e inverte a caixa deles.

13.3 - getch( )
Espera até que uma tecla seja pressionada e então retorna
imediatamente.Ela não mostra o caractere na tela.

13.4 - getche( )
É igual a getch mas a tecla é mostrada.

A biblioteca dessas funções é CONIO.H.

____________________________________________________________ 35
Curso Técnico de Eletroeletrônica
Programação em C
____________________________________________________________

13.5 - gets( )
Lê uma string de caracteres inserida pelo teclado e coloca-a no endereço
apontado.

13.6 - puts( )
Escreve seu argumento string na tela seguido por uma nova linha.

As funções abaixo realizam E/S formatada – isto é, elas podem ler e


escrever dados em vários formatos que estão sob seu controle. Elas estão em
STDIO.H.

13.7 - printf( )
Ecreve dados no vídeo.

13.8 - scanf( )
Complemento de printf, lê dados do teclado.

Para especificar o tipo de dado a ser impresso ou lido é necessário um


comando de formato, que começa com um símbolo percentual e é seguido pelo
código do formato.

Um número colocado entre o símbolo de % e o código de formato age


como um especificador de largura de campo.

____________________________________________________________ 36
Curso Técnico de Eletroeletrônica
Programação em C
____________________________________________________________

Existe ainda o especificador de precisão que segue o de largura mínima de


campo, consistindo em um ponto seguido de um número inteiro.

____________________________________________________________ 37
Curso Técnico de Eletroeletrônica
Programação em C
____________________________________________________________

14 - DIRETIVAS DE C
Todas as diretivas começam com um símbolo #. Além disso, cada diretiva
do pré-processador deve estar na sua própria linha.

14.1 - #define
Define um identificador e uma string que o substituirá toda vez que for
encontrado no arquivo-fonte. Forma geral:

#define nome_macro string

Exemplo:

#define VERDADEIRO 1
#define FALSO 0

Isso faz com que o compilador substitua 1 ou 0 toda vez que encontrar
verdadeiro ou falso.

14.2 - #include
Instrui o compilador a ler outro arquivo-fonte adicionado aquele que contém
a diretiva #include. O nome de arquivo adicional deve estar entre aspas ou
símbolos de maior e menor. Exemplo:

#include “stdio.h”
#include <stdio.h>

____________________________________________________________ 38
Curso Técnico de Eletroeletrônica
Programação em C
____________________________________________________________

15 - FUNÇÕES MATEMÁTICAS

#include <math.h>
acos(num) Î devolve o arco co-seno de num;
asin(num) Î devolve o arco seno de num;
atan(num) Î devolve o arco tangente de num;
atan2( y/x) Î devolve o arco tangente de y/x;
ceil(num) Î devolve menor inteiro que não seja menor que num;
cos(num) Î devolve o co-seno de num;
cosh(num) Î devolve o co-seno hiperbólico de num;
exp(num) Î devolve o logaritmo natural e elevado à num;
fabs(num) Î devolve o valor absoluto de num;
floor(num) Î devolve maior inteiro que não seja maior que num;
fmod(x,y) Î devolve o resto de x/y;
log(num) Î devolve o logaritmo natural de num;
log10(num) Î devolve o logaritmo de base 10 de num;
modf(num,&x) Î decompõe num em suas partes inteira e fracionária.
Ela devolve a parte fracionária e coloca a parte
inteira na variável apontada por x;
pow(base,exp) Î Devolve base elevada a potência exp;
sin(num) Î Devolve seno de num;
sinh(num) Î Devolve o seno hiperbólico de num;
sqrt(num) Î Devolve a raiz quadrada de num;
tan(num) Î Devolve a tangente de num;
tanh(num) Î Devolve a tangente hiperbólica de num;

____________________________________________________________ 39
Curso Técnico de Eletroeletrônica
Programação em C
____________________________________________________________

16 - TABELA ASCII

____________________________________________________________ 40
Curso Técnico de Eletroeletrônica
Programação em C
____________________________________________________________

17 - EXERCÍCIOS
1 - Escreva um programa que leia do teclado e imprima na tela o seu nome
completo.

2 - Escreva um programa que retorne a temperatura em Kelvin e Farenheit,


ao entrar em graus Celcius.

3 - Escreva um programa que leia dois números reais e retorne a soma, o


produto, a multiplicação e o quociente entre eles.

4 - Elabore um programa que leia as coordenadas de dois pontos e retorne


a equação da reta que passa por eles.

5 - Escreva um programa que imprima na tela:


- o valor de pi;
- o valor de pi com 4 casa decimais apenas;
- o valor de pi com 16 casas decimais;
- o ovalor de pi com 4 casas decimais e em notação científica.

6 - Escreva um programa que ao ler um número do teclado informe se ele é


maior ou menor que zero.

7 - Escreva um programa que receba seu nome completo e idade,


retornando o nome e se você é criança (abaixo de 13 anos), adolescente (entre
13 e 19 anos), adulto (acima de 19 anos), caso o valor de idade informado não
seja válido retornar mensagem de erro também.

8 - Escreva um programa que ao digitar o nome, o número do telefone


deve ser impresso na tela, caso o nome não conste na agenda uma mensagem
deve ser impressa também.

9 - Escreva um programa para realizar uma pesquisa de satisfação sobre


um determinado produto. Informa-se o sexo, responde se gostou ou não do
produto e confirma a resposta. Imprimindo na tela, quantas pessoas responderam
a pergunta, quantas foram homens e quantas foram mulheres, quantos por cento
das mulheres e dos homens responderam sim e não, quantos por cento do total
de entrevistados responderam sim e não.

10 - Escreva um programa que retorne o valor, o dia e a hora que ocorreu a


maior e a menor temperatura, como também a temperatura média. Através da
entrada de dados de 10 amostras coletadas, em dias e horários diferentes.

11 - Imprima na tela os números de 0 a 100 usando os laços:


- for;
- while;
- do-while.

12 - Idem ao anterior, porém somente os números pares.

____________________________________________________________ 41
Curso Técnico de Eletroeletrônica
Programação em C
____________________________________________________________

13 - Idem ao anterior, porém, imprima a soma dos números pares


compreendidos entre os números 100 e 200.

14 - Escreva dois programas que executem a operação selecionada entre


dois números reais, entre soma, subtração, divisão e multiplicação. Um usando if
e outro usando switch.

15 - Escreva um programa que execute a operação selecionada entre dois


números reais, entre soma, subtração, divisão e multiplicação. Cada operação
deverá ser efetuada numa função separada, compondo uma biblioteca com as
mesmas.

16 - Escreva um programa para calcular as raízes de uma equação do 2º


grau.

17 - Escreva um programa, para armazenar num vetor 4 números reais e


apresentar na tela a soma e a multiplicação dos mesmos.

18 - O que faz o seguinte programa?

#include <stdio.h>
int main()
{
int x;
scanf("%d",&x);
printf("%d",x);
return(0);
}

19 - Escreva um programa que leia um caracter digitado pelo usuário,


imprima o caracter digitado e o código ASCII correspondente a este caracter.

20 - Escreva um programa que leia duas strings e as coloque na tela.


Imprima também a segunda letra de cada string.

21 - Explique porque está errado fazer: if (num=10) ...

22 - Escreva um programa que coloque os números de 1 a 100 na tela na


ordem inversa (começando em 100 e terminando em 1).

23 - Escreva um programa que leia uma string, conte quantos caracteres


desta string são iguais a 'a' e substitua os que forem iguais a 'a' por 'b'. O
programa deve imprimir o número de caracteres modificados e a string
modificada.

24 - Em C, variáveis com nomes abc e Abc representam a mesma variável.


a. Verdadeiro b. Falso

____________________________________________________________ 42
Curso Técnico de Eletroeletrônica
Programação em C
____________________________________________________________

25 - O programa ao lado lê uma variável #include <stdio.h>


pelo teclado e a imprime na tela: main()
{
a. Verdadeiro int x;
b. Falso scanf("%d",&x);
printf("%d",x);
}

26 - A instrução #include <stdio.h> no programa anterior é colocada para


que possamos utilizar as funções scanf e printf
na. Verdadeiro b. Falso

27 - Sendo i uma variável inteira, a seguinte chamada a scanf é válida:


scanf("%d", i);
na. Verdadeiro b. Falso

28 - O que faz o seguinte programa em C?

#include <stdio.h> a. Nada


main() b. Imprime: O valor de i = 2
{ c. Imprime: \n O valor de i =
int i =2; %d
printf ("\n O valor de i = %d ", i); d. Pula para a próxima linha
} e imprime: O valor de i = 2

29 - O que é uma função em C?


a. Parte de um programa
b. Um bloco de código que pode ser utilizado diversas vezes na execução
de um programa
c. Uma estrutura da linguagem C que pode ser utilizada para que um
programa fique mais organizado
d. Um bloco de código que pode receber parâmetros, processá-los e
retornar alguma coisa
e. Todas opções acima

30 - O comando printf ("%s%d%%","Juros de ",10); imprime:


a. Juros de 10% d. 10 Juros de
b. %s%d%% Juros de 10 e. Nenhuma das anteriores
c. % Juros de 10

31 - O laço for de uma única instrução termina com:


a. Virgula c. Chave de fechamento
b. Chave de abertura d. Ponto e virgula

32 - A expressão de inicialização de um laco for


a. Nunca é executada;
b. É executada uma única vez a cada iteração
c. É executada enquanto o laço não termina
d. É executada uma vez antes do laço ser iniciado

____________________________________________________________ 43
Curso Técnico de Eletroeletrônica
Programação em C
____________________________________________________________

33 - Diga o resultado das variáveis x, y e z depois da seguinte seqüência


de operações:

int x,y,z=0;
x=y=10;
z=++x;
x=-x;
y++;
x=x+y-(z--);

34 - Escolha a opção que inclui somente nomes válidos para variáveis na


linguagem C.
a. If, a_b_2, H789, _yes d. 2_ou_1, \fim, *h, j
b. i, j, int, obs e. Nenhuma das opções
c. 9xy, a36, x*y, --j anteriores

35 - Qual das instruções abaixo está errada?


a. int i; d. long ijk;
b. long float x; e. short int a;
c. long double y; f. unsigned b;

36 - Qual o trecho de programa que inicializa a variável z?


a. float z , z1=10.; c. float z = 10;
b. float z; z = 10; d. z = 10;

37 - O trecho de programa a seguir é

main()
{
char condicao; a. Válido na linguagem C
condicao = 'D'; b. Não válido na linguagem C
int i = 1;
}

38 - 0101 é uma constante __________ na linguagem C.


a. Binária c. Inteira e. Ponto Flutuante
b. Hexadecimal d. Octal

39 - Em C, "t" e 't' representam a mesma constante.


a. Verdadeiro b. Falso

40 - Diga o resultado das variáveis x, y e z depois da seguinte seqüência


de operações:
int x,y; a. x = 4.66666, y = 2, z = 0.4286
int a = 14, b = 3; b. x = 5, y =2, z= 0.4
float z; c. x = 5, y = 2, z = 0
x = a/b; d. x = 4, y = 2, z = 0.5
y = a%b; e. x = 4, y =2, z = 0
z = y/x; f. Nenhuma das opções anteriores

____________________________________________________________ 44
Curso Técnico de Eletroeletrônica
Programação em C
____________________________________________________________

41 - A operação lógica (-5 || 0)&&(3 >= 2)&&(1 != 0)||(3 < 0) é:

a. Verdadeira d. Nem Verdadeira nem Falsa


b. Falsa e. Nenhuma das opções anteriores
c. Inválida, a sintaxe está errada.

42 - Quais os valores de a, b e c após a execução do código abaixo?

int a = 10, b = 20, c; a. a = 11, b = 20, c =30


c = a+++b; b. a = 10 , b = 21, c = 31
c. a = 11, b = 20, c = 31
d. a = 10, b = 21, c = 30
e. Nenhuma das opções anteriores

43 - Qual o valor das variáveis v, x, y e z após a execução do seguinte


trecho de código

int v = 0, x = 1, y = 2, z = 3; a. v=11, x=8, y=6, z=3


v += x+y; b. v=0, x=1, y=2, z=3
x *= y = z + 1; c. v=10, x=7, y=6, z=3
z %= v + v + v; d. v=13, x=10, y=6, z=3
v += x += y += 2; e. Nenhuma das opções anteriores

44 - Escreva um programa que pede para o usuário entrar um número


correspondente a um dia da semana e que então apresente na tela o nome do
dia. Utilizando o comando switch.

45 - if(num) ...; é equivalente a if(num!=0) ...;


a. Verdadeiro b. Falso

46 - Os trechos de programa a seguir são equivalentes entre si, sob o


ponto de vista do que é impresso? O que será impresso?

for (i = 0 ; i < 10; i++) printf("%d", i);

for (i = 0 ; i < 10; ++i) printf("%d", i);

47 - O trecho de programa a seguir é


switch(num)
{
case 1;
printf("O numero e 1 ");
break; a. Válido na linguagem C
case 2; b. Não válido na linguagem C
printf("O numero e 2 ");
break;
default;
printf("O numero e diferente de 1 e 2");
break;
}
____________________________________________________________ 45
Curso Técnico de Eletroeletrônica
Programação em C
____________________________________________________________

48 - Sendo num uma variável inteira, o que imprime o trecho de código a


seguir?
num = 1;
switch(num)
{
case 1:
printf("O numero e 1 ");
case 2:
printf("O numero e 2 ");
default:
printf("O numero e diferente de 1 e 2");
}

a. O numero e 1
b. O numero e 2
c. O numero e diferente de 1 e 2
d. O numero e 1 O numero e 2
e. O numero e 1 O numero e 2 O numero e diferente de 1 e 2

49 - Os dois blocos de código a seguir produzem o mesmo resultado:

for( i = 0 ; i < 3 ; i++)


for ( j =0 ; j < 3; j++)
printf("i+j = %d \n", i+j);
a. Verdadeiro
for( i = 0 , j=0 ; i < 3 ; i++) b. Falso
for ( ; j < 3 ; j++)
printf("i+j = %d \n", i+j);

50 - Qual a saída produzida pelo extrato de código a seguir:

int x; a. 351131
for ( x = 35 ; x > 0 ; x/=3) b. 1131
printf("%d " , x) ; c. 11310
d. 35113
e. Nenhuma das opções anteriores

51 - Os extratos de código a seguir são equivalentes entre si:

int x = 10;
while (--x > 9)
{
printf("%d", x);
} a. Verdadeiro
b. Falso
int x = 10;
do {
printf("%d", x);
} while(--x > 9);

____________________________________________________________ 46
Curso Técnico de Eletroeletrônica
Programação em C
____________________________________________________________

52 - Sendo i declarado e inicializado como: int i = 0;


os seguintes extratos de código:

while (i = 5)
{
printf("%d %d %d \n", i, i+2, i+4);
i = 0;
}

if (i = 5) printf ("%d %d %d \n", i, i+2, i+4);

a. São idênticos sob o ponto de vista do que imprimem na tela


b. Não imprimem nada na tela
c. Têm sintaxe errada
d. Um deles imprime 5, 7 e 9 uma única vez e o outro entra em loop,
imprimindo estes valores indefinidamente
e. Nenhuma das opções anteriores

53 - A estrutura do switch abaixo é:

switch (t)
{
case t < 10:
printf("Hoje ta' fazendo muito frio");
break;
case t < 25:
printf("A temperatura está agradavel");
break;
default:
printf("Hoje ta' quente pra chuchu");
}
a. Válida na linguagem C
b. Não válida na linguagem C

54 - O laço for a seguir

int i;
for ( i = 0 ; i <= 5; i++ , printf("%d ", i));

a. Imprime 0 1 2 3 4 5
b. Não funciona, pois tem sintaxe errada
c. Imprime 1 2 3 4 5 6
d. Imprime 1 2 3 4 5
e. Nenhuma das opções anteriores

55 - Se uma string for declarada como: char str[20];


O número máximo de caracteres que poderão ser lidos e armazenados é:
a. 18 b. 19 c. 20 d. 21

____________________________________________________________ 47
Curso Técnico de Eletroeletrônica
Programação em C
____________________________________________________________

56 - Estude o seguinte programa e aponte o valor de cada variável sempre


que solicitado:

#include <stdio.h>
int num;
int func(int a, int b)
{
a = (a+b)/2; /* Qual e o valor de a apos a atribuicao? */
num -= a;
return a;
}
main()
{
int first = 0, sec = 50;
num = 10;
num += func(first, sec); /* Qual e o valor de num, first e sec */
/* antes e depois da atribuicao? */
printf("\n\nConfira! num = %d\tfirst = %d\tsec = %d",num, first, sec);
}

57 - Escreva uma função que receba duas variáveis inteiras e "zere" o valor
das variáveis.

____________________________________________________________ 48
Curso Técnico de Eletroeletrônica

Você também pode gostar