2013年9月計(jì)算機(jī)等考三級網(wǎng)絡(luò)技術(shù)上機(jī)題及答案(3)

字號:

為大家收集整理了《2013年9月計(jì)算機(jī)等考三級網(wǎng)絡(luò)技術(shù)上機(jī)題及答案(3)》供大家參考,希望對大家有所幫助?。?!
    函數(shù)ReadDat( )的功能是實(shí)現(xiàn)從文件IN63.DAT中讀取一篇英文文章存入到字符串?dāng)?shù)組xx中。請編制函數(shù)StrCharJL( ),該函數(shù)的功能是:以行為單位把字符串中的所有字符的ASCII值左移4位,如果左移后,其字符的ASCII值小于等于32或大于100,則原字符保持不變,否則就把左移后的字符ASCII值再加上原字符的ASCII值,得到的新字符仍存入到原字符串對應(yīng)的位置。最后把已處理的字符串仍按行重新存入字符串?dāng)?shù)組xx中,最后調(diào)用函數(shù)WriteDat( )把結(jié)果xx輸出到文件OUT63.DAT中。
    注意:部分源程序已給出。
    原始數(shù)據(jù)文件存放的格式是:每行的寬度均小于80個(gè)字符,含標(biāo)點(diǎn)符號和空格。
    請勿改動主函數(shù)main( )、讀函數(shù)ReadDat( )和寫函數(shù)WriteDat( )的內(nèi)容。
    試題程序:
    #include
    #include
    #include
    char xx[50][80];
    int maxline=0;
    int ReadDat(void);
    void WriteDat(void);
    void StrCharJL(void)
    {
    }
    void main()
    {
    system("CLS");
    if(ReadDat())
    {
    printf("數(shù)據(jù)文件IN63.DAT不能打開\n\007");
    return;
    }
    StrCharJL();
    WriteDat();
    }
    int ReadDat(void)
    {
    FILE *fp;
    int i=0;
    char *p;
    if((fp=fopen("IN63.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;
    system("CLS");
    fp=fopen("OUT63.DAT","w");
    for(i=0;i
    {
    printf("%s\n",xx[i]);
    fprintf(fp,"%s\n",xx[i]);
    }
    fclose(fp);
    }
    【答案】
    void StrCharJL(void)
    {
    int i,j; /*定義循環(huán)控制變量*/
    int str; /*用來存儲每行字符串的長度*/
    char ch; /*保存當(dāng)前取得的字符*/
    for(i=0;i
    {
    str=strlen(xx[i]);/*求得當(dāng)前行的字符串長度*/
    for(j=0;j
    {
    ch=xx[i][j];  
    /*獲取當(dāng)前字符*/
    if(ch<<4 <=32 || ch<<4 >100)
    continue;
    /*如果左移4位后字符的ASCII值小于等于32或大于100,則原字符保持不變*/
    else
    xx[i][j]+=ch<<4; /*否則把左移后的字符ASCII值加上原字符的ASCII值*/
    }
    }
    }
    【解析】利用雙重循環(huán)按照先行后列的順序逐個(gè)取得數(shù)組中的字符,外層循環(huán)用來控制行數(shù),內(nèi)層循環(huán)用來依次取得各行中的每一個(gè)字符。循環(huán)內(nèi)部用一個(gè)if語句判斷當(dāng)前字符的ASCII碼左移4位后是否滿足小于等于32或者大于100的條件,如果滿足,則該字符保持不變,否則就把左移后的字符ASCII值加上原字符的ASCII值,作為得到的新字符,存入當(dāng)前位置。