sokaoti.com
C语言程序设计试题 .

阅读下列程序说明和C代码,将应填入(n)处。

【程序5说明】

著名的四色定理指出任何平面区域图均可用四种颜色着色,使相邻区域着不同的颜色。本程序对给定的区域图找出所有可能的不超过四种颜色的着色方案。

程序中用1~4表示四种颜色。要着色的N个区域用0~N-1编号,区域相邻关系用 adj[][]矩阵表示,矩阵的i行j列的元素为1,表示区域i与区域j相邻;矩阵的i行j列的元素为0,表示区域i与区域j不相邻。数组color[]用来存储着色结果,color[i]的值为区域i所着颜色。

【程序5】

include<stdio.h>

define N 10

void output(int color[])/*输出一种着色方案*/

{ int i;

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

printf("%4d",color[i]);

printf("\n");

}

int back (int * ip,int color[])/*回溯*/

{ int c=4;

while(c==4){

if(*ip<=0)return 0;

--(*ip);

c=(1);

color[*ip]=-1;

}

return c;

}

/*检查区域i,对c种颜色的可用性*/

int colorOk(int i,int c,int [][N],int color[]}

{ int j;

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

if((2))

return 0;

return 1;

}

/*为区域i选一种可着的颜色*/

int select (int i,int c,int adj[][N],int color[])

{ int k;

for(k=c;k<=4;k++)

if(colorOK((3)))

return k;

return 0;

}

int coloring(int adj[][N])/*寻找各种着色方案*/

{ int color[N],i,c,cnt;

for(i=0;i<N;i++)color[i] =-1;

i=c=0;cnt=0;

while(1){

if((c=(4))==0){

c=back(&i,color);

if(c==0)return cnt;

}else{(5);i++;

if(i==N){

output(color);

++cnt;

c=back(&i,color);

}else c=0;

}

}

}

void main()

{ int adj[N][N]=

{{0,1,0,1,1,1,1,1,1,1},

{1,0,1,1,0,1,1,1,1,0},

{0,1,0,1,0,1,1,0,1,1},

{1,1,1,0,1,1,0,0,1,1},

{1,0,0,1,0,1,0,0,0,0},

{1,1,1,1,1,0,1,0,0,1},

{1,1,1,0,0,1,0,0,1,0},

{1,1,0,0,0,0,0,0,1,1},

{1,1,1,1,0,0,1,1,0,1},

{1,0,1,1,0,1,0,1,1,0}

};

printf("共有%d组解.\n",coloring(adj));

}


正确答案:(1)color[*ip](2)adj[i][j]!=0 && color[j]==c (3)ikadjcolor(4)select(ic+1adjcolor) (5)color[i]=c
(1)color[*ip](2)adj[i][j]!=0 && color[j]==c (3)i,k,adj,color(4)select(i,c+1,adj,color) (5)color[i]=c 解析:(1)Back()函数将color数组中紧邻*ip位置的,颜色值为 4的一个连续区域的元素赋值为-1。(2)colorOK()判断区域i对其之前的所有区域是否可以着色c。该句是检查i的相邻区域是否已有颜色为c的。(3)这是colorOK的参数列表。Select为区域i选择一种颜色,使用colorok函数对各种颜色(值为c~4的一种,不一定是所有颜色)分别进行检查。(4)Coloring()函数寻找各种着色方案。它先从区域0开始,检查颜色,并着色(着色的顺序总是从小色值的颜色开始的)。当发现某一区域无法着色时,就使用back()函数,将该区域之前的一个连贯区域进行洗色(对应color数组中赋值为-1)并回溯,并从回溯后的位置,重新开始进行颜色检查和赋色,但使用的色值比该位置洗色前的颜色值更大。若所有区域均已着色,则输出该着色方案。然后,使用back函数,重新进行着色。当所有颜色方案均已找到后,函数结束。(5)该句对区域i赋颜色c。c为之前select函数所选出的可以用的颜色。


请阅读以下技术说明和C代码,将程序段中(1)~(5)空缺处的语句填写完整。

【说明】

