求助:C语言大作业-常用算法软件debug
#include <stdio.h>#include "stdlib.h"
#include "time.h"
#include "math.h"
void random();
void sort1();
void sort2();
void sort3();
void sushu();
void search();
void transfer();
void insert();
void dele();
int a,*p;
void menu()
{
int n;
printf("\n请输入需要执行的功能代码:");
printf("\n1.生成100个随机数\n");
printf("2.选择法排序\n");
printf("3.冒泡法排序\n");
printf("4.插入法排序\n");
printf("5.查找数据\n");
printf("6.转换二进制\n");
printf("7.转换为素数之和\n");
printf("8.插入数据\n");
printf("9.删除数据\n");
scanf("%d",&n);
switch(n)
{
case 1: rand();break;
case 2: sort1();break;
case 3: sort2();break;
case 4: sort3();break;
case 5: search();break;
case 6: transfer();break;
case 7: sushu();break;
case 8: insert();break;
case 9: dele();break;
default:printf("无此功能");
}
}
void random()
{//生成100个随机数
int i,j;
srand((unsigned) time(NULL));
for(i=0;i<10;i++)
{
for(j=0;j<10;j++)
{
a=rand();
printf("%3d\t",rand()%99);
}printf("\n");
}
}
void sort1()
{ //选择法排序
p=(int*)a;//降为一维数组
printf("排序后:\n");
int i,j,k,t;
for(t=i=0;i<100;i++)
{
for(k=i,j=k+1;j<100;j++)
if(p>p)
k=j;
if(k!=i)
j=p,p=p,p=j;
printf(++t%10 ? "%3d" : "%3d\n",p);
}
}
void sort2()
{ //冒泡法排序
p=(int*)a;//降为一位数组
int i,j,k,t;
printf("排序后:\n");
k=100-1;
for(j=1;j<=100-1;j++,k--)
for(t=i=0;i<=k-1;i++)
if(p>p)
{
t=p;
p=p;
p=t;
}
for(i=0;i<100;i++)
{ printf (++t%10 ? "%3d" : "%3d\n",p);}
}
void sort3()
{ //插入法排序
p=(int*)a;//降为一维数组
int i,j,t;
printf("排序后:\n");
for(i=2;i<100;i++)
{
t=p;
for(j=i-1;j>=0 && p>t;j--)
p=p;
p=t;
}
for(t=i=0;i<100;i++)
printf(++t%10 ? "%3d":"%3d\n",p);
}
void search()
{//查找数据
int i,j,flag=0,num;
printf("请输入需查找的数:");
scanf("%d",&num);
for(i=0;i<10;i++)
{
for(j=0;j<10;j++)
{
if(a==num)
{
flag=1;
printf("该数所在位置(%d,%d)\n",i+1,j+1);
}
}
}
if(flag==0)
{printf("无此数\n");}
}
void transfer()
{//转换二进制
p=(int *)a;//降为一维
int i,t;
int b,c,d,e,f,g,h;
char j;
for (t=i=0;i<100;i++)
{
t=p;
b=t%2;
c=t/2%2;
d=t/4%2;
e=t/8%2;
f=t/16%2;
g=t/32%2;
h=t/64%2;
printf("%d%d%d%d%d%d%d ",h,g,f,e,d,c,b);
}
}
void sushu()
{//转换为素数之和
p=(int*)a;//降为一维
printf("将其中的偶数转换为素数之和后:\n");
int i,b,c,d;
for(i=0;i<100;i++)
{
for(b=3;b<=p/2;b+=2)//先寻找一个素数
{
for(c=2;c<=sqrtl(b);c++)
if(b%c==0) break;//b不是一个素数
if(c>sqrtl(b)) //b是素数
d=p-b;
else
break;
for(c=2;c<=sqrtl(d);c++)
if(d%c==0) break;//差值d不是一个素数
if(c>sqrtl(d))//加入差值d也是一个素数,找到,打印
printf("%d=%d+%d\t",p,b,d);
}
}
}
void insert()
{//插入数据
int i,j,k,t;
p=(int *)a;
for(t=i=0;i<100;i++)
{//排序
for(k=i,j=k+1;j<100;j++)
if(p>p)
k=j;
if(k!=i)
j=p,p=p,p=j;
}
int n;
printf("\n请输入你要插入的数:\n");
scanf("%d",&n);
for(i=0;i<100;i++)
{
if(p>n)
{
for(j=99;j>=i;j--)
{
p=p;
}
p=n;
break;
}
}
for (i=0; i<100; i++)
{ printf(++t%10 ? "%3d" : "%3d\n",p);
printf("\n");}
}
void dele()
{//删除数据
p=(int*)a;//降为一维
int i,d,n=0;
printf("请输入需要删除的数:");
scanf("%d",&d);
for(i=0;i<100;i++)
if(d==p)
break;
if(i<100)
{
while(i<99)
{ p=p; }
printf("新数组:\n");
for(i=0,n=0;i<99;i++)
{ printf (++n%10 ? "%3d" : "%3d\n",p); }
putchar('\n');
}
else printf("无此数?\n");
}
void main()
{
int n;
while(1)
{ menu();
scanf("%d",&n);
switch(n)
{
case 1: rand();break;
case 2: sort1();break;
case 3: sort2();break;
case 4: sort3();break;
case 5: search();break;
case 6: transfer();break;
case 7: sushu();break;
case 8: insert();break;
case 9: dele();break;
default:printf("无此功能");
}
}
}
页:
[1]