查看全部128種考試
計(jì)算機(jī)等級(jí)考試
 考試動(dòng)態(tài)  報(bào)考指南  考試大綱  歷年真題  模擬試題  復(fù)習(xí)資料  心得技巧 等考論壇
 二級(jí) | VB  VF  C  C++  JAVA  ACCESS 三級(jí) | 網(wǎng)絡(luò)  數(shù)據(jù)庫(kù)  信息管理  PC技術(shù) 四級(jí) | 一級(jí)
1
2
3
4
5
6
7
8
9
10
ak47  
【字體: 計(jì)算機(jī)等級(jí)考試三級(jí)編程解析
計(jì)算機(jī)等級(jí)考試三級(jí)編程解析
djks.exam8.com 來(lái)源:考試吧Exam8.com) 更新:2005-3-24 11:46:00 計(jì)算機(jī)等級(jí)考試 考試論壇

一、替換字符
 函數(shù)ReadDat()實(shí)現(xiàn)從文件ENG.IN中讀取一篇英文文章,存入到字符串?dāng)?shù)組xx中;請(qǐng)編制函數(shù)encryptChar(),按給定的替代關(guān)系對(duì)數(shù)組xx中的所有字符進(jìn)行替代,仍存入數(shù)組xx的對(duì)應(yīng)的位置上,最后調(diào)用函數(shù)WriteDat()把結(jié)果xx輸出到文件PS10.DAT中。
  替代關(guān)系:f(p)=p*11 mod 256 (p是數(shù)組中某一個(gè)字符的ASCII值,f(p)是計(jì)算后新字符的ASCII值),如果原字符的ASCII值是偶數(shù)或計(jì)算后f(p)值小于等于32,則該字符不變,否則將f(p)所對(duì)應(yīng)的字符進(jìn)行替代。
  部分源程序已給出,原始數(shù)據(jù)文件存放的格式是:每行的寬度均小于80個(gè)字符。
  請(qǐng)勿改動(dòng)主函數(shù)main()、讀數(shù)據(jù)函數(shù)ReadDat()和輸出數(shù)據(jù)函數(shù)WriteDat()的內(nèi)容。
#include
#include
#include
#include
 

unsigned char xx[50][80];
int maxline=0;/*文章的總行數(shù)*/

int ReadDat(void)
void WriteDat(void)

void encryptChar()
{

}

void main()
{
clrscr();
if(ReadDat()){
printf("數(shù)據(jù)文件ENG.IN不能打開!\n\007");
return;
}
encryptChar();
WriteDat();
}

int ReadDat(void)
{
FILE *fp;
int i=0;
unsigned char *p;

if((fp=fopen("eng.in","r"))==NULL) return 1;
while(fgets(xx[i],80,fp)!=NULL){
p=strchr(xx[i],'\n');
if(p)*p=0;
i++;
}
maxline=i;
fclose(fp);
return 0;
}

void WriteDat(void)
{
FILE *fp;
int i;
fp=fopen("ps10.dat","w");
for(i=0;iprintf("%s\n",xx[i]);
fprintf(fp,"%s\n",xx[i]);
}
fclose(fp);
}
--------------------------------------------------------------------------------
注:在ReadDat()函數(shù)中由于fgets()函數(shù)讀入數(shù)據(jù)時(shí)沒(méi)有讀入字符串結(jié)束符'\0',因
而用while()循環(huán)在xx數(shù)組每一行未尾將換行符'\n'替換成結(jié)束符'\0'。
編寫的函數(shù)如下:該函數(shù)的基本算法是——讓字符指針pf指向每一行的開頭然后逐一往
后移動(dòng),在移動(dòng)過(guò)程中按要求進(jìn)行轉(zhuǎn)換。*pf%2==0用于判斷是否為偶數(shù)。if()條件語(yǔ)
句用于控制不替代字符。
 解法1:
void encryptChar()
{
int i;
char *pf;
for(i=0;i{pf=xx[i]; /*每行字符個(gè)數(shù)*/
while(*pf!=0)
{if(*pf%2==0||*pf*11%256<32)
{pf++;continue;}
*pf=*pf*11%256;
pf++;
}
}
}
解法2:
void encryptChar()
{
int i,j,t;
for(i=0;i{
for(j=0;j{
t=xx[i][j]*11%256;
if(t<=32 || xx[i][j]%2==0) continue;
xx[i][j]=t;
}
}
}


二、字符串左右排序和比較
函數(shù)ReadDat()實(shí)現(xiàn)從文件in.dat中讀取20行數(shù)據(jù)存放到字符串?dāng)?shù)組xx中(第行字符串長(zhǎng)度均小于80)。請(qǐng)編制函數(shù)jsSort(),其函數(shù)的功能是:以行為單位對(duì)字符串按給定的條件進(jìn)行排序,排序后的結(jié)果仍按行重新存入字符串?dāng)?shù)組xx中,最后調(diào)用函數(shù)WriteDat()把結(jié)果xx輸出到文件out.dat中。
  條件:從字符串中間一分為二,左邊部分按字符的ASCII值升序排序,排序后左邊部分與右邊部分進(jìn)行交換。如果原字符串長(zhǎng)度為奇數(shù),則最中間的字符不參加處理,字符仍放在原位置上。
  例如:位置   0 1 2 3 4 5 6 7 8
     源字符串 d c b a h g f e