著名的四色定理指出任何平面区域图均可用4种颜色着色,使相邻区域着不同的颜色。以下C程序对给定的区域图找出所有可能的不超过4种颜色的着色方案。该程序中用1~4分别表示4种颜色。要着色的N个区域用0~-1编号,区域相邻关系用adj[][]矩阵表示,矩阵的i行j列的元素为1,表示区域i与区域了相邻;矩阵的i行j列的元素为0,表示区域i与区域j不相邻。数组color[]用来存储着色结果,color[i]的值为区域i,所着颜色。

【C程序】

include <stdio.h>

define N 10

void output(int color[]) { /*输出一种着色方案*/

int i ;

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

printf( "%4d" , color[i] ) ;

printf ("\n") ;

}

int back(int *ip ,int color[] ) { /*回溯*/

intc = 4 ;

while ( c == 4 ) {

if ( *ip <= 0 )

return 0 ;

-- (*ip) ;

c =(1);

color[*ip] =-1 ;

}

return c ;

}

/*检查区域i,对c种颜色的可用性*/

int colorOk(int i , intc , int [] [N] ,int color[ ] ) {

int j ;

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

if ( (2) )

return 0 ;

return 1 ;

}

/*为区域i选一种可着色的颜色*/

int select (int i ,int c ,int adj [] [N] ,int color[ ] ){

int k ;

for(k = c ; k <= 4 ; k++ )

if( colorOK( (3) ))

return k ;

return 0 ;

}

int coloring(int adj [] [N]) { /*寻找各种着色方案*/

int color[N] , i , c , cnt ;

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

color[i] =-1 ;

i = c = 0 ;

cnt = 0 ;

while(1) {

if((c =(4) ) == 0 {

c = back( &i , color);

if( c == 0 )

return cnt;

}

else {

(5);

i++ ;

if i == N) {

output(color);

++cnt ;

c = back( &i , color ) ;

}

else c = 0 ;

}

}

}

void main()(

int adj[N] [N] =

{ {0,1,0,1,1,1,1,1,1,1},

{1,0,1,1,0,1,1,1,1,0},

{0,1,0,1,0,1,1,0,1,1},

{1,1,1,0,1,1,0,0,1,1},

{1,0,0,1,0,1,0,0,0,0},

{1,1,1,1,1,0,1,0,0,1},

{1,1,1,0,0,1,0,0,1,0},

{1,1,0,0,0,0,0,0,1,1},

{1,1,1,1,0,0,1,1,0,1},

{1,0,1,1,0,1,0,1,1,0},

} ;

printf("共有%d组解.\n",coloring(adj));

}


