判断101-200之间有多少个素数,并输出所有素数。(判断素数的方法:用一个数分别去除2到sqrt(该数),如果能被整除,则表明此数不是素数,反之是素数。)
这里讲的很细致,我用的手机,不然直接给你敲代码了,你可以直接参考下面这篇
https://blog.csdn.net/jingling555/article/details/127467350?app_version=5.15.7&code=app_1562916241&csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22127467350%22%2C%22source%22%3A%22u012855229%22%7D&uLinkId=usr1mkqgl919blen&utm_source=app
供参考:
#include <stdio.h>
int main()
{
int i, j, flg;
for (i = 101; i <= 200; i++) {
for (j = 2, flg = 1; j * j <= i; j++) {
if (i % j == 0) { flg = 0; break; }
}
if (flg)
printf("%d ", i);
}
return 0;
}
段落1:
1. 定义一个顺序表结构体:SqList,包含三个成员:Date(存放元素的数组指针),N(表中元素个数),MaxSize(表的最大容量)
struct Sqlist{
int *Date; //存放元素的数组指针
int N; //表中元素个数
int MaxSize; //表的最大容量
};
2. 创建空链表:Crelist,接受一个整型参数,表示表的最大容量,目的是为Date分配内存
struct SqList *Crelist(int m)
{
struct Sqlist *L;
L = (struct Sqlist*)malloc(sizeof(struct Sqlist));
L ->Date = malloc(sizeof(int)*m);
L->N = 0;
L->MaxSize = m;
return L;
}
3. 产生随机数并插入链表:RandInsert,接受一个指向SqList类型的结构体指针以及整型参数m,使用rand()函数产生100个大于等于100且小于200的随机整数,将其存储于L结构体变量的Date数组中,并更新L->N
void RandInsert(struct Sqlist *L,int m)
{
int i;
for(i = 0; i<m; i++)
{
L->Date[i]=rand()%100+100;
L->N++;
}
}
4. 输出结果:Show,接受一个SqList类型的结构体指针,使用for循环遍历输出,每20个数字换一行,最后一行换两次行
void Show(struct Sqlist *L)
{
int i;
for(i=0 ;i<L->N;i++){
if((i+1)%20==0)
printf("%d\n",L->Date[i]);
else if((i+1)==100)
printf("%d\n\n",L->Date[i]);
else
printf("%d ",L->Date[i]);
}
}
5. 删除偶数:DeletDou,接受一个SqList类型的结构体指针,使用for循环遍历数组,删除所有偶数
void DeletDou(struct Sqlist *L ) //删除偶数
{
int i,j;
for(i=0 ;i<L->N;i++){
if((L->Date[i])%2==0){
for(j=i ;j<L->N;j++)
{
L->Date[j]=L->Date[j+1];
}
i=i-1;
L->N--;
}
}
}
6. main函数实现,其中随机数的种子使用time()函数获取当前时间进行设置,避免每次随机数都相同。
int main(){
int m,i;
struct Sqlist*p,*q;
scanf("%d",&m);
p=Crelist(m);
RandInsert(p,m);
Show(p);
printf("\n");
q=p;
DeletDou(q);
Show(q);
return 0;
}
段落2:
1. 从101到200之间循环遍历每个数,对于每个数,从2到sqrt(这个数)进行整除,若能整除则为非素数,把leap标记为0,跳出内层循环,否则为素数,输出这个数,并把leap标记为1,内层循环结束判断leap是否为1,是则h加1,不是则继续循环下一个数
int m, i, k, h = 0, leap = 1;
for (m = 101; m <= 200; m++) {
k = sqrt(m + 1);
for (i = 2; i <= k; i++)
if (m % i == 0) {
leap = 0;
break;
}
if (leap) /*内循环结束后,leap依然为1,则m是素数*/
{
printf("%-4d", m);
h++;
if (h % 10 == 0)
printf("\n");
}
leap = 1;
}
printf("\nThe total is %d", h);
2. 可以将代码嵌入到main函数中,这里还需要包含头文件math.h。
int main() {
int m, i, k, h = 0, leap = 1;
printf("\n");
for (m = 101; m <= 200; m++) {
k = sqrt(m + 1);
for (i = 2; i <= k; i++)
if (m % i == 0) {
leap = 0;
break;
}
if (leap)
{
printf("%-4d", m);
h++;
if (h % 10 == 0)
printf("\n");
}
leap = 1;
}
printf("\nThe total is %d", h);
return 0;
}