4 3 2 1 9 8 7 6 5
則處理后字符串 h g f e a b c d
8 7 6 5 9 1 2 3 4
  部分源程序已給出。
  請(qǐng)勿改動(dòng)主函數(shù)main()、讀函數(shù)ReadDat()和寫函數(shù)WriteDat()的內(nèi)容。
#include
#include
#include

char xx[20][80];

void jsSort()
{

}

void main()
{
readDat();
jsSort();
writeDat();
}

readDat()
{
FILE *in;
int i=0;
char *p;

in=fopen("in.dat","r");
while(i<20&&fgets(xx[i],80,in)!=NULL){
p=strchr(xx[i],'\n');
if(p)*p=0;
i++;
}
fclose(in);
}

writeDat()
{
FILE *out();
int i;
clrscr();
out=fopen("out.dat","w");
for(i=0;i<20;i++){
printf(\"%s\n",xx[i]);
fprintf(out,"%s\n",xx[i]);
}
fclose(out);
}
--------------------------------------------------------------------------------
注:先采用冒泡法對(duì)左邊部分進(jìn)行升序排序,然后將排序后的左半與右半按對(duì)應(yīng)位進(jìn)行
調(diào)換。
void jsSort()
{
int i,strl,half,j,k;
char ch;
for(i=0;i<20;i++) /*行循環(huán)*/
{strl=strlen(xx[i]); /*每行長(zhǎng)度*/
half=strl/2;
for(j=0;jfor(k=j+1;kif(xx[i][j]>xx[i][k])
{ch=xx[i][j]; /*每次將最小數(shù)賦給xx[i][j]*/

xx[i][j]=xx[i][k];

xx[i][k]=ch;
}
for(j=half-1,k=strl-1;j>=0;j--,k--)
{ch=xx[i][j];
xx[i][j]=xx[i][k];
xx[i][k]=ch;
}
}
}
void jsSort()
{
int i,j,k,strl;
char ch;
for(i=0;i<20;i++)
{
strl=strlen(xx[i]);
for(j=0;jfor(k=j+1;kif(xx[i][j]>xx[i][k])
{
ch=xx[i][j];
xx[i][j]=xx[i][k];
xx[i][k]=ch;
}
for(j=0;j{
ch=xx[i][j];
xx[i][j]=xx[i][(strl+1)/2+j];
xx[i][(strl+1)/2+j]=ch;
}
}
}


三.正整數(shù)排序求平均值(包括將數(shù)拆散、求最大最小值)
 已知數(shù)據(jù)文件IN.DAT中存有300個(gè)四位數(shù),并已調(diào)用讀函數(shù)ReadDat()把這些數(shù)存入數(shù)組a中,請(qǐng)編制一函數(shù)jsValue(),其功能是:求出千位數(shù)上的數(shù)加個(gè)位數(shù)等于百位數(shù)上的數(shù)加十位數(shù)上的數(shù)的個(gè)數(shù)cnt,再求出所有滿足此條件的四位數(shù)平均值pjz1,以及不滿足此條件的四位數(shù)平均值pjz2,最后調(diào)用寫函數(shù)把結(jié)果輸出到OUT.DAT文件。
例如:6712,6+2=7+1,則該數(shù)滿足條件計(jì)算平均值pjz1,且個(gè)數(shù)cnt=cnt+1。8129,8+9<>1+2,則該數(shù)不滿足條件計(jì)算平均值pjz2.
部分源程序已給出。
程序中已定義數(shù)組:a[300],已定義變量:cnt,pjz1,pjz2
請(qǐng)勿改動(dòng)主函數(shù)main()、讀函數(shù)ReadDat()和寫函數(shù)writeDat()的內(nèi)容。

#include
int a[300],cnt=0;
double pjz1=0.0,pjz2=0.0;
jsValue()
{

}

main()
{
int i;

readDat();
jsValue();
writeDat();
printf("cnt=%d\n滿足條件的平均值pzj1=%7.21f\n不滿足條件的平均值pjz2=%7.21f\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.21f\n%7.21f\n" ,cnt,pjz1,pjz2);
fclose(fp);
}
--------------------------------------------------------------------------------
注:該題的關(guān)鍵在于會(huì)不會(huì)取出一個(gè)數(shù)的個(gè)、十、百、千位上的數(shù)。a[i]%10對(duì)10求余結(jié)
果為個(gè)位數(shù),a[i]%100/10先對(duì)100求余得出后兩位數(shù)然后再除10,由于為整數(shù)因此得出
上一個(gè)后兩位數(shù)的第一位。依此類推。*/
jsvalue()
{
int i,g,s,b,q,k=0;
for(i=0;i<300;i++)
{g=a[i]%10;
s=a[i]%100/10;
b=a[i]/100%10;
q=a[i]/1000;
if((q+g)==(s+b)) {cnt++;pjz1+=a[i];}
else {k++;pjz2+=a[i];}
}
pjz1/=cnt;
pjz2/=k;
}


四、產(chǎn)品五個(gè)因素的比較排列,是結(jié)構(gòu)體操作問(wèn)題
已知在文件IN.DAT中存有100個(gè)產(chǎn)品銷售記錄,每個(gè)產(chǎn)品銷售記錄由產(chǎn)品代碼dm(字符型4位),產(chǎn)品名稱mc(字符型10位),單價(jià)dj(整型),數(shù)量sl(整型),金額je(長(zhǎng)整型)四部分組成。其中:金額=單價(jià)*數(shù)量計(jì)算得出。函數(shù)ReadDat()是讀取這100個(gè)銷售記錄并存入結(jié)構(gòu)數(shù)組sell中。請(qǐng)編制函數(shù)SortDat(),其功能要求:按產(chǎn)品代碼從大到小進(jìn)行排列,若產(chǎn)品代碼相同,則按金額從大到小進(jìn)行排列,最終排列結(jié)果仍存入結(jié)構(gòu)數(shù)組sell中,最后調(diào)用函數(shù)WriteDat()把結(jié)果輸出到文件OUT8.DAT中。
部分源程序已給出。
  請(qǐng)勿改動(dòng)主函數(shù)main()、讀數(shù)據(jù)函數(shù)ReadDat()和輸出數(shù)據(jù)函數(shù)WriteDat()的內(nèi)容。
#include
#include
#include
#include
#include

#define MAX 100
typedef struct{
char dm[5]; /*產(chǎn)品代碼*/
char mc[11]; /*產(chǎn)品名稱*/
int dj; /*單價(jià)*/
int sl; /*數(shù)量*/
long je; /*金額*/
}PRO;
PRO sell[MAX];
void ReadDat();
void WriteDat();

void SortDat()
{

}

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(void)
{
FILE *fp;
int i;

fp=fopen("OUT8.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);
}
--------------------------------------------------------------------------------
注:
void SortDat()
{
int i,j;
PRO swap;
for(i=0;ifor(j=i+1;j{
if(strcmp(sell[i].mc,sell[j].mc)<0)
{
swap=sell[i];
sell[i]=sell[j];
sell[j]=swap;
}
if(strcmp(sell[i].mc,sell[j].mc)==0&&sell[i].je{
swap=sell[i];
sell[i]=sell[j];
sell[j]=swap;
}
}
}


五、素?cái)?shù)
 下列程序的功能是:將大于整數(shù)m且緊靠m的k個(gè)素?cái)?shù)存入數(shù)組xx。請(qǐng)編寫函數(shù)num(int m,int k,int xx[])實(shí)現(xiàn)程序的要求,最后調(diào)用函數(shù)readwriteDat()把結(jié)果輸出到文件out.dat中。
例如:若輸入17,5,則應(yīng)輸出:19,23,29,31,37。
部分源程序已給出。
請(qǐng)勿改動(dòng)主函數(shù)main()和輸出數(shù)據(jù)函數(shù)writeDat()的內(nèi)容。 #include
#include
void readwriteDAT();

int isP(int m)
{
int i;

for(i=2;iif(m % i==0)return 0;
return 1;
}

void num(int m,int k,int xx[])
{

}

main()
{
int m,n,xx[1000];
clrscr();
printf("\nPlease enter two integers:");
scanf(" %d%d" ,&m,&n);
num(m,n,xx);
for(m=n;mprintf(" %d" ,xx[m]);
printf("\n" );
readwriteDAT();
}

viod readwriteDAT()
{
int m,n,xx[1000], i;
FILE *rf,*wf;


rf=fopen("in.dat" ," r" );
wf=fopen(" out.dat" ," w" );
for(i=0;i<10;i++){
fscanf(rf," %d%d" ,&m,&n);
num(m,n,xx);
for(m=n;mfprintf(wf,"\n" );
}
fclose(rf);
fclose(wf);
}
--------------------------------------------------------------------------------
注:太簡(jiǎn)單。
void num(int m,int k,int xx[])
{
int i,j=0;
i=m+1;
while(j{if(isp(i)) xx[j++]=i;
i++;
}
}


六、數(shù)字排序
 在文件in.dat中有200組數(shù)據(jù),每組有3個(gè)數(shù),每個(gè)數(shù)均是三位數(shù)。函數(shù)ReadDat()讀取這200組數(shù)據(jù)存放到結(jié)構(gòu)數(shù)組aa中,請(qǐng)編制函數(shù)jsSort(),其函數(shù)的功能是:要求在200組數(shù)據(jù)中找出條件為每組中的第一個(gè)數(shù)大于第二個(gè)數(shù)加第三個(gè)數(shù)的之和,其中滿足條件的個(gè)數(shù)作為函數(shù)jsSort() 的返回值,同時(shí)把滿足條件的數(shù)據(jù)存入結(jié)構(gòu)數(shù)組bb中,再對(duì)bb中的數(shù)據(jù)按照每組數(shù)據(jù)的第一個(gè)數(shù)加第三個(gè)之和的大小進(jìn)行升序排列(第一個(gè)數(shù)加第三個(gè)數(shù)的和均不相等),排序后的結(jié)果仍重新存入結(jié)構(gòu)數(shù)組bb中,最后調(diào)用函數(shù)WriteDat()把結(jié)果bb輸出到文件out.dat中。
部分源程序已給出。
  請(qǐng)勿改動(dòng)主函數(shù)main()、讀數(shù)據(jù)函數(shù)ReadDat()和輸出數(shù)據(jù)函數(shù)WriteDat()的內(nèi)容。
#include
#include
#include

typedef struct{
int x1,x2,x3;
}data;

data aa[200],bb[200];

int jsSort()
{

}

void main()
{
int count;

readDat();
count=jsSort(); /*返回滿足條件的個(gè)數(shù)*/
writeDat(count);
}

readDat(int count)
{
FILE *in;
int i;

in=fopen("in.dat","r");
for(i=0; i<200; i++)
fscanf(in,"%d,%d,%d",&aa[i].x1,&aa[i].x2,&aa[i].x3);
fclose(in);
}

writeDat()
{
FILE *out;
int i;

clrscr();
out=fopen("out.dat","w");
for(i=0; i<10; i++){
printf("%d,%d,%d 第一個(gè)數(shù)+第三個(gè)數(shù)=%d\n",bb[i].x1,bb[i].x2,bb[i].x3,bb[i].x1+bb[i].x3); fprintf(out,"%d,%d,%d\n",bb[i].x1,bb[i].x2,bb[i].x3);
}
fclose(out);
}
--------------------------------------------------------------------------------
注:最后排序采用冒泡法。
int jsSort()
{
int i,j,k=0;
DATA swap; /*定義一個(gè)結(jié)構(gòu)體變量,作為交換時(shí)的臨時(shí)存放地*/
for(i=0;i<200;i++)
if(aa[i].x1>(aa[i].x2+aa[i].x3))
bb[k++]=aa[i];
/*先將符合第一個(gè)數(shù)大于第二個(gè)數(shù)加第三個(gè)數(shù)的之和的數(shù)存入bb數(shù)組中*/
for(i=0;ifor(j=i+1;jif((bb[i].x1+bb[i].x3)>(bb[j].x1+bb[j].x3))
{
swap=bb[i];
bb[i]=bb[j];
bb[j]=swap; /*在BB數(shù)組中進(jìn)行排序(從小到大)*/
}
return k;
}


七、其他數(shù)學(xué)計(jì)算
 請(qǐng)編制函數(shù)READDAT()實(shí)現(xiàn)從文件IN.DAT中讀取1000個(gè)十進(jìn)制整數(shù)到數(shù)組XX中;再
編制函數(shù)COMPUTE()分別計(jì)算出XX中奇數(shù)的個(gè)數(shù)ODD,偶數(shù)的個(gè)數(shù)EVEN,平均值`AVER以及方
差TOTFE的值,最后調(diào)用函數(shù)WRITEDAT()把結(jié)果輸出到OUT.DAT文件中.
計(jì)算方差的公式如下:
原始數(shù)據(jù)文件存放的格式是:每行存放10個(gè)數(shù),并用逗號(hào)隔開(每個(gè)數(shù)均大于0且小于等于
2000).
#include
#include
#include
#define MAX 1000

int xx[MAX],odd=0,even=0;
double aver=0.0,totfc=0.0;

void WriteDat(void) ;

int ReadDat(void)
{
FILE *fp ;

if((fp=fopen("in.dat","r"))==NULL) return 1;

fclose(fp) ;
return 0 ;
}

void Compute(void)
{

}

void main()
{
int i ;
for(i=0;ixx[i]=0;
if(ReadDat())
{printf("Can't open the data file in.dat!\007\n") ;
return;
}
Compute();
printf("ODD=%d\nEVEN=%d\nAVER=%lf\nTOTFC=%lf\n", odd,even,aver,t
otfc);
WriteDat();
}

void WriteDat(void)
{
FILE *fp;
int i;

fp=fopen("out.dat", "w") ;
fprintf(fp, "%d\n%d\n%lf\n%lf\n",odd,even,aver,totfc);
fclose(fp) ;
}

/* 注:*/
int ReadDat(void)
{
FILE *fp ;
int i;

if((fp=fopen("in.dat","r"))==NULL) return 1;
for(i=0;i{fscanf(fp,"%d,",&xx[i]);
if(feof(fp)) break;
}
fclose(fp) ;
return 0 ;
}

void Compute(void)
{
int i,yy[1000];
for(i=0;i{aver+=xx[i];
if(xx[i]%2)
odd++;
else
even++;
}
aver/=(odd+even);
for(i=0;itotfc+=(xx[i]-aver)*(xx[i]-aver)/(odd+even);
}


八、數(shù)字或字符移位后的計(jì)算
已知在文件in.dat中存有若干個(gè)(個(gè)數(shù)<200)四位數(shù)字的正整數(shù),函數(shù)readdat
()讀取這若干個(gè)正整數(shù)并存入數(shù)組xx中。請(qǐng)編制函數(shù)calvalue(),其功能要求:1、求出
這文件中共有多少個(gè)正整數(shù)totnum;2、求這些數(shù)右移1位后,產(chǎn)生的新數(shù)是偶數(shù)的數(shù)的
個(gè)數(shù)totcnt,以及滿足此條件的這些數(shù)(右移前的值)的算術(shù)平均值totpjz,最后調(diào)用
函數(shù)writedat()把所求的結(jié)果輸出到文件out.dat中。
部分源程序已給出。
請(qǐng)勿改動(dòng)主函數(shù)main()、讀數(shù)據(jù)函數(shù)readdat()和輸出數(shù)據(jù)函數(shù)writedat()的內(nèi)容。
#include
#include
#define MAXNUM 200
int xx[MAXNUM];
int totnum=0;
int totcnt=0;
double totpjz=0.0;

int readdat(void);
void writedat(void);

void calvalue(void)
{

}

void main()
{
int i;
clrscr();
for(i=0;iif(readdat())
{printf("Can't open the data file in.dat!\007\n");
return;
}
calvalue();
printf("totnum=%d\n",totnum);
printf("totcnt=%d\n",totcnt);
printf("totpjz=%.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);
}

/* 注:本題用if(!xx[i]) break;來(lái)判斷xx[i]是否為0,若是則跳出循環(huán)。亦是較簡(jiǎn)單。*/
void calvalue(void)
{
int i,data;
for(i=0;i{if(!xx[i]) break;
if(xx[i]>0) totnum++;
data=xx[i]>>1;
if(data%2==0)
{totcnt++;
totpjz+=xx[i];
}
}
totpjz/=totcnt;
}


九、學(xué)生成績(jī),結(jié)構(gòu)體問(wèn)題
下列程序的功能是:已知學(xué)生的記錄由學(xué)號(hào)和學(xué)習(xí)成績(jī)構(gòu)成,N名學(xué)生的數(shù)據(jù)已存入
A數(shù)組中。找出成績(jī)最高的學(xué)生記錄(假定最高成績(jī)的記錄中唯一的),通過(guò)形參返回。
請(qǐng)考生編寫函數(shù)MMM(STU A[],STU *S)實(shí)現(xiàn)程序的要求,最后調(diào)用函數(shù)READWRITEDAT
()把結(jié)果輸出到文件OUT.DAT中.
例如: KS01 87
KS09 97
KS11 67
則調(diào)用該函數(shù)后,輸出THE TOP:KS09,97
# include"stdio.h"
# include"string.h"
# define N 10
void readwritedat();

typedef struct ss{
char num[10];
int s;
}STU;

mmm(STU a[],STU *s)
{

}

main()
{
STU a[N]={{"01",81},{"02",89},{"03",66},{&quo
t;04",87},{"05",77},
{"06",90},{"07",79},{"08",61},{"09&qu
ot;,80},{"10",71}},m;
int i;
for(i=0;iprintf("No=%s Mark=%d\n",a[i].num,a[i].s);
mmm(a,&m);
printf("the highest: %s,%d\n",m.num,m.s);
readwritedat();
}

void readwritedat()
{
FILE *rf,*wf;
STU a[N],m;
int i;
rf=fopen("in.dat","r");
wf=fopen("out.dat","w");
for(i=0;i<10;i++)
fscanf(rf,"%s,%d",a[i].num,&a[i].s);
mmm(a,&m);
fprintf(wf,"the top: %s,%d\n",m.num,m.s);
fclose(rf);
fclose(wf);
}

/* 注:較簡(jiǎn)單。*/
mmm(STU a[],STU *s)
{
int i;
s->s=a[0].s;
for(i=1;iif(a[i].s>s->s)
*s=a[i];
}


十、字符串(單詞)的倒置和刪除
函數(shù)READDAT()實(shí)現(xiàn)從文件IN.DAT中讀取一篇英文文章存入到字符串?dāng)?shù)組XX中;請(qǐng)
編制函數(shù)STROR(),其函數(shù)功能是:以行為單位把字符串中的所有小寫字母O左邊的字符串
內(nèi)容移到該串的右邊存放,然后并把小寫字母O刪除,余下的字符串內(nèi)容移到已處理字符串
的左邊存放.最后把已處理的字符串仍按行重新存入字符串?dāng)?shù)組XX中,最后調(diào)用函數(shù)WRIT
EDAT()把結(jié)果XX輸出到文件OUT5.DAT中.
例如:原文:You can create an index on any field.
you have the correct record.
結(jié)果: n any field.You can create an index
rd.yu have the crrect rec
原始數(shù)據(jù)文件存放的格式是:每行的寬度均小于80個(gè)字符,含標(biāo)點(diǎn)符號(hào)和空格.
# include"stdio.h"
# include"string.h"
# include"conio.h"
# include"ctype.h"
# include"mem.h"
unsigned char xx[50][80];
int maxline=0;

int readdat(void);
void writedat(void);

void StrOR(void)
{

}

void main()
{
clrscr();
if(readdat())
{printf("Can't open the file ENG.IN!\n");
return;
}
StrOR();
writedat();
}

int readdat(void)
{
FILE *fp;
int i=0;
char *p;
if((fp=fopen("in.dat","r"))==NULL)
return 1;
while(fgets(xx[i],80,fp)!=NULL)
{p=strchr(xx[i],'\n');
if(p)
*p=0;
i++;
}
maxline=i;
fclose(fp);
return 0;
}

void writedat(void)
{FILE *fp;
int i;
fp=fopen("out5.dat","w");
for(i=0;i{printf("%s\n",xx[i]);
fprintf(fp,"%s\n",xx[i]);
}
fclose(fp);
}

/* 注:題目要求的字符串中所有小寫字母o左邊的字符串內(nèi)容移到該串的右邊存放,即
將串中“最后”一個(gè)字母o左右兩側(cè)的內(nèi)容互換。題中第一個(gè)while()特環(huán)的作用是讓p1
指向最后一個(gè)字母'o'。第一個(gè)ctrcat()函數(shù)的作用是將p1以后的字符都放到新串t中
,第二個(gè)strcat()函數(shù)的作用是將p1以前的字符連接到新串t的后面(注意:在些之前要
讓p1所指的單元成為p1前面字符串的結(jié)束位置*p1='\0')。這時(shí)完成左右互換。最后
一個(gè)while()循環(huán)的作用是刪除新串中的所有小寫字母'o',采用的刪除方法是不是'
o'的字母一律留下,否則不留(即相當(dāng)于刪除。)*/
void StrOR(void)
{
int i;
char *p1,*p2,t[80];
for(i=0;i{t[0]='\0';
p2=xx[i];
while(*p2)
{if(*p2=='o') p1=p2;
p2++;
}
strcat(t,p1+1);
*p1='\0';
strcat(t,xx[i]);
p1=xx[i];
p2=t;
while(*p2)
{if(*p2!='o') *p1++=*p2;
p2++;
}
*p1='\0';
}
}
--------------------------------------------------------------------------------


十一、選票問(wèn)題
現(xiàn)有一個(gè)10個(gè)人100行的選票數(shù)據(jù)文件IN.DAT,其數(shù)據(jù)存放的格式是每條記錄的長(zhǎng)度
均為10位,第一位表示第一個(gè)的選中情況,第二位表示第二個(gè)人的選中情況,依此類推;內(nèi)
容均為字符0和1,1表示此人被選中,0表示此人未被選中,若一張選票人數(shù)大于5個(gè)人時(shí)認(rèn)
為無(wú)效的選票.給定函數(shù)READDAT()的功能是把選票并把選票數(shù)據(jù)讀入到字符串?dāng)?shù)組XX中
.請(qǐng)編制函數(shù)COUNTRS()來(lái)統(tǒng)計(jì)每個(gè)人的選票數(shù)并把票數(shù)依次存入YY[0]到Y(jié)Y[9]中,最后調(diào)
用函數(shù)WRITEDAT()把結(jié)果YY輸出到OUT.DAT中.
# include"stdio.h"
char xx[100][11];
int yy[10];

int readdat(void);
void writedat(void);

void countrs(void)
{

}

void main()
{
int i;
for(i=0;i<10;i++)
yy[i]=0;
if(readdat())
return;
countrs();
writedat();
}

int readdat(void)
{
FILE *fp;
int i;
if((fp=fopen("in.dat","r"))==NULL)
return 1;
for(i=0;i<100;i++)
{if(fgets(xx[i],11,fp)==NULL)
return 1;
xx[i][10]='\0';
}
fclose (fp);
return 0;
}

void writedat(void)
{
FILE *fp;
int i;
fp=fopen("out.dat","w");
for(i=0;i<10;i++)
{fprintf(fp,"%d\n",yy[i]);
printf("%d %d\n",i+1,yy[i]);
}
fclose(fp);
}

/* 注:本題要求將那些選了超過(guò)5個(gè)人的選票視為無(wú)效票,在外層for()循環(huán)是用來(lái)一張
一張選票地?cái)?shù)。在循環(huán)內(nèi)的第一個(gè)for()循環(huán)用來(lái)數(shù)一張選票中共選了幾個(gè)人,第二個(gè)i
f()用來(lái)將選了超過(guò)5人的選票去掉。*/
void countrs(void)
{
int i,j,count;
for(i=0;i<300;i++)
{count=0;
for(j=0;j<10;j++)
if(xx[i][j]=='1')
count++;
if(count>5)
continue;
for(j=0;j<10;j++)
if(xx[i][j]=='1') yy[j]++;
}
}


十二、出圈問(wèn)題
設(shè)有n個(gè)人圍坐一圈并按順時(shí)針?lè)较驈?到n編號(hào),從第s個(gè)人開始進(jìn)行1到m的報(bào)數(shù),報(bào)數(shù)到第個(gè)m人,此人出圈,再?gòu)乃南乱粋(gè)人重新開始1到m的報(bào)數(shù),如此進(jìn)行下去直到所有的人都出圈為止,F(xiàn)要求按出圈次序,每10人一組,給出這n個(gè)人的順序表。請(qǐng)考生編制函數(shù)Josegh()實(shí)現(xiàn)此功能并調(diào)用函數(shù)WriteDat()把結(jié)果p輸出到文件OUT.DAT中。
設(shè)n=100,c=1,m=10.
(1)將1到n個(gè)人的序號(hào)存入一維數(shù)組p中;
(2)若第i個(gè)人報(bào)數(shù)后出圈,則將p[i]置于數(shù)組的倒數(shù)第i個(gè)位置上,而原來(lái)第i+1個(gè)至倒數(shù)第i個(gè)元素依次向前移動(dòng)一個(gè)位置;
(3)重復(fù)第(2)步直至圈中只剩下p[1]為止。
部分源程序已給出。
請(qǐng)勿改動(dòng)主函數(shù)main()和輸出數(shù)據(jù)函數(shù)writeDat()的內(nèi)容。 #include
#define N 100
#define S 1
#define M 10

int p[100],n,s,m;
void WriteDat(void);

void Josegh(void)
{

}

void main()
{
m=M;
n=N;
s=S;
Josegh();
WriteDat();
}

void WriteDat(void)
{
int i;
FILE *fp;

fp=fopen("out.dat" ," w" );
for(i=N-1;i>=0;i--){
printf(" %4d" ,p[i]);
fprintf(fp," %4d" ,p[i]);
if(i % 10==0){
printf("\n" );
fprintf(fp, "\n" );
}
}
fclose(fp);
}

 

--------------------------------------------------------------------------------

/* 注:題中第一個(gè)for()循環(huán)是先對(duì)數(shù)組p賦初值。在第二個(gè)for()中用i來(lái)控制沒(méi)出圈的
總?cè)藬?shù),s1=(s1+m-1)%i的作用是找出報(bào)數(shù)后出圈人的下標(biāo),其中對(duì)i求余的作用是使報(bào)
數(shù)按圈進(jìn)行(即報(bào)到尾后又從頭報(bào)),該算法在很多題目中都用到。由于求余的作用當(dāng)
報(bào)數(shù)正好到最后一個(gè)時(shí)s1為0,故而要進(jìn)行if(s1==0)的判斷。內(nèi)嵌的for()循環(huán)是將出圈
以后的人依次往前移。*/
void Josegh(void)
{
int i,j,s1,w;
s1=s;
for(i=1;i<=n;i++)
p[i-1]=i;
for(i=n;i>=2;i--)
{s1=(s1+m-1)%i;
if(s1==0)
s1=i;
w=p[s1-1];
for(j=s1;jp[j-1]=p[j];
p[i-1]=w;
}
}


十三、進(jìn)制轉(zhuǎn)換
請(qǐng)編制函數(shù)READDAT()實(shí)現(xiàn)從文件IN.DAT中讀取100個(gè)十六進(jìn)制數(shù)到字符串?dāng)?shù)組xx
中;再編制函數(shù)H16TO8(),將xx中的十六進(jìn)制數(shù)轉(zhuǎn)換成八進(jìn)制數(shù)并把已轉(zhuǎn)換的八進(jìn)制數(shù)仍
存放在字符串?dāng)?shù)組XX中,最后調(diào)用函數(shù)WRITEDAT()把結(jié)果輸出到OUT.DAT文件中.
原始數(shù)據(jù)文件存放的格式是:每行存放10個(gè)數(shù),并用逗號(hào)隔開(每個(gè)數(shù)均大于0且小于等于
2000).
#include
#include
#include
#include
#define MAX 100

char xx[MAX][20];
void WriteDat(void) ;

int ReadDat(void)
{
FILE *fp ;

int i,data;
char yy[20];

if((fp=fopen("in.dat","r"))==NULL) return 1;

for(i=0;i<100;i++)
{fscanf(fp,"%x,",&data);
itoa(data,yy,16);
strcpy(xx[i],yy);

}
fclose(fp) ;
return 0 ;
}

void H16to8(void)
{int i,data;
char yy[20];
for(i=0;i<100;i++)
{data=strtol(xx[i],NULL,16);
itoa(data,yy,8);
strcpy(xx[i],yy);
}

}

void main()
{
int i ;
for(i=0;iif(ReadDat())
{printf("Can't open the data file in.dat!\007\n") ;
return;
}
H16to8();
WriteDat();
}

void WriteDat(void)
{
FILE *fp;
int i;

fp=fopen("out.dat", "w") ;
for(i=0;ifclose(fp) ;
}

/* 注:本題中用到函數(shù)itoa()來(lái)實(shí)現(xiàn)從整型變成字符型。*/
int ReadDat(void)
{
FILE *fp ;
int i,data;
char yy[20];

if((fp=fopen("in.dat","r"))==NULL) return 1;
for(i=0;i<100;i++)
{fscanf(fp,"%x,",&data);
itoa(data,yy,16);
strcpy(xx[i],yy);
}
fclose(fp) ;
return 0 ;
}

void H16to8(void)
{
int i,data;
char yy[20];
for(i=0;i<100;i++)
{data=strtol(xx[i],NULL,16);
itoa(data,yy,8);
strcpy(xx[i],yy);
}
}

轉(zhuǎn)帖于:計(jì)算機(jī)等級(jí)考試_考試吧
文章搜索  
看了本文的網(wǎng)友還看了:
網(wǎng)友評(píng)論
昵 稱: *  評(píng) 分: 1分 2分 3分 4分 5分
標(biāo)題:   匿名發(fā)表    (共有條評(píng)論)查看全部評(píng)論>>
版權(quán)聲明 -------------------------------------------------------------------------------------
  如果計(jì)算機(jī)等級(jí)考試網(wǎng)所轉(zhuǎn)載內(nèi)容不慎侵犯了您的權(quán)益,請(qǐng)與我們聯(lián)系,我們將會(huì)及時(shí)處理。如轉(zhuǎn)載本計(jì)算機(jī)等級(jí)考試網(wǎng)內(nèi)容,請(qǐng)注明出處。
關(guān)于本站  網(wǎng)站聲明  廣告服務(wù)  聯(lián)系方式  付款方式  站內(nèi)導(dǎo)航  客服中心  友情鏈接  考試論壇  網(wǎng)站地圖
Copyright © 2004-2008 考試吧計(jì)算機(jī)等級(jí)考試網(wǎng) All Rights Reserved    
中國(guó)科學(xué)院研究生院權(quán)威支持(北京) 電 話:010-62168566 傳 真:010-62192699
百度大聯(lián)盟黃金認(rèn)證  十佳網(wǎng)絡(luò)教育機(jī)構(gòu)  經(jīng)營(yíng)許可證號(hào):京ICP060677