1. Como compilar programas usando o DevC++?

Documentos relacionados
Estruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões.

LINGUAGEM DE PROGRAMAÇÃO C AULA 2. Professor: Rodrigo Rocha

LÓGICA DE PROGRAMAÇÃO. PROFª. M.Sc. JULIANA H Q BENACCHIO

3.1 - Funções para manipular dados de entrada e saída padrão

Aula 03 - Linguagem C

Linguagem C: Introdução

Aula 12- Variáveis e valores reais

Computação para Informática - Prof. Adriano Joaquim de Oliveira Cruz Segunda Aula Prática - 29 de agosto de 2008

Universidade Federal do Espírito Santo. Programação I Tipos de Dados Básicos - C Professora: Norminda Luiza

modificador h instrui a função printf( ) a exibir um short int. Portanto, %hu indica que o dado é do tipo short unsigned int.

INTRODUÇÃO A LINGUAGEM C

Linguagem C. IF61A/IF71A - Computação 1 Prof. Leonelo Almeida. Universidade Tecnológica Federal do Paraná

Introdução à Programação

Hello World. Linguagem C. Tipos de Dados. Palavras Reservadas. Operadores Aritméticos. Pré e pós incremento e pré e pós decremento

Laboratório de Programação II

Sistemas Operacionais e Introdução à Programação. Programação com linguagem C

Computação para Informática - Prof. Adriano Joaquim de Oliveira Cruz Segunda Aula Prática - 3 de setembro de 2010

Aula 03: Introdução a C

Linguagens de Programação

A Linguagem C. A forma de um programa em C

Faculdade de Computação

Introdução à Computação MAC0110

Tópicos em C. Eliade F. Lima

ECT1203 Linguagem de Programação

Introdução à Linguagem C

Algoritmos e Programação

Linguagem de Programação C. Expressões em C

Programação Estruturada

scanf () Funções de Entrada e Saída Formatada leitura de dados; formato geral: scanf (string_de_controle,lista_de_argumentos);

Algoritmos RESUMO - LINGUAGEM C

Programação de Computadores I Introdução ao C PROFESSORA CINTIA CAETANO

Estrutura básica de um programa Instruções do Programa Sintaxe das instruções Diretivas apenas o contexto Variáveis e Constantes Tipos e modificadores

Princípios de Desenvolvimento de Algoritmos MAC122

3. Linguagem de Programação C

Tipos de Dados, Variáveis e Entrada e Saída em C. DCC 120 Laboratório de Programação

Linguagem C Princípios Básicos (parte 1)

SSC304 Introdução à Programação Para Engenharias. Introdução a Linguagem C. GE4 Bio

Introdução à Programação C

Linguagem C. André Tavares da Silva.

Introdução à Ciência da Computação

Introdução a Linguagem C. Prof. Me. Hélio Esperidião

Algoritmos e Estruturas de Dados I IEC012. Linguagem C - Guia de bolso - Prof. César Melo

Linguagens de Programação PROGRAMAÇÃO DE COMPUTADORES. Linguagem C. Linguagem C Estrutura Básica. Constante (literais) Linguagem C Primeiro Programa

Linguagens de Programação I

Programação Básica. Estrutura de um algoritmo

RESUMO DE CONCEITOS BÁSICOS DE C

Funções de Entrada e Saída Formatada Constantes de barra invertida

K&R: Capitulo 2 IAED, 2012/2013

Conhecendo a Linguagem de Programação C

Estrutura do programa

MC102 Algoritmos e Programação de Computadores

Linguagem de Programação C

Variáveis, Comandos de Atribuição e Comando de Entrada e Saída

system("pause"); //Envia comando para o sistema operacional solicitando parada de execução do programa } //limitador do corpo do programa

Introdução a Programação na Linguagem C.

5 Variáveis e Expressões. Unesp Campus de Guaratinguetá

Algoritmos e Estruturas de Dados I (DCC/003) Estruturas Básicas. Aula Tópico 2

Introdução à Linguagem de Programação C: Variáveis, Constantes, Expressões, Atribuição, Tipos de dados, Entrada e Saída de Dados

Estrutura de Dados Conceitos Iniciais

PROGRAMAÇÃO I E N T R A DA E S A Í DA D E DA D O S

Aula 02 - Introdução a Linguagem C

Variáveis e Operadores em C

INTRODUÇÃO À LINGUAGEM C