正确答案:(1)color[*ip] (2)adj[i][j]!=0 && color[j]==c (3)Ikadjcolor (4)select(Ic+1adjcolor) (5)color[i]=c
(1)color[*ip] (2)adj[i][j]!=0 && color[j]==c (3)I,k,adj,color (4)select(I,c+1,adj,color) (5)color[i]=c 解析:这是一道要求考生用C语言解决着色问题的编程题。本题的解答思路如下。
认真阅读程序说明部分和所给出的C程序段可知,该C程序由6个函数组成,即主函数main()、输出一种着色方案函数void output(int color[])、回溯操作函数int back(int *ip,int color[])、检查区域i对c种颜色的可用性函数int colorok(int I,int c,int[][N],int color[]、为区域i选一种可着的颜色函数int select(int I,int c,int adj[][N],int color[])和寻找各种着色方案函数int coloring(int adj[][N])。
1)空缺处在回溯操作子函数back()中,其中形参用指针指向记录当前考查区域号的变量。整个回溯过程是一个循环过程,当循环条件成立时,进行回溯。如果当前区域*ip已是0号区域,则不再回溯,函数返回0值,表示已穷尽了所有可能方案。否则,当前区域*ip减1,取出*ip区域的着色方案color[*ip]存放在c中,并置*ip区域为未着色。如果*ip区域的着色方案不是最后一种颜色,则回溯结束,函数返回该区域原来的着色方案。因此(1)空缺处所填写的内容是“color[*ip]”。
2)空缺处在检查区域i对c种颜色的可用性子函数colorok()中,根据程序的意义可以看出,(2)空缺处应填入的是判断该颜色不可取的条件,根据题干说明,相邻区域不能着相同的颜色,即和区域i相邻的区域不能着c种颜色。而当adj[i][j]为1时,表示区域j和区域i相邻。如果区域j着c种颜色,则颜色不可取。所以(2)空缺处所填写的内容是“adj[i][j]!=0 && color[j]==c”。
3)空缺处在为区域i选一种可着的颜色子函数select()中,依次选定一种颜色,调用colorok()函数,测试该颜色是否可以着在i区域上。(3)空缺处应为该函数colorok()填上实参“I,k,adj,color”,即(3)空缺处所填写的内容是“I,k,adj,color”。
4)(5)空缺处在寻找各种着色方案子函数coloring()中,该程序中定义了用于存放一种着色方案的数组color[],并对数组进行了初始化。该函数执行部分的程序结构是由一个while循环完成,循环的主体是一个if...else语句。该if...else体的else部分又包含一个if...else语句。在嵌套的内层if...else语句中,当 if(i==N)中条件成立时,表示为每一区域都找到了合适的颜色,则该方案是成功的,之后输出一种着色方案,再进行回溯。如果有一个区域找不到合适的颜色,则该方案就是失败的,这时也需要进行回溯操作。
由以上分析可知,寻找全部着色方案在while循环中进行,每次循环首先是为i号区域寻找一种方案。因为select()函数的功能就是为i区域选一种可能的颜色,同时可选的初始颜色是c+1号颜色,邻接矩阵是 adj[][],选定的颜色存于数组color[]中,所以(4)空缺处所填写的内容是“select(I,c+1,adj,color)”。
根据if(c=select(I,c+1,adj,color))==0)能够证实对函数back()的第一次调用肯定是在一种方案失败的情况下,而紧接着的else后面的语句则显然表示为区域i找到了一种可用的颜色c,所以应将颜色c存储在数组color[]中,即(5)空缺处所填写的内容是“color[i]=c”。


以下4个选项,不能看作一条语句的是( )。

A.{;}

B.int x=0,y=1,z=0;

C.if(!A);

D.if(b==0)m=1;n=2;


正确答案:D


