| 网站首页 | 资讯 | Hack | 漏洞 | 网管 | 编程 | 培训 | 品黑页 | 软件 | 论坛 | 动画 | 视频 | 经典 | 教学站 | 黑客点睛 | 
免费服务 我要发布 在线破解 黑客游戏 精华收集 免费空间 网络硬盘 独家报道 黑器点播 免费 FTP 交换资源
收费服务 黑客培训 光盘刻录 黑客书籍 视频下载 主力频道 空间域名 网站建设 特色服务 解决方案 我要投诉
您现在的位置: 华夏黑客同盟 >> 培训 >> 计算机等级考试 >> 计算机等级考试三级 >> 正文 用户登录 新用户注册
三级C语言上机试题总结           ★★★ 【字体:
计算机等级考试三级C语言上机试题总结
作者:考试吧 文章来源:考试吧 点击数: 更新时间:2008-8-4
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\n", 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\n", 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\n", cnt) ;
for(i = 0 ; i < cnt ; i++) printf("b[%d]=%d\n", i, b[i]) ;
}

readDat()
{
FILE *fp ;
int i ;
fp = fopen("in.dat","r") ;
for(i = 0 ; i < 300 ; i++) fscanf(fp, "%d,", &a[i]) ;
fclose(fp) ;
}

writeDat()
{
FILE *fp ;
int i ;
fp = fopen("out.dat","w") ;
fprintf(fp, "%d\n", cnt) ;
for(i = 0 ; i < cnt ; i++) fprintf(fp, "%d\n", b[i]) ;
fclose(fp) ;
}

要求:
求出所有这些四位数是素数的个数cnt, 再把所有满足此条件的四位数依次存入数组b中, 然后对数组b的四位数按从小到大的顺序进行排序。

out.dat 文件内容应当为:
30
1231
1277
1283
1319
2543
2609
3793
3911
4013
4549
4817
4933
5591
5843
5939
6733
6791
6841
6871
6917
7297
7369
7703
8101
8221
8941
9013
9461
9689
9887

之四
要求:
求出千位数上的数减百位数上的数减十位数上的数减个位数上的数大于零的个数cnt, 再把所有满足此条件的四位数依次存入数组b中, 然后对数组b的四位数按从小到大的顺序进行排序。

out.dat 文件内容应当为:
20
4002
4102
5111
5400
6014
6302
7050
7105
7113
8101
8130
8203
8221
8303
8700
9013
9016
9052
9053
9800

之五
要求:
求出千位数上的数加百位数上的数等于十位数上的数加个位数上的数的个数cnt, 再把所有满足此条件的四位数依次存入数组b中, 然后对数组b的四位数按从大到小的顺序进行排序。

out.dat 文件内容应当为:
22
7795
7429
7328
7153
6978
6767
6556
6226
5591
5555
5427
4509
4013
3672
3663
3205
3131
2855
2763
2543
2507
1625

求满足条件的数的个数、平均值……
求满足条件的数的个数、平均值及不满足条件的数的平均值等,此类也是五题。本处仅给出一个全题,其余题只给出不同之处。