Introdução à Linguagem C

Tabela T1: Tags para comandos de impressão.

Olimpíadas de Informática Aulas preparatórias Introdução a Programação em C.

Aula 5 - Mais C e repetição

Curso de C. Declaração de Variáveis 18/3/ :48 1

Linguagem C Variáveis, Tipos de Dados, Comandos e Estrutura Linear

Modulo 4: while do while (limites de variáveis)

Algoritmos: Conceitos Fundamentais

Conceitos básicos. Computação eletrônica: Gurvan Huiban

Introdução à Linguagem C. Adaptado de slides das Profas. Patrícia Jaques, Mônica Py, Deise Saccol e Vania Bogorny

MC102 Algoritmos e programação de computadores Aula 3: Variáveis

Programação de Computadores II

Disciplina de Algoritmos e Programação

LINGUAGEM E TÉCNICAS DE PROGRAMAÇÃO

Aula 3 Constantes e funções de E/S

Linguagem C Entrada/Saída (console)

Comandos de entrada. e saída. Comandos de entrada. Comandos de entrada. Comandos de entrada. Comandos de entrada. Comandos de entrada.

Introdução à Programação

Linguagem C: Variáveis e Operadores. Prof. Leonardo Barreto Campos 1

Utilizando cin: primeiros passos

Declarações. C diferencia letras maiúsculas de minúsculas! int n, N; n é diferente de N!

Utilização da Linguagem C

Ocorrem em três tipos:

Linguagem C Variáveis, Tipos de Dados, Comandos e Estrutura Linear

6 Alguns conceitos e comandos em programação

Capítulo 1: Introdução à Linguagem C. Pontifícia Universidade Católica Departamento de Informática

INTRODUÇÃO À LINGUAGEM C

Expressões lógicas, expressões condicionais, prioridades e operadores, base binária, operadores de bits

SSC304 Introdução à Programação Para Engenharias. Variáveis e I/O em C. GE4 Bio

A linguagem C (visão histórica)

Disciplina de Algoritmos e Programação

Algoritmos e Estruturas de Dados I (DCC/003) 2013/1. Estruturas Básicas. Aula Tópico 4

3. Linguagem de Programação C

Modificadores de Tipos

Faculdade Anglo-Americano Curso de Ciência da Computação Linguagem de Programação. Lista de Exercícios 1

Introdução a Linguagem C

Programação de Computadores II Aula 03. Linguagem C I

Transcrição:

RUDIMENTOS DE LINGUAGEM C 2ª série de exercícios Referência: Curso C da UFMG (o arquivo.pdf ou as páginas html estão no arquivo Material de apoio.zip ) 1. Como compilar programas usando o DevC++? Uma vez instalado o programa, você pode criar um novo programa através da opção: File -> New Source File. Na janela que aparece, você digita o seu programa. Veja que o DevC++ oferece para você um programa inicial que você pode apagar, se quiser. Uma vez digitado o seu programa, você pode compila-lo e executá-lo através da opção: Execute -> Compile and Run, ou digitando diretamente Cntrl+F10, ou buscando a opção "Compile and Run" na barra de ferramentas. Note que se você fizer isto para um programa que não espera nenhuma entrada do usuário, o programa será executado, terminará sua execução, e a janela onde ele está executando será automaticamente fechada ao seu final. Com isto, você não conseguirá ver a saída do programa. Para evitar que isto aconteça, você pode modificar seus programas incluindo as linhas: no início do programa e antes do return (0); como feito no programa abaixo: /* Um Primeiro Programa */ printf ("Ola! Eu estou vivo!\n"); 2. O C é "Case Sensitive" /* soma de N termos da serie harmonica 1+1/2+1/3+1/4+... */ int N, i; double s; // declarações printf ("Entre com o numero de termos:\n"); scanf("%d", &N); printf("n = %d", N); // checando a entrada s=0; for (i=1;i<=n;i++)s = s + 1.0/(double) i; // o cast (modelador) : passando de inteiro para double printf("\nsoma dos %d primeiros termos da serie harmonica = %lf", N, s); // lf = long float = double // 1 byte = 8 bits // An int variable can store an integer value in the range 32768 to +32767. // A float number has about seven digits of precision and a range of about 1.E 36 to 1.E+36. // A float takes four bytes to store. // A double number has about 13 digits of precision and a range of about 1.E 303 to 1.E+303. // A double takes eight bytes to store. Nas aplicações comuns, os números com ponto flutuante são todos tratados no C como double. i++ é equivalente a i = i+1 s += i é equivalente a s = s+i

