//请写一个C程序,将3-100以内的所有素数保存到一个链式线性表中,最后按顺序将单链表中的所有数据输出到屏幕上。
#include <stdio.h>
#include <malloc.h>
#include <math.h>
#define M0 3
#define N0 100
#define NULL 0
#define
LEN
sizeof(struct prime)
#define PRIMENODE struct prime
int
count;
//全局变量,放结点个数
//--定义链表的结点类型
struct prime
{
int num;
PRIMENODE *next;
};
//=========================
//函数功能:判断整数n是否是一个素数
//入口参数: int n
//返回值:判断结果(真,假(1,0))
//==========================
int isprime(int n)
{
int flag=0,i,k;
k=sqrt(n);
for(i=2;i<=k;i++)
if(n%i==0) break;
if(i>k)flag=1;
return flag;
}
//=========================
//函数功能:建立素数的链表
//入口参数: 素数所在区间的两个端点
//返回值: 链表的头指针
//=========================
PRIMENODE *create(int m,int n)
{
PRIMENODE *head,*p1,*p2;
int i;
count=0;
head=NULL;
p1=p2=(PRIMENODE *)malloc(LEN );
for(i=m;i<n;i++)
{
if(isprime(i))
{
count++;
p1=(PRIMENODE *)malloc(LEN ); //建立新结点
p1->num=i;
if(count==1)head=p1;
//连接新结点
else p2->next=p1;
p2=p1;
//p2总是指向新表尾
}
}
p2->next=NULL;
return head;
}
//=========================
//函数功能:输出素数的链表
//入口参数: 链表的头指针
//返回值: 无
//=========================
void print(PRIMENODE *head)
{
PRIMENODE *p;
int i=0;
printf("\t%d--%d中的素数有%d个:\n",M0,N0,count); //表头
p=head;
while(p!=NULL)
{
if(i%10==0)putchar('\n');
printf("%5d",p->num);
i++;
p=p->next;
}
printf("\n\n
");
}
// 主函数
void main ()
{
PRIMENODE *head;
head=create(M0,N0);
print(head);
}