1.我最初的写法:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<math.h>
int main()
{
int i, j, k = 0;
int Temp = 1;
for (i = 2; k < 50; i++)//从2开始寻找素数,直到素数数量为50
{
for (j = 2; j <= sqrt(i); j++)//遍历2~根号i
{
if (i % j == 0)//如果找到一个数除i余数为零,说明i有除1和本身以外的因数,i不是素数
{
Temp = 0;
break;//记得退出循环,节约时间
}
}
//如果从2~根号i都没有找到一个因数,则i为素数
if (Temp == 1)
{
printf("%d\t", i);//打印i
k++;//素数数量+1
}
if (k % 10 == 0)
printf("\n");
}
return 0;
}
然而这样写会出现问题-程序卡死
询问学姐后发现,出现卡住的原因是Temp变量没有在每一轮循环中重新初始化为1
2.第一次修改
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<math.h>
int main()
{
int i, j, k = 0;
for (i = 2; k < 50; i++)//从2开始寻找素数,直到素数数量为50
{
int Temp = 1;//默认为素数
//这一步初始化的位置很关键 必须让每一轮Temp重新初始化 不然程序会卡死
for (j = 2; j <= sqrt(i); j++)//遍历2~根号i
{
if (i % j == 0)//如果找到一个数除i余数为零,说明i有除1和本身以外的因数,i不是素数
{
Temp = 0;
break;//记得退出循环,节约时间
}
}
//如果从2~根号i都没有找到一个因数,则i为素数
if (Temp == 1)
{
printf("%d\t", i);//打印i
k++;//素数数量+1
}
if (k % 10 == 0)
printf("\n");
}
return 0;
}
然而又出现了问题-输出格式有误
明显发现输出后每一行之间存在宽度不一的空格,这是为什么?
上网查阅后发现了原因 c语言 为啥中间会出现一大片空白啊_其他-CSDN问答https://ask.csdn.net/questions/7410946