Explorar E-books
Categorias
Explorar Audiolivros
Categorias
Explorar Revistas
Categorias
Explorar Documentos
Categorias
Minicurso
Introdução à Linguagem C
Sumário
1 Introdução à Linguagem C 3
1.1 Lógica Computacional . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1.1 Algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1.2 Programa . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2 Falcon C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.3 Tipos de Variáveis . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.4 Incluindo Bibliotecas . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.5 Funções de Entrada-Saı́da padrões . . . . . . . . . . . . . . . . . 7
1.5.1 Printf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.5.2 Scanf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.6 Operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.6.1 Aritméticos e de Atribuição . . . . . . . . . . . . . . . . . 9
1.6.2 Relacionais e Lógicos . . . . . . . . . . . . . . . . . . . . . 10
1.7 Biblioteca matemática . . . . . . . . . . . . . . . . . . . . . . . . 11
1.8 Exercı́cios de Revisão . . . . . . . . . . . . . . . . . . . . . . . . 12
2 Estruturas de seleção 13
2.1 if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.2 if/else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.3 switch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.4 O operador ternário . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.5 Exercı́cios de Revisão . . . . . . . . . . . . . . . . . . . . . . . . 17
3 Estruturas de Repetição 18
3.1 while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.2 do/while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.3 for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.4 Exercı́cios de Revisão . . . . . . . . . . . . . . . . . . . . . . . . 21
4 Estruturas de Dados 21
4.1 Vetores/Arrays Unidimensionais . . . . . . . . . . . . . . . . . . 21
4.2 Strings na Linguagem C . . . . . . . . . . . . . . . . . . . . . . . 23
4.3 Matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
4.4 Exercı́cios de Revisão . . . . . . . . . . . . . . . . . . . . . . . . 26
5 Números Pseudoaleatórios 26
5.1 Visão Geral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
5.2 Exercı́cios de Revisão . . . . . . . . . . . . . . . . . . . . . . . . 27
6 Funções 27
6.1 Visão Geral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
6.2 Protótipo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
6.3 Função Sem Retorno e/ou Sem Entradas . . . . . . . . . . . . . . 32
6.4 Vetores como parâmetros de funções . . . . . . . . . . . . . . . . 33
1
SUMÁRIO SUMÁRIO
7 Introdução a Apontadores 38
7.1 Visão Geral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
7.2 Declaração de apontadores . . . . . . . . . . . . . . . . . . . . . . 39
7.3 Inicialização de apontadores . . . . . . . . . . . . . . . . . . . . . 39
7.4 Aritmética de apontadores . . . . . . . . . . . . . . . . . . . . . . 41
7.4.1 Incremento e Decremento . . . . . . . . . . . . . . . . . . 41
7.5 Mais operações com apontadores . . . . . . . . . . . . . . . . . . 42
7.6 Exercı́cios de Revisão . . . . . . . . . . . . . . . . . . . . . . . . 43
8 Exercı́cios Complementares 44
2
1 INTRODUÇÃO À LINGUAGEM C
1 Introdução à Linguagem C
O objetivo desse curso é introduzir conceitos básicos da linguagem de pro-
gramação C, que une versatilidade e robustez, pois alia caracterı́sticas de lin-
guagens de baixo nı́vel com caracterı́sticas de alto nı́vel.
Criada por Denis Ritchie, em 1972, foi baseada na linguagem B e teve sua
primeira aplicação importante na reescrita do sistema operacional UNIX, que
até então era escrito na linguagem Assembly.
2. Telefonema: quando chegar, ele liga para você para ir pegá-lo e depois,
vai até o terminal te esperar;
3. Ônibus: ele pega o ônibus para a integração na frente do aeroporto, desce
nela, pega outro ônibus, desce na rua do PET e caminha por duas quadras
em direção ao norte até chegar na casa número 51.
3
1.1 Lógica Computacional 1 INTRODUÇÃO À LINGUAGEM C
1.1.2 Programa
Sequência completa de instruções que serão executadas por um computador,
de acordo com o algoritmo estabelecido. Pode-se dizer que o programa é na
verdade o algoritmo traduzido para linguagem de máquina.
A atividade de programação começa no ato do desenvolvimento do algo-
ritmo. Isto é, deve-se primeiramente dividir o problema em partes elementares
e planejar operações que conduzirão o programador até a resposta final por
meio das soluções particionadas. Desta forma, fazem-se usos de comandos da
linguagem de programação utilizada para realizar as operações pertinentes.
• Receber os números;
4
1.2 Falcon C++ 1 INTRODUÇÃO À LINGUAGEM C
A maioria das dúvidas que porventura surgirem sobre algum procedimento mais
elaborado, pode ser sanada no arquivo de ajuda do programa, em Ajuda > Ajuda
sobre o Falcon C++.
5
1.4 Incluindo Bibliotecas 1 INTRODUÇÃO À LINGUAGEM C
Ao declarar uma variável, devemos especificar um tipo e este diz quais va-
lores podem ser armazenados na região da memória associada à variável, como
esses valores são representados e quais operações envolvendo essa variável serão
válidas.
6
1.5 Funções de Entrada-Saı́da padrões1 INTRODUÇÃO À LINGUAGEM C
/*sintaxe do printf*/
printf (”expressão de controle”, lista de argumentos);
A expressão de controle deve conter o texto que será exibido na tela, além
disso, devem ser incluı́das nesse texto as variáveis que serão exibidas. Para tal se
utiliza um código de controle, onde se deseja que apareça o valor da variável.
O código informa ao compilador como a variável deve ser apresentada. Abaixo,
na tabela 1, são apresentados os códigos de controle mais frequentemente utili-
zados por programadores:
Código Significado
%d Inteiro
%f Float
%c Caractere
%s String
%h Inteiro Hexadecimal com letras maiúsculas
%% Imprime um %
#include<stdio.h>
#include<stdlib.h>
int main(){
printf("tudo bem? \n");
printf("%f \n", 3.1415);
7
1.5 Funções de Entrada-Saı́da padrões1 INTRODUÇÃO À LINGUAGEM C
system("pause");
}
1.5.2 Scanf
Para se fazer leituras da entrada padrão, normalmente pelo teclado, usa-se
a função scanf, também definida na biblioteca stdio.h. Sua sintaxe lembra a do
printf :
/*sintaxe do scanf*/
scanf (”expressão de controle”, lista de argumentos);
scanf("%d", &int1);
scanf("%c", &char1);
scanf("%d%c", &int1, &char1);
#include<stdio.h>
#include<stdlib.h>
int main(){
int inteiro1, inteiro2;
printf("Entre com o primeiro numero inteiro\n");
scanf("%d", &inteiro1);
printf("Entre com o segundo numero inteiro\n");
8
1.6 Operadores 1 INTRODUÇÃO À LINGUAGEM C
scanf("%d", &inteiro2);
printf("A soma e %d\n", inteiro1 + inteiro2);
system("pause");
return 0;
}
1.6 Operadores
1.6.1 Aritméticos e de Atribuição
Os operadores aritméticos são sı́mbolos utilizados para realizar operações
matemáticas. Eles podem ser unários ou binários, que agem sob uma ou duas
variáveis, respectivamente.
9
1.6 Operadores 1 INTRODUÇÃO À LINGUAGEM C
a = 3;
b = (3 + 3.14)/5;
c = 1;
c++;
d = ((132324%3)*3)–;
e = -a;
f = a++;
g = ++a;
h = ((a++)+(–a))/2;
Operador Significado
> Maior
>= Maior ou igual
< Menor
<= Menor ou igual
== Igual
!= Diferente
A expressão utilizando esses operadores retorna 1 caso a expressão seja ver-
dadeira e 0 caso ela seja falsa.
C = 3>2, (C=1)
D = (10 == 9) (D = 0)
E = ((1<3) == 1) (E =1 )
F = A>B
Já os operadores lógicos realizam três operações lógicas básicas, são elas:
Operador Significado
&& E (and)
|| OU (or)
! NÃO (not)
10
1.7 Biblioteca matemática 1 INTRODUÇÃO À LINGUAGEM C
A = (5>3)&&(3<1) (A = 0)
B = (5>3)| |(3<1) (A = 1)
C = !!5 (C = 1)
11
1.8 Exercı́cios de Revisão 1 INTRODUÇÃO À LINGUAGEM C
12
2 ESTRUTURAS DE SELEÇÃO
2 Estruturas de seleção
2.1 if
A instrução if tem a seguinte forma geral:
#include<stdio.h>
#include<stdlib.h>
int main(){
int num1, num2;
printf("Informe dois numeros inteiros para que seja ");
printf("determinado o relacionamento entre eles\n");
scanf("%d%d", &num1, &num2);
if(num1 == num2)
printf("%d e igual a %d", num1, num2);
if(num1 != num2)
printf("%d e diferente de %d", num1, num2);
if(num1 < num2)
printf("%d e menor que %d", num1, num2);
if(num1 > num2)
printf("%d e maior que %d", num1, num2);
system("pause");
return 0;
}
13
2.2 if/else 2 ESTRUTURAS DE SELEÇÃO
2.2 if/else
A instrução if-else tem a seguinte forma geral:
/*Sintaxe da instruç~
ao de controle if-else */
if(condiç~
ao){
Comandos1;
}
else{
Comandos2;
}
if (condiç~
ao_1) comando_1;
else if (condiç~
ao_2) comando _2;
else if (condiç~
ao_3) comando _3;
[...]
else if (condiç~
ao_n) comando _n;
else ultimocomando;
14
2.3 switch 2 ESTRUTURAS DE SELEÇÃO
#include<stdio.h>
#include<stdlib.h>
int main(){
int numero;
2.3 switch
Outra instrução de controle bastante usada é o switch. Sua forma geral é:
/* Sintaxe da instruç~
ao de controle switch*/
switch(variavel){
case constante1:
comandos;
break;
case constante2:
comandos;
break;
[...]
15
2.3 switch 2 ESTRUTURAS DE SELEÇÃO
case constanten:
comandos;
break;
default:
comandos;
break;
}
switch(numero){
case 1:
printf("O numero e igual a 1");
break;
case 2:
printf("O numero e igual a 2");
break;
case 80:
printf("O numero e igual a 80");
break;
default:
printf("O numero nao e nem 1, nem 2 e nem 80");
break;
}
16
2.4 O operador ternário 2 ESTRUTURAS DE SELEÇÃO
if(condiç~
ao)
Express~
ao_1;
else
Express~
ao_2;
if( a < 0)
b = 2;
else
b = 3;
Que pode ser substituı́do por apenas uma linha:
b = a < 0 ? 2 : 3 ;
17
3 ESTRUTURAS DE REPETIÇÃO
3 Estruturas de Repetição
3.1 while
O while é útil para realizar operações repetidas submetidas a uma condição
que muda com o tempo. Sua sintaxe é:
/*Sintaxe do While*/
ao) {
while (condiç~
comandos;
}
ao) {
if (condiç~
comandos;
"Volte para o comando if"
}
#include <stdio.h>
#include <stdlib.h>
int main(){
int inteiro = 1, n, somatorio = 0;
printf ("Calculo do Somatorio dos n primeiros inteiros");
printf(" positivos.\n");
scanf ("%d", &n);
while (inteiro <= n) {
somatorio += inteiro;
inteiro += 1;
}
18
3.2 do/while 3 ESTRUTURAS DE REPETIÇÃO
O programa ficará preso ao laço até que n atinja o seu valor máximo.
3.2 do/while
O do/while tem ação bastante semelhante à do comando while, sua forma
geral é:
/* Sintaxe do Do/While */
do {
comandos;
} while (condiç~
ao);
#include <stdio.h>
#include <stdlib.h>
int main(){
int contador = 1;
do {
printf ("%d \n" , contador);
contador++;
} while (contador <= 10);
system ("pause");
return 0;
}
19
3.3 for 3 ESTRUTURAS DE REPETIÇÃO
3.3 for
O comando for é a terceira estrutura para se trabalhar com loops de re-
petição. Sua forma geral é:
/* Sintaxe do For */
for (inicializaç~ ao; incremento/decremento) {
ao; condiç~
comandos;
}
inicializaç~
ao;
ao) {
if (condiç~
comandos;
incremento;
"Volte para o comando if"
}
#include <stdio.h>
#include <stdlib.h>
int main () {
int contador;
20
3.4 Exercı́cios de Revisão 4 ESTRUTURAS DE DADOS
return 0;
}
4 Estruturas de Dados
4.1 Vetores/Arrays Unidimensionais
Em C, um array é um grupo de locais de memória relacionados pelo fato
de que todos têm o mesmo nome e o mesmo tipo. Para fazer referência a um
determinado local ou elemento dele, especificamos o nome do array e a posição
em que o elemento se encontra. Os nomes dos arrays seguem as mesmas con-
venções para as declarações de outras variáveis. Esse tipo de estrutura de dados
tem uma aplicação bastante vasta. A declaração de um vetor pode ser feita da
seguinte forma:
/*Declaração de um vetor*/
tipo nome do vetor[número de elementos];
char nome[30];
21
4.1 Vetores/Arrays Unidimensionais 4 ESTRUTURAS DE DADOS
int idades[100];
int i=5;
Corretos:
idades[10]=idades[50];
idades[0]=idades[3]-idades[8];
idades[i]=idades[i+5];
Incorretos:
idades[100]=idades[0];
idades[-1]=idades[3];
idades=idades+1;
22
4.2 Strings na Linguagem C 4 ESTRUTURAS DE DADOS
#include <stdlib.h>
int main (){
int numeros[50]={0};
int i,j;
int total=0;
float media;
printf("Insira numeros inteiros para calcular a");
printf(" media (para parar a insercao digite -1 \n):");
for (i=0;numeros[i-1] !=-1; i++)
scanf("%d", &numeros[i]);
i--;
for (j=0; j!=i; j++)
total = total+numeros[j];
media = (float)total/i;
printf("\n\nA media dos numeros eh %f\n", media);
system("pause");
return 0;
}
Também é possı́vel criar uma string fazendo o vetor do tipo char receber a
palavra entre aspas. Observe o Exemplo 4.5.
23
4.2 Strings na Linguagem C 4 ESTRUTURAS DE DADOS
char palavra[]=“Amigo”;
Exemplo 4.6:
#include <stdio.h>
if(ola == ola2)
printf("Iguais");
else
printf("Nao sao iguais");
return 0;
24
4.3 Matrizes 4 ESTRUTURAS DE DADOS
4.3 Matrizes
Matrizes têm a maioria das caracterı́sticas semelhantes aos vetores. A dife-
rença primordial é o número de dimensões que as matrizes possuem. Enquanto
vetores possuem apenas uma dimensão, matrizes possuem n dimensões. Um
caso particular é o de matrizes bidimensionais (n=2). Vejamos a sintaxe para a
declaração desta matriz:
Um array com vários subscritos, vetor de várias dimensões, pode ser inicia-
lizado em sua declaração da mesma forma que um array unidimensional.
#include <stdlib.h>
#include <stdio.h>
int main (){
int matriz[20][10];
int i,j,k;
k=1;
for (i=0; i <20; i++){
for (j=0;j<10;j++){
matriz[i][j]=k;
printf("%d\t", matriz[i][j]);
k++;
}
printf("\n");
}
system("pause");
25
4.4 Exercı́cios de Revisão 5 NÚMEROS PSEUDOALEATÓRIOS
return 0;
}
Matrizes com dimensões maiores que dois têm propriedades análogas às das
matrizes bidimensionais. Para declarar uma matriz n-dimensional, usa-se a
seguinte sintaxe:
II - Faça um programa que preenche uma matriz quadrada 5x5 com 1’s na
diagonal principal(matriz identidade) e a exibe na tela.
III - Faça um programa que preencha uma matriz, em que cada elemento
possua o valor resultante do produto entre o seu ı́ndice da linha e o da coluna,
depois a exiba na tela.
5 Números Pseudoaleatórios
5.1 Visão Geral
Muitas aplicações, principalmente jogos, exigem o uso de números aleatórios
para diversas funcionalidades. Um computador digital não é capaz de gerar um
número totalmente aleatório, pois é um sistema determinı́stico. No entanto,
é possı́vel, utilizando uma função da biblioteca stdlib.h, gerar números com
uma distribuição probabilı́stica aproximadamente uniforme: são os números
pseudoaleatórios.
26
5.2 Exercı́cios de Revisão 6 FUNÇÕES
Para enviar uma semente à função rand(), devemos usar a função srand(num),
que é uma função que não retorna nenhum valor, portanto, não pode ser atribuı́da
à uma variável qualquer, e ainda, ”num”é um inteiro que serve como semente.
É interessante que a cada execução do programa uma semente diferente seja
enviada e uma forma de fazer isso é enviar um valor que mude frequentemente.
srand(time(NULL));
6 Funções
6.1 Visão Geral
Quando se está programando e há a necessidade de fazer um programa
grande e complexo, é bom dividi-lo em blocos que realizam determinadas tarefas.
27
6.1 Visão Geral 6 FUNÇÕES
O tipo de retorno é o tipo do valor que a função retornará. Caso este tipo
não seja especificado, a função retornará um inteiro. Os parâmetros são uma
lista de valores, cada um com seu tipo, que a função recebe, ou seja, é a entrada
da função e pode ter a seguinte forma:
#include<stdio.h>
#include<stdlib.h>
int main(){
int numero;
28
6.1 Visão Geral 6 FUNÇÕES
numero = quadrado(numero);
#include<stdio.h>
#include<stdlib.h>
int main(){
int numero;
29
6.2 Protótipo 6 FUNÇÕES
6.2 Protótipo
Nos exemplos mostrados anteriormente, as funções foram escritas antes da
função principal main. O objetivo desta prática é de informar ao compilador
com antecedência quais serão os parâmetros e os tipos de retorno das funções
que serão utilizadas, a fim de garantir uma execução correta do programa. Para
uma programação mais organizada, deve-se fazer o uso de protótipos, que reali-
zam a tarefa de informar ao compilador quais as funções que serão utilizadas, o
seu tipo de retorno e os tipos dos parâmetros, sendo colocados antes da função
main, enquanto que as declarações das funções correspondentes virão depois
dela.
#include<stdio.h>
#include<stdlib.h>
int numero;
system("pause");
30
6.2 Protótipo 6 FUNÇÕES
return 0;
}
#include<stdio.h>
#include<stdlib.h>
int numero;
printf ("Entre com um numero: ");
scanf ("%d", &numero);
if (EhPar(numero))
printf("\nO numero eh par\n");
else
printf("\nO numero eh impar\n");
system("pause");
return 0;
}
31
6.3 Função Sem Retorno e/ou Sem Entradas 6 FUNÇÕES
Também há funções que não recebem entradas. Assim, o protótipo delas fica
da seguinte forma:
#include<stdio.h>
#include<stdlib.h>
mensagem();
printf("\nRepita!\n");
mensagem();
system ("pause");
return 0;
}
void mensagem(void) {
32
6.4 Vetores como parâmetros de funções 6 FUNÇÕES
printf("\nPET Eletrica\n");
}
#include<stdio.h>
#include<stdlib.h>
33
6.4 Vetores como parâmetros de funções 6 FUNÇÕES
int main(){
int array1[10];
int tam1;
int array2[2][3] = {1, 2, 3, 4, 5};
int array3[2][3] = {{1, 2}, {4}};
system("pause");
return 0;
}
34
6.5 Exercı́cios de Revisão 6 FUNÇÕES
}
}
int i, j;
for (i=0; i <= 1; i++) {
for (j=0; j <= 2; j++) {
printf("%d", a[i][j]);
}
printf("\n");
}
}
b) Usando a função do item anterior, faça um programa que lê dois inteiros
positivos a e b e responda se a é permutação de b.
III Faça uma função que receba dois vetores tipo char e compare se estes são
iguais. A função deve retornar 1 se os vetores forem iguais e 0 caso contrário.
35
6.6 Recursividade 6 FUNÇÕES
6.6 Recursividade
Uma poderosa caracterı́stica de muitas linguagens de programação, incluindo
C, é o fato de que uma função pode chamar a si mesma. Quando isto ocorre,
dizemos que a função é recursiva. Um exemplo clássico é para o cálculo do
fatorial de um número.
#include<stdio.h>
#include<stdlib.h>
int fatorial(int n) {
if (n)
return n*fatorial(n-1);
else
return 1;
}
36
6.7 Escopo de variáveis 6 FUNÇÕES
#include<stdio.h>
#include<stdlib.h>
int main() {
int a, b=5, c=7;
for (a=0; a<10; a++) {
int b=0, c=1;
printf("\na = %d, b = %d, c = %d", a, b, c);
}
printf("\na = %d,b = %d, c= %d", a, b, c);
system ("pause");
return 0;
}
37
7 INTRODUÇÃO A APONTADORES
ter uma variável local com o mesmo nome de uma variável global. Quando isto
ocorre, o programa dá prioridade à variável local.
#include<stdio.h>
#include<stdlib.h>
int main(){
printf( "\na = %d, b = %d, c = %d", a, b, c);
b++;
a = a+5;
printf("\nb = %d", b);
imprimeABC();
system ("pause");
return 0;
}
7 Introdução a Apontadores
7.1 Visão Geral
A diferença entre os bons programadores em C e todos os outros está certa-
mente no domı́nio que têm da manipulação de apontadores.
38
7.2 Declaração de apontadores 7 INTRODUÇÃO A APONTADORES
/*Declaração de um apontador*/
tipo *ptr;
Neste caso ptr é o nome da variável do tipo apontador, tipo é o tipo da variável
para qual apontará e o *(asterisco) indica que é uma variável do tipo apontador.
char a,b,*p,c,*q;
int idade, *p idade;
39
7.3 Inicialização de apontadores 7 INTRODUÇÃO A APONTADORES
int x=5;
int *ptr;
ptr = &x;
Neste exemplo, primeiro declara-se a variável inteira x com valor 5 e de-
claramos o apontador inteiro ptr. Depois disso, inicializamos o apontador ptr
com o endereço da variável x. Ou seja, na terceira linha de código dizemos que
apontamos ptr para o endereço da variável x.
int x = 5;
float pi = 3.14;
int *ptr x=&x;
float *pointer to pi = π
#include <stdio.h>
#include <stdlib.h>
int main () {
int x = 5;
int *ptr;
ptr = &x;
//exibe o valor de x
printf("%d\n\n", x);
40
7.4 Aritmética de apontadores 7 INTRODUÇÃO A APONTADORES
system("pause");
}
5
5
2686788
26866784
2686788
Deste exemplo podemos concluir que *ptr é igual a x, e ptr é igual a &x.
Com isso vemos melhor como funciona um apontador e como usá-lo.
#include <stdio.h>
#include <stdlib.h>
41
7.5 Mais operações com apontadores7 INTRODUÇÃO A APONTADORES
system("pause");
}
Saı́da do programa:
2686788
2686792
ptr1=ptr2;
Esse primeiro exemplo faz com que ptr1 aponte para o mesmo lugar que
ptr2.
*ptr1=*ptr2;
42
7.6 Exercı́cios de Revisão 7 INTRODUÇÃO A APONTADORES
Nesse segundo caso, estamos igualando os valores indicados pelos dois apon-
tadores: alteramos o valor que era apontado por ptr1 pelo valor apontado por
ptr2.
(*ptr1)++;
Aqui, colocamos *ptr1 entre parênteses para especificar que queremos al-
terar o valor apontado por ptr1. Ou seja, iremos incrementar o conteúdo da
variável indicada pelo apontador ptr1.
*ptr1++;
x=*(ptr1+15);
43
8 EXERCÍCIOS COMPLEMENTARES
8 Exercı́cios Complementares
I - Faça um programa em C que receba as notas de quatro estágios, a nota
de um exercı́cio extra (que vale 1 ponto) e diga se o aluno foi aprovado por
média, reprovado por média ou para final. Nesse último caso, informar qual a
nota mı́nima necessária para ser aprovado. (As regras de aprovação serão as da
UFCG).
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
III - Calcule a soma dos 10 primeiros termos da série de Taylor para a função
exponencial, para x=1:
x x2 x3 x4 x5
ex = 1 + + + + + + ..., −∞ < x < ∞
1! 2! 3! 4! 5!
Determinando, dessa forma, um valor aproximado da constante de Euler.
VII - Faça um programa que lê da entrada padrão duas matrizes 3x3, calcula
o produto de ambas e exibe o resultado na tela.
IX - Escreva uma função que recebe uma matriz real Amxn e determina a
sua transposta (se B é a matriz transposta de A então aij = bji) e depois exibe
na tela.
44
8 EXERCÍCIOS COMPLEMENTARES
X - Faça uma função que verifica se uma matriz Amxm é a matriz identidade.
XIV - Faça uma função recursiva que retorna o n-ésimo valor da serie de
Fibonacci, onde o n-ésimo termo é a soma dos termos anteriores. Os dois pri-
meiros termos são 1. Vejamos os 10 primeiros termos: 1 1 2 3 5 8 13 21 34 55 89 ...
45
REFERÊNCIAS REFERÊNCIAS
Referências
[1] Mesquita, R.C. Apostila: Curso de Linguagem C. UFMG, s/d;
[2] Projeto Mac Multimı́dia - Material Didático para disciplinas de Introdução
a Computação - http : //www.ime.usp.br/ macmulti/ - acessado no dia
29/09/2008
[6] Deitel, P.J., Deitel, H.M. Como Programar em C. 6a Edição. São Paulo:
Prentice Hall, 2011. 848 p.
46