有以下程序 main(){intx[]={1,3,5,7,2,4,6,0},i,j,k; for(i=0;i<3;i++) for(j=2;j>=i;j--) if(x[

有以下程序 main() { int x[]={1,3,5,7,2,4,6,0},i,j,k; for(i=0;i<3;i++) for(j=2;j>=i;j--) if(x[j+1]>x[j]){ k=x[j];x[j]=x[j+1];x[j+1]=k;} for(i=0;i<3;i++) for(j=4;j<7-i;j++) if(x[j]>x[j+1]){ k=x[j];x[j];x[j+1];x[j+1]=k;} for(i=0;i<8;i++)printf("%d",x[i]); printf("\n"); } 程序运行后的输出结果是

A.75310246

B.1234567

C.76310462

D.13570246


正确答案:A
解析:主函数中定义了一个整型数组x,并初始化。接着执行了一个二重 for循环,在该二重循环的作用是将数组的前4个元素按从大到小排序,接着用了一个二重循环(也是冒泡算法)将数组的后4个元素按从小到大的顺序排序,故最后依次输出数组各元素的值为75310246。


在以下选项中,不正确的赋值语句是( )。 A.i++;B.nl=(n2=(n3=0..;C.m+n=1;S

在以下选项中,不正确的赋值语句是( )。

A.i++;

B.nl=(n2=(n3=0..;

C.m+n=1;

D.i=k==j;


正确答案:C
赋值运算符的左边只能是变量,而不能是常量或表达式。


全国软件专业人才设计与开发大赛校内选拔赛C语言程序设计试题说明:本试题共15页,请把答案写在答题卡上。一、单选题(共60小题,每题1分,共60分)1. 执行下列程序中的输出语句后,x的值是_.main()int x ;printf(“%dn”,(x=5*6,x*2,x+20);A)30 B)60 C)50 D)802. 下列程序的输出结果是_. main()int x=1,y=0,z;z=(x=0);printf(“%d %d% d%n”,z,x,y) ;A)0 -1 -1 B)0 -1 0 C)0 1 0 D)0 1 -13. 在C语言中,下列选项属于合法的长整型常数的是_. A)0L B)1234567 C)0.0234567 D)3.14159e34. 下列选项中属于不正确的赋值语句的是_. A)t+; B)n1=(n2=(n3=0); C)k=i= =j; D)a=b,c=1;5. 若有定义:int a,b;char x,y;并有以下输入数据: 14 22 XxYy (回车)则能给a赋整数14,给b赋整数22,给x赋字符x,给y赋字符y的正确程序段是_. A) scanf(“%d %d”,&a,&b); x=getchar();y=getchar();B) scanf(“%d%d %c %c”, &a, &b,&x,&x,&y,&y);C) scanf(“%d %d %c%c%c %c”, &a,&b,&x,&x,&y,&y);D) scanf(“%d%d %c %c”, &a, &b,&x,&y);6. 下列转义字符不正确的是_.A) B) C)053 D)07. 下列选项可作为C语言赋值语句的是_.A)x=3,y=5 B)a=b=6 C)i- -; D)y=int(x);8. 当c的值不为0时,下列选项中能正确将c的值赋给变量a、b的是_.A)c=b=a; B)(a=c)(b=c); C)(a=c)&(b=c); D)a=c=b;9. 有以下程序:main() unsigned int a ;int b=-1;a=b;printf(“%u”,a);该程序运行后的输出结果是_.(知识点4.5)A)-1 B)65535 C)32767 D)-3276810. 若x、b、m、n均为int型变量,执行下面语句后b的值为_.m=20;n=6;x=(- -m= =n+)?- -m:+n;b=m+;A)11 B)6 C)19 D)1811. 有以下程序:main() int a=111,b=222;printf(“%dn”,a,b);该程序运行后的输出结果是_. A)错误信息 B)111 C)222 D)111,22212. 以下程序的输出结果是_. main() int a=2,c=5;printf(“a=%d,b=%dn”,a,c);A) a=%2,b=%5 B) a=2,b=5 C) a=%d,b=%d D) a=%d,b=%d13. 对于浮点型变量f,能实现对f中的值在小数点后第三位进行四舍五入的表达式是_. A)f=(f*100+0.5)/100.0 B)f=(f*100+0.5)/100C)f=(int)(f*100+0.5)/100.0 D)f=(f/100+0.5)*10014. 设 a=5, b=6, c=7, d=8, m=2, n=2, 执行(m=ab)&(n=cd) 后m,n的值为_. A) 2,2 B) 2,0 C) 0,2 D) 0,015. 语句printf(“%dn”,strlen(“asdnx121”);的输出结果是_. A) 9 B) 11 C) 7 D) 816. 有以下程序:main( )int y=1234;printf(“y=%6d”,y);printf(“y=%+06dn”,y);该程序的运行结果是_.A) y= 1234y=001234 B) y= 1234y=+01234C) y=1234y=+01234 D) y= 1234y=123417. 语句:printf(“%d”, !9);的输出结果是_.A) 0 B) 1 C) 有语法错误,不能执行 D) -918. 已有定义语句:int x=6,y=4,z=5;执行以下语句后,能正确表示x、y、z值的选项是_.if(xy)z=x;x=y ;y=z;A) x=4,y=5,z=6 B) x=4,y=6,z=6C) x=4,y=5,z=5 D) x=5,y=6,z=419. 下列选项中属于正确的switch语句的是_.A)switch(1.0) B)swicth(1) case 1.0 :printf(“An”); case 1 :printf(“An”);case 2.0 :printf(“Bn”); case 2 :printf(“Bn”);C)switch(int)(1.0+2.5) D)switch(“a”); case 1 :printf(“An”); case “a” :printf(“An”);case 1+2 :printf(“Bn”); case “b” :printf(“Bn”);20. 若k为int型变量,以下语句段执行后的输出结果是_.k=-3;if(kb)if(cd)x=1 ;elseif(ad)x=2 ;else x=3 ;else x=4 ;else x=5 ;A)2 B)3 C)4 D)522. 下列程序的运行结果是_.main() int y=10;do y- - ; while(- -y);printf(“%dn”,y- -);A)-1 B)1 C)8 D)023. 下列程序的运行结果是_.# include main()int i ;for(i=1;i=5;i+) if(i %2)printf(“*”);else continue ;printf(“#”);printf(“$n”);A)*#*#$ B)#*#*#*$ C)*#*#*#$ D)*#$24. 若x是int型变量,且有下面的程序片段: for(x=5;x8;x+)printf(x%2)?(“*%d”):(“#%dn”),x);该程序片段的输出结果是 _.A)*5#6 B)#5 C)#5*6#7 D)*5#6*7 *7 *6#725. 有以下程序:main()int a=1,b=0;switch(a) case 1:switch(b) case 0:printf(“*”);break ;case 1:printf(“#”);break ; case 2: printf(“$”);break ; 该程序的输出结果是_. A)* B)*$ C)*#$ D) #$26. 下列程序段的输出结果是_. int x=3;do printf(“%3d”,x-=2);while(!(x);A)1 B)3 0 C)1 -2 D)死循环27. 有以下程序,其中x、y为整型变量;for(x=0,y=0;(x=1)&(y= 1);x+,y);printf(“x=%d,y=%d”,x,y);该程序的输出结果是_. A)x=2,y=0 B) x=1,y=0 C) x=1,y=1 D) x=0,y=028. 有以下程序段:int n=0,p;do scanf(“%d”,&p);n+; while(p!=12345&nj) 语句共执行的次数是_. main() int i=0,j=10,k=2,s=0;for(;) i+= k ;if(ij) printf(“%d”,s);break ;s+=i ;A)4 B)7 C)5 D)630. 以下程序的功能是:按顺序读入10名学生和4门课程的成绩,计算出每位学生的平均分进行输出,但运行结果不正确。main() int n,k;float score,ave;ave=0.0;for(n=1;n=10;n+) for(k=1;k=4;k+) scanf(“%f”,&score);ave+=score/4 ;printf(“NO%d:%fn”,n,ave);造成程序计算结果错误的语句行是_.A)ave=0.0; B)for(n=1;n=10;n+)C)ave+=score/4 ; D)printf(“NO%d:%fn”,n,ave);31. 若有以下定义:char s10=a,b,c,0,0,2,x32,0;执行语句printf(“%d”,strlen(s);的结果是_.A)3 B

