下列程序的功能是:将一个正整数序列{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;}
}
}
已知关于x的方程(k的平方-1)x的平方+(k+1)x-2=0(1)当k取何值时,此方程为一元二次方 数学 2020-03-30 …
当x取何值时,关于k的方程(k+1)x²+(k-1)x+k=0快,今晚就要当x取何值时, 数学 2020-05-12 …
(K²-1)X²+(K+1)X-2=0当K取何值时,此方程为一元一次方程,求根当K取何值时此方程为 数学 2020-05-14 …
问个一元二次方程的问题某次同学聚会,各来宾相互之间各握手一次,总共握手190次,这次聚会共有多少人 数学 2020-05-16 …
已知关于X的一元二次方程x^2+2(k-1)x+k^2-1=0有两个不相等的实数根已知关于x的一元 数学 2020-05-16 …
下列方程中,一定是关于x的一元二次方程的是()A ax的平方+bx+c=0 B k的平方x的平方+ 数学 2020-05-16 …
不要解方程的!列算式 一筐苹果,第一次卖出总数的一半又5个,第二次卖出余下一半的又4个,第三次卖出 数学 2020-05-16 …
关于X的一元二次方程(K-1)X^2-2KX+k+2=0有两个实数根1)求k的取值范围2)当k取最 数学 2020-05-20 …
关于x的方程k2x2+(2k-1)x+1=0有实数根,则下列结论正确的是()A.当k=12时方程两 数学 2020-06-04 …
方程怎么列式啊!一元一次方程的列式法,就只有我不会,去,有什么技巧?我这有提(1)某数的5倍加上3 数学 2020-06-06 …