下列程序的功能是:将一正整数序列{K1,K2,…,K9}重新排成一个新的序列。新序列中,比K1小的数都在K1
下列程序的功能是:将一正整数序列{K1,K2,…,K9}重新排成一个新的序列。新序列中,比K1小的数都在K1的左面(后续的再向左存放),比K1大的数都在K1的右面(后续的再向右存放),从K1向右扫描。要求编写函数jsValue()实现此功能,最后调用函数writeDat()把新序列输出到文件out90.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>
jsValue(int a[10][9])
{
}
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);
}
writeDat (int a[10] [9])
{
FILE *fp;
int i,j;
fp=fopen ("out90.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);
}
void jsValue(int a[10][9]) { int value,i,j,k,num; for(i=0;i10;i++) { value=a[i][0]; /*将一行的第一个元素赋给value*/ for(j=0;j9;j++) if(a[i][j]value) /*若后面的数中有比第1个数据小的数*/ { num=a[i][j]; /*则把这个数取出,赋给num*/ for(k=j;k>0;k--) /*将这个数据左侧的数依次向右移动*/ { a[i][k]=a[i][k-1]; } a[i][0]=num; /*再将这个数放在最左侧*/ } } } [解析] 本题考查的知识点如下: (1)二维数组的访问和数组元素的移动。 (2)循环结构和判断结构的嵌套使用。 数据存放在一个二维数组中,每一行数为数据处理的基本单位。将第1个数取出依次和后面的数比较,若后面的数中有比第1个数据小的数,则将这个数取出。将这个数据左侧的数依次向右移动(包括第1个数),然后将这个数放在最左侧。扫描完一行后,比第1个数小的数就都在第1个数的左侧,而比它大的就在它的右侧。对数的扫描和移动均可以使用循环实现。再使用循环实现对每一行数据的访问。
有两个容器,第一个容器有1升水,第二个容器是空的,将第一个容器的水的1/2倒入第二个容器,然后将第 其他 2020-05-13 …
有两个容器,第一个容器有1升水,第二个容器是空的,将第一个容器中的1/2倒入第二个容器,然后将第二 数学 2020-05-13 …
用MATLAB画散点图并对每个点表上序号,比如说有x=1 3 7 10,y=2 4 9 43.将( 英语 2020-05-16 …
有甲乙两个杯子,甲杯有水1000克,乙杯是空的.第一次将甲杯里的水1/2倒入乙杯第二次又将乙杯里水 数学 2020-05-16 …
1+1=2吗?如:1.将1体积黄豆与1体积绿豆混合,所得体积是否等于这两个体积之和?2.将100m 数学 2020-05-17 …
有A、B、C、D4种装置,将1个数输入一种装置后会输出另1个数.装置A:将输入的数加上5;装置B: 数学 2020-06-16 …
有A、B、C、D4种装置,将1个数输入一种装置后会输出另1个数.装置A:将输入的数加上5;装置B: 数学 2020-06-16 …
有A、B、C、D4种装置,将1个数输入一种装置后会输出另1个数.装置A:将输入的数加上5;装置B: 数学 2020-06-16 …
人们将1/10表示为1月10日,也有人将1/10表示为10月1日,这样一年中就有不少混淆不清 数学 2020-06-29 …
美国人将六月一日写成1/6,但英国人将六月一日写成6/1,将1/6看成一月六日.若英国人到美国去, 数学 2020-06-29 …