选择题
以下程序中函数f的功能是:当flag为1时,进行由小到大排序;当flag为0时,进行由大到小排序。
#include <stdio.h>
void f(int b[], int n, int flag)
{
int i,j,t;
for (i=0; i<n-1; i+ +)
for (j=i+1; j<n; j+ +)
if (flag ? b[i]>b[j] : b[i]<b[j])
{ t=b[i]; b[i]=b[j]; b[j]=t; }
}
main( )
{
int a[10]={5,4,3,2,1,6,7,8,9,10},i;
f(&a[2],5,0);
f(a,5,1);
for(i=0;i<10;i+ +)
printf('%d,',a[i]);
程序运行后的输出结果是______。
【正确答案】
B
【答案解析】本题重点考查函数的参数传递。函数的参数传递分为传值和传地址两种情况。本题就是结合数组考查参数传递的情形。函数f完成的功能是对数据进行排序,语句f(&a[2],5,0)的作用是对从a[2]开始的5个元素进行从大到小排序。注意:这里传递的是地址&a[2],所以排序操作可看做是直接对数组a操作,执行后的结果为5,4,7,6,3,2,1,8,9,10。语句f(a,5,1)对数组a的前5个元素从小到大排序,排序后数组为:3,4,5,6,7,2,1,8,9,10。因此B选项正确。