久久久国产精品秘人口麻豆|永久免费AV无语国产|人成电影免费中文字幕|久久AV嫩草影院2

    1. <dfn id="yitbn"><samp id="yitbn"><progress id="yitbn"></progress></samp></dfn>

          <div id="yitbn"></div>

          1. 網(wǎng)站首頁
            分類導(dǎo)航
            試題中心
            下載中心
            英語學(xué)習(xí)
            繽紛校園
            考試論壇
            網(wǎng)站留言
            客服中心
             計(jì)算機(jī)等級(jí)考試三級(jí)編程解析
            【字體:
            計(jì)算機(jī)等級(jí)考試三級(jí)編程解析
            http://www.eeeigo.com 來源:考試吧(eeeigo.com) 點(diǎn)擊: 更新:2005-3-24

            一、替換字符
             函數(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í)沒有讀入字符串結(jié)束符'\0',因
            而用while()循環(huán)在xx數(shù)組每一行未尾將換行符'\n'替換成結(jié)束符'\0'。
            編寫的函數(shù)如下:該函數(shù)的基本算法是——讓字符指針pf指向每一行的開頭然后逐一往
            后移動(dòng),在移動(dòng)過程中按要求進(jìn)行轉(zhuǎn)換。*pf%2==0用于判斷是否為偶數(shù)。if()條件語
            句用于控制不替代字符。
             解法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中(第行字符串長度均小于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)行交換。如果原字符串長度為奇數(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]); /*每行長度*/
            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)體操作問題
            已知在文件IN.DAT中存有100個(gè)產(chǎn)品銷售記錄,每個(gè)產(chǎn)品銷售記錄由產(chǎn)品代碼dm(字符型4位),產(chǎn)品名稱mc(字符型10位),單價(jià)dj(整型),數(shù)量sl(整型),金額je(長整型)四部分組成。其中:金額=單價(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);
            }
            --------------------------------------------------------------------------------
            注:太簡單。
            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;來判斷xx[i]是否為0,若是則跳出循環(huá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é)生成績,結(jié)構(gòu)體問題
            下列程序的功能是:已知學(xué)生的記錄由學(xué)號(hào)和學(xué)習(xí)成績構(gòu)成,N名學(xué)生的數(shù)據(jù)已存入
            A數(shù)組中。找出成績最高的學(xué)生記錄(假定最高成績的記錄中唯一的),通過形參返回。
            請(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);
            }

            /* 注:較簡單。*/
            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';
            }
            }
            --------------------------------------------------------------------------------


            十一、選票問題
            現(xiàn)有一個(gè)10個(gè)人100行的選票數(shù)據(jù)文件IN.DAT,其數(shù)據(jù)存放的格式是每條記錄的長度
            均為10位,第一位表示第一個(gè)的選中情況,第二位表示第二個(gè)人的選中情況,依此類推;內(nèi)
            容均為字符0和1,1表示此人被選中,0表示此人未被選中,若一張選票人數(shù)大于5個(gè)人時(shí)認(rèn)
            為無效的選票.給定函數(shù)READDAT()的功能是把選票并把選票數(shù)據(jù)讀入到字符串?dāng)?shù)組XX中
            .請(qǐng)編制函數(shù)COUNTRS()來統(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);
            }

            /* 注:本題要求將那些選了超過5個(gè)人的選票視為無效票,在外層for()循環(huán)是用來一張
            一張選票地?cái)?shù)。在循環(huán)內(nèi)的第一個(gè)for()循環(huán)用來數(shù)一張選票中共選了幾個(gè)人,第二個(gè)i
            f()用來將選了超過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]++;
            }
            }


            十二、出圈問題
            設(shè)有n個(gè)人圍坐一圈并按順時(shí)針方向從1到n編號(hào),從第s個(gè)人開始進(jìn)行1到m的報(bào)數(shù),報(bào)數(shù)到第個(gè)m人,此人出圈,再從他的下一個(gè)人重新開始1到m的報(bào)數(shù),如此進(jìn)行下去直到所有的人都出圈為止。現(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è)位置上,而原來第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來控制沒出圈的
            總?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()來實(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);
            }
            }

            文章錄入:xihuyu2000    責(zé)任編輯:ak47  
             版權(quán)聲明
               如果本網(wǎng)站所轉(zhuǎn)載內(nèi)容不慎侵犯了您的權(quán)益,請(qǐng)與我們聯(lián)系,我們將會(huì)及時(shí)處理。如轉(zhuǎn)載本網(wǎng)內(nèi)容,請(qǐng)注明出處。
             發(fā)表評(píng)論
            關(guān)于本站 網(wǎng)站聲明 廣告服務(wù)  聯(lián)系方式  付款方式  站內(nèi)導(dǎo)航  客服中心  友情鏈接   
            Copyright © 2004-2006 考試吧 (eeeigo.com) All Rights Reserved 
            中國科學(xué)院研究生院中關(guān)村園區(qū)(北京市海淀區(qū))