做选择题的时候发现的一种有趣的冒泡排序写法,可以多看一下。
#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]);
}
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++; }
}
程序的运行结果是
#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@<回车>
则运行结果是
#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] );
}
程序运行后的输出结果是
#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
只供自己学习参考,方便自己知道做过哪些题目。偶尔会附上别人写的代码(整张截图)供自己学习和对比,若题主不同意,可删