首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

[精制品教程]C语言竞赛题目大全world文档分享

2014-01-13 
[精品教程]C语言竞赛题目大全world文档分享第1题 寄存器操作问题:假设在一个32位的机器上,需要将某个外设

[精品教程]C语言竞赛题目大全world文档分享
第1题 寄存器操作

问题:

假设在一个32位的机器上,需要将某个外设寄存器的第X位(最低位为第0位,最高位为第31位)设置成0,将第Y位开始的连续三位设置成110(从高位到低位的顺序),而其它位保持不变。对给定的寄存器值R,及X,Y,编程计算更改后的寄存器值R。

输入的数据仅一行,包括R,X,Y,以逗号","分隔,R为16进制表示的32位整数,X,Y在0-31之间且Y>=3,(Y-X)的绝对值>=3,保证两次置位不会重合更改后的寄存器值R(16进制输出)。例如:

n Sample Input

12345678,0,3

输出:

1234567c

解题思路:

很简单的位操作,但是需要注意的是Y那里是 110,不能直接或上110,而是先两次SET,在CLR。

答案:

#include <stdio.h>    

#define CLR(r, x)    r &= ~(1UL << x)    //1UL 表示32位无符号数,将r的x位清零。

#define SET(r, y)    r |=  (1UL << y)  //表示将r的y位置零  

int main()  

{  

    int r, x, y;  

     scanf("%x,%d,%d", &r, &x, &y);  

  

     CLR(r,x);   //清除x位

     SET(r,y);   //置位y位

     SET(r,y-1); //置位y-1位

     CLR(r,y-2);  //置位y-2位

  

     printf("%x", r);  

    return 0;  

}

第2题   破译密码

问题:

据说最早的密码来自于罗马的凯撒大帝。消息加密的办法是:对消息原文中的每个字母,分别用该字母之后的第5个字母替换(例如:消息原文中的每个字母A都分别替换成字母F)。而你要获得消息原文,也就是要将这个过程反过来。



密码字母:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z M

原文字母:V W X Y Z A B C D E F G H I J K L M N O P Q R S T U



注意:只有字母会发生替换,其他非字母的字符不变,并且消息原文的所有字母都是大写的。

输入:

最多不超过100个数据集组成,每个数据集之间不会有空行,每个数据集由3部分组成:

1. 起始行:START

2. 密码消息:由1到200个字符组成一行,表示凯撒发出的一条消息.

3. 结束行:END

在最后一个数据集之后,是另一行:ENDOFINPUT。

输出:

每个数据集对应一行,是凯撒的原始消息。

点击下载 http://www.400gb.com/file/54029388

热点排行