频道栏目
首页 > 资讯 > PC技术 > 正文

计算机等级考试三级C语言上机试题总结

09-09-08        来源:[db:作者]  
收藏   我要投稿
100个产品销售记录排序(此类共10题)
code:
/*
已知在文件IN.DAT中存有100个产品销售记录, 每个产品销售记录由产品代码dm(字符型4位), 产品名称mc(字符型10位), 单价dj(整型), 数量sl(整型), 金额je(长整型)五部分组成。 其中:金额=单价*数量计算得出。函数ReadDat( )读取这100个销售记录并存入结构数组sell中。请编制函数SortDat( ), 其功能要求:

按金额从小到大进行排列, 若金额相等, 则按产品代码从小到大进行排列, 最终排列结果仍存入结构数组sell中。最后main( )函数调用函数WriteDat()把结果输出到文件OUT1.DAT中。

注意: 部分源程序存放在PROG1.C中。请勿改动主函数main( )、读数据函数ReadDat()和输出数据函
数WriteDat()的内容。
*/
#include <stdio.h>
#include <mem.h>
#include <string.h>
#include <conio.h>
#include <stdlib.h>

#define MAX 100
typedef struct {
char dm[5] ; /* 产品代码 */
char mc[11] ; /* 产品名称 */
int dj ; /* 单价 */
int sl ; /* 数量 */
long je ; /* 金额 */
} PRO ;
PRO sell[MAX] ;
void ReadDat() ;
void WriteDat() ;

void SortDat()
{/**/
int i,j,k;
PRO tt;
for(i=0; i < MAX-1; i++)
{ k=i;
for(j=i+1; j < MAX; j++)
if((sell[k].je>sell[j].je)||(sell[k].je==sell[j].je)&&(strcmp(sell[k].dm, sell[j].dm)>0))
k=j;
if(k!=i)
{ tt=sell[k]; sell[k]=sell[i]; sell[i]=tt;}
}
/**/
}

void main()
{
memset(sell, 0, sizeof(sell)) ;
ReadDat() ;
SortDat() ;
WriteDat() ;
}

void ReadDat()
{
FILE *fp ;
char str[80], ch[11] ;
int i ;

fp = fopen("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 = fopen("OUT1.DAT", "w") ;
for(i = 0 ; i < 100 ; i++) {
fprintf(fp, "%s %s %4d %5d %10ld ", sell[i].dm, sell[i].mc, sell[i].dj, sell[i].sl, sell[i].je) ;
}
fclose(fp) ;
}

100个产品销售记录排序其余9题说明

1) in.dat 内容完全相同。
2) 程序也基本雷同,仅排序的要求不一样。
3) 考生应熟悉 strcmp() 函数,否则有的题相当不好处理。

之二
排序要求:
按金额从小到大进行排列, 若金额相等, 则按产品代码从大到小进行排列
相应语句:
if(sell[k].je>sell[j].je|| (sell[k].je==sell[j].je) &&
(strcmp(sell[k].dm, sell[j].dm) < 0))

之三
排序要求:
按金额从大到小进行排列, 若金额相等, 则按产品代码从小到大进行排列
相应语句:
if((sell[k].je <
sell[j].je)||(sell[k].je==sell[j].je)&&(strcmp(sell[k].dm,
sell[j].dm)>0))

之四
排序要求:
按金额从大到小进行排列, 若金额相等, 则按产品代码从大到小进行排列
相应语句:
if((sell[k].je <
sell[j].je)||(sell[k].je==sell[j].je)&&(strcmp(sell[k].dm,sell[j].dm)<0))

之五
排序要求:
按产品名称从小到大进行排列, 若产品名称相同, 则按金额从小到大进行排列
相应语句:
if((strcmp(sell[k].mc,
sell[j].mc)>0)||(strcmp(sell[k].mc,sell[j].mc)==0)&&(sell[k].je>sell[j].je))

之六
排序要求:
按产品名称从小到大进行排列, 若产品名称相同, 则按金额从大到小进行排列
相应语句:
if(strcmp(sell[i].mc, sell[j].mc)>0 || (strcmp(sell[i].mc,
sell[j].mc)==0)&&(sell[i].je < sell[j].je))

之七
排序要求:
按产品名称从大到小进行排列, 若产品名称相同, 则按金额从小到大进行排列
相应语句:
if((strcmp(sell[k].mc, sell[j].mc) < 0) ||
(strcmp(sell[k].mc,sell[j].mc)==0)&&(sell[k].je>sell[j].je))

之八
排序要求:
按产品名称从大到小进行排列, 若产品名称相同, 则按金额从大到小进行排列
相应语句:
if((strcmp(sell[k].mc, sell[j].mc) < 0)|| (strcmp(sell[k].mc,
sell[j].mc)==0)&&(sell[k].je < sell[j].je))

