A、B、C三位学生知道方桌的抽屉里有这么多张扑克牌:红桃A、Q、4黑桃J、8、4、2、7、3梅花K、Q、5、4、6方块K

题目
问答题
A、B、C三位学生知道方桌的抽屉里有这么多张扑克牌:红桃A、Q、4黑桃J、8、4、2、7、3梅花K、Q、5、4、6方块K、5一位老师从这些牌中挑出一张牌来,并把这张牌的点数告诉B同学,把这张牌的花色告诉C同学。这时,老师问B和C://你们能从已知的点数或花色中猜出它是什么牌吗?于是,A同学听到他们的对话:B同学:这张牌我不清楚。C同学:我知道你不知道这它是什么牌。B同学:现在我明白它是什么牌了。C同学:我也知道了。听过上述的对话,A同学想了一下,就知道这张牌是什么牌了。请判断一下,这张牌是什么牌?
如果没有搜索结果或未解决您的问题,请直接 联系老师 获取答案。
相似问题和答案

第1题:

有以下程序

main()

{int a[4][4]={{1,4,3,2,},{8,6,5,7,},{3,7,2,5,},{4,8,6,1,}},i,j,k,t;

for(i=0;i<4;i++)

for(j=0;j<3;j++)

for(k=j+1;k<4;k++)

if(a[j][i]>a[k][i]){t=a[j][i];a[j][i]=a[k][i];a[k][i]=t;}/*按列排序*/

for(i=0;i<4;i++)printf(“%d,”,a[i][j]);

}

程序运行后的输出结果是( )。

A.1,6,5,7,

B.8,7,3,1,

C.4,7,5,2,

D.1,6,2,1,


正确答案:A

第2题:

有以下程序 main() { int a[4][4]={{1,4,3,2},{8,6,5,7},{3,7,2,5},{4,8,6,1}},i,j,k,t; for(i=0;<4:i++) for(j=0;j<3;j++) for(k=j+1;k<4;k++) if(a[j][i]>a[k][i]{t=a[j][i];a[j][i]=a[k][i]=a[k][i]=t;}/*按列排序*/ for(i=0;i<4;i++)printf("%d,",a[i][i]); } 程序运行后的输出结果是

A.1,6,5,7,

B.8,7,3,1,

C.4,7,5,2,

D.1,6,2,1,


正确答案:A
解析:本题利用多重for循环的嵌套来实现对二维数组元素的按列排序。利用最外层循环来实现对列的控制。内部循环利用选择法对数组元素按照从小到大的顺序进行排列。最后输出对角线上的元素值。故本题答案为A)。

第3题:

有以下程序

main( )

{ int a[4][4]={{1,4,3,2,},{8,6,5,7,},{3,7,2,5,},{4,8,6,1,}},i,j,k,t;

for(i=0;i<4;i++)

for(j=0;j<3;j++)

for(k=j+1;k<4;k++)

if(a[j][i]>a[k][i]){t=a[j][i];a[j][i]=a[k][i];a[k][i]=t;}/* 按列排序 */

for(i=0;i<4;i++)printf("%d,",a[i][ i ]);

}

程序运行后的输出结果是

A)1,6,5,7,

B)8,7,3,1,

C)4,7,5,2,

D)1,6,2,1,


正确答案:A

第4题:

有以下程序 void f(int *x,int *y) { int t; t=*X; *X=*y; *y=t; } main() { int a[8]={1,2,3,4,5,6,7,8},i,*p,*q; p=a; q=&a[7); while(p>q) { f(p,q); p++; q--; } for(i=0; i<8; i++) printf("%d,",a[i]); } 程序运行后的输出结果是

A.8,2,3,4,5,6,7,1,

B.5,6,7,8,1,2,3,4,

C.1,2,3,4,5,6,7,8,

D.8,7,6,5,4,3,2,1,


正确答案:D
解析:在C语言中,函数参数的默认传递方式是传值,即函数内部的形参只是调用时的实参的一个拷贝,改变形参,实参不会被改变.如果想要实现传址调用只能使用传递指针的方式来实现.利用指针作函数的参数时,无论形参指针还是实参指针所指的都是同一个内存地址,所以形参如果改变了这个地址中的内容,也就是改变了实参所指的地址内容.本题程序开头定义了一个函数f(),在函数中用一个临时变量t交换了两个指针参数所指的地址内容,所以该函数的作用就是交换两个参数所指的内容。在主函数中,首先定义了一个int型数组a,并定义了两个int型指针p、q分别指向数组a的第一个元素和最后一个元素。然后使用一个while循环调用函数f()不断交换两个指针所指的内容,每次交换后p往后移动一个元素,q往前移动一个元素,直到q不再大于p,即直到两个指针在数组a的中间相遇为止。所以,程序最终运行的结果是数组a中的所有元素全被反序排列一次。故应该选择选项D。

第5题:

阅读以下说明和C代码,将应填入(n)处的字句写在对应栏内。

【说明】

将一正整数序列{K1,K2,…,K9}重新排列成一个新的序列,新序列中,比K1小的数都在K1的前面(左面),比K1大的数都在K1的后面(右面),最后调用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}

【函数】

include < stdio. h >

include < conio. h >

void jsValue( int a [10] [9] )

{ int i,j,k,n,temp;

int b[9];

for(i=0;i<10;i++)

{ temp=a[i] [0];

k=8;n=0;

for(j=8;j=0;j--)

{ if(temp < a[i] [j]) (1)=a[i][j];

if(temp >a[i] [j]) (2)=a[i][j];

if(temp =a[i] [j]) (3)= temp;

}

for(j=0;j<9;j++) a[i][j] =b[j];

}

}

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;

