100個產(chǎn)品銷售記錄排序(此類共10題)
code:
/*
已知在文件IN.DAT中存有100個產(chǎn)品銷售記錄, 每個產(chǎn)品銷售記錄由產(chǎn)品代碼dm(字符型4位), 產(chǎn)品名稱mc(字符型10位), 單價dj(整型), 數(shù)量sl(整型), 金額je(長整型)五部分組成。 其中:金額=單價*數(shù)量計算得出。函數(shù)ReadDat( )讀取這100個銷售記錄并存入結(jié)構(gòu)數(shù)組sell中。請編制函數(shù)SortDat( ), 其功能要求:
按金額從小到大進行排列, 若金額相等, 則按產(chǎn)品代碼從小到大進行排列, 最終排列結(jié)果仍存入結(jié)構(gòu)數(shù)組sell中。最后main( )函數(shù)調(diào)用函數(shù)WriteDat()把結(jié)果輸出到文件OUT1.DAT中。
注意: 部分源程序存放在PROG1.C中。請勿改動主函數(shù)main( )、讀數(shù)據(jù)函數(shù)ReadDat()和輸出數(shù)據(jù)函
數(shù)WriteDat()的內(nèi)容。
*/
#include <stdio.h>
#include <mem.h>
#include <string.h>
#include <conio.h>
#include <stdlib.h>
#define MAX 100
typedef struct {
char dm[5] ; /* 產(chǎn)品代碼 */
char mc[11] ; /* 產(chǎn)品名稱 */
int dj ; /* 單價 */
int sl ; /* 數(shù)量 */
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個產(chǎn)品銷售記錄排序其余9題說明
1) in.dat 內(nèi)容完全相同。
2) 程序也基本雷同,僅排序的要求不一樣。
3) 考生應(yīng)熟悉 strcmp() 函數(shù),否則有的題相當(dāng)不好處理。
之二
排序要求:
按金額從小到大進行排列, 若金額相等, 則按產(chǎn)品代碼從大到小進行排列
相應(yīng)語句:
if(sell[k].je>sell[j].je|| (sell[k].je==sell[j].je) &&
(strcmp(sell[k].dm, sell[j].dm) < 0))
之三
排序要求:
按金額從大到小進行排列, 若金額相等, 則按產(chǎn)品代碼從小到大進行排列
相應(yīng)語句:
if((sell[k].je <
sell[j].je)||(sell[k].je==sell[j].je)&&(strcmp(sell[k].dm,
sell[j].dm)>0))
之四
排序要求:
按金額從大到小進行排列, 若金額相等, 則按產(chǎn)品代碼從大到小進行排列
相應(yīng)語句:
if((sell[k].je <
sell[j].je)||(sell[k].je==sell[j].je)&&(strcmp(sell[k].dm,sell[j].dm)<0))
之五
排序要求:
按產(chǎn)品名稱從小到大進行排列, 若產(chǎn)品名稱相同, 則按金額從小到大進行排列
相應(yīng)語句:
if((strcmp(sell[k].mc,
sell[j].mc)>0)||(strcmp(sell[k].mc,sell[j].mc)==0)&&(sell[k].je>sell[j].je))
之六
排序要求:
按產(chǎn)品名稱從小到大進行排列, 若產(chǎn)品名稱相同, 則按金額從大到小進行排列
相應(yīng)語句:
if(strcmp(sell[i].mc, sell[j].mc)>0 || (strcmp(sell[i].mc,
sell[j].mc)==0)&&(sell[i].je < sell[j].je))
之七
排序要求:
按產(chǎn)品名稱從大到小進行排列, 若產(chǎn)品名稱相同, 則按金額從小到大進行排列
相應(yīng)語句:
if((strcmp(sell[k].mc, sell[j].mc) < 0) ||
(strcmp(sell[k].mc,sell[j].mc)==0)&&(sell[k].je>sell[j].je))
之八
排序要求:
按產(chǎn)品名稱從大到小進行排列, 若產(chǎn)品名稱相同, 則按金額從大到小進行排列
相應(yīng)語句:
if((strcmp(sell[k].mc, sell[j].mc) < 0)|| (strcmp(sell[k].mc,
sell[j].mc)==0)&&(sell[k].je < sell[j].je))
之九
排序要求:
按產(chǎn)品代碼從小到大進行排列, 若產(chǎn)品代碼相同, 則按金額從小到大進行排列
相應(yīng)語句:
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個產(chǎn)品銷售記錄, 每個產(chǎn)品銷售記錄由產(chǎn)品代碼dm(字符型4位), 產(chǎn)品名稱mc(字符型10位), 單價dj(整型), 數(shù)量sl(整型), 金額je(長整型)五部分組成。 其中:金額=單價*數(shù)量計算得出。函數(shù)ReadDat( )讀取這100個銷售記錄并存入結(jié)構(gòu)數(shù)組sell中。請編制函數(shù)SortDat( ), 其功能要求:
按產(chǎn)品代碼從大到小進行排列, 若產(chǎn)品代碼相同, 則按金額從大到小進行排列, 最終排列結(jié)果仍存入結(jié)構(gòu)數(shù)組sell中。最后main()函數(shù)調(diào)用函數(shù)WriteDat()把結(jié)果輸出到文件OUT10.DAT中。
注意: 部分源程序存放在PROG1.C中。
請勿改動主函數(shù)main( )、讀數(shù)據(jù)函數(shù)ReadDat()和輸出數(shù)據(jù)函數(shù)WriteDat()的內(nèi)容。
*/
#include <stdio.h>
#include <mem.h>
#include <string.h>
#include <conio.h>
#include <stdlib.h>
#define MAX 100
typedef struct {
char dm[5] ; /* 產(chǎn)品代碼 */
char mc[11] ; /* 產(chǎn)品名稱 */
int dj ; /* 單價 */
int sl ; /* 數(shù)量 */
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個四位數(shù)問題(此類共10題)
本類10題中,五題產(chǎn)生數(shù)組B,并對B按一定要求排序;其余五題是求平均值。我把它們分成兩組五題來討論。
以下為產(chǎn)生數(shù)組B之題一:
code:
/*
已知數(shù)據(jù)文件IN.DAT中存有300個四位數(shù), 并已調(diào)用讀函數(shù)readDat()把這些數(shù)存入數(shù)組a中, 請編制一函數(shù)jsvalue(),其功能是: 求出個位數(shù)上的數(shù)減千位數(shù)上的數(shù)減百位數(shù)上的數(shù)減十位數(shù)上的數(shù)大于零的個數(shù)cnt, 再把所有滿足此條件的四位數(shù)依次存入數(shù)組b中, 然后對數(shù)組b的四位數(shù)按從大到小的順序進行排序。最后main( )函數(shù)調(diào)用寫函數(shù)writeDat()把數(shù)組b中的數(shù)輸出到文件OUT.DAT。
例如: 1239, 9-1-2-3>0, 則該數(shù)滿足條件存入數(shù)組b中, 且個數(shù)cnt=cnt+1。
8129, 9-8-1-2<0, 則該數(shù)不滿足條件忽略。
注意: 部分源程序存在文件PROG1.C文件中。
程序中已定義數(shù)組: a[300], b[300], 已定義變量: cnt請勿改動數(shù)據(jù)文件IN.DAT中的任何數(shù)據(jù)、主函數(shù)main()、讀函數(shù)readDat()和寫函數(shù)writeDat()的內(nèi)容。
*/
#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) ;
}
要求:
求出所有這些四位數(shù)是素數(shù)的個數(shù)cnt, 再把所有滿足此條件的四位數(shù)依次存入數(shù)組b中, 然后對數(shù)組b的四位數(shù)按從小到大的順序進行排序。
out.dat 文件內(nèi)容應(yīng)當(dāng)為:
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
之四
要求:
求出千位數(shù)上的數(shù)減百位數(shù)上的數(shù)減十位數(shù)上的數(shù)減個位數(shù)上的數(shù)大于零的個數(shù)cnt, 再把所有滿足此條件的四位數(shù)依次存入數(shù)組b中, 然后對數(shù)組b的四位數(shù)按從小到大的順序進行排序。
out.dat 文件內(nèi)容應(yīng)當(dāng)為:
20
4002
4102
5111
5400
6014
6302
7050
7105
7113
8101
8130
8203
8221
8303
8700
9013
9016
9052
9053
9800
之五
要求:
求出千位數(shù)上的數(shù)加百位數(shù)上的數(shù)等于十位數(shù)上的數(shù)加個位數(shù)上的數(shù)的個數(shù)cnt, 再把所有滿足此條件的四位數(shù)依次存入數(shù)組b中, 然后對數(shù)組b的四位數(shù)按從大到小的順序進行排序。
out.dat 文件內(nèi)容應(yīng)當(dāng)為:
22
7795
7429
7328
7153
6978
6767
6556
6226
5591
5555
5427
4509
4013
3672
3663
3205
3131
2855
2763
2543
2507
1625
求滿足條件的數(shù)的個數(shù)、平均值……
求滿足條件的數(shù)的個數(shù)、平均值及不滿足條件的數(shù)的平均值等,此類也是五題。本處僅給出一個全題,其余題只給出不同之處。
code:
/*
已知數(shù)據(jù)文件IN.DAT中存有300個四位數(shù), 并已調(diào)用讀函數(shù)readDat()把這些數(shù)存入數(shù)組a中, 請編制一函數(shù)jsvalue(),其功能是: 求出千位數(shù)上的數(shù)減百位數(shù)上的數(shù)減十位數(shù)上的數(shù)減個位數(shù)上的數(shù)大于零的個數(shù)cnt, 再求出所有滿足此條件的四位數(shù)平均值pjz1, 以及所有不滿足此條件的四位數(shù)平均值pjz2。最后main()函數(shù)調(diào)用寫函數(shù)writeDat()把結(jié)果cnt,pjz1,pjz2輸出到OUT.DAT文件。
例如: 9123, 9-1-2-3>0, 則該數(shù)滿足條件計算平均值pjz1,且個數(shù)cnt=cnt+1。
9812, 9-8-1-2<0, 則該數(shù)不滿足條件計算平均值pjz2。
注意: 部分源程序存在文件PROG1.C文件中。
程序中已定義數(shù)組: a[300], 已定義變量: cnt,pjz1,pjz2請勿改動數(shù)據(jù)文件IN.DAT中的任何數(shù)據(jù)、主函數(shù)main()、讀函數(shù)readDat()和寫函數(shù)writeDat()的內(nèi)容。
*/
#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 內(nèi)容應(yīng)當(dāng)如下:
20
7389.55
5524.03
滿足條件數(shù)的平均數(shù)……四題之說明
之二
要求:
求出千位數(shù)上的數(shù)加百位數(shù)上的數(shù)等于十位數(shù)上的數(shù)加個位數(shù)上的數(shù)的個數(shù)cnt, 再求出所有滿足此條件的四位數(shù)平均值pjz1, 以及所有不滿足此條件的四位數(shù)平均值pjz2。
正確程序生成的 out.dat 文件內(nèi)容應(yīng)當(dāng)如下:
22
4876.86
5709.46
之三
要求:
求出個位數(shù)上的數(shù)減千位數(shù)上的數(shù)減百位數(shù)上的數(shù)減十位數(shù)上的數(shù)大于零的個數(shù)cnt, 再求出所有滿足此條件的四位數(shù)平均值pjz1, 以及所有不滿足此條件的四位數(shù)平均值pjz2。
正確程序生成的 out.dat 文件內(nèi)容應(yīng)當(dāng)如下:
12
2926.08
5761.83
之四
要求:
求出所有這些四位數(shù)是素數(shù)的個數(shù)cnt, 再求出所有滿足此條件的四位數(shù)平均值pjz1, 以及所有不滿足此條件的四位數(shù)平均值pjz2。
正確程序生成的 out.dat 文件內(nèi)容應(yīng)當(dāng)如下:
30
5782.87
5633.46
之五
要求:
求出千位數(shù)上的數(shù)加個位數(shù)上的數(shù)等于百位數(shù)上的數(shù)加十位數(shù)上的數(shù)的個數(shù)cnt, 再求出所有滿足此條件的四位數(shù)平均值pjz1, 以及所有不滿足此條件的四位數(shù)平均值pjz2。
正確程序生成的 out.dat 文件內(nèi)容應(yīng)當(dāng)如下:
18
6681.22
5582.48
200個四位數(shù)(此類共10題)
此部分題與300個數(shù)的題有相似之處。
之一
code:
/*
已知數(shù)據(jù)文件IN.DAT中存有200個四位數(shù), 并已調(diào)用讀函數(shù)readDat()把這些數(shù)存入數(shù)組a中,請考生編制一函數(shù)jsVal(),其功能是: 把千位數(shù)字和十位數(shù)字重新組成一個新的十位數(shù)ab(新十位數(shù)的十位數(shù)字是原四位數(shù)的千位數(shù)字,新十位數(shù)的個位數(shù)字是原四位數(shù)的十位數(shù)字), 以及把個位數(shù)字和百位數(shù)字組成另一個新的十位數(shù)cd (新十位數(shù)的十位數(shù)字是原四位數(shù)的個位數(shù)字,新十位數(shù)的個位數(shù)字是原四位數(shù)的百位數(shù)字), 如果新組成的兩個十位數(shù)ab>cd, ab必須是偶數(shù)且能被5整除, cd必須是奇數(shù),同時兩個新數(shù)的十位數(shù)字均不為零,則將滿足此條件的四位數(shù)按從大到小的順序存入數(shù)組b中, 并要計算滿足上述條件的四位數(shù)的個數(shù)cnt。最后main()函數(shù)調(diào)用寫函數(shù)writeDat( )把結(jié)果cnt以及數(shù)組b中符合條件的四位數(shù)輸出到OUT.DAT文件中。
注意: 部分源程序存在文件PROG1.C文件中。
程序中已定義數(shù)組: a[200], b[200], 已定義變量: cnt請勿改動數(shù)據(jù)文件IN.DAT中的任何數(shù)據(jù)、主函數(shù)main()、讀函數(shù)readDat()和寫函數(shù)writeDat()的內(nèi)容。
*/
#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("滿足條件的數(shù)=%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個四位數(shù)題之其余九題說明
之二
要求:
把千位數(shù)字和十位數(shù)字重新組成一個新的十位數(shù)(新十位數(shù)的十位數(shù)字是原四位數(shù)的千位數(shù)字,新十位數(shù)的個位數(shù)字是原四位數(shù)的十位數(shù)字), 以及把個位數(shù)字和百位數(shù)字組成另一個新的十位數(shù)(新十位數(shù)的十位數(shù)字是原四位數(shù)的個位數(shù)字, 新十位數(shù)的個位數(shù)字是原四位數(shù)的百位數(shù)字), 如果新組成的兩個十位數(shù)均是素數(shù)且新數(shù)的十位數(shù)字均不為零,則將滿足此條件的四位數(shù)按從大到小的順序存入數(shù)組b中, 并要計算滿足上述條件的四位數(shù)的個數(shù)cnt。
out.dat 的內(nèi)容應(yīng)當(dāng)為:
10
9971
8398
7711
6375
4719
4173
2736
2398
2397
1997
之三
要求:
把個位數(shù)字和千位數(shù)字重新組成一個新的十位數(shù)(新十位數(shù)的十位數(shù)字是原四位數(shù)的個位數(shù)字,新十位數(shù)的個位數(shù)字是原四位數(shù)的千位數(shù)字), 以及把百位數(shù)字和十位數(shù)字組成另一個新的十位數(shù)(新十位數(shù)的十位數(shù)字是原四位數(shù)的百位數(shù)字, 新十位數(shù)的個位數(shù)字是原四位數(shù)的十位數(shù)字), 如果新組成的兩個十位數(shù)必須是一個奇數(shù),另一個為偶數(shù)并且兩個十位數(shù)中至少有一個數(shù)能被17整除,同時兩個新數(shù)的十位數(shù)字均不為零, 則將滿足此條件的四位數(shù)按從大到小的順序存入數(shù)組b中, 并要計算滿足上述條件的四位數(shù)的個數(shù)cnt。
out.dat 的內(nèi)容應(yīng)當(dāng)為:
7
8656
8174
7781
7683
4313
4173
2513
之四
要求:
)把這些數(shù)存入數(shù)組a中,請考生編制一函數(shù)jsVal(),其功能是: 把千位數(shù)字和十位數(shù)字重新組成一個新的十位數(shù)ab(新十位數(shù)的十位數(shù)字是原四位數(shù)的千位數(shù)字,新十位數(shù)的個位數(shù)字是原四位數(shù)的十位數(shù)字), 以及把個位數(shù)字和百位數(shù)字組成另一個新的十位數(shù)cd (新十位數(shù)的十位數(shù)字是原四位數(shù)的個位數(shù)字,新十位數(shù)的個位數(shù)字是原四位數(shù)的百位數(shù)字), 如果新組成的兩個十位數(shù)ab-cd>=10且ab-cd<=20且兩個數(shù)均是偶數(shù),同時兩個新數(shù)的十位數(shù)字均不為零,則將滿足此條件的四位數(shù)按從大到小的順序存入數(shù)組b中, 并要計算滿足上述條件的四位數(shù)的個數(shù)cnt。
out.dat 的內(nèi)容應(yīng)當(dāng)為:
5
9068
5224
5024
3821
2281
之五
要求:
如果四位數(shù)各位上的數(shù)字均是0或2或4或6或8, 則統(tǒng)計出滿足此條件的個數(shù)cnt, 并把這些四位數(shù)按從大到小的順序存入數(shù)組b中。
out.dat 的內(nèi)容應(yīng)當(dāng)為:
11
8448
6820
4488
4060
2888
2884
2686
2624
2484
2420
2042
之六
要求:
把千位數(shù)字和個位數(shù)字重新組成一個新的十位數(shù)(新十位數(shù)的十位數(shù)字是原四位數(shù)的千位數(shù)字,新十位數(shù)的個位數(shù)字是原四位數(shù)的個位數(shù)字), 以及把百位數(shù)字和十位數(shù)字組成另一個新的十位數(shù)(新十位數(shù)的十位數(shù)字是原四位數(shù)的百位數(shù)字, 新十位數(shù)的個位數(shù)字是原四位數(shù)的十位數(shù)字), 如果新組成的兩個十位數(shù)均是奇數(shù)并且兩個十位數(shù)中至少有一個數(shù)能被5整除, 同時兩個新數(shù)的十位數(shù)字均不為零,則將滿足此條件的四位數(shù)按從大到小的順序存入數(shù)組b中, 并要計算滿足上述條件的四位數(shù)的個數(shù)cnt。
out.dat 的內(nèi)容應(yīng)當(dāng)為:
10
9851
8275
6375
5755
5359
4951
4595
4395
3575
3135
之七
要求:
把個位數(shù)字和千位數(shù)字重新組成一個新的十位數(shù)(新十位數(shù)的十位數(shù)字是原四位數(shù)的個位數(shù)字,新十位數(shù)的個位數(shù)字是原四位數(shù)的千位數(shù)字), 以及把百位數(shù)字和十位數(shù)字組成另一個新的十位數(shù)(新十位數(shù)的十位數(shù)字是原四位數(shù)的百位數(shù)字, 新十位數(shù)的個位數(shù)字是原四位數(shù)的十位數(shù)字), 如果新組成的兩個十位數(shù)均是偶數(shù)并且兩個十位數(shù)中至少有一個數(shù)能被9整除, 同時兩個新數(shù)的十位數(shù)字均不為零,則將滿足此條件的四位數(shù)按從大到小的順序存入數(shù)組b中, 并要計算滿足上述條件的四位數(shù)的個數(shù)cnt。
out.dat 的內(nèi)容應(yīng)當(dāng)為:
13
8761
8724
8441
6722
6603
6545
6323
6181
4369
4285
4125
2724
2362
之八
要求:
把千位數(shù)字和十位數(shù)字重新組成一個新的十位數(shù)ab(新十位數(shù)的十位數(shù)字是原四位數(shù)的千位數(shù)字,新十位數(shù)的個位數(shù)字是原四位數(shù)的十位數(shù)字), 以及把個位數(shù)字和百位數(shù)字組成另一個新的十位數(shù)cd (新十位數(shù)的十位數(shù)字是原四位數(shù)的個位數(shù)字,新十位數(shù)的個位數(shù)字是原四位數(shù)的百位數(shù)字), 如果新組成的兩個十位數(shù)ab 同時兩個新數(shù)的十位數(shù)字均不為零,則將滿足此條件的四位數(shù)按從大到小的順序存入數(shù)組b中, 并要計算滿足上述條件的四位數(shù)的個數(shù)cnt。
out.dat 的內(nèi)容應(yīng)當(dāng)為:
12
7878
5437
3897
2893
2877
2438
2039
2035
2033
1619
1494
1493
之九
要求:
如果四位數(shù)各位上的數(shù)字均是奇數(shù),則統(tǒng)計出滿足此條件的個數(shù)cnt并把這些四位數(shù)按從大到小的順序存入數(shù)組b中。
out.dat 的內(nèi)容應(yīng)當(dāng)為:
13
9971
7973
7711
7511
5755
5359
5311
3575
3537
3135
1997
1979
1531
之十
要求:
把千位數(shù)字和十位數(shù)字重新組成一個新的十位數(shù)ab(新十位數(shù)的十位數(shù)字是原四位數(shù)的千位數(shù)字,新十位數(shù)的個位數(shù)字是原四位數(shù)的十位數(shù)字), 以及把個位數(shù)字和百位數(shù)字組成另一個新的十位數(shù)cd (新十位數(shù)的十位數(shù)字是原四位數(shù)的個位數(shù)字,新十位數(shù)的個位數(shù)字是原四位數(shù)的百位數(shù)字), 如果新組成的兩個十位數(shù)ab-cd>=0且ab-cd<=10且兩個數(shù)均是奇數(shù), 同時兩個新數(shù)的十位數(shù)字均不為零,則將滿足此條件的四位數(shù)按從大到小的順序存入數(shù)組b中, 并要計算滿足上述條件的四位數(shù)的個數(shù)cnt。
out.dat 的內(nèi)容應(yīng)當(dāng)為:
5
8398
7996
5954
4313
2311
小于200個四位數(shù)之一(共四題)
code:
/*
已知在文件IN.DAT中存有若干個(個數(shù)<200)四位數(shù)字的正整數(shù), 函數(shù)ReadDat( )讀取這若干個正整數(shù)并存入數(shù)組xx中。請編制函數(shù)Calvalue( ), 其功能要求: 1. 求出這文件中共有多少個正整數(shù)totNum; 2.求出這些數(shù)中的各位數(shù)字之和是奇數(shù)的數(shù)的個數(shù)totCnt, 以及滿足此條件的這些數(shù)的算術(shù)平均值totPjz。最后main( )函數(shù)調(diào)用函數(shù)WriteDat()把所求的結(jié)果輸出到OUT.DAT文件中。
注意: 部分源程序存放在PROG1.C中。
請勿改動數(shù)據(jù)文件IN.DAT中的任何數(shù)據(jù),主函數(shù)main()、讀數(shù)據(jù)函數(shù)ReadDat()和輸出數(shù)據(jù)函數(shù)WriteDat()的內(nèi)容。
*/
#include <stdio.h>
#include <conio.h>
#define MAXNUM 200
int xx[MAXNUM] ;
int totNum = 0 ; /* 文件IN.DAT中共有多少個正整數(shù) */
int totCnt = 0 ; /* 符合條件的正整數(shù)的個數(shù) */
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[i] = 0 ;
if(ReadDat()) {
printf("數(shù)據(jù)文件IN.DAT不能打開!\007\n") ;
return ;
}
Calvalue() ;
printf("文件IN.DAT中共有正整數(shù)=%d個\n", totNum) ;
printf("符合條件的正整數(shù)的個數(shù)=%d個\n", totCnt) ;
printf("平均值=%.2lf\n", 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\n%d\n%.2lf\n", totNum, totCnt, totPjz) ;
fclose(fp) ;
}
in.dat 文件內(nèi)容如下:
6045,6192,1885,3580,8544,6826,5493,8415,3132,5841,
6561,3173,9157,2895,2851,6082,5510,9610,5398,5273,
3438,1800,6364,6892,9591,3120,8813,2106,5505,1085,
5835,7295,6131,9405,6756,2413,6274,9262,5728,2650,
6266,5285,7703,1353,1510,2350,4325,4392,7573,8204,
7358,6365,3135,9903,3055,3219,3955,7313,6206,1631,
5869,5893,4569,1251,2542,5740,2073,9805,1189,7550,
4362,6214,5680,8753,8443,3636,4495,9643,3782,5556,
1018,9729,8588,2797,4321,4714,9658,8997,2080,5912,
9968,5558,9311,7047,6138,7618,5448,1466,7075,2166,
4025,3572,9605,1291,6027,2358,1911,2747,7068,1716,
9661,5849,3210,2554,8604,8010,7947,3685,2945,4224,
7014,9058,6259,9503,1615,1060,7787,8983,3822,2471,
5146,7066,1029,1777,7788,2941,3538,2912,3096,7421,
9175,6099,2930,4685,8465,8633,2628,7155,4307,9535,
4274,2857,6829,6226,8268,9377,9415,9059,4872,6072,
out.dat 文件內(nèi)容應(yīng)當(dāng)如下:
160
69
5460.51
小于200個四位數(shù)之二(共四題)
code:
/*
已知在文件IN.DAT中存有若干個(個數(shù)<200)四位數(shù)字的正整數(shù), 函數(shù)ReadDat( )讀取這若干個正整數(shù)并存入數(shù)組xx中。請編制函數(shù)Calvalue( ), 其功能要求: 1. 求出這文件中共有多少個正整數(shù)totNum; 2.求出這些數(shù)中的各位數(shù)字之和是偶數(shù)的數(shù)的個數(shù)totCnt, 以及滿足此條件的這些數(shù)的算術(shù)平均值totPjz。最后main( )函數(shù)調(diào)用函數(shù)WriteDat()把所求的結(jié)果輸出到OUT.DAT文件中。
注意: 部分源程序存放在PROG1.C中。
請勿改動數(shù)據(jù)文件IN.DAT中的任何數(shù)據(jù),主函數(shù)main()、讀數(shù)據(jù)函數(shù)ReadDat()和輸出數(shù)據(jù)函數(shù)WriteDat()的內(nèi)容。
*/
#include
#include
#define MAXNUM 200
int xx[MAXNUM] ;
int totNum = 0 ; /* 文件IN.DAT中共有多少個正整數(shù) */
int totCnt = 0 ; /* 符合條件的正整數(shù)的個數(shù) */
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[i] = 0 ;
if(ReadDat()) {
printf("數(shù)據(jù)文件IN.DAT不能打開!\007\n") ;
return ;
}
Calvalue() ;
printf("文件IN.DAT中共有正整數(shù)=%d個\n", totNum) ;
printf("符合條件的正整數(shù)的個數(shù)=%d個\n", totCnt) ;
printf("平均值=%.2lf\n", 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\n%d\n%.2lf\n", totNum, totCnt, totPjz) ;
fclose(fp) ;
}
out.dat 文件內(nèi)容應(yīng)當(dāng)如下:
160
91
5517.16
200個四位數(shù)之三(共四題)
code:
/*
已知在文件IN.DAT中存有若干個(個數(shù)<200)四位數(shù)字的正整數(shù), 函數(shù)ReadDat( )讀取這若干個正整數(shù)并存入數(shù)組xx中。請編制函數(shù)Calvalue( ), 其功能要求: 1. 求出這文件中共有多少個正整數(shù)totNum; 2. 求這些數(shù)右移1位后, 產(chǎn)生的新數(shù)是奇數(shù)的數(shù)的個數(shù)totCnt, 以及滿足此條件的這些數(shù)(右移前的值)的算術(shù)平均值totPjz。最后main()函數(shù)調(diào)用函數(shù)WriteDat()把所求的結(jié)果輸出到文件OUT.DAT中。
注意: 部分源程序存放在PROG1.C中。
請勿改動數(shù)據(jù)文件IN.DAT中的任何數(shù)據(jù),主函數(shù)main()、讀數(shù)據(jù)函數(shù)ReadDat()和輸出數(shù)據(jù)函數(shù)WriteDat()的內(nèi)容。
*/
#include
#include
#define MAXNUM 200
int xx[MAXNUM] ;
int totNum = 0 ; /* 文件IN.DAT中共有多少個正整數(shù) */
int totCnt = 0 ; /* 符合條件的正整數(shù)的個數(shù) */
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[i] = 0 ;
if(ReadDat()) {
printf("數(shù)據(jù)文件IN.DAT不能打開!\007\n") ;
return ;
}
Calvalue() ;
printf("文件IN.DAT中共有正整數(shù)=%d個\n", totNum) ;
printf("符合條件的正整數(shù)的個數(shù)=%d個\n", totCnt) ;
printf("平均值=%.2lf\n", 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\n%d\n%.2lf\n", totNum, totCnt, totPjz) ;
fclose(fp) ;
}
out.dat 文件內(nèi)容應(yīng)當(dāng)如下:
160
80
5537.54
小于200個四位數(shù)之四(共四題)
code:
/*
已知在文件IN.DAT中存有若干個(個數(shù)<200)四位數(shù)字的正整數(shù), 函數(shù)ReadDat( )讀取這若干個正整數(shù)并存入數(shù)組xx中。請編制函數(shù)Calvalue( ), 其功能要求: 1. 求出這文件中共有多少個正整數(shù)totNum; 2. 求這些數(shù)右移1位后, 產(chǎn)生的新數(shù)是偶數(shù)的數(shù)的個數(shù)totCnt, 以及滿足此條件的這些數(shù)(右移前的值)的算術(shù)平均值totPjz。最后main()函數(shù)調(diào)用函數(shù)WriteDat()把所求的結(jié)果輸出到文件OUT.DAT中。
注意: 部分源程序存放在PROG1.C中。
請勿改動數(shù)據(jù)文件IN.DAT中的任何數(shù)據(jù),主函數(shù)main()、讀數(shù)據(jù)函數(shù)ReadDat()和輸出數(shù)據(jù)函數(shù)WriteDat()的內(nèi)容。
*/
#include
#include
#define MAXNUM 200
int xx[MAXNUM] ;
int totNum = 0 ; /* 文件IN.DAT中共有多少個正整數(shù) */
int totCnt = 0 ; /* 符合條件的正整數(shù)的個數(shù) */
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[i] = 0 ;
if(ReadDat()) {
printf("數(shù)據(jù)文件IN.DAT不能打開!\007\n") ;
return ;
}
Calvalue() ;
printf("文件IN.DAT中共有正整數(shù)=%d個\n", totNum) ;
printf("符合條件的正整數(shù)的個數(shù)=%d個\n", totCnt) ;
printf("平均值=%.2lf\n", 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\n%d\n%.2lf\n", totNum, totCnt, totPjz) ;
fclose(fp) ;
}
out.dat 文件內(nèi)容應(yīng)當(dāng)如下:
160
80
5447.93