题目 编写一个程序,找出1~N中的所有素数,其中1<N,N为整数。 输入输出格式要求: 1.要求每个数后面都要输出逗号, 请不要输出其他字符 2.遇到异常情况,输出error 例如: 输入:5 输出:2,3,5, 输入:a 输出:error 提醒:数据最多不超过200 |
这个题的一个关键点在于输入为a时如何返回error,这里可以使用scanf的一个特性——当scanf读到的数据类型与要求读到的数据类型不同时会返回0,相同返回1,检测到结束返回 EOF。
可以先写出下面的代码来检验这个特性。
#include<stdio.h>
int main (){
int a[]={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,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199};
int i,n;
i=0;
if(scanf("%d",&n)==0||n<2||n>200){
printf("error");
}
else{
while(a[i]<=n){
printf("%d,",a[i]);
i++;
}
}
return 0;
}
以上代码太过无脑,如果其他题目中n>200,以上代码就无法执行功能了,所以需要一个计算是否为素数的函数来应对这样的情况。
#include<stdio.h>
int isprime(int m);
int main (){
int i,n;
i=2;
if(scanf("%d",&n)==0||n<2){
printf("error");
}
else{
for(;i<=n;i++){
if(isprime(i)){
printf("%d,",i);
}
}
}
return 0;
}
int isprime(int m){
int i=2,k=1;
while(i<m){
if(m%i==0){
k=0;
break;
}
else{
k=1;
i++;
}
}
return k;
}