3. Determinando a precisão de máquina /* encontrando o menor numero positivo eps para o qual 1 + eps!= 1 */ int i; double eps; eps = 1.0; i = 0; while ((1.0 + eps)!= 1.0) eps = eps/2.0; i++; ; printf("\neps = %g (%d)", eps, i); (o resultado no meu PC foi eps = 5,4 10-20, após 64 divisões) EXERCICIO 1: Faça um programa para obter o maior valor de uma variável double x para o qual x+1 x. 4. A estrutura em funções do C #include <math.h> /* a função abaixo funciona corretamente para n <= 32767 */ /* F(32767) = 9.3e-10 */ double F( int n ) double sinal; sinal = ((n % 2)==0)? -1.0 : 1.0; return(sinal/(double) (n*n)); int n; double s, a, epsilon; /* somando a serie F(n) até que o termo geral fique menor do que epsilon */ printf( \nentre com o erro maximo epsilon:\n ); scanf( %lf, &epsilon); printf( epsilon = %g\n, epsilon); if(epsilon < 1.0e-9) printf( \n Este programa funciona somente se epsilon >= 1.0e-9\n ); return(1); s = 0.0; n = 1; do a = F(n); s += a; n++; while (fabs(a) >= epsilon); printf("\nsoma dos %ld primeiros termos = %g \n", n, s); (para epsilon = 10-6 2, a soma dos primeiros 1002 termos é 0,822468; essa série converge para π /12 =0,822467) EXERCICIO 2: Modifique o programa acima para que ele some termos da série até que a diferença na soma ao se acrescentar um novo termo seja menor do que epsilon. EXERCICIO 3: Modifique o programa acima para que ele some termos da série até que a diferença relativa na soma ao se acrescentar um novo termo seja menor do que epsilon.

DESAFIO (muito difícil!!!) : Modifique o programa acima de modo que ele funcione até a precisão de máquina. A dificuldade é que voce não poderá usar inteiros no cálculo da função, porque o número de termos pode exceder o valor máximo que uma variável inteira pode guardar. E lembre-se de que, para x suficientemente grande, o computador vai fazer 1 + x = x!!! 5. Os tipos de dados no C Tipo Num de bits Formato para leitura com scanf Inicio Intervalo 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 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 Fim códigos de formato do printf : Código Formato %c Um caracter (char) %d Um número inteiro decimal (int) %i O mesmo que %d %e Número em notação científica com o "e"minúsculo %E Número em notação científica com o "e"maiúsculo %f Ponto flutuante decimal %g Escolhe automaticamente o melhor entre %f e %e %G Escolhe automaticamente o melhor entre %f e %E %o Número octal %s String %u Decimal "unsigned" (sem sinal) %x Hexadecimal com letras minúsculas %X Hexadecimal com letras maiúsculas %% Imprime um % %p Ponteiro É possível também indicar o tamanho do campo, justificação e o número de casas decimais. Para isto usa-se códigos colocados entre o % e a letra que indica o tipo de formato. Um inteiro indica o tamanho mínimo, em caracteres, que deve ser reservado para a saída. Se colocarmos então %5d estamos indicando que o campo terá cinco caracteres de comprimento no mínimo. Se o inteiro precisar de mais de cinco caracteres para ser exibido então o campo terá o comprimento necessário para exibi-lo. Se o comprimento do inteiro for menor que cinco então o campo terá cinco de comprimento e será preenchido com espaços em branco. Se se quiser um preenchimento com zeros pode-se colocar um zero antes do número. Temos então que %05d reservará cinco casas para o número e se este for menor então se fará o preenchimento com zeros. O alinhamento padrão é à direita. Para se alinhar um número à esquerda usa-se um sinal - antes do número de casas. Então %-5d será o nosso inteiro com o número mínimo de cinco casas, só que justificado a esquerda. Pode-se indicar o número de casas decimais de um número de ponto flutuante. Por exemplo, a notação %10.4f indica um ponto flutuante de comprimento total dez e com 4 casas decimais. Entretanto, esta mesma notação, quando aplicada a tipos como inteiros e strings indica o número mínimo e máximo de casas. Então %5.8d é um inteiro com comprimento mínimo de cinco e máximo de oito. códigos de formato do scanf : Código Formato %c Um único caracter (char) %d Um número decimal (int) %i Um número inteiro %hi Um short int %li Um long int %e Um ponto flutuante %f Um ponto flutuante %lf Um double %h Inteiro curto %o Número octal %s String %x Número hexadecimal %p Ponteiro

