Buscar

Exemplos de Algoritmos em C

Prévia do material em texto

Temos a declaração de uma variável e um ponteiro. O algoritmo vai ler um número digitado pelo usuário e imprimir na tela o endereço da variável de duas formas: Chamando a própria variável. Chamando o ponteiro.
#include <stdio.h>
#include <stdlib.h>
int main() {
	int x, * y;
	printf("Digite um numero inteiro: ");
	scanf_s("%d", &x);
	y = &x;
	printf("O endereço da variavel x eh: %p\n", &x);
	printf("O endereço da variavel x eh: %p\n", y);
	
	system("pause");
	return 0;
}
No exercicio 3 da aula pratica 1
No algoritmo a seguir, temos a declaração de uma struct com dois membros. O algoritmo vai ler a matricula e o salário do funcionário, armazenar na struct e, depois, imprimir na tela do usuário os dados armazenados.
#include <stdio.h>
#include <stdlib.h>
struct Funcionario
{
	int matricula;
	float salario;
}; struct Funcionario tecnico;
int main() {
	printf("Digite a matricula do Funcionario: ");
	scanf_s("%d", &tecnico.matricula);
	printf("\nDigite o salario do Funcionario: ");
	scanf_s("%f", &tecnico.salario);
	printf("\n\nDADOS DO FUNCIONARIO\n");
	printf("\nMatricula do Funcionario: %d\n", tecnico.matricula);
	printf("\nSalario do Funcionario: %.2f\n\n", tecnico.salario);
	system("pause");
	return 0;
}
Considere um algoritmo que recebera dois dados numéricos reais (duas notas). O algoritmo vai calcular e imprimir a média das duas notas e imprimir. Sabendo que o tipo da variável será “prova”, substitui-se o float pelo typedef. Como redefinir tipos de variáveis. 
#include <stdio.h>
#include <stdlib.h>
typedef int RU;
typedef float prova;
struct notasAluno
{
	RU matricula;
	prova nota1;
	prova nota2;
	
}; typedef struct notasAluno n_aluno;
int main() {
	n_aluno aluno;
	prova media = 0;
	printf("Digite a matricula do aluno: ");
	scanf_s("%d", &aluno.matricula);
	printf("Digite a primeira nota do aluno: ");
	scanf_s("%f", &aluno.nota1);
	printf("Digite a segunda nota do aluno: ");
	scanf_s("%f", &aluno.nota2);
	media = (aluno.nota1 + aluno.nota2) / 2;
	printf("\nMatricula do aluno: %d\n", aluno.matricula);
	printf("\nA media das duas notas: %.2f\n", media);
	system("pause");
	return 0;
}
Considere um algoritmo que vai instanciar um 4 posições na memória usando a função calloc()
#include <stdio.h>
#include <stdlib.h>
#define QTE 4
#define SAIR exit(1)
int main() {
	int* px;
	px = (int*)calloc(QTE, sizeof(int));
	if (px == NULL) {
		printf("ERRO! Não tem memória suficiente.");
		SAIR; // finaliza o programa.
	}
	int i;
	printf("Digite os dados para o vetor de 4 posiçoes\n\n");
	for (i = 0; i<4; i++) {
		printf("Digite px [%d]: ", i);
		scanf_s("%d", &px[i]);
	}
	printf("\nMostrar os dados do vetor \n\n");
	for (i = 0; i < 4; i++) {
		printf("\nPosiçao px [%d]=%d\n", i, px[i]);
	}
	printf("\n");
	free(px); // libera memória
	system("pause");
	return 0;
}
 Considere um algoritmo que vai imprimir na tela do usuário os números de 1 a 20 (dias vezes), a primeira usando o laço de repetição for (função interativa) e a segunda usando uma função recursiva.
