Iniciação à programação em C
C#Desafio1
Desenvolve um programa que solicite um número inteiro ao utilizador e em seguida mostre o número introduzido.
#include <stdio.h>
int main()
{
int num;
// printf() output
printf("Digite um número inteiro: ");
// scanf() input
scanf("%d", &num);
// printf() output de
mensagem e valor da variável
printf("O utilizador digitou: %d", num);
return 0;
}
C#Desafio2
Desenvolve um programa que solicite ao utilizador 2 números inteiros. O programa deve somar os números digitados mostrando o resultado.
O output do resultado deve ser de fácil leitura para
o utilizador e.g. (Soma de 3 + 2 = 5 )
#include <stdio.h>
int main()
{
int num1, num2, soma;
printf("Digite 2 numeros inteiros: ");
// input dos números
scanf("%d %d", &num1, &num2);
// processo
de soma dos números digitados
soma = num1 + num2;
// output da soma
printf("%d + %d = %d", num1, num2, soma);
return 0;
}
C#Desafio2.1 (Tipos de dados inteiros e reais e operadores aritméticos simples)
Desenvolve um programa que multiplique o número de PI (3.14) por um número digitado pelo utilizador.
#include <stdio.h>
int main()
{
int num;
float PI=3.14;
printf("Digite um número inteiro: ");
scanf("%d", &num);
printf("Pi x %d = %f", num,num*PI);
return 0;
}
C#Desafio3s (Tipos de dados Caracter e String)
Desenvolve um programa que solicite ao utilizador o nome o ano e a turma. O programa deve apresentar uma linha indicando e.g. (És o Rui do 10 ano da turma A).
#include <stdio.h>
int main(){
char nome[100];
int ano;
char turma;
printf("Nome\t: ");
gets(nome);// uma alternativa ao scanf
printf("Turma\t");
scanf("%c",
&turma);
printf("ano\t: ");
scanf("%d", &ano);
printf("O teu nome: %s e frequentas a turma %c no %d ano ",nome,turma,ano);
return 0;
}
C#Desafio3
Desenvolve um programa que solicite ao utilizador 2 números inteiros. O programa deve realizar todas as operações (+, -, /, * e o resto da divisão)
#include <stdio.h>
int main()
{
int num1, num2, soma, mult, divi, subt, resto;
printf("Digite um número inteiro: ");
scanf("%d", &num1);
printf("Digite um número inteiro: ");
scanf("%d",
&num2);
soma=num1+num2;
mult=num1*num2;
divi=num1/num2;
subt=num1-num2;
resto=num1%num2;
printf("Resultado da soma: %d\n", soma);
printf("Resultado da mult: %d\n",
mult);
printf("Resultado da divisao: %d\n", divi);
printf("Resultado da subt: %d\n", subt);
printf("Resultado da resto: %d\n", resto);
return 0;
}
C#Desafio4
Desenvolve um programa que solicite ao utilizador 2 números inteiros. O programa deve mostrar o quociente e o resto da divisão. Utilize os operadores de atribuição.
#include <stdio.h>
int main(){
int dividendo, divisor, quoci, resto;
printf("Digite o dividendo: ");
scanf("%d", ÷ndo);
printf("Digite divisor: ");
scanf("%d",
&divisor);
quoci = dividendo / divisor;
resto = dividendo % divisor;
printf("Quociente = %d\n", quoci);
printf("Resto = %d", resto);
return 0;
}
pub
C#Desafio5 (Operadores de incremento e decremento e SizeOf)
Desenvolve um programa que solicite ao utilizador 2 números, um inteiro e um real. O programa deve incrementar mais 1 no número real e decrementar
1 no número inteiro, mostrando o valor da variável antes e após o incremento ou decremento. O programa deve, também, indicar o espaço que ocupam as variáveis utilizadas no programa. Utilize os operadores de incremento e decremento e SizeOf.
#include <stdio.h>
int main()
{
int inteiro;
float real;
printf("Digite um numero inteiro\n");
scanf("%d",&inteiro);
printf("Digite um numero real\n");
scanf("%f",&real);
printf("Tamanho do inteiro: %ld bytes\n",sizeof(inteiro));
printf("Valor do inteiro antes do incremento de 1: %d\n",inteiro);
printf("Valor do inteiro com incremento de 1: %d
\n",++inteiro);
printf("Tamanho do real: %ld bytes\n",sizeof(real));
printf("Valor do real antes do decermento de 1: %f\n",real);
printf("Valor do real com decermento de 1: %f \n",--real);
return 0;
}
pub
C#Desafio6
Desenvolve um programa que faça a troca de dois números introduzidos pelo utilizador. E.g. (1º numero é 3 e o 2º é 4 - o Output será 1º número é 4 e o 2º número é 3
#include <stdio.h>
int main()
{
double _1num, _2num, temporario;
//double é outra forma de representar números reais
printf("Digita o primeiro numero: ");
scanf("%lf", &_1num);
printf("Digita o segundo numero: ");
scanf("%lf",&_2num);
temporario = _1num;
_1num = _2num;
_2num = temporario;
printf("\nDepois da troca, _1num = %.2lf\n", _1num);
//%.2f o 2 indica a quantidade de casas decimais
printf("Depois da troca, _2num = %.2f", _2num);
return 0;
}
pub
C#Desafio7A (Estrutura Condicional simples)
7A - Utilizando a estrutura condicional simples. Elabora um algoritmo compare 3 números e verifique qual deles é maior.
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
int main()
{
setlocale(LC_ALL, "Portuguese");
double n1, n2, n3;
printf("Digite
3 números diferentes: ");
scanf("%lf %lf %lf", &n1, &n2, &n3);
if( n1>=n2 && n1>=n3 )
printf("%.2f é o número maior.", n1);
if( n2>=n1 && n2>=n3
)
printf("%.2f é o número maior.", n2);
if( n3>=n1 && n3>=n2 )
printf("%.2f é o número maior.", n3);
return 0;
}
pub
C#Desafio7B (Estrutura Condicional ESCADA)
7B - Utilizando a estrutura condicional ESCADA. Elabora um algoritmo compare 3 números e verifique qual deles é maior.
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
int main()
{
setlocale(LC_ALL, "Portuguese");
int n1, n2, n3;
printf("Digite 3 números diferentes:
");
scanf("%d %d %d", &n1, &n2, &n3);
if( n1>=n2 && n1>=n3)
printf("%d é o maior número.", n1);
else if (n2>=n1 &&
n2>=n3)
printf("%d é o maior número.", n2);
else
printf("%d é o maior número..", n3);
return 0;
}
pub
C#Desafio7C (Estrutura Condicional ANINHADA)
7C - Utilizando a estrutura condicional ANINHADA. Elabora um algoritmo compare 3 números e verifique qual deles é maior.
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
int main()
{
setlocale(LC_ALL, "Portuguese");
int n1, n2, n3;
printf("Digite 3 números diferentes:
");
scanf("%d %d %d", &n1, &n2, &n3);
if (n1>=n2)
{
if(n1>=n3)
printf("%d é o maior número.", n1);
else
printf("%d é o maior número.", n3);
}
else
{
if(n2>=n3)
printf("%d
é o maior número.", n2);
else
printf("%d é o maior número.",n3);
}
return 0;
}
pub
C#Desafio8 (Estrutura Condicional Aninhada)
8- Elabora um algoritmo que verifique se um determinado número está dentro de um determinado intervalo de valores (10 a 15)
8.1- Restrutura
o algoritmo para que o intervalo de valores seja introduzido pelo utilizador.
8.2 - Caso o utilizador digite um intervalo ex.(15...10), o programa deve ordenar os números em ordem crescente e verificar se o
numero digitado está dentro do intervalo.
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
int main()
{
setlocale(LC_ALL, "Portuguese");
int a=0,b=0,c=0,temp=0;
printf("digite
um intervalo de valores\n");
scanf("%d%d",&b,&c);
if (b>c)
{// início do if b>c
printf("Os números necessitam de ser ordenados\n ");
printf("primeiro numero %d e o segundo número %d\n",b,c);
temp=b;
b=c;
c=temp;
printf("Processo de ordenação concluído\n");
printf("primeiro numero
%d e o segundo número %d\n\n",b,c);
}// Fim do if b>c
if (b<c) {// início do if b<c
printf("digite um numero para verificar se está dentro do intervalo\t");
scanf("%d",&a);
if (a>=b && a<=c)
{
printf("Está dentro do intervalo");
}
else
{
printf("O
número não está no intervalo");
}
}// Fim do if b<c
return 0;
}
pub
C#Desafio9
9- Elabora um algoritmo que verifique se um determinado aluno é elegível para a bolsa de mérito, tendo em conta os critérios:
Média na formação técnica >=15
Média na formação
científica >=13
Média na formação sociocultural>=12
Total das 3 componentes >=41
ou
Total da formação técnica e científica >=30
9.1. (Facultativo) - Faz com que o programa mostre
a mensagem a vermelho, caso o aluno cumpra os critérios estabelecidos. "Podes pesquisar na Internet!!"
Nota: Ainda podemos melhorar mais o programa, e.g1 - Não permitir que o utilizador digite números
superiores a 20 nem menores que 0; e.g2 - Permitir que seja o utilizador a escolher os critérios de elegibilidade dos alunos de mérito Solução
.
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <windows.h> //Para correr a cor no windows
void SetColor(int ForgC);
int
main()
{
setlocale(LC_ALL, "Portuguese");
int ft,fc,fsc,t,mp;
printf("Critérios de elegibilidade :\n");
printf("Média na formação técnica >=15\n");
printf("Média na formação
científica >=13\n");
printf("Média na formação sociocultural>=12\n");
printf("Total das 3 componentes >=41\n");
printf("Total da formação técnica e científica >=30\n");
printf("-------------------------------------\n");
printf("Input - Média na formação técnica :");
scanf("%d",&ft);
printf("Input - Média na formação científica :");
scanf("%d",&fc);
printf("Input - Média na formação sociocultural
:");
scanf("%d",&fsc);
SetColor(2);
printf("Total das 3 componentes : %d\n",ft+fc+fsc);
printf("Total da formação técnica e científica : %d\n",ft+fc);
SetColor(15);
if (ft>=15)
if(fc>=13)
if(fsc>=12)
if((ft+fc+fsc)>=41||(ft+fc)>=30)
{
SetColor(4);
printf("É candidato a bolsa de mérito.\n");
SetColor(15);
}
else
printf("NÃO é candidato
a bolsa de mérito.\n");
else
printf("NÃO é candidato a bolsa de mérito.\n");
else
printf("NÃO é candidato a bolsa de mérito..\n");
else
printf("NÃO é candidato a bolsa de mérito.\n");
}
//Apenas para mudar a cor da letra
void SetColor(int ForgC)
{
WORD wColor;
//This handle is needed to get the current background
attribute
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO csbi;
//csbi is used for wAttributes word
if(GetConsoleScreenBufferInfo(hStdOut,
&csbi))
{
//To mask out all but the background attribute, and to add the color
wColor = (csbi.wAttributes & 0xF0) + (ForgC & 0x0F);
SetConsoleTextAttribute(hStdOut,
wColor);
}
return;
}
pub
C#Desafio10 (Estrutura de decisão CASE)
10- Utilizando SWITCH CASE - Elabora um algoritmo que associe os números de 1 a 7 aos dias da semana de Segunda a Domingo, ou seja, se o utilizador digitar
1 o programa deve fazer o output "segunda-feira"...
10.1 - Altera o programa criado para que, no caso de o utilizador digitar um número fora do intervalo de 1 a 7, o programa deve indicar que
o número está fora do intervalo permitido. Solução .
C#Desafio10A (Estrutura de decisão CASE)
10A- Utilizando SWITCH CASE - Altera o programa solicitado no desafio 10 para que, caso o número digitado esteja fora do intervalo (1 a 7) o programa
deve permitir que o utilizador volte a tentar. Solução .
#include <stdio.h>
int main()
{
int dia;
SALTO:
printf("Insere o nº do dia da semana: ");
scanf("%d",&dia);
if (dia>0 && dia<8)
{ // se verdade
switch(dia)
{
case 1:
printf("Segunda-feira \n");
break;
case 2:
printf("Terça~feira \n");
break;
case 3:
printf("Quarta-feira \n");
break;
case 4:
printf("Quinta-feira \n");
break;
case 5:
printf("Sexta-feira \n");
break;
case 6:
printf("Sabado \n");
break;
case 7:
printf("Domingo \n");
break;
default:
printf("Número
inválido. \nTente novamente ....\n");
break;
}
}//se verdade
else
{
printf("Númeroz inválido. \nTente
novamente ....\n");
goto SALTO;
}
return 0;
}
pub
C#Desafio11 (Estrutura de repetição while)
11- Utilizando While LOOP - Elabora um algoritmo que calcule a tabuada de um número digitado pelo utilizador. Nota que um contador em C, aquando
do incremento, pode ter a sintaxe contador++; ...
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
int main()
{
setlocale(LC_ALL, "Portuguese");
int n1=1, n2;
printf("Digite um número para calcular a tabuada\n:
");
scanf("%d", &n2);
while (n1 <=10)
{
printf("%d X %d = %d \n ",n2,n1,n1*n2);
n1++;
}
return 0;
}
pub
C#Desafio11A (Estrutura de repetição Do while)
11A- Utilizando Do While LOOP - Elabora um algoritmo que calcule a tabuada de um número digitado pelo utilizador (a tabuada deve ser mostrada
na ordem inversa, ouseja, começa no 10xnúmero e acaba em 1xnúmero). Nota que um contador em C, aquando do decremento, pode ter a sintaxe contador--;
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
int main()
{
setlocale(LC_ALL, "Portuguese");
int n1=10, n2;
printf("Digite um número para calcular a
tabuada\n: ");
scanf("%d", &n2);
do
{
printf("%d X %d = %d \n ",n2,n1,n1*n2);
n1--;
}
while (n1 >=0);
return 0;
}
pub
C#Desafio12 (Estrutura de repetição For)
12- Utilizando o For LOOP - Elabora um algoritmo que mostre no ecrã os 10 primeiros números inteiros.
12.1. Altera o programa criado anteriormente
para que, além de mostrar os 10 números também mostre a soma e a média.
12.2. Altera o programa para que o intervalo de números seja introduzido pelo utilizador. O programa deve mostrar os números que estão dentro
do intervalo definido pelo utilizador, a soma dos números e a média.
Nota que, para um intervalo de 3 a 6 o resultado da soma deve ser 18 e a média 4,5.
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
int main()
{
setlocale(LC_ALL, "Portuguese");
int soma=0,a=0, liminf=0, limsup=0;
float media, qtdn;
printf("Digite um intervalo de números\n: ");
printf("Primeiro número do intervalo: ");
scanf("%d", &liminf);
printf("Ultimo número do intervalo: ");
scanf("%d", &limsup);
a=liminf;//estabelece o valor de a
for(a>=liminf;a<=limsup;a++)
{
soma=soma+a;
printf(" números %d \n ",a);
}
printf("soma = %d \n ",soma);
qtdn=((limsup-liminf)+1);//calcula
a quantidade de números gerados
media=soma/qtdn;// Calcula da média entre um real e um inteiro
printf("média = %0.2f \n ",media);// imprime a média com 2 casas decimais
printf("Total de números gerados = %0.0f \n ",qtdn);
return 0;
}
pub
C#Desafio12A (Estrutura de repetição For)
12A- Utilizando o For LOOP - Elabora um algoritmo que solicite ao utilizador:
- Um intervalo de números e.g. (o utilizador digita 1 e 5).
-
De sguida o programa deve permitir que o utilizador digite os números indicados no intervalo e.g. (5 números).
- No final o programa deve mostrar o total de números digitados; A soma e a média dos números digitados. .
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
int main()
{
setlocale(LC_ALL, "Portuguese");
int digitou, soma=0, a=1, liminf=0, limsup=0;
float media=0,
qtdn;
printf("Digite um intervalo de números\n ");
printf("Primeiro número do intervalo: ");
scanf("%d", &liminf);
printf("Ultimo número do intervalo: ");
scanf("%d", &limsup);
// a=liminf;
for(a>=liminf;a<=limsup;a++)
{
printf("digite o %dº número: ",a);
scanf("%d", &digitou);
soma+=digitou;
}
printf("soma = %d \n
",soma);
qtdn=((limsup-liminf)+1);
media=soma/qtdn;
printf("média = %0.2f \n ",media);
printf("Total de números introduzidos = %0.0f \n ",qtdn);
return 0;
}
pub
C#Desafio13 (Continue)
13- Utilizando o Continue - Elabora um algoritmo que solicite 10 notas de 0 a 20 ao utilizador. O programa deve calcular a soma e a média das notas positivas
(apenas das notas positivas) digitadas. O programa deve ainda indicar a quantidade de notas positivas e a quantidade de notas negativas.
Este desafio deve dar origem a 3 programas: Utilizando o ciclo For, While e Do While.
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
int main()
{
setlocale(LC_ALL, "Portuguese");
int i=1;
float nota, soma = 0, contanega=0,
contapositiva=0;
printf("digite 10 notas apenas as positivas serão consideradas\n ");
do
{
printf("Digite uma nota %d: ",i);
scanf("%f",¬a);
++i;
if(nota <10 || nota >20)//PAR
{
contanega+=1;//contanega=contanega+1;
continue;
}
soma += nota; // soma = soma
+ num;
}
while(i<=5);
printf("Soma das notas positivas = %0.0f",soma);
printf("\nTotal de notas negativas = %0.0f",contanega);
contapositiva= --i-contanega;
printf("\nTotal
de notas positivas = %0.0f",contapositiva);
printf("\nMédia de notas positivas = %0.2f",soma/contapositiva);
return 0;
}
C#Desafio14 (Fibonacci)
Sabendo que a Sequência de Fibonacci é - 0,1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584
Elabora um programa que produza esta sequência
de números. . ... Solução .
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
int main()
{
setlocale(LC_ALL, "Portuguese");
int i, n, t1 = 0, t2 = 1, proximo;
printf("Digite o número de elementos
a calcular: ");
scanf("%d", &n);
printf("Fibonacci : ");
for (i = 1; i <= n; ++i)
{
printf("%d, ", t1);
proximo = t1 + t2;
t1 = t2;
t2 = proximo;
}
return
0;
}
C#Desafio15 (Vetores)
Elabora um programa que leia 5 números inteiros e os armazene num vetor.
O programa deve ainda apresentar:
15.1- A quantidade total de números introduzidos no vetor; - A soma
de todos os números do vetor;
15.2- A quantidade de números superiores a 100; - A soma dos números superiores a 100;
15.3- A lista de todos os números introduzidos;
15.4- A lista de todos os números
superiores a 100;
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
int main()
{
setlocale(LC_ALL, "Portuguese");
int vetor[5], i,ct=0, ct100=0,soma=0,soma100=0;
int n=4;
for
(i=1 ; i<=n; i++)
{
printf("\ndigite o %dº número do vetor: ",i);
scanf("%d", &vetor[i]);
printf("%dº introduzido foi o %d\n",i,vetor[i]);
ct++;
soma=soma+vetor[i];
if (vetor[i]>100)
{
soma100=soma100+vetor[i];
ct100++;
}
}
//15.1- A quantidade total de números introduzidos no vetor; - A soma de todos os números do
vetor;
printf("\nTOTAL de numeros do vetor : %d",ct);
printf("\nA soma do TOTAL de números do vetor foi : %d",soma);
//15.2- A quantidade de números superiores a 100; - A soma dos números superiores
a 100;
printf("\n\nQuantidade de numeros do vetor >100 : %d",ct100);
printf("\nA soma dos numeros do vetor >100 : %d",soma100);
//15.3- A lista de todos os números introduzidos;
printf("\n\nOs números introduzidos no vetor: ");
for (i=1 ; i<=n; i++)
{
printf(" %d ",vetor[i]);
}
//15.4- A lista de todos os números superiores
a 100;
printf("\n\nOs números introduzidos no vetor >100 : ");
for (i=1 ; i<=n; i++)
{
if (vetor[i]>100)
printf(" %d ",vetor[i]);
}
return 0;
}
C#Desafio16 (Matrizes bidimensionais)
Elabora um programa que permita inserir 9 números numa matriz 3x3. Após a inserção dos números o programa deve mostrar todos os números digitados, bem como a respetiva linha
e coluna.
16.1. O programa deve apresentar o resultado da soma dos números inseridos.
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
int main()
{
setlocale(LC_ALL, "Portuguese");
int numeros[3][3], i,j,soma=0;
for(i=0;i<3;++i) // 3 linhas
da matriz NOTA pré incremento
{
for(j=0;j<3;++j) // 3 colunas da matriz NOTA pré incremento
{
printf("Digite um inteiro para colocar na
matriz na \n");
printf("Linha %d --- coluna %d : ",i+1,j+1);
scanf("%d",&numeros[i][j]);
}
}
for(i=0;i<3;++i) // 3 linhas
da matriz NOTA pré incremento
{
for(j=0;j<3;++j) // 3 colunas da matriz NOTA pré incremento
{
printf("O número digitado na linha %d ---
coluna %d foi : %d\n",i+1,j+1, numeros[i][j]);
soma=soma+numeros[i][j];
}
}
printf("A soma é : %d\n",soma);
return 0;
}
C#Desafio16A (Matrizes bidimensionais)
Elabora um programa que solicite ao utilizador 9 números inteiros para preencher uma matriz 3x3(considere que não serão digitados valores duplicados).
16A.1 -
Depois da matriz preenchida o programa deve solicitar ao utilizador um número inteiro e escrever uma mensagem indicando se o valor digitado existe ou não na matriz.
16A.1.1 -O programa deve indicar a linha e coluna onde
se encontra o número encontrado em 16A.1.
16A.2 -Altere o algoritmo para que caso o numero digitado já exista solicite ao utilizador que digite outro.
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
int main()
{
setlocale(LC_ALL, "Portuguese");
int numeros[3][3], i,j,soma=0, verificar;
for(i=0;i<3;++i)
// 3 linhas da matriz NOTA pré incremento
{
for(j=0;j<3;++j) // 3 colunas da matriz NOTA pré incremento
{
printf("Digite um inteiro para
colocar na matriz na \n");
printf("Linha %d --- coluna %d : ",i+1,j+1);
scanf("%d",&numeros[i][j]);
}
}
saltoVerifica:
printf("Digite um número para verificar se existe na matriz");
scanf("%d",&verificar);
for(i=0;i<3;++i) // 3 linhas da matriz NOTA pré incremento
{
for(j=0;j<3;++j)
// 3 colunas da matriz NOTA pré incremento
{
if (verificar==numeros[i][j])
{
printf("O número digitado já existe
na linha %d --- coluna %d: \n",i+1,j+1);
goto saltoVerifica;
}
}
}
return 0;
}
pub
pub
pub