6. Exemplo: encontrando uma solução de f(x) = 0 num dado intervalo pelo método da bisecção A listagem abaixo é para a função f(x) = x 3 2x 2 + x 1, que tem uma raiz no intervalo [0,2]. ler os valores x_inicial, x_final, eps e MAX f_inicial = f(x_inicial) f_final = f(x_final) #include <math.h> ERRO: os extremos tem o mesmo sinal > 0 f_inicial*f_finall = 0 f_inicial = 0 S A raiz é x_inicial int MAX = 200; < 0 N A raiz é x_final double F( double x ) return(-1.0+x*(1.0+x*(-2.0+x))); x_medio = (x_inicial+x_final)/2 f_medio = f(x_medio) int i; double x_inicial, x_final, x_medio, f_inicial, f_final, f_medio, EPS; f_medio*f_inicial >= 0 printf("\nentre x_inicial, x_final e EPS:\n"); < 0 scanf("%lf %lf %lf", &x_inicial, &x_final, &EPS); printf(" x_inicial = %g x_final = %g EPS = %g\n", x_inicial, x_final, EPS); f_inicial = F(x_inicial); f_final = F(x_final); if ((f_inicial*f_final) > 0) printf("\n ERRO: f(x) tem o mesmo sinal nos extremos do intervalo\n"); return(1); if (fabs(f_inicial) < EPS) printf("\n A raiz eh x = %g\n", x_inicial); if (fabs(f_final) < EPS) printf("\n A raiz eh x = %g\n", x_final); for(i=1; i<=max; i++) x_medio = (x_inicial+x_final)/2.0; f_medio = F(x_medio); if ((f_medio*f_inicial) >= 0.0) x_inicial = x_medio; f_inicial = f_medio; else x_final = x_medio; f_final = f_medio; ; if (fabs(f_medio) < EPS) printf("\n A raiz eh x = %g (%d iteracoes)\n", x_medio, i); printf("\ O numero maximo de iteracoes (%d) foi excedido \n", MAX); return(2); i =1 f_inicial = f_medio x_inicial = x_medio f_final = f_medio x_final = x_medio <= i : MAX Estourou o numero maximo de iterações i = i+1 S f_medio >= eps N a raiz é x_medio NOTE que o programa não corresponde exatamente aos passos do fluxograma. O fluxograma ajuda a estabelecer os passos necessários, e a implementação é feita de modo a utilizar as facilidades da linguagem. Caso fosse necessário, poderíamos fazer um fluxograma que correspondesse exatamente ao programa fonte. > EXERCICIO 4: Modifique o trecho de leitura para que o programa continue pedindo os dados até que f(x) tenha sinais opostos nos extremos do intervalo. EXERCICIO 5: Refaça o loop de iterações usando o comando while.

EXERCICIO 6: Teste o programa para encontrar as raízes de: (a) f(x) = x 4 +10x 3 + x 2 + 5x + 1, no intervalo [ 1, 0]. x (b) f (x) x e (c) f (x) x 5tan(x) =, no intervalo [0,1] =, no intervalo [π,3π/2] 7. Encontrando o ponto fixo de x = f(x), a partir de um chute inicial Observe, no gráfico ao lado, como as iterações x n+1 = f(x n ), a partir de um valor inicial x 0, convergem para o ponto no qual x = f(x). x 0 EXERCICIO 7: Verifique se essas iterações vão convergir nos casos abaixo: EXERCICIO 8: Faça um programa em C implementando essas iterações para absoluto e um número máximo de iterações. x x = e. O usuário deve especificar o erro máximo 8. O truque do maior valor e do menor valor EXERCICIO 9: Faça um programa em C que estime o maior e o menor valor de uma função f(x) no intervalo [x 1, x 2 ], amostrando esse intervalo em passos dx. EXERCICIO 10: Usando o programa do Exercício 9, faça outro que determina o maior (ou o menor) valor de uma função f(x) no intervalo [x 1, x 2 ], com uma dada precisão.