题目:求11--20之间的全部素数
//输入一个大于3的数,判断它是不是素数
#include<stdio.h>
int main()
{
int mum = 11 , sign = 0; //此处没有定义i
for (mum; mum <= 20; mum = mum + 2) //偶数可被2整除,定不是素数,故只计算奇数即可
{
for (int i=2; i < mum; i++) //for循环的循环变量赋初值中给出了i的定义及初值
{
if (mum%i == 0) {
//printf("%d不是素数\n", mum);
sign = 1;
break;
}
printf("i===%d\n", i);
}
if (sign == 0)
{
printf("%d\n", mum);
}
sign = 0;
}
//printf("i===%d", i);
return 0;
}
结果如下所示 可见程序正常运行了
下述代码同样可以正常运行
#include<stdio.h>
int main()
{
int mum = 11, i, sign = 0; //定义了 i
for (mum; mum <= 20; mum = mum + 2) //偶数可被2整除,定不是素数,故只计算奇数即可
{
for (i = 2; i < mum; i++) //给出了每次循环的初始条件 即循环变量赋初值
{
//printf("i=%d\n", i);
if (mum%i == 0) {
sign = 1;
break;
}
}
//printf("最内层for循环结束 i=%d\n", i);
if (sign == 0)
{
printf("%d\n", mum);
}
sign = 0;
}
printf("i===%d", i); //i=199,即循环过程中
return 0;
}
但如果在程序最初定义 i 时给出 i 的值为2,而在循环过程中未给循环变量 i 赋初值,则for循环执行下一次循环时不会从2开始,而是从上一次循环结束时 i 的值开始,如下图第二次for循环 i 是从11开始。
如果在下出令 i =2,又可正常运行了,及与最开始的两个代码等价。