#include <stdio.h>
#include <stdlib.h>
int imprimeN(int inicio, int sfim);
int main() {
	int comeco, sfim, i;
	comeco = 1;
	sfim = 21;
	printf("FUNCAO RECURSIVA\n");
	imprimeN(comeco, sfim); // chamada da funçao recursiva 
	printf("\n\n");
	printf("FUNCAO INTEREATIVA FOR\n");
	for (i = comeco; i < sfim; i++) { // impressao com for
		printf("%d ", i); // imprime os numeros 
	}
	printf("\n\n");
	printf("FUNCAO ITERATIVA WHILE\n");
	while (comeco < sfim)
	{
		printf("%d ", comeco); //imprime os numeros 
		comeco++;
	}
	printf("\n\n");
	system("pause");
	return 0;
}
int imprimeN(int comeco, int sfim) { // funcao recursiva
	if (comeco < sfim) {
		printf("%d ", comeco); // imprime os numeros 
		imprimeN(comeco + 1, sfim); // chamada recursiva
	}
}
Considere um algoritmo que considera dois números e imprime o maior. Só que a expressão que faz comparação será declarada na função Macro #define 
 #include <stdio.h>
#include <stdlib.h>
#define maior(x,y) x>y?x:y // x é maior que y? se sim carrega x, se não, carrega y
int main() {
	int a = 32;
	int b = 28;
	int c = maior(a, b); // vai carregar o resultado da expressão
	printf("Maior valor = %d\n\n", c);
	system("pause");
	return 0;
}
Considerar um algoritmo que vai somar 5 números de um vetor com uma função recursiva. 
#include <stdio.h>
#include <stdlib.h>
#define NVETOR 5 // DECLARAÇÃO DE CONSTANTE
int somaVetor(int vetor[], int tamanho);
int main() 
{
	int vetor[NVETOR] = { 22, 5, 11, 3, 6 };
	int i, soma = 0;
	int resultado = somaVetor(vetor, NVETOR);
	printf("IMPRESSAO COM A FUNCAO RECURSIVA\n");
	printf("Soma = %i\n", resultado);
	printf("\n");
	
	for (i = 0; i<NVETOR; i++) {
		soma = soma + vetor[i];
	}
	printf("IMPRESSAO COM A FUNCAO ITERATIVA\n");
	printf("Soma= %d\n\n", soma);
	system("pause");
	return 0;
}
int somaVetor(int vetor[], int tamanho) {
	if (tamanho == 1)
		return vetor[0];
	else
		return vetor[tamanho - 1] + somaVetor(vetor, tamanho - 1);
}
Considere um algorito que vai abrir um arquivo .txt e mostrar um erro caso o mesmo não exista.
Considere um algoritmo que vai capturar os caracteres digitados pelo usuário e gravá-los em um arquivo .txt usando a função fputc().
#include <stdio.h>
#include <stdlib.h>
int main() 
{
	FILE* arquivo; // criação do ponteiro
	errno_t err; // errno_t é um tipo de variavel grava o ultimo erro 
	int numero; 
 // 'r'apenas lê o arquivo; o'w' cria o arquivo caso não exista 
	err = fopen_s(&arquivo, "uninter.txt", "r"); // a varaivel 'err' vai receber o 'fopen_s...'; 
 // e o 'a' anexa o arquivo
	if (err == 0) { // se o erro for 0
		printf("DIGITE UM NUMERO INTEIRO: ");
		do { // do while executa pelo menos uma vez
			numero = getchar();
			fputc(numero, arquivo);
		} while (numero != '\n'); // quando digita o numero e aperta o enter pula uma linha 
	}
	else
	{
		printf("ERRO!!! Arquivo Não Foi Aberto !!! \n\n");
	}
	if (arquivo) {
		err == fclose(arquivo);
		if (err == 0) {
			printf("\nArquivo fechado\n\n");
		}
		else {
			printf("Arquivo não foi FECHADO!\n\n");
		}
	}
	system("pause");
	return 0;
}
	fputc(numero, arquivo);
		} while (numero != '\n'); // quando digita o numero e aperta o enter pula uma linha 
	}
	else
	{
		printf("ERRO!!! Arquivo Não Foi Aberto !!! \n\n");
	}
	if (arquivo) {
		err == fclose(arquivo);
		if (err == 0) {
			printf("\nArquivo fechado\n\n");
		}
		else {
			printf("Arquivo não foi FECHADO!\n\n");
		}
	}
	system("pause");
	return 0;
}
Considere um algoritmo para fazer a leitura do texto de um arquivo .txt usando a função fgetc().
#include <stdio.h>
#include <stdlib.h>
int main(void) // 'void'não precisa colocar no final return
{
	FILE* arquivo; // criação do ponteiro
	char locaMemoria[81];
	int i, ch; 
	// Abrir o arquivo para ler a linha: 
	fopen_s(&arquivo, "uninter.txt", "r");
	if (arquivo == NULL)
		exit(0);
	// Leia os primeiros 80 caracteres e coloque-os em "LocaMemoria":
	ch = fgetc(arquivo);
	
	/* feof verifica o indicador de fim de arquivo (EOF) 
	do fluxo 	e retorna um valor diferente de zero se 
	este indicador estiver sentado. */
	for (i = 0; (i < 80) && (feof(arquivo) == 0); i++)
	{
		locaMemoria[i] = (char)ch;
		ch = fgetc(arquivo);
	}
	
	// Adicionar NULL ao final da String
	locaMemoria[i] = '\0';
	printf("%s\n\n\n", locaMemoria);
	fclose(arquivo);
	system("pause");
}
Crie um algoritmo que coloque os dias da semana em forma de identificadores com a estrutura ENUM.
#include <stdio.h>
#include <stdlib.h>
enum semana {domingo, segunda, terca, quarta, quinta, sexta, sabado};
int main() {
	enum semana a, b, c, d, e, f, h;
	a = domingo;
	b = segunda;
	c = terca;
	d = quarta;
	e = quinta;
	f = sexta;
	h = sabado;
	printf("DIAS DA SEMANA\n\n");
	printf("Identificador de domingo = %d\n", a);
	printf("Identificador de segunda = %d\n", b);
	printf("Identificador de terca = %d\n", c);
	printf("Identificador de quarta = %d\n", d);
	printf("Identificadorde quinta = %d\n", e);
	printf("Identificador de sexta = %d\n", f);
	printf("Identificador de sabado = %d\n", h);
	system("pause");
	return 0;
}
Crie um algoritmo que coloque três sequencias de escape em forma de identificadores com a estrutura ENUM.
#include <stdio.h>
#include <stdlib.h>
enum escapes { nova_linha = '\n', tabulacao = '\t', backspace = '\b' };
int main() {
	enum escapes esc = nova_linha;
	printf("testando nova linha %c%c%c de %c%c%c", esc, esc, esc, esc, esc, esc);
	esc = tabulacao;
	printf("Testando%ctabulacao%cTestando%ctabulacao\n\n\n", esc, esc, esc);
	system("pause");
	return 0;
}
Crie uma struct de ponteiros com três membros e imprima o endereço das variáveis com o ponteiro e com o operador &.
#include <stdio.h>
#include <stdlib.h>
int main() {
	struct calendario {
		int* dia;
		int* mes;
		int* ano;
	}; struct calendario atual;
	int diaT = 24;
	int mesT = 12;
	int anoT = 2018;
	atual.dia = &diaT;
	atual.mes = &mesT;
	atual.ano = &anoT;
	printf("Endereco da variavel diaT = %p\n", &diaT);
	printf("Endereco da variavel diasT com ponteiro = %p\n\n\n", atual.dia);
	printf("Endereco da variavel mesT = %p\n", &mesT);
	printf("Endereco da variavel mesT com ponteiro = %p\n\n\n", atual.mes);
	printf("Endereco da variavel anoT = %p\n", &anoT);
	printf("Endereco da variavel anoT com ponteiro = %p\n\n\n", atual.ano);
	// imprimir o conteudo da variavel usando o ponteiro
	printf("O dia, mes e ano\n");
	printf("Dia: %d\n", *atual.dia);
	printf("Dia: %d\n", *atual.mes);
	printf("Dia: %d\n\n", *atual.ano);
	system("pause");
	return 0;
}
Crie um algoritmo com ponteiro e uma struct com três membros e imprima as instancias da struct com ponteiro 
#include <stdio.h>
#include <stdlib.h>
int main() {
	struct aulaPratica
	{
		int x;
		int y;
		int z;
	}; struct aulaPratica numero, * p_numero;
	p_numero = &numero;
	/*
	(*p_numero).x = 890;
	(*p_numero).y = 4578;
	(*p_numero).z = 45;
	*/
	p_numero->x = 777;
	p_numero->y = 555;
	p_numero->z = 888;
	printf("Dado de x = %i\n", numero.x);
	printf("Dado de y = %i\n", numero.y);
	printf("Dado de z = %i\n", numero.z);
	system("pause");
	return 0;
}

Continue navegando