Operador | Exemplo | É equivalente a: |
---|---|---|
*= | x *= 5 | x = x * 5 |
/= | x /= 5 | x = x / 5 |
%= | x %= 5 | x = x % 5 |
+= | x += 5 | x = x + 5 |
-= | x -= 5 | x = x - 5 |
Operador | Nome | Explicação | Exemplos |
---|---|---|---|
/ | Divisão Inteira | Retorna a parte inteira do quociente | 4 / 3 retorna 1 |
% | Módulo | Retorna o resto da divisão | 8% 3 retorna 2 |
![]() |
![]() |
#include <stdio.h> int main(){ int n,nn,d,r,cont=0; printf("Digite o valor de n: "); scanf("%d",&n); nn = n; printf("Digite um dígito [0,9]: "); scanf("%d",&d); while(n != 0){ r = n % 10; if(r == d) cont = cont + 1; n = n / 10; } n = nn; printf("%d ocorre %d vezes em %d.\n",d,cont,n); return 0; }
#include <stdio.h> int main(){ int n,r,ant,adjiguais = 0; printf("Digite o valor de n: "); scanf("%d",&n); ant = n % 10; n = n / 10; while(n > 0){ r = n % 10; if(ant == r) adjiguais = 1; ant = r; n = n / 10; } if(adjiguais) printf("Contém adjacentes iguais.\n"); else printf("Não contém adjacentes iguais.\n"); return 0; }Uma segunda solução usando uma condição extra de parada do laço.
#include <stdio.h> int main(){ int n,r,ant,adjiguais = 0; printf("Digite o valor de n: "); scanf("%d",&n); ant = n % 10; n = n / 10; while(n > 0 && !adjiguais){ r = n % 10; if(ant == r) adjiguais = 1; ant = r; n = n / 10; } if(adjiguais) printf("Contém adjacentes iguais.\n"); else printf("Não contém adjacentes iguais.\n"); return 0; }Outra solução alternativa, inicializando a variável ant com um dígito inválido, ao invés de ler o primeiro dígito de n fora do laço. Com essa alteração, a condição do laço ant == r nunca será verdadeira na primeira iteração do laço.
#include <stdio.h> int main(){ int n,r,ant,adjiguais = 0; printf("Digite o valor de n: "); scanf("%d",&n); ant = 10; /*dígito inválido > 9*/ while(n > 0 && !adjiguais){ r = n % 10; if(ant == r) adjiguais = 1; ant = r; n = n / 10; } if(adjiguais) printf("Contém adjacentes iguais.\n"); else printf("Não contém adjacentes iguais.\n"); return 0; }
Exemplo: raiz de 9801 = 99 = 98 + 01.
Portanto 9801 é um dos números a ser impresso.
#include <stdio.h> int main(){ int i,d1,d2; for(i = 1000; i <= 9999; i += 1){ d1 = i%100; d2 = i/100; if( (d1+d2)*(d1+d2) == i ) printf("%d\n",i); } return 0; }
0 2 3 4 6 8
#include <stdio.h> int main(){ int n,i,j,cont,cm; printf("Cálculo dos n primeiros múltiplos de i ou de j\n"); /*Dados de entrada:*/ printf("Digite n: "); scanf("%d",&n); printf("Digite i: "); scanf("%d",&i); printf("Digite j: "); scanf("%d",&j); cm = 0; /*candidato a múltiplo.*/ cont = 0; /*conta quantos múltiplos foram impressos.*/ while(cont < n){ if(cm%i == 0 || cm%j == 0){ printf("%d ",cm); cont += 1; } cm += 1; } printf("\n"); return 0; }Segunda solução: Mais elaborada. Faz menos iterações que a anterior. A cada iteração imprime um múltiplo de i ou j.
#include <stdio.h> int main(){ int n,i,j,multi,multj,cont; printf("Cálculo dos n primeiros múltiplos de i ou de j\n"); /*Dados de entrada:*/ printf("Digite n: "); scanf("%d",&n); printf("Digite i: "); scanf("%d",&i); printf("Digite j: "); scanf("%d",&j); multi = 0; /*múltiplos de i*/ multj = 0; /*múltiplos de j*/ cont = 0; /*conta quantos múltiplos foram impressos.*/ while(cont < n){ if(multi < multj){ printf("%d ",multi); multi += i; } else if(multj < multi){ printf("%d ",multj); multj += j; } else{ /*multi == multj*/ printf("%d ",multj); multi += i; multj += j; } cont += 1; } return 0; }
Um número natural é um número primo quando ele tem exatamente dois divisores naturais distintos: o número um e ele mesmo. Por definição, 0 e 1 não são números primos.
Primeira solução:
Um número primo n não pode ser divisível
por nenhum outro número no intervalo [2,n-1].
Logo, testamos todos candidatos a
divisores possíveis no intervalo [2,n-1],
e usamos um indicador de passagem (variável primo)
para sinalizar a ocorrência desse evento (divisão).
Ao final do programa vale que primo == 0
se e somente se o número dado não é primo.
#include <stdio.h> int main(){ int n,d,primo; printf("Teste de primalidade\n"); printf("Digite um inteiro: "); scanf("%d",&n); /*o número é primo até que se prove o contrário*/ primo = 1; /*indicador de passagem*/ d = 2; /*os candidatos a divisores positivos de n*/ while(d < n){ if(n%d == 0) primo = 0; /*não é primo!*/ d += 1; } if(n <= 1) /*nenhum número natural <= 1 é primo.*/ primo = 0; if(primo) printf("O número é primo\n"); else printf("O número não é primo\n"); return 0; }
Segunda solução: Reduz o espaço de busca, testando apenas os candidatos a divisores positivos de n no intervalo 2,3,4,...,n/2.
#include <stdio.h> int main(){ int n,d,primo; printf("Teste de primalidade\n"); printf("Digite um inteiro: "); scanf("%d",&n); /*o número é primo até que se prove o contrário.*/ primo = 1; /*indicador de passagem*/ if(n <= 1) /*nenhum número natural <= 1 é primo.*/ primo = 0; d = 2; /*os candidatos a divisores positivos de n.*/ while(d <= n/2 && primo){ if(n%d == 0) primo = 0; /*não é primo!*/ d += 1; } if(primo) printf("O número é primo\n"); else printf("O número não é primo\n"); return 0; }
Terceira solução: Reduz o espaço de busca ainda mais. Testa se o número é par fora do laço principal. Dentro do while só testa candidatos a divisores ímpares.
#include <stdio.h> int main(){ int n,d,primo; printf("Teste de primalidade\n"); printf("Digite um inteiro: "); scanf("%d",&n); if(n <= 1) /*nenhum número natural <= 1 é primo.*/ primo = 0; else if(n%2==0 && n > 2) primo = 0; /*nenhum número par > 2 é primo.*/ else /*o número é primo até que se prove o contrário*/ primo = 1; /*vale que n é um ímpar maior que 1 ou é 2.*/ d = 3; /* os candidatos a divisores positivos de n são 3,5,7,...,n/2 */ while(d <= n/2 && primo){ if(n%d == 0) primo = 0; /*não é primo!*/ d += 2; } if(primo) printf("O número é primo\n"); else printf("O número não é primo\n"); return 0; }Outras possíveis otimizações podem ser encontradas aqui.
O MDC de dois números inteiros é o maior número inteiro que divide ambos sem deixar resto.
Exemplos:
#include <stdio.h> int main(){ int a,b,m,i,mdc=1; printf("MDC entre A e B:\n"); printf("Entre com A: "); scanf("%d",&a); printf("Entre com B: "); scanf("%d",&b); if(a == 0 && b == 0){ printf("MDC(0, 0) não existe pois todo inteiro não-nulo é divisor de zero.\n"); return 0; } else if(a == 0) mdc = b; else if(b == 0) mdc = a; else{ if(a < b) m = a; else m = b; for(i=2; i <= m; i++){ if(a%i == 0 && b%i == 0) mdc = i; } } printf("MDC = %d\n",mdc); return 0; }
Segunda solução: Nessa segunda solução, realizamos o laço a partir do maior valor candidato a MDC em direção aos menores, o que permite encerrar o laço assim que o primeiro divisor comum for encontrado. Será assumido que a > 0 e b > 0 a fim de simplificar o código.
#include <stdio.h> int main(){ int a,b,m; printf("MDC entre A e B:\n"); printf("Entre com A: "); scanf("%d",&a); printf("Entre com B: "); scanf("%d",&b); if(a < b) m = a; else m = b; for(; m > 0 ; m--){ if(a%m == 0 && b%m == 0) break; } printf("MDC = %d\n",m); return 0; }Terceira solução: Dados dois inteiros positivos calcular o máximo divisor comum (MDC) entre eles usando o algoritmo de Euclides.
Algoritmo de Euclides: Para dois números A e B:
#include <stdio.h> int main(){ int a,b,r,t; printf("MDC entre A e B:\n"); printf("Entre com A: "); scanf("%d",&a); printf("Entre com B: "); scanf("%d",&b); if(a < b){ t = a; a = b; b = t; } while(b > 0){ r = a%b; a = b; b = r; } printf("MDC = %d\n",a); return 0; }Na verdade o primeiro "if" não é necessário e pode ser omitido, pois a primeira iteração do laço irá naturalmente inverter o conteúdo das variáveis a e b quando a < b.
#include <stdio.h> int main(){ int a,b,r; printf("MDC entre A e B:\n"); printf("Entre com A: "); scanf("%d",&a); printf("Entre com B: "); scanf("%d",&b); while(b > 0){ r = a%b; a = b; b = r; } printf("MDC = %d\n",a); return 0; }