2图2为当m=150时,输出1~150之间的素数,结果如图所示。
图1.4 1~150之间的素数运行结果
3 图3为m大于L.length时的图
图1.5大于L.lenggth
1.7源程序(带注释)
#include
int sushu(DataType i)//判断是否为素数 {
int m; f(i==1) return 0;
6
for(m=2;m
int main() { Seqlist L; int m,j; int i,k=0; L.length=maxsize; for(j=2;j<=L.length ;j++) { L.data[j-1]=j; printf(\ } printf(\ printf(\ scanf(\ if(m>L.length ) return FALSE; printf(\至m之间的素数从小到大分别为:\\n\ for(i=1;i<=m ;i++) L.data[i-1]=i; for(i=1;i<=m;i++) if(sushu(L.data[i-1])) { k++; printf(\符号\的作用是横向制表。 } printf(\总共%d个。\\n\ return 0; }
二、数据删除问题
2.1 问题描述
编写删除具有N个数据项的数组A中所有重复项的程序,返回A中仍有的数据项。要求运行时间在O(NlogN)。(例如:
数组a的初始数据为:2,5,2,4,20,0,4,-5,-5,16,2,-4,20。 升序排序后为: -5,-5,-4,0,2,2,2,4,4,5,16,20,20。
7
删除重复数据后为: -5,-4,0,2,4,5,16,20
2.2算法设计
(1)定义一个数组a[10],用循环实现排序 for(i=0;i<10;i++) {
for(j=i+1;j<10;j++) {
if(a[i]>a[j]) {
t=a[i]; a[i]=a[j]; a[j]=t;
用直接覆盖法删除重复数据 for(j=i+1;j<9;j++) a[j]=a[j+1];
(2)程序流程图
数据删除问题程序流程图 理的输入所要处 数组,进行编译预 处理 进行排序(冒泡排序) 8
利用正则遍历, 将数组中重复的 数据分离出来, 用于单独处理 在遍历过程中,将相 同的分别数据保留 一个,并继续遍历 输出处理后的新数组 若没有数据相同,则跳过此阶段 图2.1数据删除流程图
9
2.3程序调试情况:
1数据删除问题:当输入1 2 2 2 3 3 3 2 1 3 时,删除重复数据,输出结果如图所示。
图2.2数据删除图
2.4源程序
#include
{ int i,j,t; int a[10];
printf(\请输入10个数:\\n\
for(i=0;i<10;i++) //输入 scanf(\
printf(\输入的10个数是:\ for(i=0;i<10;i++) printf(\ printf(\
for(i=0;i<10;i++) //排序 {
for(j=i+1;j<10;j++) {
if(a[i]>a[j]) {
t=a[i]; a[i]=a[j]; a[j]=t; } }
10