(4);

for(i=0;i<10;i++) {

for(j=0;j<9;j++) {

printf("%d",a[i] [j] );

if((5))printf(",");

}

printf(" \n" );

}

getch( );

}


正确答案:(1)b[k--] (2)b[n++] (3)b[n] (4)jsValue(a) (5)j=7
(1)b[k--] (2)b[n++] (3)b[n] (4)jsValue(a) (5)j=7 解析:在主函数中先要调用函数jsValue()对数组a进行处理,所以(4)空应填入“jsValue(a)”。然后输出数组元素,同一行的元素之间用逗号分隔,所以(5)空应填入“j=7”。
函数jsValue()是将数组按题目要求进行排序。通过观察发现处理后的数组中元素的顺序与原来的顺序相反,并且每一行中没有与第一个数相同的数,所以是从后往前处理,也就是将每组从最后往前倒序逐个问第一个数比较,比它大的就放到临时数组b中的最后,比它小的就放到临时数组b中的最前面,以次类推,所以(1)空应填入“b[k- -]”,(2)空应填入“b[n++],(3)空应填入“b[n]”。最后将b数组赋给a数组。

第6题:

下列程序的输出结果是( )。 void f(int*x,int*y) {int t; t=*x,*x=*y;*y=t; } main() {int a[8]={1,2,3,4,5,6,7,8},i,*p,*q; p=a;q=&a[7]; while(p<q) {f(p,q);p++;q--;} for(i=0;i<8;i+)printf("%d,",a[i]); }

A.8,2,3,4,5,6,7,1

B.5,6,7,8,1,2,3,4

C.1,2,3,4,5,6,7,8

D.8,7,6,5,4,3,2,1


正确答案:D
解析: 函数f()的功能是对两个数据互换。在主函数中指针变量p和q分别指向数组a[8)的首和尾,在 while循环中实现从首尾开始数组元素的互换操作。

第7题:

Giventhefollowingcode:1)publicvoidmodify(){2)inti,j,k;3)i=100;4)while(i>0){5)j=i*2;6)System.out.println("Thevalueofjis"+j);7)k=k+1;8)i--;9)}10)}Whichlinemightcauseanerrorduringcompilation?()

A.line4

B.line6

C.line7

D.line8


参考答案:C
这个问题在前面有关变量的类型及其作用域的问题中讨论过,局部变量在使用前必须显式初始化,而代码中的变量k在使用前没有。

第8题:

●试题四

阅读以下说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。

【说明】

将一正整数序列{K1,K2,…,K9}重新排列成一个新的序列,新序列中,比K1小的数都在K1的前面(左面),比K1大的数都在K1的后面(右面),最后调用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}

【函数】

#include<stdio.h>

#include<conio.h>

void jsValue(int a[10][9])

{int i,j,k,n,temp;

int b[9];

for(i=0;i<10;i++)

{temp=a[i][0];

k=8;n=0;

for(j=8;j=0;j--)

{if(temp<a[i][j]) (1) =a[i][j];

if(temp>a[i][j]) (2) =a[i][j];

if(temp=a[i][j]) (3) =temp;

}

for(j=0;j<9;j++)a[i][j]=b[j];

}

}

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;

(4) ;

for(i=0;i<10;i++){

for(j=0;j<9;j++){

printf("%d",a[i][j]);

if( (5) )printf(",");

}

printf("\n");

}

getch();

}


正确答案:

●试题四

【答案】(1)bk--(2)bn++](3)bn(4)jsValue(a)(5)j<=7

【解析】在主函数中先要调用函数jsValue()对数组a进行处理,所以(4)空应填入"jsValue(a)"。然后输出数组元素,同一行的元素之间用逗号分隔,所以(5)空应填入"j<=7"。

函数jsValue()是将数组按题目要求进行排序。通过观察发现处理后的数组中元素的顺序与原来的顺序相反,并且每一行中没有与第一个数相同的数,所以是从后往前处理,也就是将每组从最后往前倒序逐个同第一个数比较,比它大的就放到临时数组b中的最后,比它小的就放到临时数组b中的最前面,以次类推,所以(1)空应填入"bk--",(2)空应填入"bn++],(3)空应填入"bn"。最后将b数组赋给a数组。

 

第9题:

下列程序的功能是:将一正整数序列{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 valueijknum; 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个数的左侧而比它大的就在它的右侧。对数的扫描和移动均可以使用循环实现。再使用循环实现对每一行数据的访问。
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个数的左侧,而比它大的就在它的右侧。对数的扫描和移动均可以使用循环实现。再使用循环实现对每一行数据的访问。

第10题:

有以下程序 main() {int a[4][4]={{1,4,3,2},{8,6,5,7},{3,7,2,5},{4,8,6,1}},i,j,k,t; for(i=0;i<4;i++) for(j=0;j<3;j++) for(k=j+1;k<4;k++) if(a[j][i]>a[k][i]){t=a[j][i];a[j][i]=a[k][i];a[k][i]=t;}/*按列排序*/ for(i=0;i<4;i++)printf("%d,",a[i][i]);

A.1,6,5,7,

B.8,7,3,1,

C.4,7,5,2,

D.1,6,2,1,


正确答案:A
解析: 本题利用多重for循环的嵌套来实现对二维数组元素的按列排序。利用最外层循环来实现对列的控制。内部循环利用选择法对数组元素按照从小到大的顺序进行排列,最后输出对角线上的元素值。

更多相关问题