如何输出100以内的素数
之前,我们写出了判断这个数值是不是素数的代码
#include <stdio.h>
int main () {
int num, isPrime;
scanf("%d",&num);
for (int i = 2; i <= num/2; i++) {
if(num % i == 0) {
isPrime = 0;
}
}
if(isPrime == 0){
printf("%d不是素数",num);
} else {
printf("%d是素数",num);
}
return 0;
}
现在,我们可以将其改一下。
用for试试水。
#include <stdio.h>
int main () {
int isPrime;
for(int j =1; j <= 100; j++) {
isPrime = 1;
for (int i = 2; i <= j/2; i++) {
if(j % i == 0) {
isPrime = 0;
break;
}
}
if(isPrime != 0){
printf("%d ",j);
}
}
printf("\n");
return 0;
}
用while看看
#include <stdio.h>
int main () {
int isPrime;
int j =1;
while(j <= 100) {
isPrime = 1;
for (int i = 2; i <= j/2; i++) {
if(j % i == 0) {
isPrime = 0;
break;
}
}
if(isPrime != 0){
printf("%d ",j);
}
j++;
}
printf("\n");
return 0;
}
结果都是
1 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
其实,还有一个点:一个循环有一个循环的控制变量,不要串用。
由上可知,我们可以想象得到,如果要用到枚举或者是其他多级的循环的,可以想到多重循环。
但是,要记住break;
只能跳出其所在的最内层循环
那怎样才能跳出所有的循环?
老方法,先声明一个exit
变量,然后 判断exit
是否等于1
int main() {
int exit = 0;
for ( int i = 1; i < 10; i++ ) {
for (int j = 1; j < 10; j++) {
for (int k = 1; k < 10; k++) {
exit = 1;
break;
}
if (exit == 1) {
break;
}
}
if(exit == 1) {
break;
}
}
}
这只是传统方法,还有一个办法——用goto
看操作
int main() {
for ( int i = 1; i < 10; i++ ) {
for (int j = 1; j < 10; j++) {
for (int k = 1; k < 10; k++) {
printf("1");
goto out;
}
}
}
out:
printf("out");
return 0;
}
结果,一下子,只打印了一次1
和out
。
跳出的地方声明。
由最内层跳最外层用goto