if(xx[i]>0)
{ totNum++; data=xx[i]>>1;
if(data%2==0){totCnt++;totPjz+=xx[i];} }
if(totCnt==0) totPjz=0; else totPjz/=totCnt; }
******************************************************************** 题目27(整数各位数字运算题)
已知数据文件in.dat中存有300个四位数,并已调用读函数ReadDat()把这些数存入数组a中,请编制一函数jsValue(),其功能是:求出千位数上的数减百位数上的数减十位数上的数减个位数上的数大于零的个数cnt,再把所有满足此条件的四位数依次存入数组b中,然后对数组b的四位数按从小到大的顺序进行排序,最后调用写函数writeDat()把结果输出到out.dat文件。
例如:9123,9-1-2-3>0,则该数满足条件存入数组b中,且个数cnt=cnt+1。 9812,9-8-1-2>0,则该数不满足条件忽略。 jsValue()
{ int i,j,qw,bw,sw,gw; for(i=0;i<300;i++)
{ qw=a[i]/1000; bw=a[i]/100; sw=a[i]0/10; gw=a[i]; if(qw-bw-sw-gw>0) b[cnt++]=a[i]; }
for(i=0;i if( b[i]>b[j]) { qw=b[i]; b[i]=b[j]; b[j]=qw;} } ************************************************************************ ★☆题目28(整数各位打散组合运算题) 已知数据文件IN.DAT中存有200个四位数,并已调用读函数readDat()把这些数存入数组a中,请考生编制一函数jsVal(),其功能是:把千位数字和十位数字重新组成一个新的十位数ab(新十位数的十位数字是原四位数的千位数字,新十位数的个位数字是原四位数的十位数字),以及把个位数字和百位数字组成另一个新的十位数cd(新十位数的十位数字是原四位数的个位数字,新十位数的个位数字是原四位数的百位数字),如果新组成的两个十位数ab-cd>=0且ab-cd<=10且两个数均是奇数,同时两个新数的十位数字均不为零,则将满足此条件的四位数按从大到小的顺序存入数组b中,并要计算满足上述条件的四位数的个数cnt。最后main()函数调用写函数writeDat( )把结果cnt以及数组b中符合条件的四位数输出到OUT.DAT文件中。 void jsVal() {int i,j,thou,hun,ten,data,ab,cd; for(i=0;i<200;i++) {thou=a[i]/1000; hun=a[i]00/100; ten=a[i]0/10; data=a[i]; ab=10*thou+ten; cd=10*data+hun; if((ab-cd)>=0&&(ab-cd)<=10&&ab%2==1&&cd%2==1&&ab>=10&&cd>=10) b[cnt++]=a[i]; } for(i=0;i 第 11 页 共 42 页 for(j=i+1;j if(b[i] ************************************************************************* ☆题目29(整数各位打散组合运算题) 已知数据文件IN.DAT中存有200个四位数,并已调用读函数readDat()把这些数存入数组a中,请考生编制一函数jsVal(),其功能是:把千位数字和十位数字重新组成一个新的十位数ab(新十位数的十位数字是原四位数的千位数字,新十位数的个位数字是原四位数的十位数字),以及把个位数字和百位数字组成另一个新的十位数cd(新十位数的十位数字是原四位数的个位数字,新十位数的个位数字是原四位数的百位数字),如果新组成的两个十位数ab-cd>=10且ab-cd<=20且两个数均是偶数,同时两个新数的十位数字均不为零,则将满足此条件的四位数按从大到小的顺序存入数组b中,并要计算满足上述条件的四位数的个数cnt。 void jsVal() { int i,j,qw,bw,sw,gw,ab,cd; for(i=0;i { qw=a[i]/1000; bw=a[i]/100; sw=a[i]0/10; gw=a[i]; ab=qw*10+sw; cd=gw*10+bw; if(ab-cd>=10&&ab-cd<=20&&ab%2==0&&cd%2==0&&qw!=0&&gw!=0) b[cnt++]=a[i]; } for(i=0;i if(b[i] *********************************************************************** ☆题目30(整数统计排序题) 已知数据文件IN.DAT中存有200个四位数,并已调用读函数readDat()把这些数存入数组a中,请考生编制一函数jsVal(),其功能是:依次从数组a中取出一个四位数,如果该四位数连续小于该四位数以后的五个数且该数是偶数(该四位数以后不满五个数,则不统计),则统计出满足此条件的个数cnt并把这些四位数按从小到大的顺序存入数组b中,最后调用写函数writeDat( )把结果cnt以及数组b中符合条件的四位数输出到OUT.DAT文件中。 void jsVal() {int i,j,flag; for(i=0;i if(a[i] for(i=0;i if(b[i]>b[j]) {flag=b[i];b[i]=b[j];b[j]=flag;} } **************************************************************************** ★☆题目31(结构体运算题) 已知在文件IN.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位),产品名称mc(字符型10位),单价dj(整型),数量sl(整型),金额je(长整型)五部分组成。其中:金额=单价*数量计算得出。函数 第 12 页 共 42 页 ReadDat()是读取这100个销售记录并存入结构数组sell中。请编制函数SortDat(),其功能要求:按金额从大到小进行排列,若金额相同,则按产品代码从大到小进行排列, 最终排列结果仍存入结构数组sell中,最后调用函数WriteDat() 把结果输出到文件OUT4.DAT中。 void SortDat() {int i,j; PRO xy; for(i=0;i<99;i++) for(j=i+1;j<100;j++) if(sell[i].je ************************************************************************** ☆题目32(结构体运算题) 已知在文件IN.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位),产品名称mc(字符型10位),单价dj(整型),数量sl(整型),金额je(长整型)五部分组成。其中:金额=单价*数量计算得出。函数ReadDat()是读取这100个销售记录并存入结构数组sell中。请编制函数SortDat(),其功能要求:按产品名称从大到小进行排列,若产品名称相等,则按金额从小到大进行排列,最终排列结果仍存入结构数组sell中 ,最后调用函数WriteDat()把结果输出到文件OUT7.DAT中。 void SortDat() {int i,j; PRO xy; for(i=0;i<99;i++) for(j=i+1;j<100;j++) if(strcmp(sell[i].mc,sell[j].mc)<0||strcmp(sell[i].mc,sell[j].mc)==0&&sell[i].je>sell[j].je) {xy=sell[i];sell[i]=sell[j];sell[j]=xy;} } **************************************************************************** ★☆题目33(方差运算题) 请编制函数ReadDat()实现从文件IN.DAT中读取1000个十进制整数到数组xx中;请编制函数Compute()分别计算出xx中偶数的个数even,奇数的平均值ave1,偶数的平均值ave2以及方差totfc的值,最后调用函数WriteDat()把结果输出到OUT.DAT文件中。 计算方差的公式如下: N 2 totfc=1/N∑(xx[i]-ave2) i=1 设N为偶数的个数,xx[i]为偶数,ave2为偶数的平均值。 原始数据文件存放的格式是:每行存放10个数,并用逗号隔开。(每个数均大于0且小于等于2000) /*********编制函数ReadDat()的部分************/ for(i=0;i { fscanf(fp,\ if((i+1)==0) fscanf(fp,\ } /*******************************************/ void Compute(void) { int i,yy[MAX]; for(i=0;i 第 13 页 共 42 页 yy[i]=0; for(i=0;i if(xx[i]%2==0) { yy[even++]=xx[i]; ave2+=xx[i];} else { odd++; ave1+=xx[i];} if(odd==0) ave1=0; else ave1/=odd; if(even==0) ave2=0; else ave2/=even; for(i=0;i totfc+=(yy[i]-ave2)*(yy[i]-ave2)/even; } ************************************************************************* 题目34(素数题) 无忧id 102 题提供了求素数isPrime()函数 程序prog1.c的功能是:选出100以上1000之内所有个位数字与十位数字之和被10除所得余数恰是百位数字的素数(如293)。计算并输出上述这些素数的个数cnt以及这些素数值的和sum。 请考生编写函数countValue( )实现程序要求,最后调用函数writeDAT()把结果cnt和sum输出到文件bc10.out中。 int isPrime(int m) { int i; for(i=2;i if(m % i==0)return 0; return 1; } void countValue() { int i,j,bw,sw,gw; for(i=100;i<1000;i++) { bw=i/100; sw=i0/10; gw=i; if(isPrime(i)&&(gw+sw)==bw) { cnt++; sum+=i;} } } *************************************************************************** ★☆题目35(级数运算题) 某级数的前两项A1=1,A2=1,以后各项具有如下关系: An=An-2+2An-1(注:n-2与n-1为下标) 下列程序prog1.c的功能是:要求依次对于整数M=100,1000和10000求出对应的n值,使其满足:Sn jsValue() {int a1=1,a2=1,a12,sn,k=2; sn=a1+a2; 第 14 页 共 42 页 while(1) {a12=a1+2*a2; if(sn<100&&sn+a12>=100) b[0]=k; if(sn<1000&&sn+a12>=1000) b[1]=k; if(sn<10000&&sn+a12>=10000) {b[2]=k;break;} sn=sn+a12; a1=a2;a2=a12; k++; } } 运行结果为: M=100,n=6 M=1000,n=9 M=10000,n=11 **************************************************************************** ★题目36(字符替换题) 函数ReadDat()实现从文件ENG.IN中读取一篇英文文章,存入到字符串数组xx中;请编制函数encryptChar(),按给定的替代关系对数组xx中的所有字符进行替代,仍存入数组xx的对应的位置上,最后调用函数WriteDat()把结果xx输出到文件pS6.DAT中。 替代关系:f(p)=p*11 mod 256(p是数组中某一个字符的ASCII值,f(p)是计算后新字符的ASCII值),如果计算后f(p)值小于等于32或f(p)对应的字符是数字0至9,则该字符不变,否则将f(p)所对应的字符进行替代。 void encryptChar() { int i,j; for(i=0;i for(j=0;j if(xx[i][j]*11%6<=32||xx[i][j]*11%6>='0'&&xx[i][j]*11%6<='9') continue; else xx[i][j]=xx[i][j]*11%6; } ************************************************************************* 题目37(字符替换题) 函数ReadDat()实现从文件ENG.IN中读取一篇英文文章,存入到字符串数组xx中;请编制函数encryptChar(),按给定的替代关系对数组xx中的所有字符进行替代,仍存入数组xx的对应的位置上,最后调用函数WriteDat()把结果xx输出到文件PS7.DAT中。 替代关系:f(p)=p*11 mod 256(p是数组中某一个字符的ASCII值,f(p)是计算后新字符的ASCII值),如果原字符是大写字母或计算后f(p)值小于等于32,则该字符不变,否则将f(p)所对应的字符进行替代。 void encryptChar() { int i,j; for(i=0;i for(j=0;j if(xx[i][j]*11%6<=32||xx[i][j]>='A'&&xx[i][j]<='Z') continue; else xx[i][j]=xx[i][j]*11%6; } ***************************************************************************** 题目38(结构体运算题) 第 15 页 共 42 页