37.已知在文件IN.dat中存有100个产品销售记录,每个产品销售记录由产品代码code(字符型4位)、产品名称name(字符型10位)、单价uprice(整型)、数量amount(整型)、金额sum(长整型)5部分组成。其中:金额=单价×数量。函数RData()是读取这100个销售记录并存入结构数组sell中。请编写函数SortDat(),其功能是:按产品代码从小到大进行排列,若产品代码相同,则按金额从小到大进行排列,最终排列结果仍存入结构数组sell中。最后调用函数WData(),把结果输出到OUT.dat文件中。
【答案】
void SortDat()
{ int i, j;
PRO temp;
for (i=0; i for (j=i+1; j if (strcmp(sell[i].code, sell[j].code) > 0) { temp = sell[i]; sell[i] = sell[j]; sell[j] = temp; } else if (strcmp(sell[i].code, sell[j].code) == 0) { if (sell[i].sum > sell[j].sum) { temp = sell[i]; sell[i] = sell[j]; sell[j] = temp; } } } 38.已知在文件IN.dat中存有若干个(少于200个)四位数字的正整数,函数RData()读取若干个正整数并存入数组original中。请编写函数CalValue(),其功能要求是:①求出这个文件中共有多少个正整数totNum;②求这些数中的各位数字之和是偶数的数的个数totCnt,以及满足此条件的这些数的算术平均值totave。最后调用函数WData()把所求的结果输出到OUT.dat文件中。 【答案】 void CalValue(void) { int i, thou, hun, ten, data; int ab; long sum = 0; for (i=0; i { if (original[i] > 0) totNum++; thou = original[i]/1000; hun = original[i]%1000/100; ten = original[i]%100/10; data = original[i]%10; ab = thou+hun+ten+data; if (ab%2 == 0) { totCnt++; sum = sum+original[i]; } } totave = (double)sum/totCnt; } 39.下列程序的功能是:计算出自然数SIX和NINE、它们满足的条件是SIX+SIX+SIX=NINE+NINE的个数cnt以及满足此条件所有的SIX与NINE的和sum,请编写函数countValue()实现程序的要求。最后调用函数WData(),把结果cnt和sum,输出到OUT.dat文件中。 其中的S、I、X、N、E各代表一个十进制数。 【答案】 void countValue() { int S, I, X, N, E; int SIX, NINE; for (S=1; S<10; S++) for (I=0; I<10; I++) for (X=0; X<10; X++) for (N=1; N<10; N++) for (E=0; E<10; E++) { SIX = S*100+I*10+X; NINE = N*1000+I*100+N*10+E; if (SIX*3 == NINE*2) { cnt++; sum += SIX+NINE; } } }