Baixe o app para aproveitar ainda mais
Prévia do material em texto
Linguagem C Parte 1 Características da Linguagem C Idealizada a partir da linguagem BCPL, que influenciou posteriormente a linguagem B., sendo na década de 1970, criada como C, que era utilizada no sistema operacional UNIX, versão 5. Todo compilador C vem com uma biblioteca padrão com funções que realizam tarefas de propósito geral. Ex: operações de entrada e saída, operações matemáticas, etc. Essa biblioteca pode estar contida em diferentes arquivos menores. Uma função é uma rotina composta por um código que executa uma determinada tarefa específica. Uma função pode se encontrar pronta numa biblioteca ou então ser criada pelo programador em um programa. Quando se utiliza uma das funções de biblioteca, o compilador C apenas marca seu nome para que o linkeditor, posteriormente, combine o código do programa com o código dessas funções, na criação do código executável do programa. Além do uso de funções prontas, todo programa em C consiste de uma ou mais funções editadas e criadas pelo programador. A única que realmente tem que existir é a chamada função main, que significa principal, a qual normalmente contém a estrutura principal do programa, tendo as outras funções o objetivo de executar algumas tarefas para o programa. Passos para a criação de um programa em C: editar o código fonte do programa em C compilar o programa (código objeto) linkeditar o programa com funções de bibliotecas necessárias (código executável). Formato geral de um programa: declarações globais: - inclusão de bibiliotecas - declarações de outras funções do programa - declarações de variáveis globais int main ( ) { corpo principal: - declarações de variáveis locais - comandos e estruturas } ... corpo das outras funções se existirem onde, inclusão de bibliotecas: indica quais as bibliotecas, de cujas funções o programa necessita, serão utilizadas. Declaração da inclusão: #include< nomeBibilioteca>. declarações de outras funções do programa: protótipos de funções criadas pelo programador, se existirem no programa declarações de variáveis globais: são variáveis que podem ser utilizadas por qualquer função criada pelo programador, dentro do programa. declarações de variáveis locais: são variáveis que podem ser utilizadas apenas no código da função aonde elas se encontram. comandos e estruturas: compreendem o código da tarefa executada na função Em C, todo corpo de comandos contidos numa função deve estar contido entre chaves { }. Comentários: São observações adicionadas ao programa com o intuito de documentar ou explicar algo. Não são interpretadas pelo compilador. Podem aparecer sozinhos numa linha ou junto em uma mesma linha de código. Forma de uso: // aparecem no início de comentários de uma linha /* iniciam e terminam comentários que utilizam varias linhas */ Dados São representados em variáveis de memória ou por constantes. Os tipos básicos de dados são: char (character): compreende 1 caracter que pode ser letras, dígitos numéricos, caracteres especiais. int (integer): números inteiros positivos e negativos float (floating): números reias (fracionários) double: números reias (fracionários) com dupla precisão Modificadores dos tipos básicos: usado para alterar um tipo básico adaptando-o às necessidades de diversas situações. signed: com sinal unsigned: sem sinal short: curto long: longo Ex: unsigned int Identificadores: são nomes fornecidos a funções e variáveis, contendo um ou mais caracteres, onde o primeiro deve ser um letra ou sublinhado e, os demais caracteres, letras, números ou sublinhado. Letras maiúsculas e minúsculas são tratados diferentemente. Não se pode utilizar palavras chaves da linguagem como identificadores. Variáveis: posições de memória para nomeadas para se armazenar dados, que podem ser alterados durante a execução do programa. Todas as variáveis devem ser declaradas antes de serem utilizadas. Declaração: tipo listaVariáveis; onde, - tipo: um dos tipos básicos ou definidos com ou sem modificadores - listaVariáveis: uma ou mais variáveis desse tipo separadas por virgulas. Ex: int i, j; // declarações de duas variáveis do tipo int double num, valor, total; // declarações de três variáveis do tipo double Inicialização de variáveis: uma variável pode ser inicializada no momento de sua declaração. Ex: char ch = 'a'; //a variável ch é inicializada com o caracter a float x = 28.39; //a variável x é inicializada com o valor 28.39 Constantes: valores fixos que não podem ser alterados durante a execução do programa. Ex: 65, 9.884, 'X', “Algoritmo” Variáveis do tipo constante: são constantes que podem ser nomeadas para uso em um programa. Se utilizam dos tipos básicos. Sua declaração é feita pela cláusula: const Ex: const int a = 10; // a variável constante a representa o valor 10 no programa Operador de Atribuição ( = ): atribui ou armazena um valor a uma variável assinalada à esquerda na expressão Ex: A = 8; // o valor 8 é armazenada na variável A B = 'A'; // o caracter A é armazenada na variável B num = A; // o conteúdo da variável A é armazenado na variável num x = y = z = 0; // a valor 0 é armazenado nas variáveis x, y e z Operadores Aritméticos: + soma - subtração * multiplicação / divisão (retorna o quociente) % divisão inteira (retorna o resto) Incrementos e decrementos: ++ incremento de 1 unidade o conteúdo de uma variável. Ex: x++; // é o mesmo que x = x + 1; -- decremento de 1 unidade o conteúdo de uma variável. Ex: x--; // é o mesmo que x = x – 1; += incrementa unidades especificadas no conteúdo de uma variável. Ex: x+=3; //incrementa de 3 unidades o conteúdo da variável x ( x = x + 3;) -= decrementa unidades especificadas no conteúdo de uma variável. Ex: x-=5; //decrementa de 5 unidades o conteúdo da variável x ( x = x - 5;) *= multiplica uma quantidade especificada no conteúdo de uma variável. Ex: x*=7; //multiplica 7 no conteúdo da variável x ( x = x * 7;) /= divide uma quantidade especificada no conteúdo de uma variável. Ex: x/=4; //divide por 4 o conteúdo da variável x ( x = x / 4;) Estruturas de Controle Fornecem uma estrutura à execução de um algoritmo, podendo ser combinadas. Tipos: Seqüencial, condicional e repetitiva. Estrutura Seqüencial: Expressa uma seqüência única de comandos de um algoritmo a serem executados na ordem em que aparecem. Exemplo de um algoritmo em C: int X, Y, Total; //declara três variáveis inteiras int main ( ) //inicia a função main { X = 5; //armazena o valor 5 na variável X Y = 8; //armazena o valor 8 na variável Y Total = X + Y; //armazena o resultado da expressão na variável Total } Operações de entrada e saída Em C, as operações de entrada e saída de dados estão contidas em funções prontas contidas em bibliotecas da linguagem. Para o uso dessas funções, deve-se incluir a biblioteca correspondente no programa por meio da cláusula #include. Saída de dados: Envia ou “escreve” uma informação numa saída específica. Ex: vídeo. Uma das funções para este fim é a função cout, que se encontra na biblioteca <iostream.h> Declaração: cout << informação; onde, informação pode ser: uma constante. Ex: cout <<55; //envia o valor 55 cout <<“valor inválido”;//envia o texto conteúdo de variáveis de memória. Ex: cout << “A soma é “<< X; //envia texto e o conteúdo da variável X resultados de expressões aritméticas. Ex: cout <<“Resultado:“ << P*B/3; //envia texto e o resultado da expressão A saída de dados no vídeo permite que se possa controlar: Salto de linhas: caracter \n. Este deve ser inserido no texto no local para o salto de linha. A quantidade de caracteres desse tipo indica a quantidade de saltos desejada. Ex: cout << “\nA soma é “<< X; Tabulamento: caracter \t. Este deve ser inserido no texto no local para o efeito de tabuçamento. A quantidade de caracteres desse tipo indica a quantidade de tabs desejada. Ex: cout << “\nOs valores são: \t“<< X <<”\t”<< Y; Entrada de dados: Recebe ou “lê” um dado de entrada específica (ex: teclado) e o armazena numa variável de memória. Uma das funções para este fim é a função cin, que se encontra na biblioteca <iostream.h>. Declaração: cin >> nomeVariável; Ex: cout << “\nDigite uma letra”; //envia o texto cin >> M; //recebe por digitação um caracter e o armazena na variável M Função system A partir dos próximos exemplos será incluída a biblioteca <stdlib.h>, para uso da função system contida nesta biblioteca. Para essa função será enviado como parâmetro a cláusula pause, que solicita uma pausa na execução do programa. Quando executada essa pausa no programa, a mensagem “Aperte uma tecla para continuar” aparece e a execução fica em suspenso até que uma tecla qualquer seja pressionada. Isso é necessário, pois o ambiente DEV C++ finaliza a janela de execução ao final do programa não permitindo a visualização dos resultados. Exemplo: 1 –Receber dois números inteiros e informar a soma deles. #include<iostream.h> //inclusão da biblioteca #include<stdlib.h> //inclusão da biblioteca int X, Y, Total; //declaração de variáveis inteiras int main ( ) //inicia a função main {cout <<“\nDigite um número ”; //envia o texto cin >> X; //recebe por digitação um número e o armazena na variável X cout <<“\nDigite outro número ”; //envia outro texto cin >> Y; //recebe por digitação um número e o armazena na variável X Total = X + Y; //armazena na variável Total o resultado da expressão cout <<“\nA soma é “ <<Total; //envia o texto e o conteúdo da variável Total cout << “\n\n”; //salta duas linhas no vídeo system (“pause”); //executa uma pausa na execução } 2 - Receber por digitação dois números e visualizar os resultados da soma e da subtração dos dois números. #include<iostream.h> //inclusão da biblioteca #include<stdlib.h> //inclusão da biblioteca int n1, n2, soma, sub; //declaração de variáveis inteiras int main ( ) //inicia a função main {cout <<“\nDigite um número ”; //envia o texto cin >> n1; //recebe por digitação um número e o armazena na variável n1 cout <<“\nDigite outro número ”; //envia outro texto cin >> n2; //recebe por digitação um número e o armazena na variável n2 soma = n1 + n2; //armazena na variável soma o resultado da soma sub = n1 - n2; //armazena na variável sub o resultado da subtração cout <<“\nA soma é “ <<soma; //envia o texto e o conteúdo da variável soma cout <<“\nA subtração é “ <<sub; //envia o texto e o conteúdo da variável sub cout << “\n\n”; //salta duas linhas no vídeo system (“pause”); //executa uma pausa na execução } 3 - Receber por digitação dois números e visualizar os resultados da soma, da subtração, da multiplicação e da divisão, dos dois números. Obs: neste algoritmo as variáveis foram declaradas como tipo float (números reais), para permitir divisão fracionária. Foram utilizadas três versões diferentes para descrevê-lo. 1ª versão (declaração de 4 variáveis para o armazenamento dos resultados das expressões) #include<iostream.h> //inclusão da biblioteca #include<stdlib.h> //inclusão da biblioteca float n1, n2, soma, sub, mult ,divi; //declaração de variáveis fracionárias int main ( ) //inicia a função main {cout <<“\nDigite um número ”; //envia o texto cin >> n1; //recebe por digitação um número e o armazena na variável n1 cout <<“\nDigite outro número ”; //envia outro texto cin >> n2; //recebe por digitação um número e o armazena na variável n2 soma = n1 + n2; //armazena na variável soma o resultado da soma sub = n1 - n2; //armazena na variável sub o resultado da subtração mult = n1 * n2; //armazena na variável mult o resultado da multiplicação divi = n1 / n2; //armazena na variável divi o resultado da divisão cout <<“\nA soma é “<<soma; //envia o texto e o conteúdo da variável soma cout <<“\nA subtração é “<<sub; //envia o texto e o conteúdo da variável sub cout <<“\nA mltiplicação é “<<mult; //envia o texto e o conteúdo da variável mult cout <<“\nA divisão é “<<divi; //envia o texto e o conteúdo da variável divi cout << “\n\n”; //salta duas linhas no vídeo system (“pause”); //executa uma pausa na execução } 2ª versão (declaração de apenas uma variável para o armazenamento dos resultados das expressões) #include<iostream.h> //inclusão da biblioteca #include<stdlib.h> //inclusão da biblioteca float n1, n2, result; //declaração de variáveis fracionárias int main ( ) //inicia a função main {cout <<“\nDigite um número ”; //envia o texto cin >> n1; //recebe por digitação um número e o armazena na variável n1 cout <<“\nDigite outro número ”; //envia outro texto cin >> n2; //recebe por digitação um número e o armazena na variável n2 result = n1 + n2; //armazena na variável result o resultado da soma cout <<“\nA soma é “ <<result; //envia o texto e o conteúdo da variável result result = n1 - n2; //armazena na variável result o resultado da subtração cout <<“\nA subtração é “ <<result; //envia o texto e o conteúdo da variável result result = n1 * n2; //armazena na variável result o resultado da multiplicação cout <<“\nA multiplicação é “ <<result; //envia o texto e o conteúdo da variável result result = n1 / n2; //armazena na variável result o resultado da divisão cout <<“\nA divisão é “ <<result; //envia o texto e o conteúdo da variável result cout << “\n\n”; //salta duas linhas no vídeo system (“pause”); //executa uma pausa na execução } 3ª versão (as expressões são calculadas dentro do cout) #include<iostream.h> //inclusão da biblioteca #include<stdlib.h> //inclusão da biblioteca float n1, n2; //declaração de variáveis fracionárias int main ( ) //inicia a função main {cout <<“\nDigite um número ”; //envia o texto cin >> n1; //recebe por digitação um número e o armazena na variável n1 cout <<“\nDigite outro número ”; //envia outro texto cin >> n2;//recebe por digitação um número e o armazena na variável n2 cout <<“\nA soma é “ << n1+n2; //envia o texto e o conteúdo da variável result cout <<“\nA subtração é “ << n1-n2;//envia o texto e o conteúdo da variável result cout <<“\nA multiplicação é “ << n1*n2; //envia o texto e o conteúdo da variável result cout <<“\nA divisão é “ << n1/n2; //envia o texto e o conteúdo da variável result cout << “\n\n”; //salta duas linhas no vídeo system (“pause”); //executa uma pausa na execução } Parte 2 Estrutura Condicional ou de Seleção Avalia se uma condição associada a cláusula de condição if (se) é verdadeira ou falsa, para determinar quais comandos deverão ser executados. Na comparação de dois valores utilizam-se os operadores relacionais. Operadores Relacionais: Referem-se a maneira como valores se relacionam uns com outros. == igual != diferente < menor < = menor ou igual > maior > = maior ou igual Uma estrutura condicional em C pode ser simples ou composta: Estrutura Simples: uma condição é avaliada e, se a condição for verdadeira, um conjunto ou bloco de um ou mais comandos são executados. Se a condição for falsa, nenhum bloco de comandos é indicado e a execução continua fora da estrutura Declaração da estrutura: if (condição) { Bloco com um ou mais comandos ou estruturas } O uso das chaves { } indicam o bloco de comandos. Não é necessário a cláusula END SE para indicar o fim da estrutura condicional. Quando no bloco de comandos houver apenas um comando não é obrigatório o uso das { }; Ex: if ( A == B) cout << “\nOs valores das duas variáveis são iguais”;} ou if ( A == B) cout << “\nOs valores das duas variáveis são iguais”; Obs: se o conteúdo das variáveis de memória A e B são iguais, a função cout é executada. Caso contrário, o programa segue normalmente fora da estrutura. Estrutura Composta: uma condição é avaliada e, se a condição for verdadeira, um conjunto ou bloco de um ou mais comandos são executados. Se a condição for falsa, um conjunto ou bloco de comandos de um ou mais comandos são executados. Após o término da execução de um dos blocos, a execução continua fora da estrutura Declaração da estrutura: if (condição) { Bloco com um ou mais comandos ou estruturas } else { Bloco com um ou mais comandos ou estruturas } A cláusula else (senão) indica a negação da condição da cláusula if. O uso das chaves { } indicam o bloco de comandos. Não é necessário a cláusula END SE para indicar o fim da estrutura condicional. Quando no bloco de comandos houver apenas um comando não é obrigatório o uso das { }; Ex: if (A == B) {cout <<“\nOs valores das duas variáveis são iguais”; } else {cout <<“\nOs valores das duas variáveis são diferentes”; } ou if (A == B) cout <<“\nOs valores das duas variáveis são iguais”; else cout <<“\nOs valores das duas variáveis são diferentes”; Obs: se o conteúdo das variáveis de memória A e B são iguais, a função cout do primeiro bloco é executado. Senão, a função cout do segundo bloco é executado. Nunca os dois blocos serão executados seqüencialmente. Após a execução de um deles, o programa segue normalmente fora da estrutura. Exercícios 1 – Receber por digitação um número inteiro e informar se o mesmo é par ou impar. 1ª versão ( foi criado a variável resto para armazenar o resto da divisão) #include<iostream.h> //inclusão da biblioteca #include<stdlib.h> //inclusão da biblioteca int num, resto; //declaração de variável inteira int main ( ) //inicia a função main {cout <<“\nDigite um número ”; //envia o texto cin >> num; //recebe por digitação um número e o armazena na variável num resto = num % 2; //armazena o resto da divisão do numero por 2 na variável resto if (resto == 0) //compara o conteúdo de resto com 0 {cout <<“\nO número é par“;} //informa que o numero é par else {cout <<“\nO número é impar“;} //informa que o numero é impar cout << “\n\n”; //salta duas linhas no vídeo system (“pause”); //executa uma pausa na execução } 2ª versão (o cálculo do resto da divisão foi feito dentro da condição. O seu resultado será comparado com o valor 0) #include<iostream.h> //inclusão da biblioteca #include<stdlib.h> //inclusão da biblioteca int num; //declaração de variável inteira int main ( ) //inicia a função main {cout <<“\nDigite um número ”; //envia o texto cin >> num; //recebe por digitação um número e o armazena na variável num if (num % 2 == 0) //compara resultado da expressão com 0 {cout <<“\nO número é par“;} //informa que o numero é par else {cout <<“\nO número é impar“;} //informa que o numero é impar cout << “\n\n”; //salta duas linhas no vídeo system (“pause”); //executa uma pausa na execução } Dentro de qualquer um dos blocos de comandos podem existir outras estruturas condicionais. Sempre que numa cláusula else for necessária uma condição a ser avaliada, deve existir um if associado à condição. Exemplo: if (condição) { if (condição) { Bloco com um ou mais comandos ou estruturas } else { Bloco com um ou mais comandos ou estruturas } } else { Bloco com um ou mais comandos ou estruturas } Exemplo: if (condição) { Bloco com um ou mais comandos ou estruturas } else { if (condição) { Bloco com um ou mais comandos ou estruturas } else { Bloco com um ou mais comandos ou estruturas } } Esta última forma também pode ser expressa na forma else if.. Exemplo: if (condição) { Bloco com um ou mais comandos ou estruturas } else if (condição) { Bloco com um ou mais comandos ou estruturas } else if (condição) { Bloco com um ou mais comandos ou estruturas } - - - - - - else { Bloco com um ou mais comandos ou estruturas } Exemplo de algoritmo: Receber por digitação dois números inteiros e um operador aritmético (+ ou -). Realizar a operação desejada e visualizar o resultado. 1ª versão (utiliza a variável result para armazenar o resultado e depois visualizá-lo) #include<iostream.h> //inclusão da biblioteca #include<stdlib.h> //inclusão da biblioteca int N1, N2, result; //declaração de variáveis inteiras char oper; //declaração de variável caracter int main () { cout << “\nDigite um número”; //envia o texto cin >> N1; //recebe por digitação um número e o armazena na variável N1 cout << “\nDigite um número”; //envia o texto cin >> N2; //recebe por digitação um número e o armazena na variável N2 cout << “\n Digite um operador aritmético (+ -)”; //envia o texto cin >> oper; //recebe por digitação o operador e o armazena na variável oper if (oper == '+') //compara conteúdo de oper com ‘+’ { result = N1 + N2; //armazena o resultado da expressão na variável result cout <<”\nResultado da soma: “ << result; //envia um texto e o conteúdo da variável result} else if (oper == '-') //compara conteúdo de oper com ‘+’ { result = N1 – N2; //armazena o resultado da expressão na variável result cout <<“\nResultado da subtração: “<<result; //envia um texto e o conteúdo da variável result } else { cout <<“\nOperador aritmético inválido“;} //envia um texto cout << “\n\n”; //salta duas linhas no vídeo system (“pause”); //executa uma pausa na execução } 2ª versão (a operação aritmética é feita no cout) #include<iostream.h> //inclusão da biblioteca #include<stdlib.h> //inclusão da biblioteca int N1, N2; //declaração de variáveis inteiras char oper; //declaração de variável caracter int main () { cout << “\nDigite um número”; //envia o texto cin >> N1; //recebe por digitação um número //e o armazena na variável N1 cout << “\nDigite um número”; //envia o texto cin >> N2; //recebe por digitação um número e o armazena na variável N2 cout << “\n Digite um operador aritmético (+ -)”; //envia o texto cin >> oper; //recebe por digitação um número e o armazena na variável oper if (oper == '+') { cout <<”\nResultado da soma: “ << N1+N2;} //envia um texto e o resultado da expressão else if (oper == '-') { cout <<“\nResultado da subtração: “<< N1–N2;} //envia um texto e o resultado da expressão else { cout <<“\nOperador aritmético inválido“;} //envia um texto cout << “\n\n”; //salta duas linhas no vídeo system(“pause”); //executa uma pausa na execução } Expressões condicionais Uma estrutura condicional pode conter na sua parte condição uma expressão condicional composta por mais de uma condição. Nesse caso, utilizam-se os operadores lógicos entre elas, os quais definem como as relações entre as condições são conectadas. Operadores Lógicos: ! not (NÃO) && and (E) || or (OU) Durante a execução do programa, o processador avalia cada condição da expressão condicional determinando se são verdadeiras ou falsas e, em seguida, utiliza os operadores lógicos aplicando a Tabela Verdade a seguir, para determinar o resultado final da expressão (V ou F). A Tabela Verdade é a mesma descrita nas aulas de algoritmos. Ex: if (A == B && C > 4) if (C < D || A >= B) if (!( A == D / 3 || C < = 9)) Exemplo Receber por digitação 3 números inteiros diferentes. Em seguida informar no vídeo os números em ordem crescente. 1ª versão: #include <stdlib.h> #include <iostream.h> int n1,n2,n3; int main () { cout <<”\nDigite um numero”; cin >> n1; cout <<”\nDigite um segundo numero diferente do primeiro”; cin >> n2; cout <<”\nDigite um terceiro numero diferente dos outros”; cin >> n3; if (n1 == n2 || n1 == n3 || n2 == n3) {cout <<”\nOs três numeros não são diferentes”;} else {if (n1 < n2 && n1 < n3 && n2 < n3) cout <<”\nOrdem crescente: “<<n1<<”, “<<n2<<”, “<<n3; else if (n1 < n2 && n1 < n3 && n3 < n2) cout <<”\nOrdem crescente: “<<n1<<”, “<<n3<<”, “<<n2; else if (n2 < n1 && n2 < n3 && n1 < n3) cout <<”\nOrdem crescente: “<<n2<<”, “<<n1<<”, “<<n3; else if (n2 < n1 && n2 < n3 && n3 < n1) cout <<”\nOrdem crescente: “<<n2<<”, “<<n3<<”, “<<n1; else if (n3 < n1 && n3 < n2 && n1 < n2) cout <<”\nOrdem crescente: “<<n3<<”, “<<n1<<”, “<<n2; else cout <<”\nOrdem crescente: “<<n3<<”, “<<n2<<”, “<<n1; } cout <<”\n\n”; system (“pause”); } 2ª versão: #include <stdlib.h> #include <iostream.h> int n1,n2,n3; int main () { cout <<”\nDigite um numero”; cin >> n1; cout <<”\nDigite um segundo numero diferente do primeiro”; cin >> n2; cout <<”\nDigite um terceiro numero diferente dos outros”; cin >> n3; if (n1 == n2 || n1 == n3 || n2 == n3) {cout <<”\nOs três numeros não são diferentes”;} else {if (n1 < n2 && n1 < n3) {cout <<”\nOrdem crescente : “<< n1 <<”, “; if (n2 < n3) {cout << n2 <<”, “<< n3;} else {cout << n3 <<”, “ << n2;} } else if (n2 < n1 && n2 < n3) {cout <<”\nOrdem crescente : “<< n2 <<”, “; if (n1 < n3) {cout << n1 <<”, “<< n3;} else {cout << n3 <<”, “<< n1;} } else if (n3 < n1 && n3 < n2) {cout <<”\nOrdem crescente : “<< n3 <<”, “; if (n2 < n1) {cout << n2 <<”, “<< n1;} else {cout << n1 <<”, “<< n2;} } } cout <<”\n\n”; system (“pause”); } 3ª versão: #include <stdlib.h> #include <iostream.h> int n1,n2,n3,prim,meio,ult; int main () { cout <<”\nDigite um numero”; cin >> n1; cout <<”\nDigite um segundo numero diferente do primeiro”; cin >> n2; cout <<”\nDigite um terceiro numero diferente dos outros”; cin >> n3; if (n1 == n2 || n1 == n3 || n2 == n3) {cout <<”\nOs três numeros não são diferentes”;} else {if (n1 < n2 && n1 < n3) {prim = n1;} else if (n2 < n1 && n2 < n3) {prim = n2;} else {prim = n3;} if (n1 > n2 && n1 > n3) {ult = n1;} else if (n2 > n1 && n2 > n3) {ult = n2;} else {ult = n3;} } meio = (n1 + n2 + n3) – (prim + ult); cout <<”\nOrdem crescente: “<<prim<<”, “<<meio<<”, “<<ult; cout <<”\n\n”; system (“pause”); } Funções: printf e scanf São funções em C, para o tratamento da saída e entrada de dados, respectivamente. Estas duas funções utilizam formatadores para indicar o tipo de dado que está sendo recebido por digitação ou enviado para o vídeo. Os formatadores são: %i - números inteiros (int) %f - números reais (float) %d - números reais com dupla precisão (double) %c - caracter (char) %s - vários caracteres (string) printf: envia ou “escreve” uma informação no vídeo. Biblioteca <stdio.h> Declaração: printf (informação); onde, informação pode ser: uma constante. Ex: printf(“\nAlgoritmos”); conteúdo de variáveis de memória. Neste caso, na parte texto deve aparecer o formatador na posição em que se deseja inserir o conteúdo da variável. Ex: printf(“\nA soma é: %i“,X); resultados de expressões aritméticas. Ex: printf(“\nResultado: %f“,P*B/3); printf(“\nOdobro de %i é %i“, num, num*2); Obs: O formatador para tipo float (%f), permite a visualização de um número fixo de casas decimais, utilizando-se o ponto decimal e o número de casas decimais entre os dois caracteres. Ex: printf(“\nValor da compra: %.2f“,vlCompra); scanf: recebe por digitação um valor e o armazena na variável indicada no parâmetro. Utiliza o formatador para indicar o tipo do dado recebido. Biblioteca <stdio.h> Declaração: scanf (formatadorTipo,&variável); Ex: scanf (“%i”, &numero); //recebe por digitação um número inteiro e o armazena na variável numero Parte 3 Estrutura Repetitiva Permite que um bloco ou conjunto de comandos ou estruturas sejam repetidas enquanto a condição indicada for verdadeira. Na linguagem C existem três tipos de uso de estruturas de repetição. 1 – Estrutura WHILE (enquanto) Declaração: while (condição) { Bloco com um ou mais comandos ou estruturas } onde, condição é a comparação de dois valoresque podem ser constantes, conteúdos de variáveis de memória, resultado de expressões aritméticas ou retorno de funções, por meio do uso de operadores relacionais. Aqui pode ser utilizado uma expressão condicional com mais de uma condição relacionada com os operadores && (E) e ||(OU). Se a condição for verdadeira o bloco de comandos entre chaves { } será executado. Ao ser encontrado a chave de fim de bloco, a execução do algoritmo retorna ao início da estrutura para uma nova avaliação da condição. Quando a condição for falsa, o bloco não é executado e a execução do programa continua a partir do próximo comando após a estrutura. Não é obrigatório o uso de chaves para blocos com apenas um comando. Exemplos: 1- Receber por digitação uma certa quantidade de números, enquanto o usuário desejar digitar números. Somá-los e visualizar o resultado da soma ao final. #include <iostream.h> #include <stdlib.h> int num, soma; //declaração das variáveis inteiras char continua; //declaração de variável tipo caracter int main () //início da função main {soma = 0; //inicializa soma com o valor 0 continua = ‘S’; //inicializa continua com ‘S’ while ( continua ==‘S’) //se verdadeira executa o bloco {cout <<“\nDigite um número”; //envia um texto cin >> num; //armazena o valor digitado em num soma = soma + num; //acumula o conteúdo de num em soma cout <<“\nDeseja continuar S/N”; //envia um texto cin >> continua; //armazena o valor digitado em continua } //retorna ao inicio da estrutura cout <<“\nA soma dos números é “<<soma; //envia o texto e conteúdo cout <<”\n\n”; //salta duas linhas no vídeo system (“pause”); //executa uma pausa na execução } 2- Receber por digitação 5 números, somá-los e visualizar o resultado da soma ao final. #include <iostream.h> #include <stdlib.h> int num, soma, cont; //declaração das variáveis inteiras int main () //início da função main {soma = 0; //inicializa soma com o valor 0 cont = 0; //inicializa cont com 0 while (cont < 5) //se verdadeira executa o bloco {cout <<“\nDigite um número”; //envia um texto cin >>num; //armazena o valor digitado em num soma = soma + num; //acumula o conteúdo de num em soma cont++; //acumula 1 em cont (cont = cont +1) } //retorna ao inicio da estrutura cout << “\nA soma dos números é “<<soma; //envia o texto e conteúdo cout <<”\n\n”; //salta duas linhas no vídeo system (“pause”); //executa uma pausa na execução } 3 - Uma pesquisa de mercado entrevistou 100 pessoas para saber a preferência pelos produtos A, B e C. Receber por digitação as preferências dessas pessoas e visualizar ao final a quantidade de preferências de cada tipo de produto. #include <iostream.h> #include <stdlib.h> int totA, totB, totC,cont; //declaração das variáveis inteiras char prod; //declaração de variável tipo caracter int main () //início da função main {cont = 0; //inicializa cont com o valor 0 totA = 0; //inicializa totA com o valor 0 totB = 0; //inicializa totB com o valor 0 totC = 0; //inicializa totC com o valor 0 while (cont < 100) //se verdadeira executa o bloco {cout<< “\nDigite o produto “; //envia o texto cin >> prod; //armazena o produto digitado em prod if (prod == 'A'|| prod == 'a') totA++; //acumula 1 na variável totA (totA = totA +1) else if (prod == 'B' || prod == 'b') totB++; //acumula 1 na variável totB (totB = totB +1) else if (prod == 'C' || prod == 'c') totC++; //acumula1 na variável totC (totC = totC +1) cont++; //acumula 1 em cont (cont = cont + 1) } //retorna ao inicio da estrutura cout <<“\nQtde de produtos A: “<<totA; //envia o texto e conteúdo de totA cout <<“\nQtde de produtos B: “<<totB; //envia o texto e conteúdo de totB cout <<“\nQtde de produtos C: “<<totC; //envia o texto e conteúdo de totC cout <<”\n\n”; //salta duas linhas no vídeo system (“pause”); //executa uma pausa na execução } 2 – Estrutura DO ... WHILE (faça ... enquanto) Declaração: do { Bloco com um ou mais comandos ou estruturas }while (condição); onde, condição é a comparação de dois valores que podem ser constantes, conteúdos de variáveis de memória, resultado de expressões aritméticas ou retorno de funções, por meio do uso de operadores relacionais. Aqui pode ser utilizado uma expressão condicional com mais de uma condição relacionada com os operadores && (E) e ||(OU). Ao encontrar o comando do (faça) o bloco entre chaves { }é executado. Ao terminar o bloco, a condição é testada: se a condição for verdadeira a execução retorna ao comando do e o bloco de comandos será executado novamente. Quando a condição for falsa, o bloco não é executado e a execução do programa continua a partir do próximo comando após a estrutura. Não é obrigatório o uso de chaves para blocos com apenas um comando. Exemplo: Receber por digitação 5 números, somá-los e visualizar o resultado da soma ao final. #include <iostream.h> #include <stdlib.h> int num, soma, cont; //declaração das variáveis inteiras int main () //início da função main {soma = 0; //inicializa soma com o valor 0 cont = 0; //inicializa cont com 0 do //executa o bloco de comandos {cout <<“\nDigite um número”; //envia um texto cin >>num; //armazena o valor digitado em num soma = soma + num; //acumula o conteúdo de num em soma cont++; //acumula 1 em cont (cont = cont +1) } while (cont < 5); //se verdadeira executa o bloco novamente cout << “\nA soma dos números é “<<soma; //envia o texto e conteúdo cout <<”\n\n”; //salta duas linhas no vídeo system (“pause”); //executa uma pausa na execução } 3 – Estrutura FOR (para) Declaração: for (inicializações ; condição ; incrementos ) { Bloco com um ou mais comandos ou estruturas } onde, inicializações: uma ou mais inicializações a serem feitas quando da primeira vez que a estrutura é executada. Separar com virgulas se existirem várias inicializações. condição: é a comparação de dois valores que podem ser constantes, conteúdos de variáveis de memória, resultado de expressões aritméticas ou retorno de funções, por meio do uso de operadores relacionais. Aqui pode ser utilizado uma expressão condicional com mais de uma condição relacionada com os operadores && (E) e ||(OU). incrementos: um ou mais incrementos ou decrementos a serem executados sempre que houver um retorno para o início da estrutura. Separar com virgulas se existirem vários incrementos. A estrutura do for possui três parâmetros separados por ponto-e-virgula (;). Da primeira vez que a estrutura é executada o parâmetro das inicializações é executado e em seguida o parâmetro com a condição é avaliado. Se a condição for verdadeira o bloco de comandos entre chaves { } será executado. Ao ser encontrado a chave de fim de bloco, a execução do algoritmo retorna ao início da estrutura. Sempre que houver retornos, primeiro é executado o parâmetro dos incrementos e em seguida, uma nova avaliação da condição. Quando a condição for falsa, o bloco não é executadoe a execução do programa continua a partir do próximo comando após a estrutura. Não é obrigatório o uso de chaves para blocos com apenas um comando. Exemplo: Receber por digitação 5 números, somá-los e visualizar o resultado da soma ao final. #include <iostream.h> #include <stdlib.h> int num, soma, cont; //declaração das variáveis inteiras int main () //início da função main { for (cont = 0,soma=0; cont < 5; cont++) {cout <<“\nDigite um número”; //envia um texto cin >>num; //armazena o valor digitado em num soma = soma + num; //acumula o conteúdo de num em soma } //retorna ao início da estrutura cout << “\nA soma dos números é “<<soma; //envia o texto e conteúdo cout <<”\n\n”; //salta duas linhas no vídeo system (“pause”); //executa uma pausa na execução } Obs: as inicializações das variáveis cont e soma, que eram feitas antes de começar a estrutura de repetição, passaram a ser feitas no primeiro parâmetro do for e o incremento da variável cont, que era feito dentro do bloco de comandos da estrutura, passou a ser feito no terceiro parâmetro do for. Variações do for: com várias inicializações: Ex: for (x =0, y =1, z =0; x < 20; x++) com vários incrementos ou decrementos: Ex: for (a =20; a >= 1; a--, b++, c++) sem inicializações: Ex: for (; p <= 200; p++) sem incrementos ou decrementos: Ex: for (m =0, s =0; m <100;) só com a condição: Ex: for (; x >= 500;) sem parâmetros: (for infinito) Ex: for (;;) Obs: um loop infinito é utilizado quando não se sabe por exemplo, quando algum evento externo irá acontecer que possa interromper a estrutura de repetição. Neste caso pode-se utilizar o comando break.. Comando break: permite interromper uma estrutura de repetição de qualquer tipo, mesmo que a condição ainda seja verdadeira. Nesse caso, a execução continua a partir do próximo comando após a estrutura. Ex: Receber por digitação 5 números ou até que o número recebido seja negativo, somá-los e visualizar o resultado da soma ao final. #include <iostream.h> #include <stdlib.h> int num, soma, cont; //declaração das variáveis inteiras int main () //início da função main { for (cont = 0,soma=0; cont < 5; cont++) {cout <<“\nDigite um número”; //envia um texto cin >>num; //armazena o valor digitado em num if (num < 0) {cout <<”\nNúmero negativo”; //fim da digitação de numeros break; //interrompe e continua após a estrutura } soma = soma + num; //acumula o conteúdo de num em soma } cout << “\nA soma dos números é “<<soma; //envia o texto e conteúdo de soma cout <<”\n\n”; //salta duas linhas no vídeo system (“pause”); //executa uma pausa na execução } Exemplo: Uma pesquisa de mercado entrevistou 100 pessoas para saber a preferência pelos produtos A, B e C. Receber por digitação as preferências dessas pessoas e visualizar ao final a quantidade de preferências de cada tipo de produto. #include <iostream.h> #include <stdlib.h> int totA, totB, totC,cont; //declaração das variáveis inteiras char prod; //declaração de variável tipo caracter int main () //início da função main {for (cont =0,totA =0,totB = 0,totC = 0;cont < 100; cont++) { cout<< “\nDigite o produto “; //envia o texto cin >> prod; //armazena o produto digitado em prod if (prod == 'A'|| prod == 'a') totA++; //acumula 1 na variável totA (totA = totA +1) else if (prod == 'B' || prod == 'b') totB++; //acumula 1 na variável totB (totB = totB +1) else if (prod == 'C' OU prod == 'c') totC++; //acumula1 na variável totC (totC = totC +1) } //retorna ao inicio da estrutura cout <<“\nQtde de produtos A: “<<totA; //envia o texto e conteúdo de totA cout <<“\nQtde de produtos B: “<<totB; //envia o texto e conteúdo de totB cout <<“\nQtde de produtos C: “<<totC; //envia o texto e conteúdo de totC cout <<”\n\n”; //salta duas linhas no vídeo system (“pause”); //executa uma pausa na execução } Exemplo de tradução para C, de um algoritmo de teste de mesa Algoritmo var: x1, x2, y, k, m, b, c escrever “Digite um numero” ler x1 escrever “Digite outro numero” ler x2 y = 7 k = 0 m = 0 c = 1 repita enquanto y >= x1 k = k + x1 + 1 se k > 7 c = c + 2 senão c = c + 3 fim se b = 1 repita enquanto b < x2 m = m + 2 b = b + 1 c = c + 1 fim repita y = y – 1 fim repita escrever c escrever k escrever m Fim Traduzindo-se para C: #include <stdlib.h> #include <iostream.h> int x1, x2, y, k, m, b, c; int main() {cout << "\nDigite um numero "; cin >> x1; cout << "\nDigite outro numero "; cin >> x2; y = 7; k = 0; m = 0; c = 1; while (y >= x1) { k = k + x1 + 1; if (k > 7) {c = c + 2;} else {c = c + 3;} b = 1; while (b < x2) { m = m + 2; b++; c++; } y--; } cout <<"\nValor da variavel c: "<< c; cout <<"\nValor da variavel k: "<< k; cout <<"\nValor da variavel m: "<< m; cout <<"\n\n"; system ("pause"); }
Compartilhar