next up previous contents
Next: Bibliografia Up: Programação C Previous: Precedência de operadores   Sumário

Exercícios

C.1
Crie um programa C que imprima na tela a mensagem
``C ou nao C, eis a questao!''
Edite e compile o arquivo ser.c contendo este programa, criando um executável de nome ser.

C.2
Analise as mensagens de erro que o compilador C irá apresentar para cada uma das seguintes situações:
(a)
tentar gerar um programa executável sem uma função main;
(b)
incluir uma expressão dentro de uma função onde o terminador ; tenha sido omitido;
(c)
tentar alterar uma variável declarada como const;
(d)
usar uma variável que não foi declarada;
(e)
declarar uma variável que não é usada;
(f)
a expressão y = x;, onde x e y são de um mesmo tipo, ocorre sem que o valor de x tenha sido definido;
(g)
a expressão y = x; ocorre, porém x é uma variável do tipo float enquanto que y é do tipo char;
(h)
uma variável é declarada com um nome inválido;
(i)
um bloco em um dos comandos de controle estruturado não foi apropriadamente encerrado (um } foi esquecido).
Repita a experiência para distintos níveis de verificação do compilador (Warning levels).

C.3
A função int rand() da biblioteca de rotinas padrão retorna um número inteiro aleatório. Use esta rotina para desenvolver um programa que gere e imprima na tela uma seqüência de 80 bits gerados aleatoriamente. Execute o programa diversas vezes e compare as seqüências geradas. O que você pode deduzir do resultado?

C.4
Uma função é recursiva quando ela invoca a si própria. Desenvolva uma função recursiva para calcular fatorial $ n!$ de um número inteiro $ n$, onde

$\displaystyle n! = n \times (n-1)!
$

Use esta função em um programa que imprima o fatorial dos primeiros $ N$ inteiros, onde $ N$ é um parâmetro da sua função. Qual o máximo valor de $ N$ que você pode especificar?

C.5
Use a tabela ASCII (Tabela 2.1) para criar funções que recebem um argumento do tipo char e:
(a)
retorne 1 se um caráter é um dígito decimal (algarismo entre 0 e 9), 0 em caso contrário;

(b)
retorne 1 se um caráter é uma letra, 0 se não;

(c)
retorne 1 se um caráter é uma letra ou dígito, 0 se não;

(d)
retorne 1 se um caráter é uma imprimível (letra, dígito, símbolo, pontuação), 0 se não;

(e)
retorne uma letra maiúscula se o argumento for uma letra minúscula, ou o caráter inalterado em caso contrário;

(f)
retorne uma letra minúscula se o argumento for uma letra maiúscula, ou o caráter inalterado caso contrário;

(g)
retorne o valor inteiro que corresponde a um argumento caráter que é um dígito decimal (por exemplo, recebendo o caráter '9' retorna o inteiro 9).

C.6
Desenvolva um programa soma que receba um número arbitrário de inteiros na linha de comando e imprima a soma destes números.

C.7
Desenvolva um programa opera que receba como argumentos um símbolo indicando uma operação (+, -, *, /) e dois números (inteiros ou reais), retornando o resultado da operação. Que cuidados especiais devem ser tomados na execução desse programa?

C.8
A rotina da biblioteca padrão char *getenv(char *) recebe como argumento o nome de uma variável do ambiente e retorna a string com o valor atual da variável. Defina um programa ecoe que aceita como argumentos variáveis de ambiente do sistema operacional e apresente na saída padrão o seu valor.

C.9
Desenvolva uma função que receba duas strings como argumento e retorne 1 se seus conteúdos forem iguais e 0 se forem diferentes. Essa função não pode fazer uso de nenhuma outra função.

C.10
Estenda a função calcula_idade de forma a melhorar o cálculo da idade, retornando uma Data dizendo qual a idade da pessoa em anos, meses e dias.

C.11
Desenvolva um program que receba três strings como argumento, sendo o primeiro um nome, o segundo uma data e o terceiro um caráter M ou F. Estes argumentos são usados para inicializar os dados do exemplo da Seção C.2.6 e imprimir a idade da pessoa no formato da atividade anterior.

C.12
Desenvolva um programa gerarand que recebe zero, um ou dois argumentos inteiros ($ n_1$ e $ n_2$) e apresente na saída uma seqüência de $ n_1$ números aleatórios na faixa de 0 a $ n_2-1$. Se apenas um argumento estiver presente, não há restrições na faixa de valores dos números gerados (o valor retornado por rand() pode ser diretamente utilizado). Se nenhum argumento estiver presente, 20 números aleatórios sem restrição de faixa de valores são gerados e apresentados.

C.13
Modifique o programa acima para que os números sejam apresentados em ordem. Utilize a rotina qsort do sistema para ordenar os números em ordem crescente.

C.14
Estenda o programa gerarand de forma que a saída, além de ordenada, apresente após cada número aleatório um número entre colchetes que indique a ordem em que o número foi gerado. Assim, o primeiro número aleatório gerado estaria associado à [1], o segundo a [2] e assim por diante.


next up previous contents
Next: Bibliografia Up: Programação C Previous: Precedência de operadores   Sumário
Ivan L. M. Ricarte 2003-02-14