做选择题的时候发现的一种有趣的冒泡排序写法,可以多看一下。

#include  <stdio.h>
    void fun(int a[ ], int n, int flag)
    {  int i=0,j, t;
       for (i=0; i<n-1; i++)
           for (j=i+1; j<n; j++)
              if (flag)
              {   if (a[i] < a[j])
                  { t = a[i]; a[i] = a[j]; a[j] = t;}
              }
              else
              {   if (a[i] > a[j])
                  { t = a[i]; a[i] = a[j]; a[j] = t;}
              }
    }  
    main( )
    {  int c[10]={7,9,10,8,3,5,1,6,2,4},i;
       fun(c, 10, 0);
       fun(c, 5, 1);
       for (i=0;i<10; i++)
           printf("%d,", c[i]);
    }

答案:B

A)1,2,3,4,5,6,7,8,9,10,

B)5,4,3,2,1,6,7,8,9,10,

C)6,7,8,9,10, 5,4,3,2,1,

D)6,7,8,9,10, 1,2,3,4,5,

 

题目解析:fun()函数的作用是定义了冒泡排序法,flag控制升序(0)或降序(1),n为参与排序的元素个数,c为数组的起始地址。因此fun(c,10,0)函数即将数组的10个数据升序排序,fun(c,5,1)函数即将数组的前5个数据降序排序,

 

132.
 有以下程序
#include <stdio.h>
main()
{   int a[3][3]={0,1,2,3,4,5,6,7,8},(*p)[3],i;
    p=a;
    for(i=0;i<3;i++)
    {  printf("%d ",(*p)[i]); p++; }
}   
程序的运行结果是

答案:B

A)1 4 7

B)0 4 8

C)0 3 6

D)0 1 2

题目解析:分析可知,a数组为一3*3的矩阵,输出的(*p)[i])为其对角线上的数值,即0,4,8。

 

有点不能了解为啥输出的是对角线。。///////脑子一下蠢了,我去,简直就像打通任督二脉了,因为p++了,我好蠢呀,哭泣

 

 

 

129.
 有如下程序 
#include <stdio.h>
void fun(int *a,int *b)
{  for( ; (*a<*b) || (getchar()!='@') ; )
   {  (*a)++; (*b)--;  } 

main()
{  int i=0,j=5;
   fun(&i,&j);
   printf("%d,%d\n",i,j); 

程序运行时在第一列开始输入:
ab@<回车>
则运行结果是

答案:B

A)3,2

B)5,0

C)4,1

D)0,5

//最重要的是考察的短路问题,前面进行了3次*a<*b的比较,然后再进行2次输入ab@,最后getchar=@时跳出。

 

219.
 有以下程序
 #include <stdio.h>
 main()
 {  int  a[3]={0},  i, j,  k=2;
    for( i=0; i<k; i++ )
      for( j=0; j<k; j++ )  a[j] = a[i]+1;
    printf("%d\n", a[1] );
 }
程序运行后的输出结果是

答案:A

A)3

B)1

C)0

D)2

 

注意循环套路

当i=0、j=0时,a[0]=a[0]+1=1;

当i=0、j=1时,a[1]=a[0]+1=2;

当i=1、j=0时,a[0]=a[1]+1=3;

当i=1、j=1时,a[1]=a[1]+1=3

 

posted @ 2020-07-23 18:05  attendere  阅读(237)  评论(0编辑  收藏  举报