单选题 有以下程序:
#include<stdio.h>
typedef struct book
{
char name[50];
double price;
}BOOK;
void fun(BOOK *pd,int num,int size);
void main()
{
BOOK data[10]={"photoshop",26.8,"计算机原理",15.00,"数据结构",35.6};
int n=3,m=10;
fun(data,n,m);
printf("%s,%s/n",data[8].name,data[9].name);
}
void fun(BOOK*pd,int num,int size)
{
int i,j,t;
double mx,mn;
mx=mn=pd[0].price;
j=t=0;
for(i=1;i<num;i++)
{
if(pd[i].price>mx)
{ mx=pd[i].price;j=i;}
if(pd[i].price<mn)
{mn=pd[i].price;t=i;}
}
pd[size-2]=pd[j];
pd[size-1]=pd[t];
}
程序的运行结果是______。
【正确答案】 A
【答案解析】[解析] 程序首先使用typedef定义一种新的类型名BOOK,它包含两个数据成员:字符数组name,double类型变量price。main()函数使用BOOK定义结构体数组data,它包含10个BOOK类型的结构体元素,并完成初始化,其中前3个元素使用确定的值初始化,后7个元素系统默认值初始化。函数fun()通过for循环遍历结构体数组pd的前num个元素,从而找出前num个元素中price成员最大的元素下标存放到j,找出前num个元素中price成员最小的元素下标存放到t,然后将下标为j的元素赋给下标为size-2的位置,将下标为t的元素赋给下标为size-1的位置。由于main()函数中调用fun(data,n,m),n值为3、m值为10,fun()函数将data中下标为8的元素赋值为前3个元素中price值最大的元素,将data中下标为9的元素赋值为前3个元素中price值最小的元素,调用结束后,输出下标为8和9元素的成员name,根据初值可知price最大元素的name成员为“数据结构”,price最小的元素的name成员为“计算机原理”,所以程序输出结果为:数据结构,计算机原理。故本题答案为A选项。