#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[10][10],*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[10][10]=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[k]>p[j])
k=j;
if(k!=i)
j=p[k],p[k]=p[i],p[i]=j;
printf(++t%10 ? "%3d" : "%3d\n",p[i]);
}
}
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[i]>p[i+1])
{
t=p[i];
p[i]=p[i+1];
p[i+1]=t;
}
for(i=0;i<100;i++)
{ printf (++t%10 ? "%3d" : "%3d\n",p[i]);}
}
void sort3()
{ //插入法排序
p=(int*)a;//降为一维数组
int i,j,t;
printf("排序后:\n");
for(i=2;i<100;i++)
{
t=p[i];
for(j=i-1;j>=0 && p[j]>t;j--)
p[j+1]=p[j];
p[j+1]=t;
}
for(t=i=0;i<100;i++)
printf(++t%10 ? "%3d":"%3d\n",p[i]);
}
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[i][j]==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[i];
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[i]/2;b+=2) //先寻找一个素数
{
for(c=2;c<=sqrtl(b);c++)
if(b%c==0) break; //b不是一个素数
if(c>sqrtl(b)) //b是素数
d=p[i]-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[i],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[k]>p[j])
k=j;
if(k!=i)
j=p[k],p[k]=p[i],p[i]=j;
}
int n;
printf("\n请输入你要插入的数:\n");
scanf("%d",&n);
for(i=0;i<100;i++)
{
if(p[i]>n)
{
for(j=99;j>=i;j--)
{
p[j+1]=p[j];
}
p[i]=n;
break;
}
}
for (i=0; i<100; i++)
{ printf(++t%10 ? "%3d" : "%3d\n",p[i]);
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[i])
break;
if(i<100)
{
while(i<99)
{ p[i++]=p[i+1]; }
printf("新数组:\n");
for(i=0,n=0;i<99;i++)
{ printf (++n%10 ? "%3d" : "%3d\n",p[i]); }
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("无此功能");
}
}
}