排序要求:
按产品代码从小到大进行排列,若产品代码相同,则按金额从小到大进行排列
if((strcmp(sell.dm,sell[j].dm)>0)||(strcmp(sell.dm,sell[j].dm)==0)&&(sell.je>sell[j].je
第二类习题300个四位数问题:
300个四位数问题(此类共10题)本类10题中,五题产生数组B,并对B按一定要求排序;
其余五题是求平均值。
我把它们分成两组五题来讨论。
以下为产生数组B之题一:
已知数据文件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,则该数不满足条件忽略。
程序中已定义数组:
a[300],b[300],已定义变量:
cnt
以下是引用片段:
#include
int a[300], b[300], cnt=0 ;
jsvalue()
{/**/
int i,j,g,s,b,q,t;
for(i=0; i < 300; i++)
{g=a%10; /*个位的数字*/
s=a/10%10; /*十位的数字*/
b=a/100%10; /*百位的数字*/
q=a/1000; /*千位的数字*/
if(g-q-b-s>0)
b[cnt++]=a;
for(i=0; i < cnt-1; i++)
for(j=i+1; j < cnt; j++)
if(b < b[j])
{ t=b; b=b[j]; b[j]=t; }
}
/**/
}
相似题求出所有这些四位数是素数的个数cnt,再把所有满足此条件的四位数依次存入数组b中,然后对数组b的四位数按从小到大的顺序进行排序。
以下是引用片段:
jsvalue()
{ int i,j,t;
for(i=0; i < 300; i++)
{ for(j=2;j if(a%j==0) break;
if(j==a)
b[cnt++]=a;
for(i=0; i < cnt-1; i++) /*排序*/
for(j=i+1; j < cnt; j++)
if(b < b[j])
{ t=b; b=b[j]; b[j]=t; }
}
要求:
求出千位数上的数减百位数上的数减十位数上的数减个位数上的数大于零的个数cnt,再把所有满足此条件的四位数依次存入数组b中,然后对数组b的四位数按从小到大的顺序进行排序。
if(q-b-s-g>0)
b[cnt++]=a;
要求:
求出千位数上的数加百位数上的数等于十位数上的数加个位数上的数的个数cnt,再把所有满足此条件的四位数依次存入数组b中,然后对数组b的四位数按从大到小的顺序进行排序。
以下是引用片段:
if((q+b)==(s+g))
b[cnt++]=a;
类型题三:
300个数满足条件的求平均值
求满足条件的数的个数、平均值及不满足条件的数的平均 值等,此类也是五题。
本处仅给出一个全题,其余题只给出不同 之处。
已知数据文件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。
程序中已定义数组:
a[300], 已定义变量:
cnt,pjz1,pjz2
int a[300], cnt=0 ;
double pjz1=0.0, pjz2=0.0 ;
jsvalue()
{/**/
int i,g,s,b,q;
for(i=0; i < 300; i++)
{g=a_; /*个位的数字*/
s=a/10_; /*十位的数字*/
b=a/100_; /*百位的数字*/
q=a/1000; /*千位的数字*/
if(g-q-b-s>0)
{ cnt++; pjz1+=a; }
else pjz2+=a;
if(cnt) pjz1/=cnt;
if(cnt<300) pjz2/=300-cnt;
/**/
}
之二要求:
求出千位数上的数加百位数上的数等于十位数上的数加个位数上的数的个数cnt,再求出所有满足此条件的四位数平均值pjz1,以及所有不满足此条件的四位数平均值pjz2。
if((q+b)==(g+s))
{cnt++;pjz1+=a;}
elsepjz2+=a;
之三要求:
求出个位数上的数减千位数上的数减百位数上的数减十位数上的数小于零的个数cnt,再求出所有满足此条件的四位数平均值pjz1,以及所有不满足此条件的四位数平均值pjz2。
if(g-q-b-s<0)
{ cnt++; pjz1+=a; }
else pjz2+=a;
之四 要求:
求出所有这些四位数是素数的个数cnt, 再求出所有满足 此条件的四位数平均z值pjz1, 以及所有不满足此条件的四位数平 均值pjz2。
以下是引用片段:
jsvalue()
{/**/
int i,j,t;
for(i=0; i < 300; i++)
{ for(j=2;j if(a%j==0)
{pjz2+=a;
break;}
if(j==a)
{cnt++; pjz1+=a;}
if(cnt) pjz1/=cnt;
if(cnt<300) pjz2/=300-cnt;
}
之五要求:
求出千位数上的数加个位数上的数等于百位数上的数加十位数上的数的个数cnt,再求出所有满足此条件的四位数平均值pjz1,以及所有不满足此条件的四位数平均值pjz2。
以下是引用片段:
if((q+g)==(b+s))
{ cnt++; pjz1+=a; }
else pjz2+=a;
code:
/*
类型题四:
200个四位数题:
已知数据文件IN.DAT中存有200个四位数,并已调用读函数readDat()把这些数存入数组a中,请考生编制一函数jsVal(),其功能是:
把千位数字和十位数字重新组成一个新的十位数ab(新
十位数的十位数字是原四位数的千位数字,新十位数的个位数字是原四位数的十位数字),以及把个位数字和百位数字组成另一个新的十位数cd(新十位数的十位数字是原四位数的个位数字,新十位数的个位数字是原四位数的百位数字),如果新组成的两个十位数ab>cd,ab必须是偶数且能被5整除,cd必须是奇数,同时两个新数的十位数字均不为零,则将满足此条件的四位数按从大到小的顺序存入数组b中,并要计算满足上述条件的四位数的个数cnt。
程序中已定义数组:
a[200],b[200],已定义变量:
cnt
以下是引用片段:
#include
#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_; C=a_; D=a/100_;
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;}
}
/**/
}
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。
类型题五
已知在文件IN.DAT中存有若干个(个数<200)四位数字的正整数,函数ReadDat()读取这若干个正整数并存入数组xx中。
请编制函数Calvalue(),其功能要求:
1.求出这文件中共有多少个正整数totNum;2.求这些数右移1位后,产生的新数是奇数的数的个数totCnt,以及满足此条件的这些数(右移前的值)的算术平均值totPjz。
最后main()函数调用函数WriteDat()把所求的结果输出到文件OUT.DAT中。
以下是引用片段:
#define MAXNUM 200
int xx[MAXNUM] ;
int totNum = 0 ; /* 文件IN.DAT中共有多少个正整数 */
int totCnt = 0 ; /* 符合条件的正整数的个数 */
double totPjz = 0.0 ; /* 平均值 */
void Calvalue(void)
{/**/
for(; xx[totNum]; totNum++)
if((xx[totNum]>>1)%2)
{ totCnt++; totPjz+=xx[totNum];}
if(totCnt) totPjz/=totCnt;
/**/
}
类似题一、编制函数Calvalue(),其功能要求:
1.求出这文件中共有多少个正整数totNum;2.求这些数右移1位后,产生的新数是偶数的数的个数totCnt,以及满足此条件的这些数(右移前的值)的算术平均值totPjz。
以下是引用片段:
void Calvalue(void)
{/**/
for(; xx[totNum]>0; totNum++)
if((xx[totNum]>>1)%2==0)
{ totCnt++; totPjz+=xx[totNum]; }
if(totCnt) totPjz/=totCnt;
/**/
类型题六
函数ReadDat()实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中;请编制函数SortCharD(),其函数的功能是:
以行为单位对字符按从大到小的顺序进行排序,排序后的结果仍按行
重新存入字符串数组xx中。
最后main()函数调用函数WriteDat()把结果xx输出到文件OUT2.DAT中。
例:
原文:
dAe,BfC.
CCbbAA
结果:
fedCBA.,
bbCCAA
以下是引用片段:
char xx[50][80] ;
int maxline = 0 ; /* 文章的总行数 */
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++)
{ for(n=m+1; n < j; n++)
if(xx[m] < xx[n])
{ ch=xx[m]; xx[m]=xx[n]; xx[n]=ch; }
}
}
/**/
}
处理字符串类型题之二
code:
/*请编制函数ConvertCharA(),其函数的功能是:
以行为单位把字符串中的所有小写字母改写成该字母的下一个字母,如果是字母z,则改写成字母a,大写字母和其它字符保持不变。
把已处理的字符串仍按行重新存入字符串数组xx中。
以下是引用片段:
void ConvertCharA(void)
{/**/
int i,j;
for(i=0; i < maxline; i++)
for(j=0; j < strlen(xx); j++)
if(xx[j]=='z') xx[j]='a'; /*如果是z的话,就变为a*/
else if