初学者的C编程--用三种循环写出1~100的所有素数
前言
初学C语言,请大佬多提宝贵意见,感激不尽。欢迎各位初学者前来交流。
do……while循环
# include <stdio.h>
int main(void)
{
int i, j, sum=0, ge=0;
i=3;
do
{
j = 2;
do
{
if(i%j == 0)
{
printf("%i不是素数\n",i);
break;
}
else if(j == (i+1)/2)
{
printf("%d是是是是是是是是是是素数\n",i);
sum += i;
ge += 1;
}
++j;
}
while((j-1) <= (i+1)/2);
i++;
}
while(i < 101);
printf("sum = %d\n",sum+2);
printf("ge = %d\n",ge+1);
return 0;
}
do……while的输出结果:
for 循环语句(1)“2”无输出
若要用这种方法输出“2”,将j<=(i+1)/2改为j<i即可
# include<stdio.h>
int main(void)
{
int i; //外循环,1~100数值
int j; //内循环,变量标志
int sum=0; //素数的和
int ge=0; //素数的个数
int k; //判断的范围
printf("请输入数值,以判断其从2到他的范围内的素数\n");
scanf("%d",&k);
for(i=3; i <= k; i++) //从3开始,2由人工计算输入。
{
for (j=2; j<=(i+1)/2; j++) //若是将j<i则可以判断i = 2的情况。
{
if (i%j == 0)
{
printf("%d不是素数\n",i);
break;
}
else if (j == (i+1)/2) //如果到最后一个数值还是有余数的话,才能得出素数的结论
{
printf("%d是是是是是是是是是是素数\n",i);
sum += i;
ge++;
}
}
}
printf("sum = %d\n",sum+2); //程序中“2”没有判断,手动输入。
printf("ge = %d\n",ge+1);
return 0;
}
输出结果:
for 循环语句(2)“2”输出
# include<stdio.h>
int main(void)
{
int i; //外循环,1~100数值
int j; //内循环,变量标志
int sum=0; //素数的和
int ge=0; //素数的个数
int k; //判断的范围
int flag; //非素数标志
printf("请输入数值,以判断其从2到他的范围内的素数\n");
scanf("%d",&k);
for(i=2; i <= k; i++) //从3开始,2由人工计算输入。
{
flag = 0;
for (j=2; j<=(i+1)/2; j++) //若是将j<i则可以判断i = 2的情况。
{
if (i%j == 0)
{
printf("%d不是素数\n",i);
flag = 1;
break;
}
else if (j == (i+1)/2) //如果到最后一个数值还是有余数的话,才能得出素数的结论
{
break;
}
}
if(flag)
continue;
printf("%d是是是是是是是是是是素数\n",i);
sum += i;
ge++;
}
printf("sum = %d\n",sum); //程序中“2”没有判断,手动输入。
printf("ge = %d\n",ge);
return 0;
}
运行结果:
while 语句
int main(void)
{
int i=3, j, sum=0, ge=0; //sum:素数和;ge:素数个数;i外循环;j内循环。
while(i < 101)
{
j = 2;
while(j <= (i+1)/2)
{
if(i%j == 0) //错误原因:
{ //-----------------------------------------------------------------------------
printf("%d不是素数\n",i); //!!!内嵌的循环语句中,每次i值变化时的循环分析,j的值没有从j=2开始重新分析计算
break; //------------------------------------------------------------------------------
}
else if(j == (i+1)/2)
{
printf("%d是素数\n",i);
sum += i;
ge += 1;
}
++j; //++j在当前循环语句内,在条件判断语句外。
}
++i;
}
printf("sum = %d\n", sum+2);
printf("ge = %d\n", ge+1);
return 0;
}
/*
---------------------------
总结:
内嵌循环时,一定要将内嵌循环的循环计数标志值“从头”开始计数。
---------------------------
*/
运行结果:
初学C语言,请大佬多提意见。