我是C新编程的新手,大约一周前开始!我正在进入循环,我遇到了编写C程序以显示质数小于100的问题。 我将分享我编写的C代码及其输出!我会等你的帮助和你的评论
#include<stdio.h>
main(){
int i,d,k;
for( i=1 ; i<=100 ; i++ ){
d=0;
for( k=1 ; k<=i ; k++ ){
if( i%k==0){
d=d+1;
}
}
if( d==1 ){
printf("\n%d",i);
}
}
getchar();
getchar();
}
输出:
1
Thanx!
答案 0 :(得分:2)
这里你去...例如5有因素(1和5):
#include<stdio.h>
main(){
int i,d,k;
for( i=1 ; i<=100 ; i++ ){
d=0;
for( k=1 ; k<=i ; k++ ){
if( i%k==0){
d=d+1;
}
}
if( d==2 ){
printf("\n%d",i);
}
}
getchar();
getchar();
}
答案 1 :(得分:1)
#include<stdio.h>
main(){
int i,d,k;
for( i=1 ; i<=100 ; i++ ){
d=0;
for( k=1 ; k<=i ; k++ ){
if( i%k==0){
d=d+1;
}
}
if( d==1 ){
printf("\n%d",i);
}
}
getchar();
}
答案 2 :(得分:0)
使用i = 2读取算法。
d=0
k=1 : 2%1=0 so d=1
k=2 : 2%1=0 so d=2
所以2不是素数...... Alrggg
有许多方法可以纠正并使代码运行得更快。 如果我<100,那么为所有我计算sqrt(i)可能是“昂贵的”,但是不时做类似的事情将是一个好方法......
更多:找到除数后无需继续 更多:Eratosthenes是你的朋友...... 更多:较小的除数总是素数...商店? 更多:事实上看维基百科...... http://en.wikipedia.org/wiki/Primality_test 再见,
弗朗西斯
答案 3 :(得分:0)
main函数应该返回一个int:What should main() return in C and C++?。
另外,考虑制作一个函数来测试一个数字是否为素数。这是一种更清洁的方法,但我猜你还没有学到它们。
您使用的算法根本没有效率。有很多方法可以改善它。
要纠正它,你应该知道素数有2个除数(除了1,但它不是素数):1和它本身。你的第二个for循环检查那些2,所以如果d是2而不是1,则数字是素数。
即使您是初学者,也应该尝试改进此算法。首先,直到sqrt(i)为除数检查就足够了。此外,当您找到除数时,您可以停止循环。此外,由于1始终是除数,因此您可以使用2开始第二个循环。
答案 4 :(得分:0)
您正在使用d
作为flag
来检测内部for循环期间数字是否可以被整除。正确使用它。每当no不可分割时,将flag设置为1表示它不是素数。如果flag不受内循环的影响,则表示number为prime。您还应该考虑从int
函数返回main
值,表示退出状态。
按如下方式更改代码。
#include<stdio.h>
main(){
int i,d,k;
for( i=2 ; i<=100 ; i++ ){
d=0;
for( k=2 ; k<i ; k++ ){
if( i%k==0){
d=1; //Set the flag to 1 indicating no. is not prime and break
break;
}
}
if( d==0){ //Means flag the was unaffected throughout the loop i.i. Prime
printf("\n%d",i);
}
}
getchar();
return 0;
}