上机考试习题集

本书提供了全国计算机等级考试三级C语言机试试题库。本书配套光盘中有3部分内容:本书所有习题的详尽答案;本书所有习题的源文件;上机考试的全真模拟环境。读者可以利用配套光盘进行考前训练。
本书所有题目均进行了测试,保证能够在实际环境中正常运行。
本书针对参加全国计算机等级考试三级C语言程序设计的考生,同时也可作为大专院校、成人高等教育以及相关培训班的练习题和考试题使用。
上机试题总结:
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; sell=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.dm, str, 4) ;
memcpy(sell.mc, str + 4, 10) ;
memcpy(ch, str + 14, 4) ; ch[4] = 0 ;
sell.dj = atoi(ch) ;
memcpy(ch, str + 18, 5) ; ch[5] = 0 ;
sell.sl = atoi(ch) ;
sell.je = (long)sell.dj * sell.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.dm, sell.mc, sell.dj, sell.sl, sell.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.mc, sell[j].mc)>0 || (strcmp(sell.mc,
sell[j].mc)==0)&&(sell.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.dm, sell[j].dm) < 0)
{ tt=sell; sell=sell[j]; sell[j]=tt;}
if((strcmp(sell.dm, sell[j].dm)==0)&&(sell.je < sell[j].je))
{ tt=sell; sell=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.dm, str, 4) ;
memcpy(sell.mc, str + 4, 10) ;
memcpy(ch, str + 14, 4) ; ch[4] = 0 ;
sell.dj = atoi(ch) ;
memcpy(ch, str + 18, 5) ; ch[5] = 0 ;
sell.sl = atoi(ch) ;
sell.je = (long)sell.dj * sell.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.dm, sell.mc, sell.dj, sell.sl, sell.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%10-a/1000-a/100%10-a/10%10>0)
b[cnt++]=a;
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; b=t; }
}
/**/
}
main()
{
int i ;
readDat() ;
jsvalue() ;
writeDat() ;
printf("cnt=%d
", cnt) ;
for(i = 0 ; i < cnt ; i++) printf("b[%d]=%d
", i, b) ;
}
readDat()
{
FILE *fp ;
int i ;
fp = fopen("in.dat","r") ;
for(i = 0 ; i < 300 ; i++) fscanf(fp, "%d,", &a) ;
fclose(fp) ;
}
writeDat()
{
FILE *fp ;
int i ;
fp = fopen("out.dat","w") ;
fprintf(fp, "%d
", cnt) ;
for(i = 0 ; i < cnt ; i++) fprintf(fp, "%d
", b) ;
fclose(fp) ;
}
要求:
求出所有这些四位数是素数的个数cnt, 再把所有满足此
条件的四位数依次存入数组b中, 然后对数组b的四位数按从小到
大的顺序进行排序。
要求:
求出千位数上的数减百位数上的数减十位数上的数减个位
数上的数大于零的个数cnt, 再把所有满足此条件的四位数依次
存入数组b中, 然后对数组b的四位数按从小到大的顺序进行排序。
之五
要求:
求出千位数上的数加百位数上的数等于十位数上的数加个
位数上的数的个数cnt, 再把所有满足此条件的四位数依次存入
数组b中, 然后对数组b的四位数按从大到小的顺序进行排序。
求满足条件的数的个数、平均值……
求满足条件的数的个数、平均值及不满足条件的数的平均
值等,此类也是五题。本处仅给出一个全题,其余题只给出不同
之处。
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/1000-a/100%10-a/10%10-a%10>0)
{ cnt++; pjz1+=a; }
else pjz2+=a;
if(cnt) pjz1/=cnt;
if(cnt<300) pjz2/=300-cnt;
/**/
}
main()
{
int i ;
readDat() ;
jsvalue() ;
writeDat() ;
printf("cnt=%d
满足条件的平均值pzj1=%7.2lf
不满足条件的平均值pzj2=%7.2lf
", cnt,pjz1,pjz2);
}
readDat()
{
FILE *fp ;
int i ;
fp = fopen("in.dat","r") ;
for(i = 0 ; i < 300 ; i++) fscanf(fp, "%d,", &a) ;
fclose(fp) ;
}
writeDat()
{
FILE *fp ;
int i ;
fp = fopen("out.dat","w") ;
fprintf(fp, "%d
%7.2lf
%7.2lf
", cnt, pjz1, pjz2) ;
fclose(fp) ;
}
满足条件数的平均数……四题之说明
之二
要求:
求出千位数上的数加百位数上的数等于十位数上的数加个
位数上的数的个数cnt, 再求出所有满足此条件的四位数平均值
pjz1, 以及所有不满足此条件的四位数平均值pjz2。
之三
要求:
求出个位数上的数减千位数上的数减百位数上的数减十位
数上的数大于零的个数cnt, 再求出所有满足此条件的四位数平
均值pjz1, 以及所有不满足此条件的四位数平均值pjz2。
之四
要求:
求出所有这些四位数是素数的个数cnt, 再求出所有满足
此条件的四位数平均值pjz1, 以及所有不满足此条件的四位数平
均值pjz2。
之五
要求:
求出千位数上的数加个位数上的数等于百位数上的数加十
位数上的数的个数cnt, 再求出所有满足此条件的四位数平均值
pjz1, 以及所有不满足此条件的四位数平均值pjz2。
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/1000; B=a/10%10; C=a%10; D=a/100%10;
if(A&&C&&(B==0)&&(D%2)&&(10*A>10*C+D))
b[cnt++]=a;
}
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; b=A;}
}
/**/
}
void readDat()
{
int i ;
FILE *fp ;
fp = fopen("in.dat", "r") ;
for(i = 0 ; i < MAX ; i++) fscanf(fp, "%d", &a) ;
fclose(fp) ;
}
void main()
{
int i ;
readDat() ;
jsVal() ;
printf("满足条件的数=%d
", cnt) ;
for(i = 0 ; i < cnt ; i++) printf("%d ", b) ;
printf("
") ;
writeDat() ;
}
writeDat()
{
FILE *fp ;
int i ;
fp = fopen("out.dat", "w") ;
fprintf(fp, "%d
", cnt) ;
for(i = 0 ; i < cnt ; i++) fprintf(fp, "%d
", b) ;
fclose(fp) ;
200个四位数题之其余九题说明
之二
要求:
把千位数字和十位数字重新组成一个新的十位数(新十
位数的十位数字是原四位数的千位数字,新十位数的个位数字是
原四位数的十位数字), 以及把个位数字和百位数字组成另一个
新的十位数(新十位数的十位数字是原四位数的个位数字, 新十
位数的个位数字是原四位数的百位数字), 如果新组成的两个十
位数均是素数且新数的十位数字均不为零,则将满足此条件的四
位数按从大到小的顺序存入数组b中, 并要计算满足上述条件的
四位数的个数cnt。
之三
要求:
把个位数字和千位数字重新组成一个新的十位数(新十
位数的十位数字是原四位数的个位数字,新十位数的个位数字是
原四位数的千位数字), 以及把百位数字和十位数字组成另一个
新的十位数(新十位数的十位数字是原四位数的百位数字, 新十
位数的个位数字是原四位数的十位数字), 如果新组成的两个十
位数必须是一个奇数,另一个为偶数并且两个十位数中至少有一
个数能被17整除,同时两个新数的十位数字均不为零, 则将满足
此条件的四位数按从大到小的顺序存入数组b中, 并要计算满足
上述条件的四位数的个数cnt。
之四
要求:
)把这些数存入数组a中,请考生编制一函数jsVal(),其
功能是: 把千位数字和十位数字重新组成一个新的十位数ab(新
十位数的十位数字是原四位数的千位数字,新十位数的个位数字
是原四位数的十位数字), 以及把个位数字和百位数字组成另一
个新的十位数cd (新十位数的十位数字是原四位数的个位数字,
新十位数的个位数字是原四位数的百位数字), 如果新组成的两
个十位数ab-cd>=10且ab-cd<=20且两个数均是偶数,同时两个新
数的十位数字均不为零,则将满足此条件的四位数按从大到小的
顺序存入数组b中, 并要计算满足上述条件的四位数的个数cnt。
之五
要求:
如果四位数各位上的数字均是0或2或4或6或8, 则统计
出满足此条件的个数cnt, 并把这些四位数按从大到小的顺序存
入数组b中。
之六
要求:
把千位数字和个位数字重新组成一个新的十位数(新十
位数的十位数字是原四位数的千位数字,新十位数的个位数字是
原四位数的个位数字), 以及把百位数字和十位数字组成另一个
新的十位数(新十位数的十位数字是原四位数的百位数字, 新十
位数的个位数字是原四位数的十位数字), 如果新组成的两个十
位数均是奇数并且两个十位数中至少有一个数能被5整除, 同时
两个新数的十位数字均不为零,则将满足此条件的四位数按从大
到小的顺序存入数组b中, 并要计算满足上述条件的四位数的个
数cnt。
之七
要求:
把个位数字和千位数字重新组成一个新的十位数(新十
位数的十位数字是原四位数的个位数字,新十位数的个位数字是
原四位数的千位数字), 以及把百位数字和十位数字组成另一个
新的十位数(新十位数的十位数字是原四位数的百位数字, 新十
位数的个位数字是原四位数的十位数字), 如果新组成的两个十
位数均是偶数并且两个十位数中至少有一个数能被9整除, 同时
两个新数的十位数字均不为零,则将满足此条件的四位数按从大
到小的顺序存入数组b中, 并要计算满足上述条件的四位数的个
数cnt。
之八
要求:
把千位数字和十位数字重新组成一个新的十位数ab(新
十位数的十位数字是原四位数的千位数字,新十位数的个位数字
是原四位数的十位数字), 以及把个位数字和百位数字组成另一
个新的十位数cd (新十位数的十位数字是原四位数的个位数字,
新十位数的个位数字是原四位数的百位数字), 如果新组成的两
个十位数ab 同时两个新数的十位数字均不为零,则将满足此条件的四位数按
从大到小的顺序存入数组b中, 并要计算满足上述条件的四位数
的个数cnt。
之九
要求:
如果四位数各位上的数字均是奇数,则统计出满足此条
件的个数cnt并把这些四位数按从大到小的顺序存入数组b中。
之十
要求:
把千位数字和十位数字重新组成一个新的十位数ab(新
十位数的十位数字是原四位数的千位数字,新十位数的个位数字
是原四位数的十位数字), 以及把个位数字和百位数字组成另一
个新的十位数cd (新十位数的十位数字是原四位数的个位数字,
新十位数的个位数字是原四位数的百位数字), 如果新组成的两
个十位数ab-cd>=0且ab-cd<=10且两个数均是奇数, 同时两个新
数的十位数字均不为零,则将满足此条件的四位数按从大到小的
顺序存入数组b中, 并要计算满足上述条件的四位数的个数cnt。
小于200个四位数之一(共四题)
code:
/*
已知在文件IN.DAT中存有若干个(个数<200)四位数字的正整
数, 函数ReadDat( )读取这若干个正整数并存入数组xx中。请编
制函数Calvalue( ), 其功能要求: 1. 求出这文件中共有多少个
正整数totNum; 2.求出这些数中的各位数字之和是奇数的数的个
数totCnt, 以及满足此条件的这些数的算术平均值totPjz。最后
main( )函数调用函数WriteDat()把所求的结果输出到OUT.DAT文
件中。
注意: 部分源程序存放在PROG1.C中。
请勿改动数据文件IN.DAT中的任何数据,主函数main()、读
数据函数ReadDat()和输出数据函数WriteDat()的内容。
*/
#include <stdio.h>
#include <conio.h>
#define MAXNUM 200
int xx[MAXNUM] ;
int totNum = 0 ; /* 文件IN.DAT中共有多少个正整数 */
int totCnt = 0 ; /* 符合条件的正整数的个数 */
double totPjz = 0.0 ; /* 平均值 */
int ReadDat(void) ;
void WriteDat(void) ;
void Calvalue(void)
{/**/
while(xx[totNum])
{ if((xx[totNum]/1000+xx[totNum]/100%10+xx[totNum]/10%10+xx[totNum])%2)
{ totCnt++; totPjz+=xx[totNum]; }
totNum++;
}
if(totCnt) totPjz/=totCnt;
/**/
}
void main()
{
int i ;
clrscr() ;
for(i = 0 ; i < MAXNUM ; i++) xx= 0 ;
if(ReadDat()) {
printf("数据文件IN.DAT不能打开! 07
") ;
return ;
}
Calvalue() ;
printf("文件IN.DAT中共有正整数=%d个
", totNum) ;
printf("符合条件的正整数的个数=%d个
", totCnt) ;
printf("平均值=%.2lf
", totPjz) ;
WriteDat() ;
}
int ReadDat(void)
{
FILE *fp ;
int i = 0 ;
if((fp = fopen("in.dat", "r")) == NULL) return 1 ;
while(!feof(fp)) {
fscanf(fp, "%d,", &xx[i++]) ;
}
fclose(fp) ;
return 0 ;
}
void WriteDat(void)
{
FILE *fp ;
fp = fopen("OUT.DAT", "w") ;
fprintf(fp, "%d
%d
%.2lf
", totNum, totCnt, totPjz) ;
fclose(fp) ;
}
小于200个四位数之二(共四题)
code:
/*
已知在文件IN.DAT中存有若干个(个数<200)四位数字的正整
数, 函数ReadDat( )读取这若干个正整数并存入数组xx中。请编
制函数Calvalue( ), 其功能要求: 1. 求出这文件中共有多少个
正整数totNum; 2.求出这些数中的各位数字之和是偶数的数的个
数totCnt, 以及满足此条件的这些数的算术平均值totPjz。最后
main( )函数调用函数WriteDat()把所求的结果输出到OUT.DAT文
件中。
注意: 部分源程序存放在PROG1.C中。
请勿改动数据文件IN.DAT中的任何数据,主函数main()、读
数据函数ReadDat()和输出数据函数WriteDat()的内容。
*/
#include
#include
#define MAXNUM 200
int xx[MAXNUM] ;
int totNum = 0 ; /* 文件IN.DAT中共有多少个正整数 */
int totCnt = 0 ; /* 符合条件的正整数的个数 */
double totPjz = 0.0 ; /* 平均值 */
int ReadDat(void) ;
void WriteDat(void) ;
void Calvalue(void)
{/**/
for(; xx[totNum]; totNum++)
if((xx[totNum]/1000+xx[totNum]/100%10+xx[totNum]/10%10+xx[totNum]%10)%2==0)
{ totCnt++; totPjz+=xx[totNum];}
if(totCnt) totPjz/=totCnt;
/**/
}
void main()
{
int i ;
clrscr() ;
for(i = 0 ; i < MAXNUM ; i++) xx= 0 ;
if(ReadDat()) {
printf("数据文件IN.DAT不能打开! 07
") ;
return ;
}
Calvalue() ;
printf("文件IN.DAT中共有正整数=%d个
", totNum) ;
printf("符合条件的正整数的个数=%d个
", totCnt) ;
printf("平均值=%.2lf
", totPjz) ;
WriteDat() ;
}
int ReadDat(void)
{
FILE *fp ;
int i = 0 ;
if((fp = fopen("in.dat", "r")) == NULL) return 1 ;
while(!feof(fp)) {
fscanf(fp, "%d,", &xx[i++]) ;
}
fclose(fp) ;
return 0 ;
}
void WriteDat(void)
{
FILE *fp ;
fp = fopen("OUT.DAT", "w") ;
fprintf(fp, "%d
%d
%.2lf
", totNum, totCnt, totPjz) ;
fclose(fp) ;
}
200个四位数之三(共四题)
code:
/*
已知在文件IN.DAT中存有若干个(个数<200)四位数字的正整
数, 函数ReadDat( )读取这若干个正整数并存入数组xx中。请编
制函数Calvalue( ), 其功能要求: 1. 求出这文件中共有多少个
正整数totNum; 2. 求这些数右移1位后, 产生的新数是奇数的数
的个数totCnt, 以及满足此条件的这些数(右移前的值)的算术平
均值totPjz。最后main()函数调用函数WriteDat()把所求的结果
输出到文件OUT.DAT中。
注意: 部分源程序存放在PROG1.C中。
请勿改动数据文件IN.DAT中的任何数据,主函数main()、读
数据函数ReadDat()和输出数据函数WriteDat()的内容。
*/
#include
#include
#define MAXNUM 200
int xx[MAXNUM] ;
int totNum = 0 ; /* 文件IN.DAT中共有多少个正整数 */
int totCnt = 0 ; /* 符合条件的正整数的个数 */
double totPjz = 0.0 ; /* 平均值 */
int ReadDat(void) ;
void WriteDat(void) ;
void Calvalue(void)
{/**/
for(; xx[totNum]; totNum++)
if((xx[totNum]>>1)%2)
{ totCnt++; totPjz+=xx[totNum];}
if(totCnt) totPjz/=totCnt;
/**/
}
void main()
{
int i ;
clrscr() ;
for(i = 0 ; i < MAXNUM ; i++) xx= 0 ;
if(ReadDat()) {
printf("数据文件IN.DAT不能打开! 07
") ;
return ;
}
Calvalue() ;
printf("文件IN.DAT中共有正整数=%d个
", totNum) ;
printf("符合条件的正整数的个数=%d个
", totCnt) ;
printf("平均值=%.2lf
", totPjz) ;
WriteDat() ;
}
int ReadDat(void)
{
FILE *fp ;
int i = 0 ;
if((fp = fopen("in.dat", "r")) == NULL) return 1 ;
while(!feof(fp)) {
fscanf(fp, "%d,", &xx[i++]) ;
}
fclose(fp) ;
return 0 ;
}
void WriteDat(void)
{
FILE *fp ;
fp = fopen("OUT.DAT", "w") ;
fprintf(fp, "%d
%d
%.2lf
", totNum, totCnt, totPjz) ;
fclose(fp) ;
}
小于200个四位数之四(共四题)
code:
/*
已知在文件IN.DAT中存有若干个(个数<200)四位数字的正整
数, 函数ReadDat( )读取这若干个正整数并存入数组xx中。请编
制函数Calvalue( ), 其功能要求: 1. 求出这文件中共有多少个
正整数totNum; 2. 求这些数右移1位后, 产生的新数是偶数的数
的个数totCnt, 以及满足此条件的这些数(右移前的值)的算术平
均值totPjz。最后main()函数调用函数WriteDat()把所求的结果
输出到文件OUT.DAT中。
注意: 部分源程序存放在PROG1.C中。
请勿改动数据文件IN.DAT中的任何数据,主函数main()、读
数据函数ReadDat()和输出数据函数WriteDat()的内容。
*/
#include
#include
#define MAXNUM 200
int xx[MAXNUM] ;
int totNum = 0 ; /* 文件IN.DAT中共有多少个正整数 */
int totCnt = 0 ; /* 符合条件的正整数的个数 */
double totPjz = 0.0 ; /* 平均值 */
int ReadDat(void) ;
void WriteDat(void) ;
void Calvalue(void)
{/**/
for(; xx[totNum]>0; totNum++)
if((xx[totNum]>>1)%2==0)
{ totCnt++; totPjz+=xx[totNum]; }
if(totCnt) totPjz/=totCnt;
/**/
}
void main()
{
int i ;
clrscr() ;
for(i = 0 ; i < MAXNUM ; i++) xx= 0 ;
if(ReadDat()) {
printf("数据文件IN.DAT不能打开! 07
") ;
return ;
}
Calvalue() ;
printf("文件IN.DAT中共有正整数=%d个
", totNum) ;
printf("符合条件的正整数的个数=%d个
", totCnt) ;
printf("平均值=%.2lf
", totPjz) ;
WriteDat() ;
}
int ReadDat(void)
{
FILE *fp ;
int i = 0 ;
if((fp = fopen("in.dat", "r")) == NULL) return 1 ;
while(!feof(fp)) {
fscanf(fp, "%d,", &xx[i++]) ;
}
fclose(fp) ;
return 0 ;
}
void WriteDat(void)
{
FILE *fp ;
fp = fopen("OUT.DAT", "w") ;
fprintf(fp, "%d
%d
%.2lf
", totNum, totCnt, totPjz) ;
fclose(fp) ;
}
英文文章——字符串处理(共10题)
之一
code:
/*
函数ReadDat( )实现从文件IN.DAT中读取一篇英文文章存入到
字符串数组xx中; 请编制函数SortCharD( ), 其函数的功能是: 以
行为单位对字符按从大到小的顺序进行排序, 排序后的结果仍按行
重新存入字符串数组xx中。最后main()函数调用函数WriteDat()把
结果xx输出到文件OUT2.DAT中。
例: 原文: dAe,BfC.
CCbbAA
结果: fedCBA.,
bbCCAA
原始数据文件存放的格式是: 每行的宽度均小于80个字符, 含
标点符号和空格。
注意: 部分源程序存放在PROG1.C中。
请勿改动主函数main( )、读数据函数ReadDat()和输出数据函
数WriteDat()的内容。
*/
#include <stdio.h>
#include <string.h>
#include <conio.h>
char xx[50][80] ;
int maxline = 0 ; /* 文章的总行数 */
int ReadDat(void) ;
void WriteDat(void) ;
void SortCharD(void)
{/**/
int i,j,k,m,n; char ch;
for(i=0; i < maxline; i++)
{ j=strlen(xx);
for(m=0; m < j-1; m++)
{ k=m;
for(n=m+1; n < j; n++)
if(xx[k] < xx[n]) k=n;
if(k!=m)
{ ch=xx[k]; xx[k]=xx[m]; xx[m]=ch; }
}
}
/**/
}
void main()
{
clrscr() ;
if(ReadDat()) {
printf("数据文件IN.DAT不能打开!