|
18鱼币
- #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("无此功能");
- }
- }
- }
复制代码
|
|