阅读以下说明和C语言函数,将应填入(n)处的语句写在对应栏内。

【说明】

著名的四色定理指出任何平面区域均可以用4种颜色着色,使相邻区域着不同的颜色。本程序对给定的区域图找出所有可能的不超过4种颜色的着色方案。

【函数】

include <stdio.h>

define N 10 /*要着色的N个区域*/

void output(int color[]) /*输出一种着色方案 color[i]的值为区域i所着颜色*/

{

int i;

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

printf("%4d", color[i]);

printf("\n");

}

int back(int *ip, int color[j] /*回溯*/

int c=4;

while (c==4)

{

if (*ip<=0)

return 0:

--(*ip);

c=(1);

color[*ip]=-1;

}

return c;

}

/*检查区域i,考查c种颜色的可能性 */

int colorOK(iht i, int c, int adj[][N], int color[])

{

int j;

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

if ((2))

return 0;

return 1;

}

/*为区域i选一种可着的颜色*/

int select(int i, int c, int adj[][N], int color[])

/*寻找各种着色方案 adj[i][j]=1表示区域i与区域j不相邻*/

{

int k;

for (k=c; k<=4; k++) /*4种颜色*/

if (colorOK((3)))

return k;

return 0;

}

int coloring(int adj[][N])

{

int color[N], i, c, cnt;

for (i=0; i<N; i++) color[i]=-1:

i=c=0; cnt=0;

while (1)

[

if ((c=(4))==0)

{

c=back(&i, color);

if (c==0)

return cnt;

}

else

{

(5);

i++;

if(i==N)

{

output(color);

++cnt;

c=back(&i, color);

}

else

c=0;

}

}

}

void main()

