Implementation without many strings, but with some comments and explanatory messages. Also with names of significant variables, instead of x, y, m, n, k, etc, and with comfortable eye spacing.
#include <stdio.h>
#include <stdlib.h>
// teste simples de primalidade
static int is_prime(int n)
{
// menor que 2 nao e' primo
if (n < 2)
return 0;
// 2 e' primo
if (n == 2)
return 1;
// numero par nao e' primo
if ((n & 1) == 0)
return 0;
// maior divisor de n possivel
int meio_n = n / 2;
for (int i = 3; i <= meio_n; i += 2)
if ((n % i) == 0)
return 0;
return 1;
}
int main(void)
{
int inf, sup, total = 0, n_primes = 0;
printf("*\n");
printf("* informe dois números: ");
scanf("%d%d", &inf, &sup);
printf("*\n");
if (inf == sup)
{
if (is_prime(inf))
printf("* %d e' primo, media e' o proprio %d\n", inf, inf);
else
printf("* %d nao e' primo, media e' 0\n", inf);
printf("*\n");
exit(0);
}
if (inf > sup)
{
int tmp = inf;
inf = sup;
sup = tmp;
}
for (int i = inf; i <= sup; i++)
if (is_prime(i))
{
printf("* %d primo\n", i);
total += i;
n_primes++;
}
else
{
printf("* %d\n", i);
}
printf("*\n");
if (n_primes > 0)
{
int avg = total / n_primes;
printf("* existe(m) %d numero(s) primo(s) no intervalo [%d,%d]\n", n_primes, inf, sup);
printf("* media dos numeros primos no intervalo [%d,%d] e' %d\n", inf, sup, avg);
}
else
{
printf("* nao existem numero primos no intervalo [%d,%d]\n", inf, sup);
}
printf("*\n");
}
Testing:
$./389893
*
* informe dois números: 24 28
*
* 24
* 25
* 26
* 27
* 28
*
* nao existem numero primos no intervalo [24,28]
*
$./389893
*
* informe dois números: 5 5
*
* 5 e' primo, media e' o proprio 5
*
$./389893
*
* informe dois números: 6 6
*
* 6 nao e' primo, media e' 0
*
$./389893
*
* informe dois números: 14 7
*
* 7 primo
* 8
* 9
* 10
* 11 primo
* 12
* 13 primo
* 14
*
* existe(m) 3 numero(s) primo(s) no intervalo [7,14]
* media dos numeros primos no intervalo [7,14] e' 10
*
$./389893
*
* informe dois números: 7 14
*
* 7 primo
* 8
* 9
* 10
* 11 primo
* 12
* 13 primo
* 14
*
* existe(m) 3 numero(s) primo(s) no intervalo [7,14]
* media dos numeros primos no intervalo [7,14] e' 10
*
I tested again by zeroing the counter the way you said, but the result is now 12. Any more suggestions than might be wrong?
– Paulo Sérgio