code:
/*
已知数据文件IN.DAT中存有300个四位数, 并已调用读函数readDat()把这些数存入数组a中, 请编制一函数jsvalue(),其功能是: 求出千位数上的数减百位数上的数减十位数上的数减个位数上的数大于零的个数cnt, 再求出所有满足此条件的四位数平均值pjz1, 以及所有不满足此条件的四位数平均值pjz2。最后main()函数调用写函数writeDat()把结果cnt,pjz1,pjz2输出到OUT.DAT文件。

例如: 9123, 9-1-2-3>0, 则该数满足条件计算平均值pjz1,且个数cnt=cnt+1。
9812, 9-8-1-2<0, 则该数不满足条件计算平均值pjz2。

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

main()
{
int i ;

readDat() ;
jsvalue() ;
writeDat() ;
printf("cnt=%d\n满足条件的平均值pzj1=%7.2lf\n不满足条件的平均值pzj2=%7.2lf\n", cnt,pjz1,pjz2);
}

readDat()
{
FILE *fp ;
int i ;
fp = fopen("in.dat","r") ;
for(i = 0 ; i < 300 ; i++) fscanf(fp, "%d,", &a[i]) ;
fclose(fp) ;
}

writeDat()
{
FILE *fp ;
int i ;
fp = fopen("out.dat","w") ;
fprintf(fp, "%d\n%7.2lf\n%7.2lf\n", cnt, pjz1, pjz2) ;
fclose(fp) ;
}

in.dat 与前面给出的完全相同,out.dat 内容应当如下:
20
7389.55
5524.03

满足条件数的平均数……四题之说明

之二
要求:
求出千位数上的数加百位数上的数等于十位数上的数加个位数上的数的个数cnt, 再求出所有满足此条件的四位数平均值pjz1, 以及所有不满足此条件的四位数平均值pjz2。

正确程序生成的 out.dat 文件内容应当如下:
22
4876.86
5709.46

之三
要求:
求出个位数上的数减千位数上的数减百位数上的数减十位数上的数大于零的个数cnt, 再求出所有满足此条件的四位数平均值pjz1, 以及所有不满足此条件的四位数平均值pjz2。

正确程序生成的 out.dat 文件内容应当如下:
12
2926.08
5761.83

之四
要求:
求出所有这些四位数是素数的个数cnt, 再求出所有满足此条件的四位数平均值pjz1, 以及所有不满足此条件的四位数平均值pjz2。

正确程序生成的 out.dat 文件内容应当如下:
30
5782.87
5633.46

之五
要求:
求出千位数上的数加个位数上的数等于百位数上的数加十位数上的数的个数cnt, 再求出所有满足此条件的四位数平均值pjz1, 以及所有不满足此条件的四位数平均值pjz2。

正确程序生成的 out.dat 文件内容应当如下:
18
6681.22
5582.48

200个四位数(此类共10题)
此部分题与300个数的题有相似之处。
之一

code:
/*
已知数据文件IN.DAT中存有200个四位数, 并已调用读函数readDat()把这些数存入数组a中,请考生编制一函数jsVal(),其功能是: 把千位数字和十位数字重新组成一个新的十位数ab(新十位数的十位数字是原四位数的千位数字,新十位数的个位数字是原四位数的十位数字), 以及把个位数字和百位数字组成另一个新的十位数cd (新十位数的十位数字是原四位数的个位数字,新十位数的个位数字是原四位数的百位数字), 如果新组成的两个十位数ab>cd, ab必须是偶数且能被5整除, cd必须是奇数,同时两个新数的十位数字均不为零,则将满足此条件的四位数按从大到小的顺序存入数组b中, 并要计算满足上述条件的四位数的个数cnt。最后main()函数调用写函数writeDat( )把结果cnt以及数组b中符合条件的四位数输出到OUT.DAT文件中。

注意: 部分源程序存在文件PROG1.C文件中。
程序中已定义数组: a[200], b[200], 已定义变量: cnt请勿改动数据文件IN.DAT中的任何数据、主函数main()、读函数readDat()和写函数writeDat()的内容。
*/
#include <stdio.h>
#define MAX 200
int a[MAX], b[MAX], cnt = 0 ;

void jsVal()
{/**/
int i,j,k,A,B,C,D;
for(i=0; i < MAX; i++)
{ A=a[i]/1000; B=a[i]/10%10; C=a[i]%10; D=a[i]/100%10;
if(A&&C&&(B==0)&&(D%2)&&(10*A>10*C+D))
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) {A=b[k]; b[k]=b[i]; b[i]=A;}
}
/**/
}

void readDat()
{
int i ;
FILE *fp ;
fp = fopen("in.dat", "r") ;
for(i = 0 ; i < MAX ; i++) fscanf(fp, "%d", &a[i]) ;
fclose(fp) ;
}

void main()
{
int i ;
readDat() ;
jsVal() ;
printf("满足条件的数=%d\n", cnt) ;
for(i = 0 ; i < cnt ; i++) printf("%d ", b[i]) ;
printf("\n") ;
writeDat() ;
}