{

int adj[N][N]={ {0, 1, 0, 1, 1, 1, 1, 1, 1, 1},

{1, 0, 1, 1, 0, 1, 1, 1, 1, 0},

{0, 1, 0, 1, 0, 1, 1, 0, 1, 1},

{1, 1, 1, 0, 1, 1, 0, 0, 1, 1},

{1, 0, 0, 1, 0, 1, 0, 0, 0, 0},

{1, 1, 1, 1, 1, 0, 1, 0, 0, 1},

{1, 1, 1, 0, 0, 1, 0, 0, 1, 0},

{1, 1, 0, 0, 0, 0, 0, 0, 1, 1},


正确答案:(1)color[*ip] (2)adj[i][j]==1&&color[j]==c (3)ikaajcolor (4)select(ic+1adjcolor) (5)color[i]=c
(1)color[*ip] (2)adj[i][j]==1&&color[j]==c (3)i,k,aaj,color (4)select(i,c+1,adj,color) (5)color[i]=c 解析:本题考查四色定理在C语言中的实现。
题目对四色定理做了解释,是指任何平面区域均可以用4种颜色着色,使相邻区域着不同的颜色。而题目中给定了区域图,要求找出所有可能的不超过4种颜色的着色方案。下面我们来分析程序。
第(1)空在函数back()中,这个函数的作用在注释中已经给出,是回溯,通过回溯,我们可以搜索出问题的所有解。此空是给变量c赋一个值,从程序中我们可以推断出变量c中存放的是区域中当前选中的颜色,而表示区域中当前选中的颜色的是数组color的当前值,因此,此空答案为“color[*ip]”。
第(2)空在函数colorOK()中,这个函数的作用在注释中也给出了,是检查区域i,考查c种颜色的可能性,这就要求判断每种颜色是否适合区域i,如果适合,则返回真。此空是函数体中一个条件判断语句的条件,如果条件不成立,则返回真,那么条件应该不能确定该颜色是否适合区域i。如果比较的是两个不相邻的位置,且两个位置的颜色都为当前色,那么肯定不能确定当前色是否适合区域i。因此,此空答案为“adj[i][j]==1 &&color[j]==c”。
第(3)空在函数select()中,这个函数是为区域i选一种可着色,此空是函数colorOK()的参数,而这个函数有4个参数,分别是当前位置i、当前颜色和两个数组,因此,此空答案为“i,k,adj,color”。
第(4)空是给变量c赋值,变量c中存放的是当前要处理的颜色,而这条语句是条件判断执行语句,如果条件成立,则要回溯,那么说明不能确定当前区域的颜色,而为当前区域i选一种可着色是函数select()的功能,它返回0时,说明不能确定区域i的颜色。因此,此空答案为“select(i,c+1,adj,color)”。
第(5)空是在上空中条件不成立的情况下执行的语句,条件不成立说明确定了当前区域i的颜色,然后应该将该区域存为这种颜色,而变量c中存放的就是当前处理的颜色,因此,此空答案为“color[i]=c”。


下列程序的输出结果是______。main(){ int i; for(i=0;i<2;i++) add();}add(){ int x=0; static int y=0; printf("%d,%d\n",x,y); x++;y=y+2;}

A.0,0 0,0

B.0,0 0,2

C.0,0 1,0

D.0,0 1,2


正确答案:B


下列程序的运行结果是( )。 main() { int a=-5,b=1,c=1; int x=0,y=2,z=0; if(c>0)x=x+y; if(a<=0) { if(b>O) if(c<=0)y=x-y; } else if(c>0)y=x-y; else z=y; printf("%d,%d,%d\n",x,y,z); }

A.2,2,0

B.2,2,2

C.0,2,0

D.2,0,2


正确答案:A
解析: 本题考查if else语句的使用。先判断第1个if语句,因为c=1>0,所以x=x+y=0+2=2。第1个if语句,因为a=-50,所以进入下列的复合语句。经判断发现,复合语句中第2个if语句的条件均不满足,不执行任何语句退出,在这个过程中y和z的值没有发生变化。


下列程序的运行结果是( )。

main()

{ int a=-5,b=1,c=1;

int x=0,y=2,z=0;

if(c>0) x=x+y;

if(a<=0)

{ if(b>0)

if(c<=0) y=x-y;

}

else if(c>0) y=x-y;

else z=y;

printf("%d,%d,%d\n",x,y,z);

}

A.2,2,0

B.2,2,2

C.0,2,0

D.2,0,2


正确答案:A
解析:本题考查if else语句的使用。 先判断第1个if语句,因为c=1>0,所以x=x+y=0+2=2。第1个 if语句,因为a=-50,所以进入下列的复合语句。经判断发现,复合语句中第2个汀语句的条件均不满足,不执行任何语句退出,在这个过程中y和x的值没有发生变化。


有以下程序: include main ( ){int x[ ] = {1,3,5,7,2,4,6,0} ,i,j,k;for(i =0;i<3;i

有以下程序: #include <stdio. h> main ( ) { int x[ ] = {1,3,5,7,2,4,6,0} ,i,j,k; for(i =0;i<3;i ++ ) for (j =2;j> = i;j — ) if( x[j + 1 ] > x[j] ) { k = x[j] ;x[j] = x[j + 1 ] ;x[j + 1 ] = k; } for (i =0;i<3;i++) for(j =4;j <7-i;j ++) if(x[j] >x[j+1]){ k=x[j];x[j] =x[j+1];x[j+1] =k;} for (i=0;i<8;i ++) printf("%d" ,x[i]); prinff("\n" );}程序运行后的输出结果是( )。

A.75310246

B.1234567

C.76310462

D.13570246


正确答案:A
解析:本题考查的是排序算法。for(i=0;i3;i++)for(j=2;j>i;j--)if(x[j+1],x[j]){k=x[j];x[j];x[j+1);x[j+1]=k;}该段程序的作用是将数组元素x[0]~x[3]中的数由大到小排列,得到x[]{7,5,3,1,2,4,6,0}。for(i=0;i3;i++)for(j=4;j7-i;j++)if(x[j]>x[j+1]){k=x[j];x[j]=x[j+1];x[j+1]=k;}该段程序的作用是将数组元素x[4]~x[7]中的数由小到大排列,得到x[]={7,5,3,1,0,2,4,6}。因此输出结果为75310246。

更多 “C语言程序设计试题 .” 相关考题
考题 单选题在下列选项中,不正确的赋值语句是()。A ++tB n1=(n2=(n3=0))C k=i=jD a=b+c=1正确答案:C解析:暂无解析

考题 有以下程序#include <stdio.h>void fun(int *s,int n1,int n2){ int i,j,t;i=n1; j=n2;while(i<j) {t=s[i];s[i]=s[j];s[j]=t;i++;j--;}}main(){ int a[10]={1,2,3,4,5,6,7,8,9,0},k;fun(a,0,3); fun(a,4,9); fun(a,0,9);for(k=0;k<l0;k++)printf("%d",a[k]); printf("\n");}程序的运行结果是A.0987654321B.4321098765C.5678901234D.0987651234正确答案:C解析:函数fun(int *s,int n1,int n2)的功能是对数组s中的元素进行首尾互相调换。所以在主函数中,当fun(a,0,3)执行完后,数组a[12]={4,3,2,1,5,6,7,8,9,0};再执行fun(a,4,9),数组a[12]={4,3,2,1,0,9,8,7,6,5};再执行fun(a,0,9)后,数组a[12]={5,6,7,8,9,0,1,2,3,4}。

考题 以下4个选项,不能看作一条语句的是( )。A){;}B)int x=0,y=1,z=0;C)if(!a);D)if(b==0)m=1:n=2:正确答案:D

