下列程序的功能是:将一个正整数序列{K1, K2,…, K9}重新排列成一个新的序列。在新序列中,比K1小的
下列程序的功能是:将一个正整数序列{K1, K2,…, K9}重新排列成一个新的序列。在新序列中,比K1小的数都在K1的前面(左面),比K1大的数都在K1的后面(右面)。要求编写函数jsValue()实现以上功能,最后调用函数writeDat(),将新序列输出到文件out.dat中。说明:程序中已给出了10个序列,每个序列中有9个正整数,并存入数组a[10][9] 中,分别求出这10个新序列。例如:序列{6, 8, 9, 1, 2, 5, 4, 7, 3}重排后为{3, 4, 5, 2, 1, 6, 8, 9, 7}。部分源程序已给出。请勿改动主函数main() 和写函数writeDat() 的内容。#include<stdio.h>void jsValue(int a[10][9]){ } void main(){ int a[10][9]={{6,8,9,1,2,5,4,7,3} {3,5,8,9,1,2,6,4,7} {8,2,1,9,3,5,4,6,7} {3,5,1,2,9,8,6,7,4} {4,7,8,9,1,2,5,3,6} {4,7,3,5,1,2,6,8,9} {9,1,3,5,8,6,2,4,7} {2,6,1,9,8,3,5,7,4} {5,3,7,9,1,8,2,6,4} {7,1,3,2,5,8,9,4,6} }; int i,j; jsValue(a); for(i=0;i<10;i++){ for(j=0;j<9;j++) { printf("%d",a[i][j]); if(j<=7) printf(","); } printf("\n");}writeDat(a);}void writeDat(int a[10][9]){ FILE *fp; int i,j; fp=fopen("out.dat","w"); for(i=0;i<10;i++){ for(j=0;j<9;j++){ fprintf(fp,"%d",a[i][j]); if(j<=7) fprintf(fp,","); } fprintf(fp,"\n");} fclose(fp);}
【解析及答案】
本题的任务是把排序函数jsValue() 补充完整。本题的处理过程是对数组a[10][9] 中的每行数据分别处理,然后再放置到原来的数组a[10][9] 中。求解时需要使用一个[10][9] 的临时数组b存放处理时的中间结果。数组a处理完以后,就用数组b的内容代替数组a的内容。对每行数据进行处理时,首先需要准备两个指示器n和k,分别指向数组b中该行的开头和结尾。然后,反向扫描数组a中对应的行。如果碰到比该行第1个数据值大的元素,就将其放到指示器k指向的位置;如果碰到比其数据值小的元素,就将其放到指示器n指向的位置。处理完以后,还要移动指示器n和k,使其定位在新的位置,以接收后面的数据。如果碰到和其数据值相等的元素,由题意可知,这样的元素在新数组中只允许出现1次,所以直接把这个元素放到指示器n和k指向的位置即可,但不必移动指示器,否则该元素有可能出现多次。综上所述,完整的排序函数jsValue() 如下。
jsvalue(int a[10][9])
{
int i,j,k,n,temp;
int b[9]=0;
for(i=0;i<10;i++)
{
temp=a[i][0];
k=8;
n=0;
for(j=8,j>=0;j--)
{
if(temp b[k--]=a[i][j];
if(temp>a[i][j])
b[n++]=a[i][j];
if(temp==a[i][j])
b[n]=temp; /*也可以b[k]=a[i][j];*/
}
for(j=0;j<9;j++)
{
a[i][j]=b[j];
b[j]=0;}
}
}
A市在B市的12km的位置,给B市发货的车以40km/时送货,以60km/时返回A市,往返1时10 数学 2020-04-27 …
在Excel中,下列关于排序的说法错误的是.(A)要对某一列数据排序,需选中这一列,然后利用“数据 其他 2020-05-23 …
下列程序的功能是:将一正整数序列{K1,K2,…,K9}重新排成一个新的序列。新序列中,比K1小的数 计算机类考试 2020-05-23 …
如图,将圆上所有的点的纵坐标压缩为原来的一半,横坐标不变,所得的曲线是什么曲线?压缩为原来的呢(探 数学 2020-06-25 …
俄罗斯科学家用含20个质子的钙的一种原子轰击含95个质子的镅原子,结果4次成功合成4个第115号元 化学 2020-07-01 …
甲书架上的书的本数与乙书架上的比是4:5,若从两个书架上各取走150本,则甲书架上的书的本数与乙书 数学 2020-07-19 …
9.在待排序的数据表已经为有序时,下列排序算法中花费时间反而多的是()在待排序的数据表已经为有序时 其他 2020-07-23 …
1、关于ORDERBY子句,下列叙述中正确有:()(1分)A、在要排序的列表后使用ASC指明为升序 其他 2020-07-23 …
面积为15派的圆的半径为x,请回答下列问题:1.x是有理数吗?2.x的整数部分是多少?3.把x的值 数学 2020-07-30 …
如何用函数公式把一列数字按从大到小的顺序排列?,电子表格里有自动排序功能,但是我不想用它.直接在原数 其他 2020-11-01 …