Programar em C/Exercícios
Questões
editar- O que faz o seguinte programa?
#include <stdio.h>
int main(void)
{
int x;
scanf( "%d", &x );
printf("%d\n", 4*x );
return 0;
}
Resolução |
---|
Exibirá o quádruplo do valor lido. |
Escrevendo programas
editarExercício 1
editarEscreva uma função que peça dois números inteiros ao usuário e exibe o valor soma seguido pelo maior deles.
Resolução |
---|
//By: Regis Rodman
#include <stdio.h>
// Protótipo da função soma
int soma( int x, int y );
int main()
{
int x, y;
printf( "Entre com dois números inteiros: " ); scanf( "%d %d", &x, &y );
printf( "Soma = %d\n", soma( x, y ) );
printf( "O maior valor digitado foi: %d\n", x>y ? x:y );
return 0;
}
// Corpo da função soma
int soma( int x, int y )
{
return x+y;
}
|
Exercício 2
editarFaça um programa que converta Celsius para Fahrenheit.
Resolução |
---|
//By: youku hayagawa
#include <stdio.h>
float convert (float celsius){
return celsius*1.8+32;
}
int main(void)
{
float celsius ;
printf("\nDigite um valor Celsius para conversão em fahrenheit:\n");
scanf("%f", &celsius);
printf("\nFahrenheit =%.2f\n", convert(celsius));
return 0;
}
|
Exercício 3
editarFaça um programa que vai lendo cada caractere que o usuário digitar. Quando o usuário digitar o caractere 'x', o programa deve exibir todos os caracteres que foram digitados antes do 'x'.
Resolução |
---|
// By: Regis Rodman
#include <stdio.h>
void show( char *s ); // Protótipo da função show( char *s )
int Dec( char ch ); // Protótipo da função Dec( char ch ); Obs: Dec = Decimal
int main()
{
char str[200];
char * pv = &str[0]; // Ponteiro para o primeiro elemento de str[200]
printf( "Entre com letras, x para encerrar\n" );
while( 1 )
{
*pv = getchar();
if( *pv == 'x' ) {
show( str );
break;
} else {
pv++;
}
}
return 0;
}
// Corpo da função show( char *s )
void show( char *s )
{
for( int u=0; s[u]!='\0'; u++ )
{
// Só "letras" maiúsculas ou minúsculas
if( ( Dec(s[u]) >= 65 && Dec(s[u]) <= 90) || (Dec(s[u]) >= 97 && Dec(s[u]) <= 122) )
printf( "%c ", s[u] == 'x' ? ' ' : s[u] );
}
putchar( '\n' );
}
// Corpo da função Dec( char ch )
int Dec( char ch )
{
// Retorna o valor decimal do caracter. Tabela ASCII.
return "%d", ch;
}
|
Exercício 4
editarEscreva um programa que começa pedindo um número N ao usuário e depois pede N números. O programa deverá mostrar na tela todos esses números ordenados do menor para o maior. Escreva sua própria função de ordenação.
Resolução |
---|
#include <stdio.h>
#include <stdlib.h>
/*
By : forshaw & Marcos Antônio Nunes de Moura
*/
int main()
{
int n, *numeros;
int x, y, temp;
printf("Digite um numero: \n");
scanf("%d", &n);
numeros = (int *) malloc(n * sizeof(int)); /* Isso simplesmente cria um array de tamanho n ( int numeros[n] ) */
printf("Agora digite %d numeros: \n", n);
for (x=0; x<n; x++)
scanf("%d", &numeros[x]);
if (x==n) /* Isso e, quando acabar o for de cima */
for (x=0; x<n; x++)
for (y=0; y<n; y++) /* Varre todo o array[y] comparando-o com um array[x] constante (por vez) */
if (numeros[x] < numeros[y])
{
temp = numeros[x];
numeros[x] = numeros[y]; /* Aqui e a velha troca de dados :) */
numeros[y] = temp;
}
if (x==n) /* Isso e, quando acabar o for de cima */
printf("Agora em ordem crescente: \n");
for (x=0; x<n; x++)
printf("%d\n", numeros[x]);
free(numeros);
return 0;
}
#include <stdio.h>
/*
By: Thiago Laitz & Marcos Antônio Nunes de Moura.
*/
int main(){
int n=51,aux,value;
int array[50];
while(n > 50){
printf("Digite o numero n, de 1 até 50: "); // Aqui eu pego o valor "n".
scanf("%d",&n);
}
for (int i=0; i<n; i++){
printf("Escreva os numeros (%d/%d): ",(i+1),n); //Salva os numeros num array.
scanf("%d", &aux);
array[i]=aux;
}
for (int d=0; d< n; d++){
aux = array[d];
for(int k=(d+1); k<n; k++){
if(aux > array[k]){ //Ao trocar o sinal ">" para "<", você transforma o programa numa sequencia decrescente.
value = aux;
aux = array[k]; //Troca de valores.Começando de um valor fixo.
array[k]= value;
array[d] = aux;
}
}
}
printf("números ordenados: ");
for(int f=0; f<n-1;f++ ){
printf("%d, ", array[f]); //Imprime o resultado final ordenado.
}
printf("%d\n",array[n-1]);
return 0;
}
|
Exercício 5
editarFaça um programa que encontra a raiz quadrada aproximada de um número. Para isso, use um dos métodos existentes.
Resolução |
---|
#include <stdio.h>
/*
By : forshaw
*/
int main()
{
int num, i, result, j;
printf("Digite o numero que queres a raiz => ");
scanf("%d", &num);
j = num;
result = 0;
i = 1;
while (num >= i){
num -= i;
i += 2;
result++;
}
if (num == 0)
printf("\nA raiz exata de %d eh >%d<\n\n", j, result);
else
printf("\nA raiz aproximada de %d eh >%d<\n\n", j, result);
}
|
Exercício 6
editarO código abaixo gera números primos.
Resolução |
---|
#include <stdio.h>
/*
By : forshaw
*/
int main()
{
int limite;
int x, y;
printf("Digite o limite do gerador : ");
scanf("%d", &limite);
if (limite >= 2) /* Para sempre incluir o 2, ja que e o unico par primo */
printf("2\n");
for (x=1; x<=limite; x++)
for (y=2; y<x; y++)
if (x%y == 0) /* Testa se e divisivel por algum anterior, e caso ser verdadeiro,
sair da condição ( continue; ) */
y = x+1;
else if (y == x-1) /* No final da condição (ja que um numero n > 2 não é divisivel por n-1) */
{
printf("%d\n", x);
y = x+1; /* Termina para garantir um unico printf() */
}
return 0;
}
Código simples e fácil de entender: // Por Warley V. Barbosa
#include <stdio.h>
int main()
{
int num, primo, i, res;
do
{
printf("Digite um número (0 para encerrar): \n");
scanf("%d", &num);
primo = 1;
for (i = 2; i < num; i++) /* repete a partir do número dois e vai até o número anterior de 'num',
incrementando à variável i a cada repetição */
{
if (num % i == 0) { // se o resto do 'num' por 'i' for zero o número não é primo
primo = 0;
break; // pula para a instrução seguinte
}
}
if ((primo) && (num > 1)) // 1 não é primo! nem zero...
printf("O número %d é primo! \n", num);
else
printf("O número %d não é primo... \n", num);
}
while (num != 0); // encerra quando usuário digitar 0
}
|
Exercício 7
editarFaça uma calculadora:
Resolução |
---|
#include <stdio.h>
#include <stdlib.h>
int expr(void);
int mul_exp(void);
int unary_exp(void);
int primary(void);
int main()
{
int val;
for(;;)
{
printf("expression: ");
val = expr();
if(getchar() != '\n')
{
printf("error\n");
while(getchar() != '\n'); /* nada */
}
else
{
printf("result is %d\n", val);
}
}
return 0;
}
int expr(void)
{
int val, ch_in;
val = mul_exp();
for(;;)
{
switch(ch_in = getchar())
{
default:
ungetc(ch_in,stdin);
return(val);
case '+':
val = val + mul_exp();
break;
case '-':
val = val - mul_exp();
break;
}
}
}
int mul_exp(void)
{
int val, ch_in;
val = unary_exp();
for(;;)
{
switch(ch_in = getchar())
{
default:
ungetc(ch_in, stdin);
return(val);
case '*':
val = val * unary_exp();
break;
case '/':
val = val / unary_exp();
break;
case '%':
val = val % unary_exp();
break;
}
}
}
int unary_exp(void)
{
int val, ch_in;
switch(ch_in = getchar())
{
default:
ungetc(ch_in, stdin);
val = primary();
break;
case '+':
val = unary_exp();
break;
case '-':
val = -unary_exp();
break;
}
return(val);
}
int primary(void)
{
int val, ch_in;
ch_in = getchar();
if(ch_in >= '0' && ch_in <= '9')
{
val = ch_in - '0';
goto out;
}
if(ch_in == '(')
{
val = expr();
getchar(); /* skip closing ')' */
goto out;
}
printf("error: primary read %d\n", ch_in);
exit(EXIT_FAILURE);
out: return(val);
}
|
Exercício 8
editarEsse programa converte um inteiro em bytes e depois realiza a operação inversa.
Faça um programa que converte um short em bytes.
Resolução |
---|
#include <stdio.h>
int main (void)
{
unsigned char bytes[4]; /* Aqui o índice indica o número de elementos */
unsigned long n = 123000;
bytes[0] = (n >> 24) & 0xFF;
bytes[1] = (n >> 16) & 0xFF;
bytes[2] = (n >> 8) & 0xFF;
bytes[3] = n & 0xFF;
int i;
char b[500];
sprintf(b,"0 = %d, 1 = %d, 2 = %d, 3 = %d",bytes[0],bytes[1],bytes[2],bytes[3]);
int inteiro = (bytes[0]<<24)+(bytes[1] << 16)+(bytes[2] << 8)+bytes[3];
printf("bytes %s\n",b);
printf("int = %i\n",inteiro);
getchar();
}
|
Exercício 9
editarCalculadora IMC
Faça um Programa que calcule o IMC de uma e dê referências sobre o mesmo.
By: Gabriel E. Andrade / Matheus Da Costa Pereira
#include <stdio.h>
#include <math.h>
int main(){
float IMC,peso,altura;
printf("Digite o peso\n> ");
scanf("%f",&peso);
printf("Digite a altura\n> ");
scanf("%f",&altura);
altura = pow(altura,2);
IMC = peso/altura;
printf("Valor IMC: %.2f", IMC);
printf("\n\nIMC = peso / (altura * altura)");
printf("\n\nIMC calculado Situacao");
printf("\n------------------------------");
printf("\nMenos de 20 Abaixo do peso");
printf("\n20 >= IMC < 25 Peso Normal");
printf("\n25 >= IMC < 30 Acima do peso");
printf("\n30 >= IMC < 34 Obeso");
printf("\nAcima de 34 Muito Obeso");
printf("\n------------------------------");
}