问题 问答题

试题要求如图10.5所示。

部分源程序内容如下:

#include<stdio.h>

#include<mem.h>

#include<string.h>

#include<stdlib.h>

#define MAX 100

typedef struct

char dm[5]; /*产品代码*/

char mc[11]; /*产品名称*/

int dj; /*单价*/

int s1; /*数量*/

long je; /*金额*/

PRO;

PRO sell[MAX];

void ReadDat();

void WriteDat();

void SortDat()

void main()

mem$et(sell, 0, siZeOf(Sell));

ReadDat();

SortDat();

WriteDat();

void ReadDat()

FTLE *fp;

char str[80], ch[11];

int i;

fp=fopen("K:\\k06\\35010006\\IN.DAT", "r");

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

fgets(str, 80, fp);

memcpy(sell[i].dm, str, 4);

memcpy(sell[i].mc, str+4, 10);

memcpy(ch, str+14, 4); ch[4]=0;

sell[i].dj=atoi(ch);

memcpy(ch, str+18, 5); ch[5]=0;

Sell[i].sl=atoi(ch);

sell[i].je=(long)sell[i].dj *sell[i].sl;

fclose(fp);

void WriteDat()

FILE *fp;

int i;

fp=Eopen("K:\\k06\\35010006\\OUT.DA2", "w");

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

fprintf(fp, "%s%s%4d%5d%10ld\n", sell[i].dm, sell[i].mc, sell[i].dj, sell[i].sl, sell[i].je);

fclose(fp);

答案

参考答案:

void SortDat()

int i, j;

PRO temp;

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

for(j=i+A; j<A00; j++){

if(sell[i].je<sell[j].je)

{

temp=s[i];

s[i]=s[j];

s[j]=temp;

eise if(sell[i].je==sell[j].je)

if(strcmp(sell[i].dm, Sell[j].dm)>0)

{

temp=s[i];

s[i]=s[j];

s[j]=temp;

}

}

}

解析:

此题的解题中的排序方法是冒泡排序法,是先按金额的大小进行排序,如果遇到金额相等时就按代码从小到大进行排序。注意strcmp(x,y)函数的值是x>y时,为正数,x=y时为零,x<y时为负数。

选择题
单项选择题