之九
排序要求:
按产品代码从小到大进行排列, 若产品代码相同, 则按金额从小到大进行排列
相应语句:
if((strcmp(sell[k].dm,
sell[j].dm)>0)||(strcmp(sell[k].dm,sell[j].dm)==0)&&(sell[k].je>sell[j].je

code:
/*
已知在文件IN.DAT中存有100个产品销售记录, 每个产品销售记录由产品代码dm(字符型4位), 产品名称mc(字符型10位), 单价dj(整型), 数量sl(整型), 金额je(长整型)五部分组成。 其中:金额=单价*数量计算得出。函数ReadDat( )读取这100个销售记录并存入结构数组sell中。请编制函数SortDat( ), 其功能要求:

按产品代码从大到小进行排列, 若产品代码相同, 则按金额从大到小进行排列, 最终排列结果仍存入结构数组sell中。最后main()函数调用函数WriteDat()把结果输出到文件OUT10.DAT中。

注意: 部分源程序存放在PROG1.C中。
请勿改动主函数main( )、读数据函数ReadDat()和输出数据函数WriteDat()的内容。
*/
#include <stdio.h>
#include <mem.h>
#include <string.h>
#include <conio.h>
#include <stdlib.h>

#define MAX 100
typedef struct {
char dm[5] ; /* 产品代码 */
char mc[11] ; /* 产品名称 */
int dj ; /* 单价 */
int sl ; /* 数量 */
long je ; /* 金额 */
} PRO ;
PRO sell[MAX] ;
void ReadDat() ;
void WriteDat() ;

void SortDat()
{/**/
int i,j;
PRO tt;
for(i=0; i < MAX-1; i++)
for(j=i+1; j < MAX; j++)
{ if(strcmp(sell[i].dm, sell[j].dm) < 0)
{ tt=sell[i]; sell[i]=sell[j]; sell[j]=tt;}
if((strcmp(sell[i].dm, sell[j].dm)==0)&&(sell[i].je < sell[j].je))
{ tt=sell[i]; sell[i]=sell[j]; sell[j]=tt;}
}
/**/
}

void main()
{
memset(sell, 0, sizeof(sell)) ;
ReadDat() ;
SortDat() ;
WriteDat() ;
}

void ReadDat()
{
FILE *fp ;
char str[80], ch[11] ;
int i ;

fp = fopen("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 = fopen("OUT10.DAT", "w") ;
for(i = 0 ; i < 100 ; i++) {
fprintf(fp, "%s %s %4d %5d %10ld ", sell[i].dm, sell[i].mc, sell[i].dj, sell[i].sl, sell[i].je) ;
}
fclose(fp) ;
}


300个四位数问题(此类共10题)

本类10题中,五题产生数组B,并对B按一定要求排序;其余五题是求平均值。我把它们分成两组五题来讨论。
以下为产生数组B之题一:

code:
/*
已知数据文件IN.DAT中存有300个四位数, 并已调用读函数readDat()把这些数存入数组a中, 请编制一函数jsvalue(),其功能是: 求出个位数上的数减千位数上的数减百位数上的数减十位数上的数大于零的个数cnt, 再把所有满足此条件的四位数依次存入数组b中, 然后对数组b的四位数按从大到小的顺序进行排序。最后main( )函数调用写函数writeDat()把数组b中的数输出到文件OUT.DAT。

例如: 1239, 9-1-2-3>0, 则该数满足条件存入数组b中, 且个数cnt=cnt+1。
8129, 9-8-1-2<0, 则该数不满足条件忽略。

注意: 部分源程序存在文件PROG1.C文件中。
程序中已定义数组: a[300], b[300], 已定义变量: cnt请勿改动数据文件IN.DAT中的任何数据、主函数main()、读函数readDat()和写函数writeDat()的内容。
*/
#include <stdio.h>
int a[300], b[300], cnt=0 ;
jsvalue()
{/**/
int i,j,k,t;
for(i=0; i < 300; i++)
if(a[i]%10-a[i]/1000-a[i]/100%10-a[i]/10%10>0)
b[cnt++]=a[i];
for(i=0; i < cnt-1; i++)
{ k=i;
for(j=i+1; j < cnt; j++)
if(b[k] < b[j]) k=j;
if(k!=i) { t=b[k]; b[k]=b[i]; b[i]=t; }
}
/**/
}

main()
{
int i ;

readDat() ;
jsvalue() ;
writeDat() ;
printf("cnt=%d ", cnt) ;
for(i = 0 ; i < cnt ; i++) printf("b[%d]=%d ", i,

相关TAG标签
上一篇:1995全国计算机等级考试一级笔试试卷、答案
下一篇:ㄨ乄聲dê諾 男生网名大全
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站