考题 有以下程序includevoidfun(int*s,intn1,intn2){inti,j,t; i=n1j=n2; while(i有以下程序 #include <stdio.h> void fun(int *s,int n1,int n2) { int i,j,t; i=n1 j=n2; while(i<j) {t=s[i];s[i]=s[j];s[j]=t;i++;j--;} } main() { int a[10]={1,2,3,4,5,6,7,8,9,0},k; fun(a,0,3); fun(a,4,9); fun(a,0,9); for(k=0;k<10;k++)printf("%d",a[k]); printf("\n"); } 程序的运行结果是A.987654321B.4321098765C.5678901234D.987651234正确答案:C解析:函数fun(int *s,int n1,int n2)的功能是对数组s中的元素进行首尾互相调换。所以在主函数中,当 fun(a,0,3)执行完后,数组a[12]={4,3,2,1,5.6,7,8,9,01;再执行fun(a,4,9),数组a[12]={4,3,2,1,0,9,8,7,6,5};再执行fun(a,0,9)后,数组a[12]={5,6,7,8,9,0,1,2,3,4}。

考题 单选题在下列选项中,不正确的赋值语句是()A t/=5;B n1=(n2=(n3=0));C k=i= = j;D a=b+c=1;正确答案:B解析:暂无解析

考题 有以下程序:main(){int x[]={1,3,5,7,2,4,6,0},i,j,k;for(i=0;i=i;j--)if(x[j+有以下程序: main() { int x[]={1,3,5,7,2,4,6,0},i,j,k; for(i=0;i<3;i++) for(j=2;j>=i;j--) if(x[j+1]>x[j]) { k=x[j]; x[j]=x[j+1]; x[j+1]=k; } for(i=0;i<3;i++) for(j=4;j<7-i;j++) if(x[j]>x[j+1]) { k=x[j]; x[j]=x[j+1]; x[j+1]=k; } for(i=0;i<8;i++) printf("%d",x[i]); printf("\n"); } 程序运行后的输出结果是( )。A.75310246B.1234567C.76310462D.13570246正确答案:A解析:主函数中定义了一个整型数组x,并初始化。接着执行了一个二重for循环,在该二重循环的作用是将数组的前4个元素按从大到小排序,接着用了一个二重循环(也是冒泡算法)将数组的后4个元素按从小到大的顺序排序,故最后依次输出数组的个元素的值为75310246,所以,4个选项中选项A符合题意。

考题 请读程序: inti=0,j=0,a=6; if((++i>0)||(++j>0))a++; printf("i=%d,j=%d,a=d%/n",i,j,a); 则上面程序的输出结果是()A、i=0,j=0,a=6B、i=1,j=0,a=7C、i=1,j=1,a=6D、i=1,j=1,a=7正确答案:B

考题 分析下列程序,其最终执行结果是______。 main() { int n[3],i,j,k; for(i=0;i<3;i++)n[i]=O; k=2; for(i=0;i<k;i++) for(j=0;j<k;j++) n[j]=n[i]-1; printf("%d\n",n[0]); }A.-2B.-1C.0D.-3正确答案:D解析:当i为0,内循环在j为0时,执行n[j]=n[i]-1;,即n[0]=n[0]-1, n[0]值变为-1:在j为1时,执行n[j]=n[i]-1;,即n[1]=n[0]-1,将-2赋给n[1]。当i为1时,内循环在j为0时,执行n[j]=n[i]-1;,即n[0]=n[1]-1,n[0]值变为-3;在j为1时,执行n[j]=n[i]-1;,即n[1]=n[1]-1,将-3赋给n[1];最后n[0]和n[1]的值均为-3。

考题 对n个元素值分别为-1、0或1的整型数组A进行升序排序的算法描述如下:统计A中-1、0和1的个数,设分别为n1、n2和n3,然后将A中的前n1个元素赋值为-1,第n1+1到n1+n2个元素赋值为0,最后n3个元素赋值为1。该算法的时间复杂度和空间复杂度分别为()。A、Θ(n)和Θ(1)B、Θ(n)和Θ(n)C、Θ(n2)和Θ(1)D、Θ(n2)和Θ(n)正确答案:A

考题 有下列程序: include void fun(int * s,int n1,int n2) { int i,j,有下列程序: #include <stdio.h> void fun(int * s,int n1,int n2) { int i,j,t; i=n1;j=n2; while(i<j){t=s[i];s[i]=s[j];s[j]=t;i++;j--;} } main() { int a[10]={1,2,3,4,5,6,7,8,9,0},k; fun(a,0,3); fun(a,4,9);fun(a,0,9); for(k=0;k<10;k++)printf("%d",a[k]);printf("\n"); } 程序的运行结果是( )。A.987654321B.4321098765C.5678901234D.987651234正确答案:C解析:从题目的主函数入手,定义了一个一维数组并赋韧值,接着调用函数fun(),fun()函数的功能为使数组中的元素逆序,当调用 fun(a,0,3),将实参传递给形参实现数组a中a[0]-a[3]这4个元素逆序;同理调用fun(a,4,9)是将上步排列好的a数组中a[4]-a[9]这6个元素逆序;调用fun(a,0,9)是将数组中a[0]-a[9]这10个元素在逆序,再用printf()函数输出结果为5678901234,故选项C)正确。