编程题练习1
// // 编程题 // 有一个数组 [5, 8, 12, 18, 123] 按数字和,从小到大排序。结果: [12, 5, 123, 8, 18] (1+2 <5 , 所以 12在5之前) typedef struct num * NUM; struct num { int title[5];//存储需要比较的数值(5,8,12,18,123) int jibie[5];//记录分析出的大小(5,8,3,9,6),分析数值大小。 } Num; int b[5]; //设置b为全局变量数组 // 冒泡排序算法 void bubbleSort(struct num *arr, int n) { //传入结构体进行比较 // for(int n=0;n<5;n++) // { // printf("%4d",arr->title[n]); // printf("%4d",arr->jibie[n]); // } for (int i = 0; i<n - 1; i++) for (int j = 0; j < n - i - 1; j++) { //如果前面的数的分析数值比后面大,进行交换 if (arr->jibie[j] > arr->jibie[j + 1]) { int temp = arr->title[j]; arr->title[j] = arr->title[j + 1]; arr->title[j + 1] = temp;//交换数值 int temp2 = arr->jibie[j]; arr->jibie[j] = arr->jibie[j + 1]; arr->jibie[j + 1] = temp;//交换分析数值 }//同时交换数值和它的分析数值 } for(int n=0;n<5;n++) printf("%4d",arr->title[n]); } void fun(int *p){ // printf("%d",*p); //printf("%d", 123/100); for(int i=0,m=0;i<5;i++,m++) { int chushu=1, weishu; //chushu用来记录商,weishu记录输入数值的位数 //下面的for循环用来求出输入数值的位数(例如:5 1位, 12 2位, 123 3位) for(int j=1;chushu!=0;weishu++) { j=j*10; chushu=p[i]/j; //当chushu为0时,循环结束,weishu记录输入数值的位数 } //(5,8,12,18,123)对应的位数为(1,1,2,2,3) // printf("%3d",weishu); weishu--; //将所得位数减一 (0,0,1,1,2) int sum=0; // printf("%3d",weishu); if(weishu==0) b[i]=p[i]; //如果位数为0,直接将p[i]值赋予b[i], else{ int total=0,pre=0; //total记录商值,pre用来保留改变前的p[i]值 for(; weishu!=0;weishu--)//位数不为0,在此循环运行 { int chushu2=(int)(pow(10,weishu)); // pow()为平方函数,pow(10,2)的100. //chushu2记录除数 // printf("%3d",chushu2); { total=p[i]/chushu2; p[i]=p[i]-(p[i]/chushu2)*(int)(pow(10,weishu)); pre=p[i]; // printf("%3d",p[i]); sum=sum+total; // printf("%3d",sum); } //上一部分代码所做的操作是: //例如: 123 , 位数减一后是2, chushu2=(int)(pow(10,2)), chushu2=100; //total=123/100, total=1; //pre=p[i]=123-(123/100)*100=23; //sum=sum+1, sum=1 , 一次循环结束, weishu减一,weishu为1 //第二次循环 //total=23/10, total=2, chushu2=(int)(pow(10, 1)), chushu2=10; //pre=p[i]=23-(23/10)*10=3; //sum=sum+2; sum=3, weishu减一,weishu为0,退出循环 } b[i]=sum+pre; //当分析123时, b[i]=sum+pre=3+3=6 // printf("%4d",b[i]); } } // for(int n=0;n<5;n++) // printf("%4d",b[n]); return b;//返回分析数组 } int main () { int a[5]={5,8,12,18,123}; int c[5]; for(int j=0;j<5;j++) { c[j]=a[j]; } fun(a); // for(int n=0;n<5;n++) // // printf("%4d",b[n]); struct num number; //定义结构体变量number for(int i=0;i<5;i++) { number.title[i]=c[i];//将a数组值存入 number.jibie[i]=b[i];//将分析数组值存入 } // for(int n=0;n<5;n++) // { // printf("%4d",number.title[n]); // printf("%4d",number.jibie[n]); // } NUM *p=&number; bubbleSort(p,5);//将结构体传参 return 0; }