计算机等级考试上机注意事项

来源:计算机等级考试    发布时间:2012-08-28    计算机等级考试视频    评论



    考试中心命题组64题:
    请编制函数encryptChar(),按给定的替代关系对数组xx中的所有字符进行替代,
    仍存入数组xx的对应的位置上,最后调用函数WriteDat()把结果xx输出到文件PS8.DAT中。
    替代关系:f(p)=p*11 mod 256 (p是数组中某一个字符的ASCII值,f(p)是计算后新字符的ASCII值),
    如果原字符小于等于32或大于130,则该字符不变,否则将f(p)所对应的字符进行替代。
    这道题目所有的人都做过,但几乎就没有人做对,包括南开无忧在内!
    原因就在于这一句!
    无忧:int f; f=(xx[i][k]*11)%6;
    南开:char *pf; *pf=*pf*11%6;

  
    表面看来,好象两个都对,
    请你在TC下运行一下下面的代码,看一下结果你就知道了是怎么回事了:
    main()
    {
    char nk='E',*nkp,wuyou='E';
    int wy;
    nkp=&nk;
    *nkp=*nkp*11%6;
    wy=wuyou*11%6;
    printf("%c %c %c %c/n",nk,*nkp,wuyou,wy);
    printf("%d %d %d %d/n",nk,*nkp,wuyou,wy);
    }
    看到结果了么?是不是很吃惊啊? 
  -9 -9 69 247
    大家看到了,南开的结果是负数,连原来的变量nk都变成了负数,这显然错了。
    无忧的聪明一点,知道int比char大,定义了个int,对了。
    南开错误原因就是在TC2.0中char型变量只有一个字节,根本容纳不下'E'*11,
    所以产生了溢出,上次考这道题目没过的同学是不是有所启发呢?
    这里给出考试中心命题组的答案:
    void encryptChar(){
    int i,k,ch;
    for(i=0;i    for(k=0;k    ch=xx[i][k];
    ch=(ch*11)%6;
    if(!(ch<=32||ch>=130))xx[i][k]=ch;
    }
    }
    似乎一个例子不能说明什么,那就把上面的数字题目的答案给大家看看:

视频学习

我考网版权与免责声明

① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;

② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。

最近更新

社区交流

考试问答