writeDat()
{
FILE *fp ;
int i ;
fp = fopen("out.dat", "w") ;
fprintf(fp, "%d\n", cnt) ;
for(i = 0 ; i < cnt ; i++) fprintf(fp, "%d\n", b[i]) ;
fclose(fp) ;

200个四位数题之其余九题说明

之二

要求:
把千位数字和十位数字重新组成一个新的十位数(新十位数的十位数字是原四位数的千位数字,新十位数的个位数字是原四位数的十位数字), 以及把个位数字和百位数字组成另一个新的十位数(新十位数的十位数字是原四位数的个位数字, 新十位数的个位数字是原四位数的百位数字), 如果新组成的两个十位数均是素数且新数的十位数字均不为零,则将满足此条件的四位数按从大到小的顺序存入数组b中, 并要计算满足上述条件的四位数的个数cnt。

out.dat 的内容应当为:
10
9971
8398
7711
6375
4719
4173
2736
2398
2397
1997

之三

要求:
把个位数字和千位数字重新组成一个新的十位数(新十位数的十位数字是原四位数的个位数字,新十位数的个位数字是原四位数的千位数字), 以及把百位数字和十位数字组成另一个新的十位数(新十位数的十位数字是原四位数的百位数字, 新十位数的个位数字是原四位数的十位数字), 如果新组成的两个十位数必须是一个奇数,另一个为偶数并且两个十位数中至少有一个数能被17整除,同时两个新数的十位数字均不为零, 则将满足此条件的四位数按从大到小的顺序存入数组b中, 并要计算满足上述条件的四位数的个数cnt。

out.dat 的内容应当为:
7
8656
8174
7781
7683
4313
4173
2513

之四

要求:
)把这些数存入数组a中,请考生编制一函数jsVal(),其功能是: 把千位数字和十位数字重新组成一个新的十位数ab(新十位数的十位数字是原四位数的千位数字,新十位数的个位数字是原四位数的十位数字), 以及把个位数字和百位数字组成另一个新的十位数cd (新十位数的十位数字是原四位数的个位数字,新十位数的个位数字是原四位数的百位数字), 如果新组成的两个十位数ab-cd>=10且ab-cd<=20且两个数均是偶数,同时两个新数的十位数字均不为零,则将满足此条件的四位数按从大到小的顺序存入数组b中, 并要计算满足上述条件的四位数的个数cnt。

out.dat 的内容应当为:
5
9068
5224
5024
3821
2281

之五

要求:
如果四位数各位上的数字均是0或2或4或6或8, 则统计出满足此条件的个数cnt, 并把这些四位数按从大到小的顺序存入数组b中。

out.dat 的内容应当为:
11
8448
6820
4488
4060
2888
2884
2686
2624
2484
2420
2042

[1] [2] [3] [4] 下一页

责任编辑:朱倩  联系方式  Email:朱倩
电话:51228163
  • 上一篇培训:

  • 下一篇培训: 没有了
  • (只显示最新5条。评论内容只代表网友观点,与本站立场无关!)
    姓 名:
    * 游客填写  ·注册用户
    主 页:
    评 分:
    1分 2分 3分 4分 5分
    评论内容:
    验证码: *
  • 请遵守《互联网电子公告服务管理规定》及中华人民共和国其他各项有关法律法规。
  • 严禁发表危害国家安全、损害国家利益、破坏民族团结、破坏国家宗教政策、破坏社会稳定、侮辱、诽谤、教唆、淫秽等内容的评论 。
  • 用户需对自己在使用本站服务过程中的行为承担法律责任(直接或间接导致的)。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表网友个人观点,与本网站立场无关。
  • 最新hack更新
    最新推荐资讯
    相关培训
    等级考试三级PC上机题
    计算机三级信息管理技术经验
    最新会员软件
    最新推荐视频
    最新推荐动画

    Copyright @ 2005 77169.Net Inc. All rights reserved. 华夏黑客同盟 版权所有
    北京市电信通提供网络带宽

    mailto:webmaster@77169.net
    咨询QQ号:836982 / 59280880
    联系站长 QQ38588913
    热线电话: 86-10-67634029/676229433
    京ICP证041431号