C 语言竞赛题目大全 本资源共收录了两道 C 语言竞赛题目,分别是寄存器操作问题和破译密码问题。下面对这两道题目进行详细的解释和分析。 题目一:寄存器操作问题 描述:在一个 32 位的机器上,需要将某个外设寄存器的第 X 位设置成 0,将第 Y 位开始的连续三位设置成 110,从高位到低位的顺序,而其它位保持不变。 解题思路:这个问题可以通过位操作来解决。需要清除 X 位,然后将 Y、Y-1、Y-2 三个位设置成 110。 代码实现: ```c #include <stdio.h> #define CLR(r, x) r &= ~(1UL << x) // 清除 x 位 #define SET(r, y) r |= (1UL << y) // 将 y 位设置成 1 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; } ``` 题目二:破译密码问题 描述:凯撒密码是将消息原文中的每个字母,分别用该字母之后的第 5 个字母替换。现在需要将这个过程反过来,即将密码消息还原成原始消息。 解题思路:这个问题可以通过字符串操作来解决。需要判断字符是否是字母,然后循环减 5,考虑边界问题。 代码实现: ```c #include <stdio.h> #include <string.h> #include <ctype.h> #define N 202 char str[N]={0}; int main() { char *p; gets(str); while( strcmp(str, "ENDOFINPUT") != 0 ) { if ( (strcmp(str, "START") !=0) && (strcmp(str, "END") != 0) ) { for(p=str; *p !='\0'; p++) { if( isupper(*p) ) { *p += *p - 5 < 'A' ? 26 - 5 : -5; } } puts(str); } gets(str); } return 0; } ``` 这两道题目考验了竞赛选手的基本编程能力和逻辑思维能力,而位操作和字符串操作是 C 语言竞赛中的基本概念。
剩余63页未读,继续阅读
- 粉丝: 1
- 资源: 4
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 海尔:企业品牌归根到底是文化.docx
- 马蔚华:幸福企业是基业长青的企业文化.docx
- 没有“三个共同”,就没有企业文化.docx
- 马云:倒立是阿里巴巴的文化精髓.docx
- 内圣外王,用文化缔造未来.docx
- 企业家,请抱着感恩的心态做企业.docx
- 牛根生:用培训克隆企业文化.docx
- 企业家 企业文化.docx
- 企业家是企业文化的倡导者.docx
- 企业家的魅力打造.docx
- 企业家企业文化的辩证关系 所有员工的文化特征.docx
- 王均豪:百年企业的传承应靠文化.docx
- 什么是真正的企业家精神.docx
- 王石淡出万科决策层 选择理想是企业文化进步.docx
- 张瑞敏眼中的企业文化.docx
- 魏杰论企业文化的四大类型.docx